2

我目前正在尝试开发一个使用 Modbus-RTU 协议的应用程序,我必须在 Python 2.7中使用modbus_tk 。

我应该使用来自另一个应用程序的代码位,该应用程序能够通过 modbus 与微控制器通信。当我运行以下代码时,它适用于该应用程序,但是当我在我的应用程序中运行相同的行时出现错误。

import modbus_tk
import modbus_tk.defines as cst
import modbus_tk.modbus_rtu as modbus_rtu
import serial

MB_Add_Status = 8 + 5001

def MB_GetStatus(MB_Master_handle):
    try:
        status = MB_Master_handle.execute(1, cst.READ_HOLDING_REGISTERS, MB_Add_Status, 1)
        return status
    except modbus_tk.modbus.ModbusError, e:
        logger.error("%s- Code=%d" % (e, e.get_exception_code()))

MB_port  = 3
masterMB = modbus_rtu.RtuMaster(serial.Serial(port='COM'+str(MB_port), baudrate=19200, bytesize=8, parity='N', stopbits=2, xonxoff=0))
status = MB_GetStatus(masterMB)

首先,我需要删除构造函数调用中的参数baudratebytesize等,因为它会出现如下错误:

TypeError: __init__() got an unexpected keyword argument 'stopbits'

但是当我们调用 to 时execute,又出现了一个错误,我还无法解决:

modbus_tk.modbus.ModbusInvalidResponseError: Response length is invalid 0

我找到的唯一文档是:https ://github.com/Nobatek/modbus-tk/tree/master/docs ,但我不太了解它。如果有人可以首先向我解释这个错误的真正含义,以及我应该在哪里查看,我们将不胜感激。非常感谢你 !

4

2 回答 2

1

这个库的正确存储库是https://github.com/ljean/modbus-tk 它需要 PySerial 2.7

于 2016-06-09T12:08:10.180 回答
0

找到了 !

我更新了库并正确设置了构造函数的参数。这很好用知道。

于 2016-06-09T10:15:03.663 回答