2

我是 Python (FYI) 的初学者,并尝试使用 minimummodbus 库 (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)。

我努力了:

  1. 将从机的地址从 0 更改为 247,我总是收到相同的消息。
  2. 尝试检查不同的寄存器地址并使用功能代码(3&4),使用程序员设置确保代码和设备中的两个参数相同。没有任何作用!也许我错过了一些东西。期待您的帮助。我现在真的被困在这一点上一个多星期了!

下面是我的代码,当我运行它时,它给了我一个错误“ValueError: Too short Modbus RTU response (minimum length 4 bytes). Response: '\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"
4

2 回答 2

1

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

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

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

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

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

于 2017-02-15T09:58:08.417 回答
0

设备背面的引脚 (15+17(Rx+Tx) & 16+18(Gnd+Gnd)) 连接到转换器电缆的 Data +(A) 和 Data -(B)

也许我错了,但恕我直言,您应该使用引脚 16 和 15 来表示 + 和 -

引脚 18 和 17 描述为:

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

也许您不应该将它们与 15 和 16 连接在一起?

于 2017-02-08T14:00:18.510 回答