工业物联网数据桥接教程:Modbus 桥接到 MQTT

Modbus 介绍

Modbus 是一种串行通信协议,用于连接工业自动化设备,最初由 Modicon 公司开发,诞生于 1979 年,现在已成为通用的通讯标准之一,广泛用于工业自动化场景。

Modbus 采用主从模式,支持多种传输方式,包括串行(RS-232/485)和以太网版本(TCP/IP)。其主要用于监视和控制自动化设备,例如传感器、电机和 PLC 等。它可以实现设备间的数据交换和控制命令发送,使得各个设备之间能够互相协调工作。

Modbus 协议中定义了四种类型的存储区,分别为线圈(Coils)、离散输入(Discrete Inputs)、输入寄存器(Input Registers)和保持寄存器(Holding Registers)。不同类型的存储区对应着不同的读写操作。

存储区名称数据类型访问类型PLC 地址寄存器地址
线圈读写000001-0655360-65535
离散输入只读100001-1655360-65535
输入寄存器只读300001-3655360-65535
保持寄存器读写400001-4655360-65535

四种存储区都有各自的地址范围和读写操作码,根据应用场景选择合适的存储区进行读写操作。

以 Modbus TCP 为例,其报文结构为MBAP(报文头)+PDU(帧结构)。

报文头帧结构
事物标识符协议标识符长度单元标识符功能码数据

Modbus 协议定义多种功能码实现对存储区的读写,下面列举常见功能码。

功能码功能位/字操作操作数量
01读线圈状态位操作单个或多个
02读离散输入状态位操作单个或多个
03读保持寄存器字操作单个或多个
04读输入寄存器字操作单个或多个
05写单个线圈位操作单个
06写单个保持寄存器字操作单个
15写多个线圈位操作多个
16写多个保持寄存器字操作多个

假设从机地址为 01H,读取的保持寄存器起始地址为 006BH,读取 2 个寄存器,指令如下:

从机地址功能码起始地址高位起始地址低位寄存器数量高位寄存器数量低位
0103006B0002

每个保持寄存器的长度为 2 个字节。低地址寄存器先传输,高地址寄存器后传输。每个寄存器数据高字节数据先传输,低字节数据后传输。响应如下:

从机地址功能码字节数006BH高字节006BH低字节006CH高字节006CH低字节
01030400000000

为什么将 Modbus 桥接到 MQTT

随着工业 4.0 的到来,制造业中的智能化、自动化和数据化需求越来越高。在这种背景下,Modbus 协议也面临了一些挑战。

首先,Modbus 协议在安全性方面存在较大问题。由于其通信方式较为简单,容易受到黑客攻击和数据篡改等安全问题。

其次,在实时性和带宽利用率方面,Modbus 协议与现代工业通信标准相比显得不够优秀。特别是在大规模设备联网的情况下,传统的串行通信方式已经不能满足要求。

此外,在多层次架构和云平台应用方面,Modbus 协议还存在一定的局限性。它只能进行点对点通信,并没有很好地支持分布式系统和云计算平台。

MQTT 相比于 Modbus 优势明显。MQTT 协议是一种基于发布/订阅模式的轻量级消息传输协议,其构建于 TCP/IP 协议上,由 IBM 在 1999 年发布。2014 年 10 月 29 日,MQTT 成为 OASIS 正式批准的通讯标准。目前已经广泛应用于物联网、移动互联网、智能硬件、车联网、智慧城市、远程医疗、电力、石油与能源等领域。

MQTT 主要有以下优势:

  • 轻量级:MQTT 非常轻量级,可以在带宽有限、网络质量不好的环境下使用。
  • 灵活性:MQTT 支持多种连接方式,通过订阅/发布模式实现灵活的消息传递。
  • 可靠性:MQTT 可以保证消息的可靠传输,即使网络中断也可以重新连接并恢复通信。
  • 安全性:MQTT 支持 SSL/TLS 加密和认证机制,可以保障数据安全性。

因此,在物联网领域,MQTT 更适合于分布式系统中的消息传递。可以将 Modbus 桥接 MQTT 取长补短,完成升级改造。

Modbus 桥接到 MQTT 的架构

Modbus 数据源将数据发送到 MQTT Broker,MQTT Broker 接收并转发。实现此过程需要两个组件:一是边缘端将 Modbus 协议转换为 MQTT 并发送到 MQTT Broker;二是需要一个处理 MQTT 消息的 MQTT Broker。

EMQ 旗下的 Neuron 可以将 Modbus 协议转换为 MQTT;EMQX 则可以作为 MQTT Broker 处理海量连接。

Neuron 是一款现代的工业物联网连接服务器,可以连接多种使用标准协议或者设备专有协议的工业设备,实现了工业物联网平台与各种设备的互联互通。作为一款轻量级的工业协议网关软件,Neuron 可以运行在各种有限资源的物联网边缘硬件设备上,旨在解决以数据为中心的自动化设备数据难以统一访问的问题,为智能制造提供基础支撑。

EMQX 是一款大规模可扩展的云原生分布式物联网 MQTT 消息服务器。作为全球最具扩展性的 MQTT 消息服务器,EMQX 提供了高效可靠海量物联网设备连接,能够高性能实时移动与处理消息和事件流数据,帮助用户快速构建关键业务的物联网平台与应用。

下面展示了 Neuron 从边缘端采集数据并转换为 MQTT 上传到 MQTT broker 的架构。

Modbus 桥接到 MQTT 的架构

通过 Neuron 将 Modbus 桥接到 MQTT

此章节将介绍如何使用 Neuron 采集 Modbus 设备的数据,将采集到的数据上传到 MQTT Broker(EMQX),并使用 MQTTX 查看。

EMQX 快速使用

EMQX 提供多种安装方式,用户可在 安装 中查看详细的安装方式。本实例采用容器化部署的方式,以便于最快开始体验 EMQX。

运行以下命令获取 Docker 镜像:

docker pull emqx/emqx:5.1.0

运行以下命令启动 Docker 容器

docker run -d --name emqx -p 1883:1883 -p 8081:8081 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:5.1.0

通过浏览器访问 http://localhost:18083/ (localhost 可替换为您的实际 IP 地址)以访问 EMQX Dashboard 管理控制台,进行设备连接与相关指标监控管理。本教程保持 docker 启动即可。

初始用户名: admin ,初始密码:public

安装 Modbus 模拟器

安装 PeakHMI Slave Simulators 软件,安装包可在 PeakHMI 官网 中下载。

安装后,运行 Modbus TCP slave EX。须保证 Neuron 与模拟器运行在同一局域网内。

点击 Windows->Register data 查看数据。

选择站点号 1。

选择站点号 1。

选择 Holding Registers。至此,成功启动模拟器,保持模拟器打开,接下来操作 Neuron。

选择 Holding Registers

Neuron 快速开始

Neuron 提供多种安装方式,用户可在 安装 中查看详细的安装方式。本实例采用容器化部署的方式,以便于最快开始体验 Neuron。

获取 Docker 镜像:

$ docker pull emqx/neuron:latest

启动 Docker 容器:

$ docker run -d --name neuron -p 7000:7000 --privileged=true --restart=always emqx/neuron:latest

打开 Web 浏览器,输入运行 Neuron 的网关地址和端口号,即可进入到管理控制台页面,默认端口号为 7000。通过浏览器访问 http://localhost:7000/ (localhost 可替换为您的实际 IP 地址)

第一步,登录

页面打开后,进入到登录界面,用户可使用初始用户名与密码登录(初始用户名:admin,初始密码:0000)。

第二步,添加南向设备

配置 菜单中选择 南向设备,进入到南向设备界面,点击 添加设备 新增设备。

  • 名称:填写设备名称,例如 modbus-tcp-1;
  • 插件:下拉框选择 Modbus TCP 插件。

第三步,设置南向设备参数

添加南向设备后自动进入设备配置界面,填写参数并提交。

  • 传输模式:选择 TCP;
  • 连接模式:选择 Client;
  • 最大重试次数:默认 0;
  • 指令重新发送间隔:默认 0;
  • 指令发送间隔:默认 20;
  • IP 地址:填写安装 PeakHMI Slave Simulators 软件的 PC 端 IP 地址;
  • 端口号:默认 502;
  • 连接超时时间:默认 3000。

第四步,在设备卡片中创建组

点击设备节点卡片任意空白处,进入组列表管理界面,点击 创建 ,弹出 创建组 的对话框。填写参数并提交:

  • 组名称:填写组名称,例如 group-1;
  • 间隔:默认 1000。

第五步,在组中添加数据点位

点击组卡片任意空白处,进入点位列表管理界面,点击 创建 ,进入添加点位页面。

在组中添加数据点位

填写点位参数并提交:

  • 名称:填写点位名称,例如,tag-1;
  • 属性:下拉选择点位属性,例如,Read,Write;
  • 类型:下拉选择数据类型,例如,INT16;
  • 地址:填写驱动地址,例如,1!40001。1 代表 Modbus 模拟器中设置的点位站点号,40001 代表点位寄存器地址;
  • 描述、乘系数、精度不填。

第六步,数据监控中查看采集数据

选择监控数据监控,进入数据监控界面,查看已创建点位读取到的数值,如下图所示。

查看采集数据

注意,请确认 Modbus 模拟器已启动。

数据监控以组为单位显示数值:

  • 南向设备:下拉框选择想要查看的南向设备,例如,选择已创建的 modbus-tcp-1;
  • 组名称:下拉框选择想要查看所选南向设备下的组,例如,选择已创建的 group-1;
  • 选择完成,页面将会展示读取到的组中所有点位的值。

第七步,为应用程序添加北向插件模块

创建北向应用, Neuron 与北向应用建立连接并将采集到的设备数据上传到 MQTT Broker(EMQX)。

配置菜单中选择北向应用,点击 添加应用 ,如下图所示。

添加应用

添加一个 MQTT 云连接模块:

  • 名称:填写应用名称,例如,MQTT;
  • Plugin:下拉框选择 MQTT 插件。

第八步,设置北向应用参数

添加北向应用后自动进入应用配置界面,填写参数并提交。

设置 MQTT 连接:

  • 客户端 ID:注意此 ID 要相互独立,重复 ID 会导致客户端被踢除。例如设置为,MQTT1999;
  • QoS 等级:默认为 0;
  • 上报数据格式:默认为 Values-format;
  • 写请求主题:默认为 /neuron/MQTT/write/req;
  • 写响应主题:默认为 /neuron/MQTT/write/resp;
  • 离线缓存:默认关闭;
  • 服务器地址:填写创建的 emqx broker 地址,地址为部署 emqx 的地址 localhost,即您实际的 IP 地址。
  • 服务器端口:默认 1883;
  • 用户名、密码:不填;
  • SSL:默认关闭。

第九步,订阅南向点位组

点击刚创建的 MQTT 应用节点卡片任意空白处,进入订阅组界面,点击 添加订阅

订阅南向设备的数据组:

  • 南向设备:下拉框选择已创建的南向设备,例如,modbus-tcp-1;
  • 组:下拉框选择所要订阅的组,例如,group-1;
  • 主题:MQTT 主题,本例中默认为 /neuron/MQTT/group-1。接下来在 MQTTX 中订阅此主题并接收消息。

第十步,在 MQTT 客户端查看数据

订阅完成后,除了 neuron 自己的数据监控界面,用户可以使用 MQTT 客户端 - MQTTX 连接到 EMQX 来查看上报的数据。

启动 MQTTX 后在主页面点击 + New Connection,填写配置参数后,点击右上角连接。

  • 名称:对消息起名便于查看,例如起名为 modbus-tcp;

  • Client ID:使用默认值即可,保证 ID 独立;

  • 服务器地址:下拉框选择 ws://emqx@localhost,(localhost 可替换为您的实际 IP 地址);

  • 端口:8083。

    其他参数选填,完成后点击右上角连接。成功连接后订阅主题。

  • 点击 添加订阅,Topic 与第九步中的主题一致。例如,填写 /neuron/MQTT/group-1

订阅成功后可以看到 MQTTX 持续接收到 Neuron 采集并上报过来的数据。如下图所示。

MQTTX 持续接收到 Neuron 采集并上报过来的数据

工业物联网应用场景

石油生产数据采集

随着石油生产数字化建设规模的扩大,自动化设备的数量也在增加,导致了数据采集和管理的复杂性。

设备侧通过边缘工业协议网关软件 Neuron 对接各类工业设备,可以将石油生产环境中的 DTU、RTU 以及各类型 PLC 的数据进行统一采集。同时在设备上报过程中实现对采集点、采集频率、上报频率、上报格式的统一规划,方便上层业务系统存储与数据消费。

石油生产数据采集

结合 Neuron 和 EMQX、eKuiper、EMQX-ECP 等其他 EMQ 产品的整体解决方案可以为石油行业带来以下好处:

  • 轻前端、重后端的系统架构,降低现场设备与系统运维成本。
  • 基于物联网协议作为数据采集与传输的主要方式,实现了生产数据低时延实时上报,提高业务响应能力。
  • 解决海量异构设备与系统的实时数据统一汇聚,实现了各类型生产与监控设备数据统一汇聚存储,使数据资产有效整合。
  • 通过统一接入平台以及平台提供的丰富数据接口,实现数据采集与数据消费系统的解偶,使应用开发更加便捷高效。

赋能工业网络化、数字化和智能化

统一的一站式工业物联网数据平台在工业 4.0 的背景下变得至关重要。

Neuron 可以支持 Modbus、OPC-UA、IEC61850、IEC104 等完整工业协议,实现各类异构工业设备数据的高效接入。轻量级边缘流处理引擎 eKuiper 在边缘端进行采集、过滤、补全、时间窗口计算等,为边缘 AI 推理服务提供高质量数据源。

通过在云端实现实时数据连接、移动、存储、处理和分析,这为大数据分析和人工智能应用奠定了坚实的数据基础,使企业能够快速开发上层应用。

一站式工业物联网数据平台

结语

使用 Modbus 协议可以实现设备之间的通信和数据交换,而 MQTT 则提供了一种高效、灵活且安全的消息传输机制。通过将 Modbus RTU 或 TCP 转换为 MQTT 消息,可以轻松地将设备数据发送到云端,并在需要时进行远程控制和监控。这种方式可以帮助工业企业更好地管理其设备和生产过程,并提高生产效率和质量。

版权声明: 本文为 EMQ 原创,转载请注明出处。

原文链接:https://www.emqx.com/zh/blog/bridging-modbus-data-to-mqtt-for-iiot

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/88941.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS7源码安装MySQL详细教程

😊 作者: Eric 💖 主页: https://blog.csdn.net/weixin_47316183?typeblog 🎉 主题:CentOS7源码安装MySQL详细教程 ⏱️ 创作时间: 2023年08月014日 文章目录 1、安装的四种方式2、源码安装…

路径规划 | 详解维诺图Voronoi算法(附ROS C++/Python/Matlab仿真)

目录 0 专栏介绍1 维诺图规划原理2 ROS C实现(栅格图搜索)3 Python实现(路图搜索)4 Matlab实现(路图搜索) 0 专栏介绍 🔥附C/Python/Matlab全套代码🔥课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等)&#…

(css)点击前隐藏icon图表 点击后显示

(css)点击前隐藏icon图表 点击后显示 效果 html <liv-for"(item,index) in sessionList":key"index"class"liClass":class"{ active: change2 index }"tabindex"2">...<el-tooltip class"item" effec…

有血有肉的PPT

1、PPT是Powerpoint缩写 2、引申的含义是Powerpoint Power(力量/能量&#xff09; Point(观点/要点) 3、用PPT做的文档是讲演稿&#xff0c;讲演的内容要有力度&#xff0c;之所以要去演讲是为了能够影响受众 4、其次演讲稿上的内容要列出要点、表明观点&#xff0c;所以一般P…

ArcGIS Pro实践技术应用暨基础入门、制图、空间分析、影像分析、三维建模、空间统计分析与建模、python融合、案例应用

GIS是利用电子计算机及其外部设备&#xff0c;采集、存储、分析和描述整个或部分地球表面与空间信息系统。简单地讲&#xff0c;它是在一定的地域内&#xff0c;将地理空间信息和 一些与该地域地理信息相关的属性信息结合起来&#xff0c;达到对地理和属性信息的综合管理。GIS的…

Python自动化测试框架:Pytest和Unittest的区别

pytest和unittest是Python中常用的两种测试框架&#xff0c;它们都可以用来编写和执行测试用例&#xff0c;但两者在很多方面都有所不同。本文将从不同的角度来论述这些区别&#xff0c;以帮助大家更好地理解pytest和unittest。 1. 原理 pytest是基于Python的assert语句和Pytho…

解决WSL2的docker删除镜像后,磁盘空间不释放问题

1、问题原因 由于WSL2本质上是虚拟机&#xff0c;所以 Windows 会自动创建 vhdx 后缀的虚拟磁盘文件作为存储。这个 vhdx 后缀的虚拟磁盘文件特点是可以自动扩容&#xff0c;但是一般不会自动缩容。一旦有很多文件把它“撑大”&#xff0c;即使把这些文件删除它也不会自动“缩…

Linux零基础快速入门到精通

一、操作系统概述 二、初始Linux Linux的诞生 Linux内核 Linux发行版 小结 三、虚拟机 认识虚拟机 虚拟化软件及安装 VMware Workstation 17 Pro安装教程https://blog.csdn.net/weixin_62332711/article/details/128695978 远程连接Linux系统 小结 扩展-虚拟机快照 …

STM32 LL库开发

一、STM32开发方式 标准库开发&#xff1a;Standard Peripheral Libraries&#xff0c;STDHAL库开发&#xff1a;Hardware Abstraction Layer&#xff0c;硬件抽象层LL库开发&#xff1a;Low-layer&#xff0c;底层库 二、HAL库与LL库开发对比 ST在推行HAL库的时候&#xff0c;…

造个轮子-任务调度执行小框架-任务清单执行器实现

文章目录 前言执行器流程提交流程线程池实现执行器实现接口状态标志执行周期实现清单代理创建清单项执行总结前言 okey,上一篇文章我们提到了,如何实现它的一个清单的一个代理。这里的话我们来捋一捋我们的这个执行流程是啥: 所以的话,我们的我们这里今天要做的是这个执行…

mysql_docker主从复制_实战_binlog混合模式_天座著

步骤1&#xff1a;拉取镜像 docker pull mariadb:latest 步骤2.1&#xff1a;创建两个文件夹用于放置挂载mysql的my.cnf /tianzuomysqlconf/master /tianzuomysqlconf/slave mkdir /tianzuomysqlconf cd /tianzuomysqlconf mkdir master mkdir slave 步骤2.2&#xff1a;创…

【简单认识zookeeper+kafka分布式消息队列集群的部署】

文章目录 一、zookeeper1、定义2、工作机制3、Zookeeper 特点4、Zookeeper 数据结构5、Zookeeper 应用场景6、Zookeeper 选举机制&#xff08;1&#xff09;第一次启动选举机制&#xff08;2&#xff09;非第一次启动选举机制 7、部署zookeeper群集 二、消息队列概述1、为什么需…

Hands on RL 之 Proximal Policy Optimization (PPO)

Hands on RL 之 Proximal Policy Optimization (PPO) 文章目录 Hands on RL 之 Proximal Policy Optimization (PPO)1. 回顾Policy Gradient和TRPO2. PPO (Clip)3. PPO(Penalty)4. PPO中Advantage Function的计算5.实现 PPO-ClipReference 1. 回顾Policy Gradient和TRPO ​ 首…

ubuntu python虚拟环境venv搭配systemd服务实战(禁用缓存下载--no-cache-dir)

文章目录 参考文章目录结构步骤安装venv查看python版本创建虚拟环境激活虚拟环境运行我们程序看缺少哪些依赖库&#xff0c;依次安装它们&#xff08;禁用缓存下载--no-cache-dir&#xff09;接下来我们配置python程序启动脚本&#xff0c;脚本中启动python程序前需先激活虚拟环…

【C++】开源:gflags命令行参数解析库配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍gflags命令行参数解析库配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&…

【数字图像处理】数字图像处理中的直方图相关操作

文章目录 前言一、直方图为什么可以进行图像处理&#xff1f;二、直方图处理怎么实现&#xff1f;直方图均衡化直方图匹配-规定化局部直方图处理直方图统计量增强图像 三、OpenCv提供的直方图基础操作直方图均衡化OpenCv中直方图的表示从数据创建直方图&#xff1a;cv::calcHis…

【云原生】Docker 详解(一):从虚拟机到容器

Docker 详解&#xff08;一&#xff09;&#xff1a;从虚拟机到容器 1.虚拟化 要解释清楚 Docker&#xff0c;首先要解释清楚 容器&#xff08;Container&#xff09;的概念。要解释容器的话&#xff0c;就需要从操作系统说起。操作系统太底层&#xff0c;细说的话一两本书都说…

Linux学习之awk函数

awk里边的函数分为内置函数和自定义函数。 内置函数有下边的几种&#xff1a; 算术函数&#xff08;arithmetic&#xff09; 字符串函数&#xff08;string&#xff09; 输入/输出函数和通用函数&#xff08;input/output, and general&#xff09; 自定义函数格式如下&#xf…

Oracle 使用 CONNECT_BY_ROOT 解锁层次结构洞察:在 SQL 中导航数据关系

CONNECT_BY_ROOT 是一个在 Oracle 数据库中使用的特殊函数&#xff0c;它通常用于在层次查询中获取根节点的值。在使用 CONNECT BY 子句进行层次查询时&#xff0c;通过 CONNECT_BY_ROOT 函数&#xff0c;你可以在每一行中获取根节点的值&#xff0c;而不仅仅是当前行的值。 假…

算法竞赛备赛之搜索与图论训练提升,暑期集训营培训

目录 1.DFS和BFS 1.1.DFS深度优先搜索 1.2.BFS广度优先搜索 2.树与图的遍历&#xff1a;拓扑排序 3.最短路 3.1.迪杰斯特拉算法 3.2.贝尔曼算法 3.3.SPFA算法 3.4.多源汇最短路Floy算法 4.最小生成树 4.1.普利姆算法 4.2.克鲁斯卡尔算法 5.二分图&#xff1a;染色法…