Сервер обновлений PyModbus не может записывать или читать регистры - PullRequest
0 голосов
/ 14 ноября 2018

Я использую этот пример exakt: https://pymodbus.readthedocs.io/en/v2.1.0/source/example/updating_server.html, за исключением изменения 'localhost' на IP-адрес Raspberrypi, на котором работает программа.

Сервер запущен и работает, и я могуподключиться к моему клиентскому программному обеспечению Windows (QModMaster).Код добавляет «1» в регистры каждые 5 секунд.Я пытался прочитать все регистры (холдинг, катушки, вход, дискретный), но я всегда получаю одно и то же начальное значение, «17».Вот что выдает оболочка:

RESTART: /home/pi/Documents/Tests/PythonModbus/pymodbus-master/examples/common/TestUpdatingserver.py
INFO:pymodbus.server.async:Starting Modbus TCP Server on 10.21.39.27:5020
DEBUG:pymodbus.server.async:Running in Main thread
DEBUG:pymodbus.server.async:Client Connected [IPv4Address(type='TCP', host='10.21.39.27', port=5020)]
DEBUG:root:updating the context
DEBUG:pymodbus.datastore.context:getValues[3] 17:5
DEBUG:root:new values: [18, 18, 18, 18, 18]
DEBUG:pymodbus.datastore.context:setValues[3] 17:5
DEBUG:root:updating the context
DEBUG:pymodbus.datastore.context:getValues[3] 17:5
DEBUG:root:new values: [19, 19, 19, 19, 19]
DEBUG:pymodbus.datastore.context:setValues[3] 17:5
DEBUG:pymodbus.server.async:Data Received: 0x0 0x1 0x0 0x0 0x0 0x6 0x1 0x3 0x0 0x0 0x0 0x5
DEBUG:pymodbus.framer.socket_framer:Processing: 0x0 0x1 0x0 0x0 0x0 0x6 0x1 0x3 0x0 0x0 0x0 0x5
DEBUG:pymodbus.factory:Factory Request[3]
DEBUG:pymodbus.datastore.context:validate[3] 1:5
DEBUG:pymodbus.datastore.context:getValues[3] 1:5
DEBUG:pymodbus.server.async:send: b'00010000000d01030a00110011001100110011'
DEBUG:root:updating the context
DEBUG:pymodbus.datastore.context:getValues[3] 17:5
DEBUG:root:new values: [20, 20, 20, 20, 20]
DEBUG:pymodbus.datastore.context:setValues[3] 17:5

и так далее ...

Может ли кто-нибудь мне помочь или сказать мне, где / в каких регистрах программа записывает значения и как я могуправильно писать / читать регистры хранения?

Я думаю, что это как-то связано с этим блоком кода в функции update_writer из примера, особенно с register = 3, но я не могу понять, что он делает.Я начал погружаться в модуль регистрации, но я нашел его слишком сложным для начинающего:

log.debug("updating the context")
context = a[0]
register = 3
slave_id = 0x00
address = 0x10
values = context[slave_id].getValues(register, address, count=5)
values = [v + 1 for v in values]
log.debug("new values: " + str(values))
context[slave_id].setValues(register, address, values)

Любая помощь приветствуется!

...