Я имею дело с устройством 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 только утверждает, что функция возвращает «дескриптор отложенного ответа», что бы это ни значило.