我是 Python (FYI) 的初学者,并尝试使用 minimummodbus 库 (Python + Mac) 与 Gefran 800P 程序员/控制器进行通信。我正在使用 USB 到 RS485 串行转换器电缆 ( http://www.ftdichip.com/Support/Documents/DataSheets/Cables/DS_USB_RS485_CABLES.pdf ) 与 Gefran 设备进行通信。设备背面的引脚 (15+17(Rx+Tx) & 16+18(Gnd+Gnd)) 分别连接到转换器电缆的 Data +(A) 和 Data -(B) (RS485-2wired联系)。我不知道该设备的从属地址,并且手册中没有提到地址(http://www.primusthai.com/marketing/Gefran%20800%20(Controller).pdf)。
我努力了:
- 将从机的地址从 0 更改为 247,我总是收到相同的消息。
- 尝试检查不同的寄存器地址并使用功能代码(3&4),使用程序员设置确保代码和设备中的两个参数相同。没有任何作用!也许我错过了一些东西。期待您的帮助。我现在真的被困在这一点上一个多星期了!
下面是我的代码,当我运行它时,它给了我一个错误“ValueError: Too short Modbus RTU response (minimum length 4 bytes). Response: '\x00'”。
import minimalmodbus
import serial
import sys
import time
import sh
minimalmodbus.CLOSE_PORT_AFTER_EACH_CALL = False
print "scanning for addresses..."
for i in range(1,247):
programmer = minimalmodbus.Instrument('/dev/tty.usbserial-FT0C9E5S', i, 'rtu')
print "address is", i
programmer.mode = minimalmodbus.MODE_RTU
programmer.serial.timeout = 8
programmer.handle_local_echo = False
# If RS-485 adapter has local echo enabled
programmer.serial.bytesize = 8
programmer.precalculate_read_size = True
programmer.serial.baudrate = 9600
programmer.serial.parity = minimalmodbus.serial.PARITY_NONE
programmer.debug = True
print "all parameters set... now reading"
print programmer
try:
setpoint = programmer.read_register(79,1,4)
print setpoint
print "This is the address", i
except sh.ErrorReturnCode_1:
print "no response"