目前在 RS485 总线上读取 1(一个)RS485 kWh 表,类型 DDS238-1ZN 通过 Python 脚本“辅助”模块 minimummodbus。添加更多 kWh-meter 意味着(在安装之前或安装期间)添加的 kWh-meter 的 Slave-Adress 必须从最初的“1”转移。这种换档动作从扫描 RS485 总线开始,以确定 kWh 电表的实际位置。
第一步是以下简单的 Python 脚本
import serial
import minimalmodbus
# Check address 00 = broadcast
instrument = minimalmodbus.Instrument('/dev/ttyAMA0',0) # port name, slave address
instrument.serial.baudrate = 9600
instrument.serial.timeout = 0.5
instrument.debug = True
print instrument
print instrument.read_register(21,0) # registernumber, number of decimals
# Check address 01 = slave 01
instrument = minimalmodbus.Instrument('/dev/ttyAMA0',1) # port name, slave address
print instrument
print instrument.read_register(21,0) # registernumber, number of decimals
# Check address 02 = slave02
instrument = minimalmodbus.Instrument('/dev/ttyAMA0',2) # port name, slave address
print instrument
print instrument.read_register(21,0) # registernumber, number of decimals
对从地址 00 和 01 的检查按预期产生结果 (257),但(由于没有设备)显然对从地址 02 的响应因超时而失败。
有关进一步的问题描述,请参阅http://www.domoticz.com/forum/viewtopic.php?f=31&t=13592#p102901
从测试运行中,我可以看到发生了超时。如果我知道这种超时信号的布局,可以触发一个超时信号,以检查下一个从属地址。
在互联网上搜索替代方案,我看到了所有类型的“精彩 & 精心”解决方案来捕获超时,但从我的简单脚本的角度来看,我正在寻找一些非常基本的东西(最好是“单线”)来启用退出超时以检查下一个从地址 3 等。
看看上面提到的那些解决方案,下面的半代码设置可能是一个简单/基本的解决方案吗?[为此我一直在寻找 C 函数 fread() 的方向]
start of loop
start time-counter
read register from slave address x
N = number of characters received
if time-counter at value t, then
look if N > 0
if N == 0 then
x = x + 1
jump to start of loop
关于使用 Python 或 MinimalModbus 执行半代码的脚本的任何提示,与第一个脚本兼容?