跳至主要內容

[保姆级教程] RS485/Modbus 设备通过 DTU 透传接入 ThingsCloud

约 2399 字大约 8 分钟

[保姆级教程] RS485/Modbus 设备通过 DTU 透传接入 ThingsCloud

很高兴您将 RS485/Modbus 设备接入 ThingsCloud,这个教程将介绍完整的接入步骤,无论您是否拥有 Modbus 协议有基础知识,都不重要,重要的是认真按以下步骤来操作。

学习该教程后,您将掌握 RS485温湿度传感器RS485继电器 如何接入 ThingsCloud,并完成温湿度数据的采集,和通过云平台远程控制继电器开关。

硬件接线参考图

在本示例中,DTU 的 RS485 总线上连接了两个 Modbus 设备:

  • RS485 8进8出控制器(8个继电器输出,8个开关量输入),从机地址是 1,波特率 9600
  • RS485 温湿度传感器,从机地址是 2,波特率 9600

在控制器的8个继电器输出端,分别连接了8个LED指示灯,用于测试继电器开关。有兴趣可以观看视频 娱乐时间!出圈的继电器定时闹钟,效果为片尾open in new window

如果您对硬件如何接线还是不太熟悉,建议观看 ThingsEdge DTU - 硬件连线指南 或者咨询您的设备厂商。

DTU 接入 ThingsCloud

由于 RS485 设备采用串口通信方式,所以不能直接和云平台通信,需要通过 DTU 来中转。

你可以将 DTU 理解成一个负责传递消息的管道。普通的 DTU 不对从它经过的 Modbus 消息做任何处理,所以也叫 Modbus 透传

提示

很多品牌的 DTU 产品都支持 Modbus 透传功能,您可以用 DTU 来连接成百上千种支持 Modbus 的设备,例如:温湿度传感器、光照传感器、压力传感器、CO2传感器、继电器、控制器、智能电表等。

所以,第一步就是先将 DTU 设备接入 ThingsCloud,在控制台看到 DTU 设备上线

那么,我应该如何选择 DTU 呢?

在本教程开头的硬件连线图中,我们用作演示的 DTU 是 ThingsEdge DTU X1,您也可以用其它任意品牌的 DTU,ThingsCloud 使用开放的接入协议,不限定具体的设备品牌。

学习 DTU 如何连接 ThingsCloud,请跳转到 DTU 接入,您将学习如何在 ThingsCloud 控制台配置 MQTT 和 TCP 两种常用的 DTU 设备接入,并介绍几个常见品牌的 DTU 设备端的配置方法。

扩展知识

ThingsCloud 是开放的物联网平台,支持不同种类和品牌的设备统一接入,学习更多接入协议,请浏览 设备接入

配置 Modbus 设备

当 DTU 在 ThingsCloud 成功上线后,接下来要做的,就是在 ThingsCloud 控制台完成与 Modbus 设备通信的相关配置,在本教程中我们要实现:

  • 从温湿度传感器读取温度和湿度数据。
  • 向继电器下发控制指令,实现实时控制。

这些配置,和具体使用什么 DTU 产品,用的是 MQTT 还是 TCP,几乎没有直接关系。

温湿度传感器

添加属性定义

首先,在 DTU 的设备类型中,找到 功能定义,添加温度和湿度两个属性,使用添加标准功能,如下图:

扩展知识

标准功能收录了一些常用的设备属性,如果没有您需要的,可以直接点击右侧的 添加属性

属性添加成功后,如下图:

配置 Modbus 寄存器

接着,进入设备类型的 Modbus 配置,如下图:

提示

如果您的设备类型中不显示 Modbus 配置,请确认设备类型的 设备接入协议 是否设置为 Modbus RTU 透传

在页面最底部的 数据寄存器 部分,点击 编辑寄存器,设置温度、湿度属性对应的 Modbus 寄存器,如下图:

需要注意的是:

  • 本示例中温湿度传感器的 从机地址 是 2,您可根据实际情况填写,通常设备出厂时从机地址是 1。
  • 关于寄存器的 读写类型,这里选择的是 只读,对应的是后边任务查询中的 04 功能码。如果您的设备使用 03 功能码,寄存器读写类型请改为 读写
  • 关于寄存器地址,如果您对自己的温湿度传感器不了解,可直接按上图填写,大概率是一样的。

提示

不同厂家的温湿度传感器,Modbus 寄存器地址可能略有不同,请您以厂家提供的产品手册为准。

接下来,记得开启 属性智能转换,并设置用于传输 Modbus 透传消息的自定义数据流。如下图:

通常来说,DTU 接入时已经在设备类型中定义了自定义数据流,这里会自动列出,直接选择即可,如下图:

对于 下发推送方式,和 DTU 接入时的方式保持一致。

创建 Modbus 查询任务

万事具备,只差最后一步。

在设备类型中,创建任务,如下图:

任务的基本信息如下图:

在设置任务的操作部分,参考下图:

选择 Modbus RTU 下发,打开配置对话框,这里主要是设置 Modbus 查询指令的各部分参数,如下图:

最后在任务定时设置中,选择关闭定时,保存任务。

单次测试读取数据

手动点击运行刚刚创建的任务,如下图:

可以看到温度和湿度数据已经成功读取。

如果没能成功读取,可以打开设备调试日志,如下图:

看看您的设备消息是否如上图所示。

开启定时任务

单次测试成功后,我们可以开启任务的定时功能。

进入任务详情页,在定时设置中,选 间隔时间重复,如下图:

保存任务后,任务自动定时运行。

8进8出控制器

添加属性定义

类似温湿度传感器的属性定义,我们为控制器添加 8 个继电器输出的开关量属性,同时也添加 8 个开关量输入属性,如下图:

创建好的属性定义如下:

配置 Modbus 寄存器

然后在 DTU 的设备类型中,进入 Modbus 配置,将刚创建的属性加入 IO 寄存器。如下图:

然后配置正确的 从机地址寄存器地址,如下图:

继电器输出的属性使用读写类型。

开关量输入属性使用只读类型。

下发控制继电器开关

现在,我们就可以回到设备概览中,直接拨动继电器属性开关,实现继电器开关的控制。

在设备的 调试日志 中,可以看到属性下发被自动转成了 Modbus 指令,随后云平台接收到设备的 Modbus 回复消息。如下图:

到目前为止,我们已经可以通过 ThingsCloud 控制台远程控制继电器开关。

通过 Modbus 任务查询继电器状态

您可能会想到一个问题,假如继电器状态断电重启后归位,如何让云平台知道继电器的最新状态呢?

这就需要云平台来主动定时查询继电器的最新状态,和查询温湿度是同样的原理。

需要创建一个继电器状态查询的 Modbus 任务,创建任务的基本步骤和上文的温湿度传感器部分完全相同,唯一不同的是 Modbus RTU 操作配置的部分。

这里用 01 功能码查询继电器状态,因为有 8 路继电器,所以 线圈个数 填写 8。如下图:

任务创建成功后,手动运行一次,在设备调试日志中,可以看到:

【进阶】多继电器下发控制

您可能要问了,如何同时控制多路继电器呢?

其实,当您完成前边的配置,这个特性已经默认支持。

在设备类型的 Modbus 配置 中,打开 属性转换选项,可以看到已开启多开关量下发转 Modbus,如下图:

来测试一下,在设备的调试页面,打开下发消息对话框,直接输入下发属性 JSON,如下图:

在设备调试日志中可以看到,多开关量属性下发会自动转为 Modbus 的 0F 写入多个线圈的指令,如下图:

提示

请特别注意!有些 Modbus 继电器的固件不支持 0F 指令,请在购买前和厂家确认。

更多功能