Modbus 介绍Modbus 是一种串行通信协议,用于连接工业自动化设备,最初由 Modicon 公司开发,诞生于 1979 年,现在已成为通用的通讯标准之一,广泛用于工业自动化场景。 Modbus 采用主从模式,支持多种传输方式,包括串行(RS-232/485)和以太网版本(TCP/IP)。其主要用于监视和控制自动化设备,例如传感器、电机和 PLC 等。它可以实现设备间的数据交换和控制命令发送,使得各个设备之间能够互相协调工作。 Modbus 协议中定义了四种类型的存储区,分别为线圈(Coils)、离散输入(Discrete Inputs)、输入寄存器(Input Registers)和保持寄存器(Holding Registers)。不同类型的存储区对应着不同的读写操作。
四种存储区都有各自的地址范围和读写操作码,根据应用场景选择合适的存储区进行读写操作。 以 Modbus TCP 为例,其报文结构为MBAP(报文头)+PDU(帧结构)。
Modbus 协议定义多种功能码实现对存储区的读写,下面列举常见功能码。
假设从机地址为 01H,读取的保持寄存器起始地址为 006BH,读取 2 个寄存器,指令如下:
每个保持寄存器的长度为 2 个字节。低地址寄存器先传输,高地址寄存器后传输。每个寄存器数据高字节数据先传输,低字节数据后传输。响应如下:
为什么将 Modbus 桥接到 MQTT随着工业 4.0 的到来,制造业中的智能化、自动化和数据化需求越来越高。在这种背景下,Modbus 协议也面临了一些挑战。 首先,Modbus 协议在安全性方面存在较大问题。由于其通信方式较为简单,容易受到黑客攻击和数据篡改等安全问题。 其次,在实时性和带宽利用率方面,Modbus 协议与现代工业通信标准相比显得不够优秀。特别是在大规模设备联网的情况下,传统的串行通信方式已经不能满足要求。 此外,在多层次架构和云平台应用方面,Modbus 协议还存在一定的局限性。它只能进行点对点通信,并没有很好地支持分布式系统和云计算平台。 MQTT 相比于 Modbus 优势明显。MQTT 协议是一种基于发布/订阅模式的轻量级消息传输协议,其构建于 TCP/IP 协议上,由 IBM 在 1999 年发布。2014 年 10 月 29 日,MQTT 成为 OASIS 正式批准的通讯标准。目前已经广泛应用于物联网、移动互联网、智能硬件、车联网、智慧城市、远程医疗、电力、石油与能源等领域。 MQTT 主要有以下优势:
因此,在物联网领域,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 的架构。 通过 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。 选择 Holding Registers。至此,成功启动模拟器,保持模拟器打开,接下来操作 Neuron。 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)。 第二步,添加南向设备在 配置 菜单中选择 南向设备,进入到南向设备界面,点击 添加设备 新增设备。
第三步,设置南向设备参数添加南向设备后自动进入设备配置界面,填写参数并提交。
第四步,在设备卡片中创建组点击设备节点卡片任意空白处,进入组列表管理界面,点击 创建 ,弹出 创建组 的对话框。填写参数并提交:
第五步,在组中添加数据点位点击组卡片任意空白处,进入点位列表管理界面,点击 创建 ,进入添加点位页面。 填写点位参数并提交:
第六步,数据监控中查看采集数据选择监控→数据监控,进入数据监控界面,查看已创建点位读取到的数值,如下图所示。
数据监控以组为单位显示数值:
第七步,为应用程序添加北向插件模块创建北向应用, Neuron 与北向应用建立连接并将采集到的设备数据上传到 MQTT Broker(EMQX)。 在配置菜单中选择北向应用,点击 添加应用 ,如下图所示。 添加一个 MQTT 云连接模块:
第八步,设置北向应用参数添加北向应用后自动进入应用配置界面,填写参数并提交。 设置 MQTT 连接:
第九步,订阅南向点位组点击刚创建的 MQTT 应用节点卡片任意空白处,进入订阅组界面,点击 添加订阅 。 订阅南向设备的数据组:
第十步,在 MQTT 客户端查看数据订阅完成后,除了 neuron 自己的数据监控界面,用户可以使用 MQTT 客户端 - MQTTX 连接到 EMQX 来查看上报的数据。 启动 MQTTX 后在主页面点击 + New Connection,填写配置参数后,点击右上角连接。
订阅成功后可以看到 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 消息,可以轻松地将设备数据发送到云端,并在需要时进行远程控制和监控。这种方式可以帮助工业企业更好地管理其设备和生产过程,并提高生产效率和质量。 |
|