Skip to content

DTU(Modbus) 设备接入

本文演示如何通过 DTU 模块将 Modbus 设备接入平台。DTU(数据传输单元,即串口服务器)负责将 Modbus RTU 协议数据透传给平台,平台再按 Modbus 协议解析数据。

为什么需要 DTU

Modbus RTU 协议基于串口(RS485/RS232)通信,串口的传输距离有限。通过 DTU 模块可以将 RS485 协议扩展到网络上(TCP),实现远程设备的数据采集。DTU 在此场景中相当于一个"透明通道",将 Modbus 报文原封不动地转发给平台,因此物模型指令配置与普通 Modbus 驱动完全一致,区别在于网络组件的配置方式不同。

网络架构

DTU 协议驱动网络架构

平台支持三种 DTU Modbus 透传方式:

透传方式驱动名称通信方式适用场景
DTU + Modbus TCP 透传DTU_MODBUS_TCPTCPDTU 通过 TCP 连接平台
DTU + Modbus RTU 透传DTU_MODBUS_RTUTCPDTU 通过串口接 Modbus 设备,TCP 连平台
DTU + Modbus Over MQTT 透传DTU_MODBUS_OVER_MQTTMQTTDTU 通过 MQTT 连接平台

接入流程

配置网络组件(TCP/RTU) → 配置 DTU 设备 → 创建子产品 → 配置物模型 → 添加 DTU 网关设备 → 添加子设备 → 配置采集器 → 查看数据

前置条件: 平台已内置 DTU Modbus 驱动,对应的网关产品已自动创建。 MQTT 模式说明: 如果使用 DTU + Modbus Over MQTT 透传,无需配置网络组件(MQTT 连接配置在网关设备中完成),可直接跳到步骤 2。

步骤 1:配置网络组件(仅 TCP/RTU 透传)

与普通 Modbus 的关键区别: 普通 Modbus 的网络组件已预置可直接使用,但 DTU 透传场景下,DTU 需要主动连接平台,所以需要在平台开放端口给 DTU 连接,这个端口在网络组件菜单中配置。MQTT 透传无需此步骤。

进入 基础信息 → 网络组件,点击“新增”:

DTU 网络组件配置

配置项填写内容说明
名称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 为例:

有人 DTU 设备配置

  1. 服务器配置: 填写平台的 IP 地址和端口(与步骤 1 网络组件配置的端口一致)
  2. 注册包配置:
    • 发送方式选择“连接发送注册包”
    • 注册包内容填写自定义编号(如 DTU-001),此编号需要与步骤 5 中网关设备的设备编号一致
    • 注册包类型选择 ASCII 或 HEX(需要与网络组件的注册码类型一致)
  3. 心跳包配置:
    • 开启心跳包功能,平台通过心跳包判断 DTU 是否在线
    • 心跳包和注册包必须在内容和类型上保持一致

重要: DTU 的注册包编号就是平台用来区分不同 DTU 设备的标识,必须与平台中网关设备的设备编号完全一致,否则设备会一直处于离线状态。

MQTT 透传模式

MQTT 模式下,DTU 设备配置为连接 MQTT Broker(而非直接连接平台),并将 Modbus 报文通过 MQTT 发布给平台。DTU 需要配置:

  1. MQTT Broker 地址和端口: 与步骤 5 中网关设备配置的 Broker 地址一致
  2. 发布主题: 与网关设备的“上报主题”对应(如 demo/DTU-001/read
  3. 订阅主题: 与网关设备的“下发主题”对应(如 demo/DTU-001/write
  4. 设备标识: 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 新增属性

属性名称标识符数据类型单位读写类型
温度temperaturefloat只读
湿度humidityfloat%RH只读
开关switch_statusboolean可读可写

4.2 新增事件模型(采集数据)

事件模型的基本表单字段:

字段说明
事件名称自定义名称,如“温度采集”
协议指令从 Modbus 驱动提供的指令列表中选择(DTU 透传的指令集与普通 Modbus 完全相同)
接口代码自定义唯一标识,如 tempCollect
频率标签默认 / 低频 / 中频 / 高频,配合采集器的频率标签使用
事件说明可选,描述该事件模型的用途

选择协议指令后,会出现下行配置上行配置两个选项卡,配置项根据所选指令动态变化。

温度采集:

配置项填写内容
事件名称温度采集
协议指令Read03(读保持寄存器)
接口代码tempCollect
频率标签默认
事件说明采集温度数据
下行配置 - dataTypefloat
下行配置 - address0(寄存器地址,按设备手册填写)
下行配置 - num2(寄存器数量)
上行配置 - value@temperature

湿度采集:

配置项填写内容
事件名称湿度采集
协议指令Read03(读保持寄存器)
接口代码humCollect
频率标签默认
事件说明采集湿度数据
下行配置 - dataTypefloat
下行配置 - address2
下行配置 - num2
上行配置 - value@humidity

4.3 新增功能模型(控制设备)

功能模型的基本表单字段:

字段说明
功能名称自定义名称,如“开关控制”
协议指令从 Modbus 驱动提供的指令列表中选择(DTU 透传的指令集与普通 Modbus 完全相同)
接口代码自定义唯一标识,如 switchControl
序号用于标识接口的重要程度,值越低排序越靠前
功能说明可选,描述该功能模型的用途

选择协议指令后,会出现下行配置上行配置两个选项卡,配置项根据所选指令动态变化。

配置项填写内容
功能名称开关控制
协议指令Write05(写单个线圈)
接口代码switchControl
序号1
功能说明控制设备开关
下行配置 - address0(线圈地址,按设备手册填写)
下行配置 - value@switch_status

下行值说明: 下行值可以写死固定值(如 10),也可以用 @属性字段 动态绑定模型属性的值。对于有多个状态的控制场景(如开关),建议先添加一个布尔类型的模型属性,配置字典(如“开”=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
端口1883MQTT 默认端口
客户端 ID自定义平台作为 MQTT 客户端的唯一 ID
用户名(留空)如果 Broker 需要认证则填写
密码(留空)同上
保活时间3600心跳保活时间(秒)
消息等级0MQTT QoS 等级,可选值 0 / 1 / 2
订阅主题demo/{deviceSn}/readDTU 发布数据给平台的主题,必须包含 {deviceSn} 占位符,平台订阅时会自动将 {deviceSn} 替换为 + 通配符
产品编号步骤 3 创建的产品代码用于匹配子设备所属产品
下发主题demo/{deviceSn}/write平台发布指令给 DTU 的主题,{deviceSn} 会被替换为实际网关设备编号
上报主题demo/{deviceSn}/readDTU 发布数据给平台的主题,与订阅主题对应

重要:

  • 设备编号必须与 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 主动连接平台(服务端模式)。物模型指令配置完全相同。

下一步