我是Python(FYI)的初学者,并尝试使用minimalmodbus库(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))分别连接到转换器电缆的数据+(A)和数据 - (B)(RS485- 2有线连接)。我不知道这个设备的从站地址,并且没有提到手册中的地址(http://www.primusthai.com/marketing/Gefran%20800%20(Controller).pdf)。
我试过了:
下面是我的代码,当我运行它时,它给出了一个错误“ValueError:太短的Modbus RTU响应(最小长度为4个字节)。响应:'\ 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"
答案 0 :(得分:1)
好的Jacek,感谢所有提示..我终于设法让设备使用Gefran Cable进行通信。我不是100%确定真正有效的,但我尝试了以下内容:
安装软件“modpoll”以轮询modbus设备,以比较GF_eXpress软件和设备中的参数,并了解后台发生的情况。
尝试使用pyserial与设备进行串行通信 - 我认为这样做了,你必须首先初始化端口然后进行通信。在我的情况下,打开一个串口并连接到端口然后使用modbus,像魔术一样工作。
我重新启动程序员,我的Mac,提供了基本参数baudrate - 9600,parity-none,address - 1和stop bits - 1,它开始工作..
我猜所有这些都可以帮助加上如果什么都不起作用,重启你正在使用的每一个设备并重置参数并再次设置为基本/标准值总是好的。
答案 1 :(得分:0)
设备后部的引脚(15 + 17(Rx + Tx)和16 + 18(Gnd + Gnd))是 连接到转换器电缆的数据+(A)和数据 - (B)
也许我错了,但恕我直言,你应该使用16针和16针。 15代表+和 -
针脚18和17描述为:
可配置串行线路隔离至1500V无源电流环路(最大值 1200波特)
也许你不应该用15& amp; 16?