Не удается подключиться к ведомому с помощью Python modbus_tk

В настоящее время я пытаюсь разработать приложение, которое использует протокол Modbus-RTU, и мне нужно использовать modbus_tk в Python 2.7.

Я должен использовать биты кода из другого приложения, которое может связываться с микроконтроллером через 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)

Сначала мне нужно было удалить аргументы baudrate, bytesizeи т. д. в вызове конструктора, потому что он выдал ошибку вроде:

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 ответа

Решение

Нашел это!

Я обновил библиотеку и правильно установил параметры конструктора. Это прекрасно работает, знаю.

Правильный репозиторий для этой библиотеки: https://github.com/ljean/modbus-tk Требуется PySerial 2.7.

Другие вопросы по тегам