modbus/tcp到websocket路由器。

modbus2websocket的Python项目详细描述


modbus2websocket

modbus2websocket(进一步说,m2w)是一个基于python的应用程序,它在modbus-tcp协议和websockets之间路由数据。

m2w logo

目的

m2w路由器的主要目标是在工业系统和web应用之间传输数据。modbus tcp-工业协议,用于在工业设备和hmi之间交换信息。通常,为了使数据可视化,工程师必须使用昂贵的重型scada或hmi。另一方面,web技术为您自己的web浏览器中的数据可视化提供了简单而强大的工具,而无需任何厚客户端。这就是为什么m2w首先被创建的原因——它使简单的webhmi服务器能够与工业系统一起工作。

部件

  • 异步modbus tcp服务器async_modbus_server.py
  • 异步modbus tcp客户端async_modbus_client.py
  • 异步WebSocket服务器async_websocket_server.py
  • 路由器router.py

它支持什么

  • 读取输入寄存器、数字输入、线圈和保持寄存器$
  • 发送到WebSocket客户端。

未来发展:

  • [X]异步modbus服务器
  • [X]异步modbus客户端
  • [X]异步WebSocket服务器
  • [X]路由器
  • [X]HTML示例页
  • []数据库连接

安装步骤

安装

模块安装

modbus2websocket库与pip一起安装:

pip install modbus2websocket

详细信息

在创建应用程序之前,必须指定以下内容:

  • WebSocket服务器IP,例如192.168.220.10
  • WebSocket端口,默认为8888
  • modbus/tcp服务器的ip,例如192.168.220.5

modbus服务器

如果您没有运行modbus/tcp服务器,可以使用服务器模拟器。

创建应用程序

类路由器将管理在浏览器中运行的modbus/tcp和websockets客户端之间的数据

frommodbus2websocket.routerimportRouter

路由器有两种公共方法:

  • Router.add_modbus_reg()-添加要读取的寄存器
  • Router.run()-运行路由器。

您应该将要读取的寄存器添加为字典列表。 单寄存器的结构如下:

Input_register_1={'ir':{'adr':0,'num':1,'name':'Input Register 1',},},

其中:

  • ir-寄存器类型。(见Modbus details)。
  • adr-regsiter的地址。从0到65535。
  • num-要读取的寄存器数。限制在1到2000之间。
  • name-寄存器的唯一名称。

示例

frommodbus2websocket.routerimportRouterif__name__=='__main__':ws_ip='192.168.220.10'# websocket ip addressws_port=8888# websocket portmodbus_ip='192.168.220.5'# Modbus ip addressrouter=Router(ws_ip,ws_port,modbus_ip)# Modbus registers to readregs=[{'ir':{'adr':0,'num':1,'name':'Reg1',},},{'hr':{'adr':1,'num':1,'name':'Reg2',},},{'ir':{'adr':2,'num':1,'name':'Reg3',},},]router.add_modbus_reg(regs)router.run()

modbus详细信息

Registers typeShort nameDescription
Digital InputDIRead only, bool, 1-bit
Input RegisterIRRead only, float/int, 16-bit
CoilCRead/write, bool, 1-bit
Holding registerHRRead/write, float/int, 16-bit

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

推荐PyPI第三方库


热门话题
datetime如何使用JodaTime在Java中设置时间属性   java固定算法的性能时间   java如何从JMenu中获取所选项以更改文本区域的文本颜色?   java配置单元UDF传递数组<string>作为参数   javaapachebeam和BigQuery   java与PrintWriter之间的差异。printf和PrintWriter。格式方法   继承如何处理按Java版本更改的导入,以及在多个版本上编译   xml java。lang.noClassDefFoundant生成错误   java如何使用包含映射的JSON发送POST请求?   java如何在任何应用程序的JAR文件中绑定MySql数据库?   Java脚本解释器   sslhttpclientjava。网SocketException:未实现未连接的socket   java如何为Android应用程序创建类似于Cron作业的东西   java JButton+radiobox+复选框   java内存管理将文件写入内存   java这是计算对象实例的有效方法吗?   用于死锁情况的java代码?   JavaSpring容器作为新实体插入,而不是存储在表中