我使用以下示例:https://pymodbus.readthedocs.io/en/v2.1.0/source/example/updating_server.html,只是将“ localhost”更改为程序正在运行的Raspberrypi的IP地址。
服务器已启动并正在运行,我可以连接到Windows客户端软件(QModMaster)。 该代码每5秒将“ 1”添加到寄存器中。 我试图读取每个寄存器(保持,线圈,输入,离散),但是我总是得到相同的起始值“ 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)
感谢您的帮助!