【发布时间】:2016-11-08 20:38:23
【问题描述】:
我正在尝试从我的 Windows 机器(Windows 10)通过 Modbus RTU-半双工 RS-485 连接与自定义板通信。我正在使用 python MinimalModbus API 并安装了所有依赖库。我也有合适的 RS-422/485 适配器。我知道波特率、COM 端口、从机地址和奇偶校验位都是正确的。我也知道我的代码正在从 O-scope 跟踪输出比特流。出于某种原因,董事会根本不会做出回应。任何帮助将不胜感激。
import minimalmodbus
import serial
#minimalmodbus.CLOSE_PORT_AFTER_EACH_CALL = True
minimalmodbus.PARITY = serial.PARITY_EVEN
#minimalmodbus.handle_local_echo=True
minimalmodbus.BAUDRATE = 57600
minimalmodbus.TIMEOUT = .01
instrument = minimalmodbus.Instrument('COM4',0)
instrument.debug = True
print(instrument.read_register(11,1))
MinimalModbus debug mode. Writing to instrument (expecting 7 bytes back): '\x00\x03\x00\x0b\x00\x01ô\x19' (00 03 00 0B 00 01 F4 19)
MinimalModbus debug mode. No sleep required before write. Time since previous read: 1478637162864.7 ms, minimum silent period: 0.67 ms.
MinimalModbus debug mode. Response from instrument: '' () (0 bytes), roundtrip time: 10.9 ms. Timeout setting: 10.0 ms.
Traceback (most recent call last):
File "RS485.py", line 11, in <module>
print(instrument.read_register(11,1))
File "C:\Users\mtangy\AppData\Local\Programs\Python\Python35-32\lib\site-packages\minimalmodbus.py", line 258, in read_register
return self._genericCommand(functioncode, registeraddress, numberOfDecimals=numberOfDecimals, signed=signed)
File "C:\Users\mtangy\AppData\Local\Programs\Python\Python35-32\lib\site-packages\minimalmodbus.py", line 697, in _genericCommand
payloadFromSlave = self._performCommand(functioncode, payloadToSlave)
File "C:\Users\mtangy\AppData\Local\Programs\Python\Python35-32\lib\site-packages\minimalmodbus.py", line 795, in _performCommand
response = self._communicate(request, number_of_bytes_to_read)
File "C:\Users\mtangy\AppData\Local\Programs\Python\Python35-32\lib\site-packages\minimalmodbus.py", line 930, in _communicate
raise IOError('No communication with the instrument (no answer)')
OSError: No communication with the instrument (no answer)
【问题讨论】:
-
由于板子没有响应并且您的代码发送数据(您确认格式了吗?),因此最好调试目标设备,而不是 PC。
-
我现在正在检查我的 o-scope 上的比特流。我知道目标设备对每个 PDU 都需要一个额外的停止开始和奇偶校验位,但我很难弄清楚比特流的确切外观。转换器的延迟是否可能会改变波特率?
-
您知道是否所有 modbus 设备都期望这些确切的附加位?还是他们特定于这个董事会?另外,当您说调试目标设备时,您是指软件吗?喜欢在我尝试与之通信时使用 GDB 单步调试固件?
-
我不知道。从未使用过 ModBus。如何阅读规范,检查时序和信号形式是否在限制范围内?撇开您的问题不遵循How to Ask 中给出的建议,它甚至可能不是编程问题。至少你没有排除其他原因。请注意,我们不是调试/咨询站点,也不是讨论站点。
标签: python serial-port embedded modbus rs485