Gefran 800P和minimalmodbus(Mac):“ValueError:Modbus RTU响应太短(最小长度为4个字节)。响应:'\ x00'”

时间:2017-02-07 14:09:47

标签: python modbus minimalmodbus

我是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)。

我试过了:

  1. 将从属表格0的地址更改为247,我总是收到相同的消息。
  2. 尝试检查不同的寄存器地址并使用功能代码(3& 4)进行播放,使用编程器设置进行播放,确保代码和设备中的两个参数相同。什么都行不通!也许我错过了什么。 期待您的帮助。我现在真的被困了一个多星期了!
  3. 下面是我的代码,当我运行它时,它给出了一个错误“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"
    

2 个答案:

答案 0 :(得分:1)

好的Jacek,感谢所有提示..我终于设法让设备使用Gefran Cable进行通信。我不是100%确定真正有效的,但我尝试了以下内容:

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

  2. 尝试使用pyserial与设备进行串行通信 - 我认为这样做了,你必须首先初始化端口然后进行通信。在我的情况下,打开一个串口并连接到端口然后使用modbus,像魔术一样工作。

  3. 我重新启动程序员,我的Mac,提供了基本参数baudrate - 9600,parity-none,address - 1和stop bits - 1,它开始工作..

  4. 我猜所有这些都可以帮助加上如果什么都不起作用,重启你正在使用的每一个设备并重置参数并再次设置为基本/标准值总是好的。

答案 1 :(得分:0)

  

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

也许我错了,但恕我直言,你应该使用16针和16针。 15代表+和 -

针脚18和17描述为:

  

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

也许你不应该用15& amp; 16?