使用RS485和minimummodbus处理Pythonscript超时

2024-04-26 18:18:34 发布

您现在位置:Python中文网/ 问答频道 /正文

目前,在1(一)个RS485电表的RS485总线上有一个读数,类型为DDS238-1ZN,通过模块MINIMMODBUS“辅助”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

对从机地址00和01的检查按预期生成结果(257),但是(由于没有设备),显然从机地址02上的响应失败,并出现超时。在

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

从测试运行中,我可以看到发生了超时。 一个超时信号可以被触发来检查下一个从机地址,如果我知道这种超时信号的布局,对于一个使用minimamodbus的Python脚本来说。。。。在

在互联网上寻找替代方案时,我看到了各种各样的“奇妙而精巧”的解决方案来捕获超时,但是从我的简单脚本的角度来看,我正在寻找一些非常基本的东西(最好是“一行代码”),使我能够走出超时检查下一个从属地址3,等等

看看上面提到的那些解决方案,下面的半代码可能是一个简单/基本的解决方案吗?[我一直在寻找C函数fread()的方向]

^{pr2}$

对于使用Python或minimamodbus执行半代码的脚本,是否有任何提示,与第一个脚本兼容?


Tags: namedev脚本portaddress地址checkserial
1条回答
网友
1楼 · 发布于 2024-04-26 18:18:34

在这个论坛上没有找到/收到有效的解决办法,但是已经开发、测试并实施了一种实用、简单的补救办法,如http://www.domoticz.com/forum/viewtopic.php?f=14&t=5808&start=20#p113697所述

由于其数据协议的特点,对DDS238-1ZN型电度表的补救措施是特殊的,但这种方法也可能适用于其他具有RS485接口的可比电度表。在

相关问题 更多 >