肯定不行吧。du() 函数用于读取 Modbus 从机的数据。 main() 函数没运行,哪来的数据。数据不就是main函数运行后传递过来的
时间: 2024-02-11 13:07:46 浏览: 22
您说得对,我的回答有误。如果您想要让 `du()` 函数读取到 `main()` 函数修改后的数据,您需要将 `main()` 函数中修改后的数据传递给 `du()` 函数。具体来说,您可以将 `holding_registers` 这个变量作为参数传递给 `du()` 函数,如下所示:
```python
def du(holding_registers):
client = ModbusClient(method='rtu', port='com4', baudrate=38400, bytesize=8, parity='N', stopbits=1)
client.connect()
# 读取保持寄存器数据
holding_registers = client.read_holding_registers(address=18, count=9, unit=1)
print(holding_registers)
print('Holding Registers:', holding_registers.registers)
# 关闭连接
client.close()
def main():
# 创建 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()
# 将修改后的数据传递给 du() 函数
du(holding_registers)
while True:
main()
```
在这个代码中,我们将 `holding_registers` 变量作为参数传递给 `du()` 函数。在 `main()` 函数中,我们先读取从机的数据,然后修改主机的数据并将修改后的数据传递给 `du()` 函数。在 `du()` 函数中,我们用传递过来的 `holding_registers` 变量读取从机的数据。这样就可以保证 `du()` 函数能够读取到 `main()` 函数修改后的数据了。