一、前言

在工业物联网场景中,Modbus RTU 凭借布线简单、抗干扰能力强等优势,广泛用于现场设备数据采集;而 MQTT 作为轻量级发布/订阅协议,传输效率高、适配云平台架构,已成为工业数据上云的主流选择。

映翰通 IG502 工业网关作为轻量级边缘计算设备,可实现 Modbus RTU 与 MQTT 的完美桥接:南向采集现场 Modbus RTU 设备数据,北向通过 MQTT 发布至云平台,实现「现场采集、云端汇聚」。

本文将通过本地模拟环境,完整演示以下全流程:

  1. Modbus Slave 模拟 RTU 从站设备,生成测试数据
  2. IG502 采集 Modbus RTU 数据(配置控制器与测点)
  3. IG502 配置 MQTT 云服务并发布数据
  4. 云端或 MQTT 客户端接收并验证数据

步骤细化到接线、配置、验证,并附完整 Python 代码,确保新手也能快速复现。

二、测试环境准备

2.1 硬件清单

序号 设备/物料 说明
1 映翰通 IG502 工业网关 已通电并接入本地局域网
2 USB 转 RS485 转换器 用于电脑与网关的 485 通信
3 485 通信线 A、B 两根信号线
4 电脑 1 台 安装调试软件,与网关同网段

2.2 软件清单

序号 软件 用途
1 Modbus Slave 模拟 Modbus RTU 从站设备,生成测试数据
2 MQTT 客户端(如 MQTTX) 订阅云端 Topic,接收 IG502 转发的数据
3 浏览器 登录 IG502 网关 Web 管理界面

三、Step1:Modbus Slave 模拟 RTU 从站数据

  1. 打开 Modbus Slave,新建一个 Modbus RTU 从站连接
  2. 配置串口参数:波特率 9600无校验8 数据位1 停止位(与 IG502 控制器配置一致)
  3. 设置从站地址为 1
  4. 在保持寄存器(如 40001~40009)中填入测试数据,供 IG502 采集
  5. 将电脑的 USB 转 485 与 IG502 的 RS485 口(A、B)正确连接,确保 Modbus Slave 能正常响应主站请求

四、Step2:登录 IG502 边缘计算网关

  1. 在浏览器中输入 IG502 的 LAN 地址(如 http://192.168.2.1
  2. 进入 边缘计算网关 登录页面,输入用户名和密码(默认一般为 adm
  3. 登录后进入 InGateway 管理界面,顶部导航栏包含「概览」「网络」「边缘计算」「系统管理」「高级功能」
  4. 在 概览 页面可查看设备型号(如 IG502L)、网络连接状态、Python 边缘计算引擎是否启用等,确保设备运行正常

五、Step3:配置 Modbus RTU 控制器

进入 边缘计算 → 设备监控 → 测点监控,在「控制器列表」中新建 Modbus RTU 控制器。

5.1 操作步骤

步骤 1:点击新建控制器
在控制器列表右侧,点击 「+」 图标,新建控制器。

步骤 2:填写控制器参数
在弹出的「编辑控制器」窗口中,填写以下必填项:

参数 说明 示例值
名称 控制器标识 测试PLC1
控制器协议 选择 Modbus RTU Modbus RTU
从站地址 与 Modbus Slave 一致 1
通讯方式 串口类型 RS485
轮询周期 采集间隔(秒) 10

步骤 3:确认
点击「确认」保存配置,控制器列表中会出现「测试PLC1 (Modbus RTU)」。

六、Step4:添加测点

在控制器「测试PLC1」下,点击 添加测点,配置需要采集的数据点。

6.1 添加测点配置项

在「添加测点」弹窗中,填写以下关键字段:

字段 说明 示例
测点名称 数据点标识 point1、point2...
地址类型 Modbus寄存器类型 保持寄存器
地址 寄存器地址 40002~40009(对应 Modbus Slave 的保持寄存器)
数据类型 数据格式 WORD、FLOAT 等
读写权限 一般选只读 Read
所属分组 用于MQTT发布时筛选 qunlixi
存储历史数据 按照需要开启 可选

七、Step5:配置 MQTT 云服务

进入 边缘计算 → 设备监控 → 云服务,配置 MQTT 连接与发布。

7.1 操作步骤

步骤 1:点击云服务
在左侧菜单「设备监控」下,点击 「云服务」

步骤 2:启用云服务
将「启用云服务」开关拨至 开启,云平台类型选择 「标准 MQTT」

步骤 3:输入云服务器地址
在「基本设置」中填写:

参数 说明 示例值
服务器地址 MQTT Broker 地址 broker.emqx.io
MQTT 客户端 ID 设备唯一标识,可用 ${SN} 自动填充 ${SN}
启用用户验证 若 Broker 需认证则开启 按需

点击 「提交」,确认状态栏显示「连接成功」。

步骤 4:新建发布消息
在「消息管理(标准 MQTT) → 发布」中,点击 「添加」,新建一条发布配置。

八、Step6:配置 MQTT 发布消息(附代码)

在「添加发布」弹窗中,配置以下参数:

参数 说明 示例值
名称 发布任务标识 test
启用 开关 开启
数据源类型 选择测点数据 测点数据
分组/标签 选择要上云的测点分组 qunlixi
Topic MQTT 发布主题 inhand_sub
Qos(MQTT) 消息质量等级 1
入口函数 脚本入口 main

8.1 函数代码(核心)

在「函数代码」编辑器中,粘贴以下 Python 代码。该脚本将测点数据以 JSON 格式发布到 MQTT:

# Enter your python code.
import json
from common.Logger import logger
from quickfaas.remotebus import publish


def main(message, wizard_api, cloudName):
    logger.debug("publish topic:%s, payload: %s, cloudName: %s" % (__topic__, message, cloudName))
    publish(__topic__, json.dumps(message), __qos__, cloud_name=cloudName)

说明__topic____qos__ 为系统在运行发布脚本时自动注入的变量,对应当前发布消息的 Topic 和 Qos,无需手动定义。

8.2 高级用法:自定义 Topic 与数据格式

若需对数据进行过滤、转换或自定义 Topic,可参考以下扩展代码:

# Enter your python code.
import json
from common.logger import logger
from quickfaas.remotebus import publish


def main(message, wizard_api, cloudName):
    """自定义发布:筛选字段、添加时间戳"""
    try:
        # 可选:只上传部分字段
        filtered = {
            "timestamp": message.get("timestamp", ""),
            "points": message.get("points", {}),
            "device_sn": message.get("device_sn", "")
        }
        payload = json.dumps(filtered, ensure_ascii=False)
        publish(__topic__, payload, __qos__, wizard_data=None, cloud_name=cloudName)
        logger.info("已发布自定义格式消息到 Topic: %s" % __topic__)
    except Exception as e:
        logger.error("发布消息失败: %s" % str(e))

配置完成后点击「确认」保存,发布列表中会出现「test」任务,状态为「启用」。

九、Step7:MQTT 验证数据上云

使用 MQTTX 客户端连接 MQTT Broker 并订阅 Topic,验证 IG502 发布的数据是否正确上云。

9.1 新建连接并填写参数

1.打开 MQTTX,点击左侧 「+」 新建连接

2.在「编辑」页面的 General(通用) 部分填写:

参数 说明 示例值
Name 连接名称 test
Host MQTT Broker 地址 broker.emqx.io
Port 端口(非 TLS 一般为 1883) 1883
Client ID 客户端唯一标识,可自动生成 mqttx_xxxx
Username / Password 若 Broker 需认证则填写,EMQX 公测服务器可留空 留空

3.在 Advanced(高级) 中可保持默认:MQTT 版本 5.0、连接超时 10s、Keep Alive 60s、自动重连开启

4.点击右上角 「Connect」 连接,连接成功后左侧会显示 test@broker.emqx.io:1883 并带绿色对勾

9.2 新建订阅

  1. 连接成功后,点击 「+ New Subscription」 新建订阅
  2. 在弹窗中填写:
参数 说明 示例值
Topic 订阅主题,需与 IG502 发布配置一致 inhand_sub
QoS 消息质量等级,建议与发布端一致 1(At least once)

  1. 点击 「Confirm」 确认,订阅列表中会出现 inhand_sub

9.3 验证接收数据

  1. 等待 IG502 按轮询周期(如 10 秒)采集 Modbus Slave 数据并发布
  2. MQTTX 消息面板中应持续收到 JSON 格式消息,Topic 为 inhand_subQoS 为 1
  3. 典型消息结构如下(以测点分组 qunlixi、控制器 测试PLC1 为例):

{
  "timestamp": 1772164800,
  "timestampMsec": 1772164800193,
  "group_name": "qunlixi",
  "values": {
    "测试PLC1": {
      "point1": {
        "raw_data": 1,
        "timestamp": 1772164800,
        "status": 1,
        "timestampMsec": 1772164800193
      },
      "point2": {
        "raw_data": 2,
        "timestamp": 1772164800,
        "status": 1,
        "timestampMsec": 1772164800193
      },
      "point3": { "raw_data": 3, "timestamp": 1772164800, "status": 1, "timestampMsec": 1772164800193 },
      "point4": { "raw_data": 4, "timestamp": 1772164800, "status": 1, "timestampMsec": 1772164800193 },
      "point5": { "raw_data": 5, "timestamp": 1772164800, "status": 1, "timestampMsec": 1772164800193 },
      "point6": { "raw_data": 6, "timestamp": 1772164800, "status": 1, "timestampMsec": 1772164800193 },
      "point7": { "raw_data": 7, "timestamp": 1772164800, "status": 1, "timestampMsec": 1772164800193 },
      "point8": { "raw_data": 8, "timestamp": 1772164800, "status": 1, "timestampMsec": 1772164800193 },
      "point9": { "raw_data": 9, "timestamp": 1772164800, "status": 1, "timestampMsec": 1772164800193 },
      "point10": { "raw_data": 0, "timestamp": 1772164800, "status": 1, "timestampMsec": 1772164800193 }
    }
  }
}

9.4 验证要点

验证项 说明
连接状态 左侧连接显示绿色对勾,表示已成功连接 Broker
订阅生效 订阅列表中有 inhand_sub,且能持续收到新消息
数据格式 消息为 JSON,包含 timestampgroup_namevalues 等字段
数据内容 values.测试PLC1 下各 point 的 raw_data 与 Modbus Slave 中配置的寄存器值一致
时间戳 timestamptimestampMsec 随轮询周期更新,可验证数据实时性
QoS 消息显示 QoS 1,表示至少送达一次,发送端会收到确认

若以上均符合预期,说明 Modbus RTU 采集 → IG502 处理 → MQTT 上云 全链路已打通,验证通过。

十、小结

步骤 内容
Step1 Modbus Slave 模拟 RTU 从站,生成测试数据
Step2 登录 IG502 边缘计算网关 Web 管理界面
Step3 配置 Modbus RTU 控制器(名称、从站地址、串口参数)
Step4 添加测点(地址、数据类型、分组)
Step5 启用 MQTT 云服务,配置 Broker 地址
Step6 新建发布消息,填写 Topic、分组,粘贴 Python 发布脚本
Step7 使用 MQTTX 连接 Broker、订阅 Topic、验证接收的 JSON 数据

核心要点

  • Modbus RTU 用于现场采集,MQTT 用于云端汇聚,IG502 作为桥接设备实现协议转换
  • 控制器串口参数(波特率、校验位等)必须与 Modbus Slave 一致
  • 发布脚本中 main(message, wizard_api, cloudName) 的 message 为测点数据字典,可直接 json.dumps 后通过 publish() 发送
  • __topic____qos__ 为系统注入变量,无需在脚本中定义

按上述流程操作,即可在映翰通 IG502 上完成 Modbus RTU + MQTT 工业数据采集与上云实战。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐