我在通过 Modbus RTU 进行通信时遇到问题。首先对不起我的英语 ;):
config.txt 更改:
在此步骤之后,我的 /dev 配置如下所示:
from pymodbus.client.sync import ModbusSerialClient as ModbusClient
import logging
FORMAT = ('%(asctime)-15s %(threadName)-15s'
' %(levelname)-8s %(module)-15s:%(lineno)-8s %(message)s')
logging.basicConfig(format=FORMAT)
log = logging.getLogger()
log.setLevel(logging.DEBUG)
#multicont = ModbusClient(method='rtu',port='/dev/serial0',stopbits=1,bytsize=8,parity='N',baudrate=9600,timeout=1,strict=False)
multicont = ModbusClient(method='rtu',port='/dev/serial0',stopbits=1,bytsize=8,parity='O',baudrate=9600,timeout=1,strict=False)
connection = multicont.connect()
print(connection)
value = multicont.read_coils(1,15,unit=1)
log.debug(value)
Modbus 错误:[输入/输出] Modbus 错误:[无效消息] 收到不完整的消息,预计至少 2 个字节(收到 0 个)
2020-12-30 16:24:51,992 MainThread DEBUG 事务:118
当前事务状态 - IDLE
2020-12-30 16:24:51,992 MainThread DEBUG 事务:123 运行事务 1
2020-12-30:16:992 MainThread事务交易
:230 SEND: 0x1 0x1 0x0 0x1 0x0 0xf 0x2d 0xce
2020-12-30 16:24:51,993 MainThread DEBUG sync :75 New Transaction state 'SENDING'
2020-16,BU991
更改主线程:DEBUG231:2020-12-391交易状态从“发送”到“等待回复”
2020-12-30 16:24:52,995 MainThread DEBUG 事务:253 事务失败。(Modbus错误:[无效消息]接收到的消息不完整,预期至少2个字节(接收到0))
2020-12-30 16:24:52,995 MainThread DEBUG rtu_framer:241帧-[b'']未准备好
2020-12- 30 16:24:52,996 主线程调试
事务:409 获取事务 1
2020-12-30 16:24:52,996 主线程调试事务:204
将事务状态从“处理
回复”更改为“事务完成” 2-2301-1 52,996 MainThread
DEBUG 通信:20 Modbus 错误:[输入/输出] Modbus 错误:[无效消息] 收到不完整的消息,预计至少 2 个字节(收到 0)
PyModbus 未收到响应。
如果你可以使用示波器,现在就是使用它的时候了。Modbus-RTU 可能会出错的地方太多了。
确保你知道你在做什么用电线,熟悉 RS485 偏置和端接。
可能的原因:
最后建议:如果你可以选择使用Modbus-TCP而不是Modbus-RTU,请改为使用。这取代了 IP 配置令人头疼的所有 RS485 电气问题,你可以使用非处方药来解决这些问题。
问题出在硬件上。我在 MultiCONT 文档中检查了有关终端电阻的信息。我关闭了 MultiCONT 中的电阻,现在一切正常。非常感谢您的帮助。