modbus协议在纯python中的实现。
uModbus的Python项目详细描述
umodbus
umodbus或(μmodbus)是modbus协议的纯python实现 在MODBUS Application Protocol Specification V1.1b3中描述。umodbus总线 实现一个modbus客户端(tcp和rtu)和一个modbus服务器(两者 TCP和RTU)。名称中的“u”或“μ”来自si前缀“micro-”。 umodbus非常小巧轻便。源可以在GitHub上找到。 文档可在Read the Docs获得。
快速启动
创建modbus tcp服务器很简单:
#!/usr/bin/env python# scripts/examples/simple_tcp_server.pyimportloggingfromsocketserverimportTCPServerfromcollectionsimportdefaultdictfromumodbusimportconffromumodbus.server.tcpimportRequestHandler,get_serverfromumodbus.utilsimportlog_to_stream# Add stream handler to logger 'uModbus'.log_to_stream(level=logging.DEBUG)# A very simple data store which maps addresss against their values.data_store=defaultdict(int)# Enable values to be signed (default is False).conf.SIGNED_VALUES=TrueTCPServer.allow_reuse_address=Trueapp=get_server(TCPServer,('localhost',502),RequestHandler)@app.route(slave_ids=[1],function_codes=[3,4],addresses=list(range(0,10)))defread_data_store(slave_id,function_code,address):"""" Return value of address. """returndata_store[address]@app.route(slave_ids=[1],function_codes=[6,16],addresses=list(range(0,10)))defwrite_data_store(slave_id,function_code,address,value):"""" Set value for address. """data_store[address]=valueif__name__=='__main__':try:app.serve_forever()finally:app.shutdown()app.server_close()
执行modbus请求需要更少的代码:
#!/usr/bin/env python# scripts/examples/simple_tcp_client.pyimportsocketfromumodbusimportconffromumodbus.clientimporttcp# Enable values to be signed (default is False).conf.SIGNED_VALUES=Truesock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)sock.connect(('localhost',502))# Returns a message or Application Data Unit (ADU) specific for doing# Modbus TCP/IP.message=tcp.write_multiple_coils(slave_id=1,starting_address=1,values=[1,0,1,1])# Response depends on Modbus function code. This particular returns the# amount of coils written, in this case it is.response=tcp.send_message(message,sock)sock.close()
功能
modbus tcp和modbus rtu实现了以下功能:
- 01:读取线圈
- 02:读取离散输入
- 03:读取保持寄存器
- 04:读取输入寄存器
- 05:写入单线圈
- 06:写入单个寄存器
- 15:写入多个线圈
- 16:写入多个寄存器
其他功能:
- 支持有符号和无符号寄存器值。
许可证
umodbus软件是根据Mozilla Public License授权的。©2018年Advanced Climate Systems。