Как заставить pymodbus правильно взаимодействовать с ПЛК?

Прежде чем спросить, я просто хочу упомянуть, что я провел несколько дней, исследуя это, и, похоже, не могу найти выхода из этой основной проблемы. Я прочитал документы и провел здесь время. В противном случае я бы не спросил.

Я унаследовал массивную монолитную программу на Python, которая успешно считывает регистры хранения с помощью pymodbus +. read_holding_registers. Раньше я тратил время на редактирование python, но никогда не изучал его. Чтобы попытаться понять это на стороне Python, я попытался написать свою собственную базовую программу с нуля. Я начал с больших успехов и, в конце концов, разбил код до максимально простого.

from pymodbus.client.sync import ModbusTcpClient as ModbusClient

client = ModbusClient('192.168.1.98', port=502)
client.connect()

rr = client.read_holding_registers(10904, 2)

print rr

client.close()

Я знаю, что мне нужен именно этот регистр. Это регистр хранения на ПЛК Horner. Это хорошо задокументировано как в программе python, так и в Horner CSCAPE. Но всякий раз, когда я запускаю программу, она просто печатает любое значение, которое я ввел во второй элемент кортежа. Итак, здесь он просто напечатает 2. Если я поставлю кортеж (10905, 1) он просто печатает 1. Истинное значение бита регистра должно быть 0.

Я бы опубликовал масштабную программу, но, к сожалению, она является частной. Это python2.7. Я знаю, что это плохо, но я просто хочу наверстать упущенное в понимании программы, прежде чем беспокоиться о ее переносе на 3.9.

1 ответ

Вы должны назвать это с .registersкак это

rr = client.read_holding_registers(10904, 2).registers

Также, если вы проверите документацию , автор утверждает, что код совместим как с Python 2.7, так и с Python 3.x, так что вы можете его портировать.

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