0

目前在 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 执行半代码的脚本的任何提示,与第一个脚本兼容?

4

1 回答 1

0

在本论坛中未找到/收到任何可行的解决方案,但已开发、测试并实施了一种实用、简单的补救措施,如http://www.domoticz.com/forum/viewtopic.php?f=14&t=5808&start所述=20#p113697

由于其数据协议的特点,该补救措施是针对 DDS238-1ZN 型千瓦时电表的,但该想法可能适用于其他具有 RS485 接口的类似千瓦时电表。

于 2017-01-12T15:28:38.213 回答