pymodbus Server和Client示例

PyModbus是一款功能强大且易于使用的Modbus协议实现库,适用于工业自动化、物联网、能源管理和数据分析等领域。

Server:

from pymodbus.server import (
    ModbusTcpServer,
)
from pymodbus.datastore import (
    ModbusSequentialDataBlock,
    ModbusServerContext,
    ModbusSlaveContext,
)

class MyServer:
    def __init__(self):
        datablock = ModbusSequentialDataBlock.create()
        context = ModbusSlaveContext(
            di=datablock,
            co=datablock,
            hr=datablock,
            ir=datablock,
            )

        self.store = ModbusServerContext(slaves=context, single=True)
        
    async def start(self):
        self.myserver = ModbusTcpServer(
            context=self.store,
            address=("0.0.0.0", 502)
        )
        await self.myserver.serve_forever() 

if __name__ == '__main__':
    server = MyServer();
    await server.start();

Client:

from pymodbus.client import ModbusTcpClient
from pymodbus.bit_read_message import ReadCoilsResponse
from pymodbus.register_read_message import ReadInputRegistersResponse
from pymodbus.exceptions import ConnectionException     

host = '127.0.0.1'
port = 502
client = ModbusTcpClient(host,port)

if client.connect():
    print("Modbus RTU Client Connected")
else:
    print("Failed to connect to Modbus RTU Client")

response = client.read_holding_registers(address=1, count=10, unit=1)
if not response.isError():
    print("Register Values: ", response.registers)
else:
    print("Failed to read registers")

write_response = client.write_register(address=1, value=25, unit=1)
if not write_response.isError():
    print("Written successfully")
else:
    print("Failed to write register")

values = [20, 40, 60, 80, 100]
write_response = client.write_registers(address=1, values=values, unit=1)
if not write_response.isError():
    print("Multiple registers written successfully")
else:
    print("Failed to write multiple registers")

response = client.read_coils(address=1, count=10, unit=1)
if not response.isError():   
    print("coils Values: ", response.bits )
else:
    print("Failed to read registers")

write_response = client.write_coil(address=24576, value=True, unit=1)
if not write_response.isError():
    print("Written successfully")
else:
    print("Failed to write coils")

values = [True, False, False, True, False]
write_response = client.write_coils(address=1, values=values, unit=1)
if not write_response.isError():
    print("Multiple registers written successfully")
else:
    print("Failed to write multiple registers")

client.close()
print("Modbus RTU Client Connection Closed")

你可能感兴趣的:(python,前端,服务器)