如何使用pymodbus写入PLC输入寄存器

How to write to PLC input registers using pymodbus

我想使用 pymodbus 写入 PLC 输入寄存器。我能够阅读它们:

from pymodbus.client.sync import ModbusTcpClient
client = ModbusTcpClient('10.10.10.32')
client.connect()
reg = client.read_input_registers(1,5)
print(reg.registers)

但我仍然没有找到任何方法如何向它们写入任何值。我感谢任何帮助。谢谢。

输入寄存器是只读的。您可以写入保持寄存器,使用 Modbus 函数写入单个寄存器或写入多个寄存器(pymodbus 中的 ModbusTcpClient.write_register 或 ModbusTcpClient.write_registers)。

PLC 有一组专用寄存器供您读取和一组供您写入。写入寄存器组因 PLC 而异。您读取寄存器,例如可以从寄存器“1”开始。您从“1”读取但不写入。您必须查找 PLC 的 modbus 寄存器映射。

我对 Python 的了解很少,但您似乎正在尝试读取最多 5 个寄存器,从 1 个开始?要编写,您可能需要使用

reg = client.write_output_registers(?,??)

我通常使用Wago 880。我可以写入寄存器0-999 并读取1000-1999。我假设 Python 会为您处理函数代码。

使用 Festo 的示例 MODBUS/TCP:

# First digital input address
address = 40003
# Written value
value = 255

# It will send '11111111' to the output 
client.write_register(address, value)

根据文档:
http://pymodbus.readthedocs.org/en/latest/library/sync-client.html

//函数
write_register(地址,值)
// 参数
地址——要写入的起始地址
value – 写入指定地址的值