Modbus POE ETH Relay MQTT

硬件连接

  • 将Modbus POE ETH Relay通过网线连接到局域网,通过电源端口供电或者通过POE供电。


注意:上图是使用PoE网口供电。如果是使用的普通网线,须外接电源适配器供电,可外接7~36V范围的电源供电。

软件准备

开始通信

  • 注册账号进入阿里云物联网平台,开通公共实例。


  • 点击设备管理->产品->创建产品,输入产品名称,示例名称为waveshare,所属品类选择自定义品类。其他默认即可。


  • 创建完成后点击下面的查看产品详情进入产品页面,选择Topic类列表进去话题页面添加自定义话题。


  • 选择Topic类列表->自定义Topic->定义Topic类,创建一个send发布话题发送数据。


  • 再一个receive订阅话题接收数据。


  • 选择设备管理->设备->添加设备。添加一个设备名为Relay的设备,即继电器模块。


  • 由于方便测试再添加一个设备名为mqttx的设备,阿里云网页上只能发送文本数据不能发送二进制数据,故使用mqttx软件方便调试。


  • 添加完成可以在设备中查看到mqttx和relay两个设备,点查看进入Relay页面。


  • 选择设备信息->MQTT连接参数 查看,可以看到MQTT连接参数。


  • 打开Vircom->设备管理->鼠标左键双击对应的设备->固件与配置->MQTT配置,进入配置页面


  • 根据Relay设备MQTT连接信息配置连接参数。配置完成后选择保存MQTT设置,再点击下载。



    • 注意:可以通过ping mqttHostUrl获得阿里云IP地址。


    • 设置目标IP和目标端口,点击修改设置保存。注意:本地端口如果为0则需要修改一个非零端口,否则不能连接。


    • 连接成功后可以看到Relay设备从未激活转为在线状态。


    • 下载MQTTX软件并安装,安装成功后新建连接。


    • 根据mqttx设备MQTT连接参数新建连接。


    • 连接成功后添加订阅。


    • 输入发送话题,选择hex发送和hex显示,发送数据。


    • 选择监控运维->日志服务->云端运行日志可以查到云端接收到的信息,选择hex显示。


    • 至此,Relay设备和mqttx设备均已连接云平台,但是还不可以通过mqttx软件控制继电器,最后还需要添加消息转发。
    • 选择消息转发->云产品流转->数据源->创建数据源,数据源名称为mqttx-send.


    • 转到编辑页面,添加Topic,选择自定义,waveshare产品,mqttx设备,user/send话题。


    • 选择消息转发->云产品流转->数据源->创建数据源再添加一个数据源,数据源名称为relay-send.


    • 转到编辑页面,添加Topic,选择自定义,waveshare产品,relay设备,user/send话题。


    • 选择消息转发->云产品流转->数据目的->创建数据目的,数据目的名称为mqttx-receive.


    • 选择消息转发->云产品流转->数据源->创建数据源再添加一个数据目的,数据目的名称为relay-receive.


    • 选择消息转发->云产品流转->解析器->创建解析器,解析器名称为mqttx-to-relay.


    • 打开mqttx-to-relay编辑页面->数据源->关联数据源,数据源选择mqttx-send


    • 数据目的->关联数数据目的->数据目的选择relay-receive


    • 解析器脚本,添加如下代码并发布,其中1005为relay-receive数据目的ID,/ipl390TLRtl/Relay/user/receive为继电器接收话题,需要更加实际情况修改。
    //通过payload函数,获取设备上报的消息内容,将payload数据转换成二进制变量进行透传
    var data = payload("binary");
    //转发数据到继电器
    writeIotTopic(1005, "/ipl390TLRtl/Relay/user/receive", data);
    


    • 选择消息转发->云产品流转->解析器->创建解析器再创建一个解析器,解析器名称为relay-to-mqttx.


    • 打开mqttx-to-relay编辑页面->数据源->关联数据源,数据源选择relay-send


    • 数据目的->关联数数据目的->数据目的选择mqttx-receive


    • 解析器脚本,添加如下代码并发布,其中1004为mqttx-receive数据目的ID,/ipl390TLRtl/mqttx/user/receive为mqttx接收话题,需要更加实际情况修改。
    //通过payload函数,获取设备上报的消息内容,将payload数据转换成二进制变量进行透传
    var data = payload("binary");
    //转发数据到继电器
    writeIotTopic(1004, "/ipl390TLRtl/mqttx/user/receive", data);
    


    • 最后选择启动解析器实现数据转发。消息转发已配置完成并启用


    • 此时通过mqttx即可以发送指令控制继电器了。按照下图发送继电器全部翻转指令。正常情况下继电器将会全部翻转,并且返回指令数据。


    • 至此操作完全。可以尝试发送更多modbus指令测试。其中数据流为如下所示。
    • mqttx发送指令->阿里云接收数据并转发给relay->relay接收到数据执行动作并返回数据给阿里云->阿里云接收数据并转发给mqttx->mqttx接收到返回数据。