Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Gefran 800P和最小Modbus(Mac):“;ValueError:Modbus RTU响应太短(最小长度为4字节)。答复:' ;\x00和x27&引用;_Python_Modbus_Minimalmodbus - Fatal编程技术网

Python Gefran 800P和最小Modbus(Mac):“;ValueError:Modbus RTU响应太短(最小长度为4字节)。答复:' ;\x00和x27&引用;

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,我总是收到相同的消息 尝试检查不同的寄存器地址并

我是Python初学者(仅供参考),尝试使用minimalmodbus库(Python+Mac)与Gefran 800P程序员/控制器进行通信。我正在使用USB到RS485串行转换器电缆()与Gefran设备通信。设备后部的引脚(15+17(Rx+Tx)和16+18(Gnd+Gnd))分别连接到转换器电缆的数据+(A)和数据-(B)(RS485-2有线连接)。我不知道这个设备的从机地址,手册中没有提到地址()

我试过:

  • 将从表0的地址更改为247,我总是收到相同的消息
  • 尝试检查不同的寄存器地址并使用功能代码(3和4)进行播放,使用程序员设置进行播放,确保代码和设备中的两个参数相同。什么都不管用!也许我错过了什么。 期待您的帮助。我真的被困在这一点上一个多星期了 下面是我的代码,当我运行它时,它会给我一个错误“ValueError:Modbus RTU响应太短(最小长度为4字节)。响应:'\x00'”

    来自设备后部(15+17(Rx+Tx)和16+18(Gnd+Gnd))的引脚为 连接至转换器电缆的数据+(A)和数据-(B)

    也许我错了,但是我想,你应该用16号和15号引脚来表示+和-

    针脚18和17描述为:

    隔离至1500V无源电流回路的可配置串行线路(最大。 1200波特)


    也许你不应该把它们和15和16连在一起?

    好的,杰克,谢谢你的提示。。我最终设法让设备使用Gefran电缆进行通信。我不是100%确定什么真正有效,但我尝试了以下方法:

  • 安装软件“modpoll”,以轮询modbus设备,比较GF_eXpress软件和设备中的参数,并了解后台发生的情况

  • 尝试使用pyserial与设备进行串行通信-我认为这成功了,您必须首先初始化端口,然后进行通信。在我的例子中,打开一个串行端口并连接到该端口,然后使用modbus,效果非常神奇

  • 我重新启动了程序员,我的Mac,给出了基本参数波特率-9600,奇偶校验-无,地址-1和停止位-1,它开始工作


  • 我猜所有这些都可能有帮助,而且如果没有任何效果,重新启动您正在使用的每个设备并重置参数并再次将其设置为基本/标准值总是好的。

    您是否检查了所有串行端口设置,如波特率、奇偶校验等?是的,我尝试了所有可能的波特率和奇偶校验,基本设置为波特率: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"