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

简介: 通过将 Modbus RTU 或 TCP 转换为 MQTT 消息,可以轻松地将设备数据发送到云端,并在需要时进行远程控制和监控。

Modbus 介绍

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

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

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

存储区名称 数据类型 访问类型 PLC 地址 寄存器地址
线圈 读写 000001-065536 0-65535
离散输入 只读 100001-165536 0-65535
输入寄存器 只读 300001-365536 0-65535
保持寄存器 读写 400001-465536 0-65535

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

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

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

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

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

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

从机地址 功能码 起始地址高位 起始地址低位 寄存器数量高位 寄存器数量低位
01 03 00 6B 00 02

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

从机地址 功能码 字节数 006BH高字节 006BH低字节 006CH高字节 006CH低字节
01 03 04 00 00 00 00

为什么将 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

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
目录
相关文章
|
2月前
|
监控 供应链 安全
物联网卡在工业领域的应用
物联网卡在工业领域的应用极大地推动了行业的智能化、自动化和高效化进程。以下是物联网卡在工业领域中各操作类型中的具体应用作用:
|
3月前
|
物联网 数据管理 Apache
拥抱IoT浪潮,Apache IoTDB如何成为你的智能数据守护者?解锁物联网新纪元的数据管理秘籍!
【8月更文挑战第22天】随着物联网技术的发展,数据量激增对数据库提出新挑战。Apache IoTDB凭借其面向时间序列数据的设计,在IoT领域脱颖而出。相较于传统数据库,IoTDB采用树形数据模型高效管理实时数据,具备轻量级结构与高并发能力,并集成Hadoop/Spark支持复杂分析。在智能城市等场景下,IoTDB能处理如交通流量等数据,为决策提供支持。IoTDB还提供InfluxDB协议适配器简化迁移过程,并支持细致的权限管理确保数据安全。综上所述,IoTDB在IoT数据管理中展现出巨大潜力与竞争力。
106 1
|
6天前
|
传感器 安全 算法
物联网发布者在数据传输过程中如何防止数据被篡改
在物联网数据传输中,为防止数据被篡改,可采用加密技术、数字签名、数据完整性校验等方法,确保数据的完整性和安全性。
|
6天前
|
存储 安全 算法
物联网发布者在发送数据时如何保证数据的安全性和完整性
数据加密、密钥管理和数据完整性验证是物联网安全的重要组成部分。对称加密(如AES)和非对称加密(如RSA)分别适用于大量数据和高安全需求的场景。密钥需安全存储并定期更新。数据完整性通过MAC(如HMAC-SHA256)和数字签名(如RSA签名)验证。通信协议如MQTT over TLS/SSL和CoAP over DTLS增强传输安全,确保数据在传输过程中的机密性和完整性。
|
24天前
|
网络协议 物联网 网络性能优化
物联网协议比较 MQTT CoAP RESTful/HTTP XMPP
【10月更文挑战第18天】本文介绍了物联网领域中四种主要的通信协议:MQTT、CoAP、RESTful/HTTP和XMPP,分别从其特点、应用场景及优缺点进行了详细对比,并提供了简单的示例代码。适合开发者根据具体需求选择合适的协议。
49 5
|
1月前
|
传感器 监控 供应链
物联网怎么推动工业数字化转型?
物联网(Internet of Things,loT)是指通过信息传感设备,如射频识别(RFID)、红外感应器、全球定位系统、激光扫描器等装置,按约定的协议,将任何物品与互联网连接起来,进行信息交换和通信,以实现智能化识别、定位、跟踪、监控和管理的一种网络。
31 0
|
2月前
|
网络协议 物联网 网络性能优化
物联网江湖风云变幻!MQTT CoAP RESTful/HTTP XMPP四大门派谁主沉浮?
【9月更文挑战第3天】物联网(IoT)的兴起催生了多种通信协议,如MQTT、CoAP、RESTful/HTTP和XMPP,各自适用于不同场景。本文将对比这些协议的特点、优缺点,并提供示例代码。MQTT轻量级且支持QoS,适合大规模部署;CoAP基于UDP,适用于低功耗网络;RESTful/HTTP易于集成但不适合资源受限设备;XMPP支持双向通信,适合复杂交互应用。通过本文,开发者可更好地选择合适的物联网通信协议。
40 2
|
3月前
|
网络协议 物联网 网络性能优化
物联网江湖风云变幻!MQTT CoAP RESTful/HTTP XMPP四大门派谁主沉浮?
【8月更文挑战第14天】本文概览了MQTT、CoAP、RESTful/HTTP及XMPP四种物联网通信协议。MQTT采用发布/订阅模式,轻量高效;CoAP针对资源受限设备,基于UDP,低延迟;RESTful/HTTP易于集成现有Web基础设施;XMPP支持双向通信,扩展性强。每种协议均附有示例代码,助您根据不同场景和设备特性作出最佳选择。
39 5
|
3月前
|
物联网 C# 智能硬件
智能家居新篇章:WPF与物联网的智慧碰撞——通过MQTT协议连接与控制智能设备,打造现代科技生活的完美体验
【8月更文挑战第31天】物联网(IoT)技术的发展使智能家居设备成为现代家庭的一部分。通过物联网,家用电器和传感器可以互联互通,实现远程控制和状态监测等功能。本文将探讨如何在Windows Presentation Foundation(WPF)应用中集成物联网技术,通过具体示例代码展示其实现过程。文章首先介绍了MQTT协议及其在智能家居中的应用,并详细描述了使用Wi-Fi连接方式的原因。随后,通过安装Paho MQTT客户端库并创建MQTT客户端实例,演示了如何编写一个简单的WPF应用程序来控制智能灯泡。
116 0
|
3月前
|
物联网 网络性能优化 Python
"掌握MQTT协议,开启物联网通信新篇章——揭秘轻量级消息传输背后的力量!"
【8月更文挑战第21天】MQTT是一种轻量级的消息传输协议,以其低功耗、低带宽的特点在物联网和移动应用领域广泛应用。基于发布/订阅模型,MQTT支持三种服务质量级别,非常适合受限网络环境。本文详细阐述了MQTT的工作原理及特点,并提供了使用Python `paho-mqtt`库实现的发布与订阅示例代码,帮助读者快速掌握MQTT的应用技巧。
85 0

相关产品

  • 物联网平台