Я использую lib "pymodbus" для подключения устройств PLC. В устройстве используется Modbus RTU через TCP, что устройства будут возвращать температуру и влажность окружающей среды.
список адресов карт
- 0001: температура
- 0002: влажность
Я выполнил один раз для получения значения, и оно может быть успешным.
Но я использую цикл while, иногда получаю ошибку.
Я не знаю почему.
Код:
from time import sleep
from pymodbus.client.sync import ModbusTcpClient
from pymodbus.framer.rtu_framer import ModbusRtuFramer
from pymodbus.register_read_message import ReadHoldingRegistersResponse
client = ModbusTcpClient(host='192.168.1.1', port=5000, framer=ModbusRtuFramer)
client.connect()
while True:
rr = client.read_holding_registers(0, 2, unit=1)
if isinstance(rr, ReadHoldingRegistersResponse):
temp = rr.registers
print(temp)
else:
print('error')
sleep(1)
client.close()
выход:
> ...
> [189, 444]
> [189, 443]
> [189]
> error
> error
> ...
Мы можем видеть, что иногда результат получается нормально, иногда результат неполон, а иногда результат недоступен.
Что я должен сделать, чтобы решить эту проблему, я хочу контролировать это устройство. Спасибо.