设备1跟设备2之间用串口com1连接,采用Modbus-RTU协议,现在中间加台电脑,用python获取com1信号,处理修改寄存器数据并且整合后也以Modbus-RTU协议通过串口com2跟设备2连接。前后Modbus-RTU协议格式得一致。现在电脑跟设备1连接成功,并能读取修改数据。程序如下: # 创建 Modbus-RTU 主机对象 client = ModbusClient(method='rtu', port='com2', baudrate=38400, bytesize=8, parity='N', stopbits=1) # 连接到 Modbus 从机 client.connect() # 读取保持寄存器数据 holding_registers = client.read_holding_registers(address=0, count=9, unit=1) print('Holding Registers:', holding_registers.registers) # 读取输入寄存器数据 input_registers = client.read_input_registers(address=0, count=9, unit=1) print('Input Registers:', input_registers.registers) # 读取输入线圈数据 input_coils = client.read_discrete_inputs(address=0, count=9, unit=1) print('Input Coils:', input_coils.bits) # 读取输出线圈数据 output_coils = client.read_coils(address=0, count=9, unit=1) print('Output Coils:', output_coils.bits) # 修改保持寄存器数据 holding_registers.registers[0] = 10000 holding_registers.registers[1] = 5000 # 写入保持寄存器数据 client.write_registers(address=0, values=holding_registers.registers, unit=1) # 关闭连接 client.close() 现在的问题是咋把读取并修改的所有数据都以Modbus-RTU发送给设备2,并且保持跟前面电脑跟设备1连接的格式相同。帮我把后面的程序完成。之前你教的把读出的数据变成二进制再发送,格式老错。有没简单可靠的办法。
时间: 2024-01-10 19:02:39 浏览: 85
可以使用Python库pymodbus来实现将修改后的数据发送给设备2。下面是一个示例代码可以使用pymodbus库提供的函数来直接发送Modbus-RTU格式的数据。以下是一个示例代码,可以读取设备1的数据,修改后发送给设备2:
```python
from pymodbus.client.sync import:
```python
from pymodbus.client.sync import ModbusSerialClient as ModbusClient
# 创建 Modbus-RTU 主机 ModbusSerialClient as ModbusClient
# 创建 Modbus-RTU 主机对象
client = ModbusClient(method='rtu对象,连接设备2
client = ModbusClient(method='rtu', port='com2', baudrate=38400, bytes', port='com1', baudrate=38400, bytesize=8, parity='N', stopbits=1)
# 连接ize=8, parity='N', stopbits=1)
client.connect()
# 读取并修改保持寄存器数据
到 Modbus 从机
client.connect()
# 读取保持寄存器数据
holding_registers = client.read_holding_registersholding_registers = client.read_holding_registers(address=0, count=9, unit=1)
holding_registers.registers[0] = (address=0, count=9, unit=1)
print('Holding Registers:', holding_registers.registers)
# 修改保持寄存10000
holding_registers.registers[1] = 5000
# 写入保持寄存器数据
client.write_registers(address器数据
holding_registers.registers[0] = 10000
holding_registers.registers[1] = 5000
# 写=0, values=holding_registers.registers, unit=1)
# 关闭连接
client.close()
```
这段代码与之入保持寄存器数据
client.write_registers(address=0, values=holding_registers.registers, unit=2)
# 读前的代码基本相同,只是将读取并修改的数据写入了设备2。注意要在修改数据之后再写入,否则修改的数据不会被写入设备2。同时还要确保设备2支取输入寄存器数据
input_registers = client.read_input_registers(address=0, count=9, unit=2)
print('Input持读写保持寄存器。
阅读全文