[保姆级教程] RS485/Modbus 设备通过 DTU 透传接入 ThingsCloud
[保姆级教程] RS485/Modbus 设备通过 DTU 透传接入 ThingsCloud
很高兴您将 RS485/Modbus 设备接入 ThingsCloud,这个教程将介绍完整的接入步骤,无论您是否拥有 Modbus 协议有基础知识,都不重要,重要的是认真按以下步骤来操作。
学习该教程后,您将掌握 RS485温湿度传感器 和 RS485继电器 如何接入 ThingsCloud,并完成温湿度数据的采集,和通过云平台远程控制继电器开关。
设备接线参考图
在本示例中,DTU 的 RS485 总线上连接了两个 Modbus 设备:
- RS485 8进8出IO控制器(包括8个继电器输出,8个开关量输入),从机地址是 1,波特率 9600
- RS485 温湿度传感器,从机地址是 2,波特率 9600
在控制器的8个继电器输出端,分别连接了8个LED指示灯,用于测试继电器开关。有兴趣可以观看视频 娱乐时间!出圈的继电器定时闹钟,效果为片尾
如果您对硬件如何接线还是不太熟悉,建议观看 ThingsEdge DTU - 硬件连线指南 或者咨询您的设备厂商。
DTU 接入 ThingsCloud
由于 RS485 设备采用串口通信方式,所以不能直接和云平台通信,需要通过 DTU 来中转。
在这里,您可以将 DTU 看做是一个负责在 RS485 设备和 ThingsCloud 之间传递消息的管道。普通的 DTU 不对从它经过的 Modbus 消息报文做任何处理,所以也叫 Modbus 透传。
提示
很多品牌的 DTU 产品都支持 Modbus 透传功能,您可以用 DTU 来将成千上万种支持 Modbus 的设备接入 ThingsCloud,例如:温湿度传感器、光照传感器、压力传感器、CO2传感器、继电器、控制器、智能电表等。
所以,第一步就是先将 DTU 设备接入 ThingsCloud,在控制台看到 DTU 设备上线。
那么,我应该如何选择 DTU 呢?
在本教程开头的硬件连线图中,我们用作演示的 DTU 是 ThingsEdge DTU X1,您也可以用其它任意品牌的 DTU,ThingsCloud 使用开放的接入协议,不限定具体的设备品牌。
学习 DTU 如何连接 ThingsCloud,请跳转到 DTU 接入,您将学习如何在 ThingsCloud 控制台配置 MQTT 和 TCP 两种常用的 DTU 设备接入,并介绍几个常见品牌的 DTU 设备端的配置方法。
扩展知识
ThingsCloud 是开放的物联网平台,支持不同种类和品牌的设备统一接入,学习更多接入协议,请浏览 设备接入。
在 ThingsCloud 上配置 Modbus 设备
当 DTU 在 ThingsCloud 成功上线后,接下来要做的,就是在 ThingsCloud 控制台完成与 Modbus 设备通信的相关配置,在本教程中我们要实现:
- 从 RS485 温湿度传感器读取温度和湿度数据。
- 向 RS485 继电器下发控制指令,实现实时控制。
这些配置,和具体使用什么 DTU 产品,用的是 MQTT 还是 TCP,几乎没有直接关系。
以下就是具体的配置步骤。
配置 RS485 温湿度传感器
添加属性定义
首先,在 DTU 的设备类型中,找到 功能定义,添加温度和湿度两个属性,使用添加标准功能,如下图:
扩展知识
标准功能收录了一些常用的设备属性,如果没有您需要的,可以直接点击右侧的 添加属性。
属性添加成功后,如下图:
配置 Modbus 寄存器
接着,进入设备类型的 Modbus 配置,如下图:
提示
如果您的设备类型中不显示 Modbus 配置,请确认设备类型的 设备接入协议 是否设置为 Modbus RTU 透传。
在页面最底部的 数据寄存器 部分,点击 编辑寄存器,设置温度、湿度属性对应的 Modbus 寄存器,如下图:
需要注意的是:
- 本示例中温湿度传感器的 从机地址 是 2,您可根据实际情况填写,通常设备出厂时从机地址是 1。
- 关于寄存器的 读写类型,这里选择的是 只读,对应的是后边任务查询中的 04 功能码。如果您的设备使用 03 功能码,寄存器读写类型请改为 读写。
- 关于寄存器地址,如果您对自己的温湿度传感器不了解,可直接按上图填写,大概率是一样的。
提示
不同厂家的温湿度传感器,Modbus 寄存器地址可能略有不同,请您以厂家提供的产品手册为准。
接下来,记得开启 属性智能转换,并设置用于传输 Modbus 透传消息的自定义数据流。如下图:
通常来说,DTU 接入时已经在设备类型中定义了自定义数据流,这里会自动列出,直接选择即可,如下图:
对于 下发推送方式,和 DTU 接入时的方式保持一致。
创建 Modbus 查询任务
万事具备,只差最后一步。
在设备类型中,创建任务,如下图:
任务的基本信息如下图:
在设置任务的操作部分,参考下图:
选择 Modbus RTU 下发,打开配置对话框,这里主要是设置 Modbus 查询指令的各部分参数,如下图:
最后在任务定时设置中,选择关闭定时,保存任务。
单次测试读取数据
手动点击运行刚刚创建的任务,如下图:
可以看到温度和湿度数据已经成功读取。
如果没能成功读取,可以打开设备调试日志,如下图:
看看您的设备消息是否如上图所示。
开启定时任务
单次测试成功后,我们可以开启任务的定时功能。
进入任务详情页,在定时设置中,选 间隔时间重复,如下图:
保存任务后,任务自动定时运行。
配置 RS485 继电器
添加属性定义
类似温湿度传感器的属性定义,我们为控制器添加 8 个继电器输出的开关量属性,同时也添加 8 个开关量输入属性,如下图:
创建好的属性定义如下:
配置 Modbus 寄存器
然后在 DTU 的设备类型中,进入 Modbus 配置,将刚创建的属性加入 IO 寄存器。如下图:
然后配置正确的 从机地址 和 寄存器地址,如下图:
继电器输出的属性使用读写类型。
开关量输入属性使用只读类型。
下发控制继电器开关
现在,我们就可以回到设备概览中,直接拨动继电器属性开关,实现继电器开关的控制。
在设备的 调试日志 中,可以看到属性下发被自动转成了 Modbus 指令,随后云平台接收到设备的 Modbus 回复消息。如下图:
到目前为止,我们已经可以通过 ThingsCloud 控制台远程控制继电器开关。
通过 Modbus 任务查询继电器状态
您可能会想到一个问题,假如继电器状态断电重启后归位,如何让云平台知道继电器的最新状态呢?
这就需要云平台来主动定时查询继电器的最新状态,和查询温湿度是同样的原理。
需要创建一个继电器状态查询的 Modbus 任务,创建任务的基本步骤和上文的温湿度传感器部分完全相同,唯一不同的是 Modbus RTU 操作配置的部分。
这里用 01
功能码查询继电器状态,因为有 8 路继电器,所以 线圈个数 填写 8。如下图:
任务创建成功后,手动运行一次,在设备调试日志中,可以看到:
【进阶】多继电器下发控制
您可能要问了,如何同时控制多路继电器呢?
其实,当您完成前边的配置,这个特性已经默认支持。
在设备类型的 Modbus 配置 中,打开 属性转换选项,可以看到已开启多开关量下发转 Modbus,如下图:
来测试一下,在设备的调试页面,打开下发消息对话框,直接输入下发属性 JSON,如下图:
在设备调试日志中可以看到,多开关量属性下发会自动转为 Modbus 的 0F
写入多个线圈的指令,如下图:
提示
请特别注意!有些 Modbus 继电器的固件不支持 0F
指令,请在购买前和厂家确认。