使用RS485和&amp ;;处理Python脚本的超时minimalmodbus

时间:2016-11-11 10:20:47

标签: python timeout rs485 minimalmodbus

目前在RS485总线上读取1(一)RS485 kWh-meter,类型为DDS238-1ZN,通过模块minimalmodbus“辅助”的Python脚本。 增加更多的千瓦时电表意味着(在安装之前或安装期间)增加的千瓦时电表的从属地址必须从初始的“1”转移。 这种换档动作从扫描RS485总线开始,以确定实际位于千瓦时的位置。

第一步是以下简单的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

对Slave-address 00和01的检查产生了预期的结果(257),但是(由于没有设备),Slave-adress 02的响应显然是超时失败。

有关进一步的问题说明,请参阅http://www.domoticz.com/forum/viewtopic.php?f=31&t=13592#p102901

从测试运行开始,我可以看到超时发生。 超时信号可以触发跳过来检查下一个从地址,如果我知道这个带有minimalmodbus的Python脚本的超时信号的布局......

在互联网上寻找另一种选择,我会看到各种“精彩和精心”的解决方案来捕捉超时,但从我的简单脚本的角度来看,我正在寻找一些非常基本的东西(最好是一个 - liner')允许退出超时以检查下一个slave-address 3等等。

考虑上面提到的那些解决方案,或许以下设置 with semi-code 简单/基本解决方案? [我一直在寻找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执行半代码的脚本的任何提示,与第一个脚本兼容?

1 个答案:

答案 0 :(得分:0)

本论坛未找到/收到任何有效的解决方案,但已制定,测试并付诸行动的实用,简单的补救措施,如http://www.domoticz.com/forum/viewtopic.php?f=14&t=5808&start=20#p113697所述

由于其数据协议的特性,补救措施特定于千瓦时电表类型DDS238-1ZN,但这个想法可能适用于其他具有RS485接口的可比电能表。< / p>