Appearance
DTU(Modbus) 设备接入
本文演示如何通过 DTU 模块将 Modbus 设备接入平台。DTU(数据传输单元,即串口服务器)负责将 Modbus RTU 协议数据透传给平台,平台再按 Modbus 协议解析数据。
为什么需要 DTU
Modbus RTU 协议基于串口(RS485/RS232)通信,串口的传输距离有限。通过 DTU 模块可以将 RS485 协议扩展到网络上(TCP),实现远程设备的数据采集。DTU 在此场景中相当于一个"透明通道",将 Modbus 报文原封不动地转发给平台,因此物模型指令配置与普通 Modbus 驱动完全一致,区别在于网络组件的配置方式不同。
网络架构

平台支持三种 DTU Modbus 透传方式:
| 透传方式 | 驱动名称 | 通信方式 | 适用场景 |
|---|---|---|---|
| DTU + Modbus TCP 透传 | DTU_MODBUS_TCP | TCP | DTU 通过 TCP 连接平台 |
| DTU + Modbus RTU 透传 | DTU_MODBUS_RTU | TCP | DTU 通过串口接 Modbus 设备,TCP 连平台 |
| DTU + Modbus Over MQTT 透传 | DTU_MODBUS_OVER_MQTT | MQTT | DTU 通过 MQTT 连接平台 |
接入流程
配置网络组件(TCP/RTU) → 配置 DTU 设备 → 创建子产品 → 配置物模型 → 添加 DTU 网关设备 → 添加子设备 → 配置采集器 → 查看数据前置条件: 平台已内置 DTU Modbus 驱动,对应的网关产品已自动创建。 MQTT 模式说明: 如果使用 DTU + Modbus Over MQTT 透传,无需配置网络组件(MQTT 连接配置在网关设备中完成),可直接跳到步骤 2。
步骤 1:配置网络组件(仅 TCP/RTU 透传)
与普通 Modbus 的关键区别: 普通 Modbus 的网络组件已预置可直接使用,但 DTU 透传场景下,DTU 需要主动连接平台,所以需要在平台开放端口给 DTU 连接,这个端口在网络组件菜单中配置。MQTT 透传无需此步骤。
进入 基础信息 → 网络组件,点击“新增”:

| 配置项 | 填写内容 | 说明 |
|---|---|---|
| 名称 | DTU Modbus 监听 | 自定义名称 |
| 类型 | 选择与驱动对应的网络组件类型 | — |
| 主机地址 | 0.0.0.0 | 绑定的网卡 IP,0.0.0.0 表示监听所有网卡 |
| 端口 | 5020 | 监听端口,DTU 主动连接此端口 |
| 读空闲(秒) | 0 | 如果平台在此时间段内没有收到 DTU 的心跳包则会主动断开连接,单位为秒。设置为 0 表示不启用心跳检测。如果配置大于 0,则需要同时配置 DTU 的心跳包时间,且此值必须大于 DTU 的心跳包发送间隔 |
| 注册码类型 | ASCII | 注册码类型一般为 ASCII 和 HEX,需要和 DTU 设备的配置一致 |
工作原理: 平台作为 TCP 服务端监听指定端口,DTU 模块作为客户端主动连接到平台。DTU 连接时发送注册码标识自身,平台根据注册码关联对应的网关设备。
MQTT 透传无需配置网络组件。 MQTT 模式下,平台作为 MQTT 客户端直接连接 Broker,MQTT 连接配置(Broker 地址、主题等)在步骤 5 添加网关设备时配置。
步骤 2:配置 DTU 设备
TCP/RTU 透传模式
DTU 设备需要配置为主动连接平台,并设置注册包和心跳包。以有人 DTU 为例:

- 服务器配置: 填写平台的 IP 地址和端口(与步骤 1 网络组件配置的端口一致)
- 注册包配置:
- 发送方式选择“连接发送注册包”
- 注册包内容填写自定义编号(如
DTU-001),此编号需要与步骤 5 中网关设备的设备编号一致 - 注册包类型选择 ASCII 或 HEX(需要与网络组件的注册码类型一致)
- 心跳包配置:
- 开启心跳包功能,平台通过心跳包判断 DTU 是否在线
- 心跳包和注册包必须在内容和类型上保持一致
重要: DTU 的注册包编号就是平台用来区分不同 DTU 设备的标识,必须与平台中网关设备的设备编号完全一致,否则设备会一直处于离线状态。
MQTT 透传模式
MQTT 模式下,DTU 设备配置为连接 MQTT Broker(而非直接连接平台),并将 Modbus 报文通过 MQTT 发布给平台。DTU 需要配置:
- MQTT Broker 地址和端口: 与步骤 5 中网关设备配置的 Broker 地址一致
- 发布主题: 与网关设备的“上报主题”对应(如
demo/DTU-001/read) - 订阅主题: 与网关设备的“下发主题”对应(如
demo/DTU-001/write) - 设备标识: DTU 的设备编号需要与步骤 5 中网关设备的设备编号一致
步骤 3:创建子产品
进入 基础信息 → 产品配置,点击"新增":
| 配置项 | 填写内容 | 说明 |
|---|---|---|
| 名称 | 温湿度传感器 | 自定义产品名称 |
| 产品类型 | 传感器 | 根据实际设备选择 |
| 产品代码 | temp_humidity_dtu | 自定义产品代码 |
| 设备类型 | 网关子设备 | 可选值:直连设备 / 网关设备 / 网关子设备 |
| 父产品 | 默认 Dtu + Modbus Tcp 产品 / 默认 Dtu + Modbus Rtu 产品 / 默认 Dtu + Modbus Over Mqtt 产品 | 仅设备类型选“网关子设备”时显示,系统已预置的网关产品 |
设备类型选择“网关子设备”后才会显示“父产品”字段,传感器通过 DTU 网关接入,所以需要选择父产品。
步骤 4:配置物模型
在产品列表点击"物模型",进入物模型编辑页。
与普通 Modbus 完全一致: DTU 透传的指令集(Read01~Read04、Write05~Write10)和上下行配置项与普通 Modbus 驱动完全相同。
4.1 新增属性
| 属性名称 | 标识符 | 数据类型 | 单位 | 读写类型 |
|---|---|---|---|---|
| 温度 | temperature | float | ℃ | 只读 |
| 湿度 | humidity | float | %RH | 只读 |
| 开关 | switch_status | boolean | — | 可读可写 |
4.2 新增事件模型(采集数据)
事件模型的基本表单字段:
| 字段 | 说明 |
|---|---|
| 事件名称 | 自定义名称,如“温度采集” |
| 协议指令 | 从 Modbus 驱动提供的指令列表中选择(DTU 透传的指令集与普通 Modbus 完全相同) |
| 接口代码 | 自定义唯一标识,如 tempCollect |
| 频率标签 | 默认 / 低频 / 中频 / 高频,配合采集器的频率标签使用 |
| 事件说明 | 可选,描述该事件模型的用途 |
选择协议指令后,会出现下行配置和上行配置两个选项卡,配置项根据所选指令动态变化。
温度采集:
| 配置项 | 填写内容 |
|---|---|
| 事件名称 | 温度采集 |
| 协议指令 | Read03(读保持寄存器) |
| 接口代码 | tempCollect |
| 频率标签 | 默认 |
| 事件说明 | 采集温度数据 |
| 下行配置 - dataType | float |
| 下行配置 - address | 0(寄存器地址,按设备手册填写) |
| 下行配置 - num | 2(寄存器数量) |
| 上行配置 - value | @temperature |
湿度采集:
| 配置项 | 填写内容 |
|---|---|
| 事件名称 | 湿度采集 |
| 协议指令 | Read03(读保持寄存器) |
| 接口代码 | humCollect |
| 频率标签 | 默认 |
| 事件说明 | 采集湿度数据 |
| 下行配置 - dataType | float |
| 下行配置 - address | 2 |
| 下行配置 - num | 2 |
| 上行配置 - value | @humidity |
4.3 新增功能模型(控制设备)
功能模型的基本表单字段:
| 字段 | 说明 |
|---|---|
| 功能名称 | 自定义名称,如“开关控制” |
| 协议指令 | 从 Modbus 驱动提供的指令列表中选择(DTU 透传的指令集与普通 Modbus 完全相同) |
| 接口代码 | 自定义唯一标识,如 switchControl |
| 序号 | 用于标识接口的重要程度,值越低排序越靠前 |
| 功能说明 | 可选,描述该功能模型的用途 |
选择协议指令后,会出现下行配置和上行配置两个选项卡,配置项根据所选指令动态变化。
| 配置项 | 填写内容 |
|---|---|
| 功能名称 | 开关控制 |
| 协议指令 | Write05(写单个线圈) |
| 接口代码 | switchControl |
| 序号 | 1 |
| 功能说明 | 控制设备开关 |
| 下行配置 - address | 0(线圈地址,按设备手册填写) |
| 下行配置 - value | @switch_status |
下行值说明: 下行值可以写死固定值(如
1、0),也可以用@属性字段动态绑定模型属性的值。对于有多个状态的控制场景(如开关),建议先添加一个布尔类型的模型属性,配置字典(如“开”=1、“关”=0),再用@属性字段绑定,在界面上通过下拉框选择来控制设备。
步骤 5:添加 DTU 网关设备
进入 设备管理 → 工业网关设备 → DTU 网关设备,点击“新增”:
基础配置(TCP/RTU 和 MQTT 共有):
| 配置项 | 填写内容 | 说明 |
|---|---|---|
| 所属产品 | 选择系统预置的 DTU Modbus 网关产品 | 决定后续是否显示 MQTT 配置项 |
| 设备编号 | DTU-001 | 必须与步骤 2 中 DTU 配置的注册包内容一致,DTU 上报的注册包即为网关设备的设备编号 |
| 设备名称 | 1号车间 DTU 网关 | 自定义名称 |
| 设备地址 | 1号车间配电柜(可选) | 设备安装位置,非必填 |
选择 DTU + Modbus Over MQTT 产品时,还会显示以下 MQTT 配置项:
| 配置项 | 填写内容 | 说明 |
|---|---|---|
| 主机 | MQTT Broker 地址 | 如 127.0.0.1 或外部 Broker IP |
| 端口 | 1883 | MQTT 默认端口 |
| 客户端 ID | 自定义 | 平台作为 MQTT 客户端的唯一 ID |
| 用户名 | (留空) | 如果 Broker 需要认证则填写 |
| 密码 | (留空) | 同上 |
| 保活时间 | 3600 | 心跳保活时间(秒) |
| 消息等级 | 0 | MQTT QoS 等级,可选值 0 / 1 / 2 |
| 订阅主题 | demo/{deviceSn}/read | DTU 发布数据给平台的主题,必须包含 {deviceSn} 占位符,平台订阅时会自动将 {deviceSn} 替换为 + 通配符 |
| 产品编号 | 步骤 3 创建的产品代码 | 用于匹配子设备所属产品 |
| 下发主题 | demo/{deviceSn}/write | 平台发布指令给 DTU 的主题,{deviceSn} 会被替换为实际网关设备编号 |
| 上报主题 | demo/{deviceSn}/read | DTU 发布数据给平台的主题,与订阅主题对应 |
重要:
- 设备编号必须与 DTU 设备配置的注册包内容完全一致,否则平台无法识别 DTU 的注册请求
- 订阅主题和上报主题必须包含
{deviceSn}占位符,用于区分不同 DTU 设备的数据- TCP/RTU 透传的网关设备没有额外的 MQTT 配置字段
步骤 6:添加子设备
在 设备管理 → 工业网关设备 → DTU 网关设备 列表中,找到步骤5创建的网关设备,点击右侧的 "子设备" 按钮,点击"新增":
| 配置项 | 填写内容 | 说明 |
|---|---|---|
| 所属产品 | 温湿度传感器(步骤3创建的子产品) | 自动继承物模型 |
| 设备编号 | 1 | 从机地址(1~247),按设备实际拨码填写 |
| 设备名称 | 车间温湿度传感器 | 自定义名称 |
| 设备地址 | 车间入口(可选) | 设备安装位置,非必填 |
| 字节序 | ABCD | 根据设备手册选择字节序格式 |
| 是否批量采集 | 是 | 启用后平台自动合并优化采集 |
设备编号说明: 子设备的设备编号就是 Modbus 从机地址,范围 1~247,需要与设备实际的拨码地址一致。同一网关下的子设备编号必须唯一。
步骤 7:配置采集器
进入 数据采集 → 采集器,点击"新增":
| 配置项 | 填写内容 |
|---|---|
| 事件类型 | 采集器 |
| 产品列表 | 温湿度传感器 |
| 频率标签 | 默认 |
产品列表只能选子产品或直连产品,不能选父产品(网关产品)。
配置完成后,平台开始按指定频率标签自动采集数据。
步骤 8:查看数据
- 进入 运行管控 → 运行展板,查看设备在线状态和实时采集值
- 进入 数据中心 → 模型数据,查看温度/湿度的历史数据曲线
常见问题
Q: DTU 连接不上平台? 检查网络组件的监听端口是否正确(默认 5020),确保 DTU 模块配置的服务器地址和端口与网络组件一致。如果使用 MQTT 透传,检查 Broker 地址和主题配置。
Q: 设备显示离线? DTU TCP/RTU 透传:检查 DTU 是否成功注册到平台(注册码是否匹配)。MQTT 透传:检查 DTU 是否正确发布消息到订阅主题。
Q: 采集数据异常? 检查子设备的从机地址(设备编号)是否与设备实际拨码一致,检查字节序格式是否与设备手册匹配。DTU 透传的物模型指令配置与普通 Modbus 完全一致,可参考 Modbus 设备接入 排查。
Q: DTU 透传与普通 Modbus 有什么区别? 主要区别在网络层:普通 Modbus 由平台主动连接设备(客户端模式),DTU 透传由 DTU 主动连接平台(服务端模式)。物模型指令配置完全相同。
