目前有一个bus 485总线的1(1) RS485千瓦时表,类型DDS238-1ZN通过Python-脚本‘辅助’模块最小调制解调器。增加更多的千瓦米意味着(在安装之前或在安装期间),被添加的千瓦米的入口必须从最初的'1‘移动。这种移位动作从扫描are 485总线开始,以确定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。
从测试运行中,我可以看到出现了超时。超时信号可能被触发以检查下一个从地址,,如果i知道带有最小address的Python脚本的这种超时信号的布局.
在互联网上寻找另一种选择,我看到了各种各样的“奇妙而精细”的解决方案来捕获超时,但从我的简单脚本的角度来看,我正在寻找一些非常基本的东西(最好是“一条线”),以便能够走出超时时间来检查下一个从地址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来执行与第一个脚本兼容的半代码的脚本,有什么提示吗?
发布于 2017-01-12 15:28:38
本论坛没有找到/收到任何可行的解决方案,但如http://www.domoticz.com/forum/viewtopic.php?f=14&t=5808&start=20#p113697所述,已经制定、测试和实施了一种实用的、简单的补救办法
由于它的数据协议的特点,它的补救措施是特定于kWh米型DDS238-1ZN,但这种想法可能适用于其他具有‘s 485接口的可比kWh仪表。
https://stackoverflow.com/questions/40545862
复制相似问题