无法使用Python的modbus_tk

时间:2016-06-09 07:56:51

标签: python connection modbus modbus-tk

我目前正在尝试开发使用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'

但是当我们接到execute的电话时,再次出现错误,我还无法解决:

modbus_tk.modbus.ModbusInvalidResponseError: Response length is invalid 0

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

2 个答案:

答案 0 :(得分:1)

发现它!

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

答案 1 :(得分:1)

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