PyModbus: проверить, была ли функция успешной - PullRequest
0 голосов
/ 24 марта 2020

Я имею дело с устройством Modbus, которое иногда блокирует запросы, если слишком много мастеров Modbus опрашивают его.

Мой сценарий Python постоянно опрашивает устройство по бесконечному l oop (что я и хочу) и в настоящий момент вылетает, если подчиненное устройство блокирует какую-либо итерацию l oop. Я хотел бы решить эту проблему, проверяя каждую итерацию l oop, если функция read_holding_registers () вернула успех. А если нет, то l oop должен пропустить текущую итерацию, а не пытаться работать с возвращаемым значением функции. Приведенный ниже код показывает, что я хочу:

def some_function():
    while True:
        res = read_modbus()
        if res == -1:
            continue
        else:
            print(res)

def read_modbus():
    client = ModbusClient("127.0.0.1")
    res = client.read_holding_registers(0, 5, unit=0x1)
    if res == <some-error>:
        res = -1
    client.close()

    return res

Моя проблема в том, что я не понимаю, что мне делать с сообщением возврата read_holding_registers (), если функция завершается ошибкой. Если это успешно, я получаю значения регистра через res.registers. Если происходит сбой, и я запрашиваю res.registers, я получаю:

AttributeError: 'ModbusIOException' object has no attribute 'registers'

Итак, для чего я должен проверить, не работает ли функция или нет?

Документация PyModbus только утверждает, что функция возвращает «дескриптор отложенного ответа», что бы это ни значило.

...