Как заставить 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, так что вы можете его портировать.