Python Gefran 800P和最小Modbus(Mac):“;ValueError:Modbus RTU响应太短(最小长度为4字节)。答复:' ;\x00和x27&引用;
我是Python初学者(仅供参考),尝试使用minimalmodbus库(Python+Mac)与Gefran 800P程序员/控制器进行通信。我正在使用USB到RS485串行转换器电缆()与Gefran设备通信。设备后部的引脚(15+17(Rx+Tx)和16+18(Gnd+Gnd))分别连接到转换器电缆的数据+(A)和数据-(B)(RS485-2有线连接)。我不知道这个设备的从机地址,手册中没有提到地址() 我试过:Python Gefran 800P和最小Modbus(Mac):“;ValueError:Modbus RTU响应太短(最小长度为4字节)。答复:' ;\x00和x27&引用;,python,modbus,minimalmodbus,Python,Modbus,Minimalmodbus,我是Python初学者(仅供参考),尝试使用minimalmodbus库(Python+Mac)与Gefran 800P程序员/控制器进行通信。我正在使用USB到RS485串行转换器电缆()与Gefran设备通信。设备后部的引脚(15+17(Rx+Tx)和16+18(Gnd+Gnd))分别连接到转换器电缆的数据+(A)和数据-(B)(RS485-2有线连接)。我不知道这个设备的从机地址,手册中没有提到地址() 我试过: 将从表0的地址更改为247,我总是收到相同的消息 尝试检查不同的寄存器地址并
也许你不应该把它们和15和16连在一起?好的,杰克,谢谢你的提示。。我最终设法让设备使用Gefran电缆进行通信。我不是100%确定什么真正有效,但我尝试了以下方法:
我猜所有这些都可能有帮助,而且如果没有任何效果,重新启动您正在使用的每个设备并重置参数并再次将其设置为基本/标准值总是好的。您是否检查了所有串行端口设置,如波特率、奇偶校验等?是的,我尝试了所有可能的波特率和奇偶校验,基本设置为波特率:960019200,无奇偶校验。。我也试过这个。。您可以在Gefran控制器中找到一些关于4线RS485的信息。快速阅读让我想到,您的连接应该是正确的,但您应该尝试交换数据A和B,即:连接(18+16)到A和(17+15)到B,并将速度降低到1200。我假设您在Gefran控制器菜单中检查并设置了相同的波特率、停止和奇偶校验。只有在成功沟通后,才能提高速度。我一直在遵循您提到的相同文档,并且我也尝试了交换连接。当我做你提到的事情时,我没有收到设备的回复。最小Modbus调试模式。来自仪器的响应:“”()(0字节),往返时间:5001.0毫秒。超时设置:5000.0毫秒。引发IOError(“与仪器无通信(无应答)”)IOError:与仪器无通信(无应答)正常。我不知道这是否有进展,当我用原始软件(仅适用于Windows的GF_eXpress)连接设备,然后用连接到Mac的相同管脚(15&17到+和16&18到-)运行python代码时,我现在收到了这个错误:ValueError:rtu模式下的校验和错误:'\x00\xff'而不是'\xd6\xda'。响应是:'\x00\xff\xff\xba\xd6\x00\xff'(简单响应:'\x00\xff\xff\xba\xd6\x00\xff')我不确定什么工作正常,什么不正常。。。我已经被这个问题困扰了好几个星期了:(有什么建议吗?谢谢你的提示。我将尝试这个配置并更新你!我按照你说的做了。我从设备中取出四条不同的电线,分别连接到Data+和Data-。我将16和18连接到Data(+),将15和17连接到Data(-)。我还将16和15连接到Data(+)和18和17到数据(-)。我没有从设备得到响应:MinimumModbus调试模式。来自仪器的响应:“”()(0字节),往返时间:5001.0毫秒。超时设置:5000.0毫秒。引发IOError(‘与仪器无通信(无应答)’)IOError:与仪器无通信(无应答)唯一出现错误“”ValueError:Modbus RTU响应太短(最小长度为4字节)。响应:“\x00”是通过将15和17连接到数据(+),将16和18连接到数据(-)。我建议您将15连接到+(或-)数据,将16连接到-(或+),并保持16和18未连接。手册(串行线说明)我不清楚,但插脚18和16“最大1200波特”附近的信息(对我来说)表明,该插脚有一些特殊功能。您可以尝试仅通过插脚16和18进行通信,但最大1200波特。好的。正如您所说,我尝试仅通过16和18在1200进行通信,其余两个(15和17)未连接。我收到此错误:最小Modbus调试模式。来自仪器的响应:“”()(0字节),往返时间:5001.0毫秒。超时设置:5000.0毫秒。引发IOError(“与仪器无通信(无应答)”)IOError:与仪器无通信(无应答)
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"