Files
Uni-Lab-OS/unilabos/device_comms/modbus_plc/test/client.py
Junhan Chang c78ac482d8 Initial commit
2025-04-17 15:19:47 +08:00

108 lines
2.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import time
from pymodbus.client import ModbusTcpClient
from unilabos.device_comms.modbus_plc.node.modbus import Coil, HoldRegister
from pymodbus.payload import BinaryPayloadDecoder
from pymodbus.constants import Endian
# client = ModbusTcpClient('localhost', port=5020)
client = ModbusTcpClient('192.168.3.2', port=502)
client.connect()
coil1 = Coil(client=client, name='coil_test1', data_type=bool, address=4502*8)
coil1.write(True)
time.sleep(3)
coil1.write(False)
coil1 = Coil(client=client, name='coil_test1', data_type=bool, address=4503*8)
coil1.write(True)
time.sleep(3)
coil1.write(False)
exit(0)
register1 = HoldRegister(client=client, name="test-1", address=7040)
coil1 = Coil(client=client, name='coil_test1', address=7002*8)
coil1.write(True)
while True:
# result = client.read_holding_registers(address=7040, count=2, slave=1) # unit=1 是从站地址
result = register1.read(2, slave=1)
if result.isError():
print("读取失败")
else:
print("读取成功:", result.registers)
decoder = BinaryPayloadDecoder.fromRegisters(
result.registers, byteorder=Endian.BIG, wordorder=Endian.LITTLE
)
real_value = decoder.decode_32bit_float()
print("这里的值是: ", real_value)
if real_value > 42:
coil1.write(False)
break
time.sleep(1)
# # 创建 Modbus TCP 客户端,连接到本地模拟的服务器
# client = ModbusClient('localhost', port=5020)
# # 连接到服务器
# # 读取保持寄存器(地址 0读取 10 个寄存器)
# # address: int,
# # *,
# # count: int = 1,
# # slave: int = 1,
# response = client.read_holding_registers(
# address=0, count=10, slave=1
# )
# response = coil1.read(2, slave=1)
#
# if response.isError():
# print(f"Error reading registers: {response}")
# else:
# print(f"Read holding registers: {response.bits}")
#
# coil1.write(1, slave=1)
# print("Wrote value 1234 to holding register 0")
#
# response = coil1.read(2, slave=1)
# if response.isError():
# print(f"Error reading registers: {response}")
# else:
# print(f"Read holding registers after write: {response.bits}")
#
#
# if response.isError():
# print(f"Error reading registers: {response}")
# else:
# print(f"Read holding registers after write: {response.bits}")
client.close()
# # 写入保持寄存器(地址 0值为 1234
# client.write_register(0, 1234, slave=1)
# print("Wrote value 1234 to holding register 0")
# # 再次读取寄存器,确认写入成功
# response = client.read_holding_registers(address=0, count=10, slave=1)
# if response.isError():
# print(f"Error reading registers: {response}")
# else:
# print(f"Read holding registers after write: {response.registers}")
# # 关闭连接
# client.close()