modbus协议在纯python中的实现。

uModbus的Python项目详细描述


https://travis-ci.org/AdvancedClimateSystems/uModbus.svghttps://coveralls.io/repos/AdvancedClimateSystems/uModbus/badge.svg?service=githubhttps://img.shields.io/pypi/v/uModbus.svghttps://img.shields.io/pypi/pyversions/uModbus.svg

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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何创建Restful服务并将其部署到OSGi容器?   java如何获取用户在EditText中输入的时间并从中扣除5小时30分钟?   java用户无法注销firebase 安卓   java Undertow始终将字符集添加到ContentType头,即使它不是文本MIME类型   java LocalBroadcastManager未正确接收消息   foreach在Java中有没有比For循环更好的方法可以灵活地遍历集合?   java如何在安卓上移动球   在OSGi下的Log4j中使所有记录器异步时,java ClassNotFoundException   java未知输入字节长度转换为int   java测试工厂在使用前缀命名时抛出NPE   对象的副本(JAVA)   java SP20310:无法打开文件。sql   java Spring安全性仅为一条路径添加安全性   java在idea中获取菱形运算符的编译错误