我是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))分别连接到转换器电缆的Data +(A)和Data-(B)(RS485-2wired连接)。我不知道该设备的从站地址,手册(http://www.primusthai.com/marketing/Gefran%20800%20(Controller).pdf)中没有提到地址。

我试过了:


将从站地址从0更改为247,我总是收到相同的消息。
尝试检查不同的寄存器地址,并使用功能代码(3&4)进行播放,并使用编程器设置进行播放,以确保代码和设备中的两个参数相同。没用!也许我缺少了一些东西。
期待您的帮助。我真的在这一点上停留了一个多星期!


下面是我的代码,当我运行它时,它给我一个错误“ 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"

最佳答案

好的,Jacek,谢谢您的所有提示。.我终于设法使设备使用Gefran Cable通信。我不确定100%确实有效,但是我尝试了以下方法:


安装软件“ modpoll”以轮询modbus设备,以比较GF_eXpress软件和该设备中的参数并了解后台发生了什么。
试图使用pyserial与设备进行串行通信-我认为这确实可行,您必须首先初始化端口,然后进行通信。以我为例,打开一个串行端口并连接到该端口,然后使用modbus就像魔术一样工作。
我重新启动了Mac编程器,给了基本参数baudrate-9600,奇偶校验-无,地址-1和停止位-1,它开始工作。


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

10-08 07:38