新闻中心

PRESS CENTER 纵横智控
你的位置: 首页 新闻 产品资讯
纵横智控

边缘网关通过MQTT协议连接阿里云物联网平台

2024-05-08 15:43:20 阅读: 发布人:纵横智控

随着物联网技术的飞速发展,越来越多的设备连接到网络,产生了海量的数据。在这种情况下,传统的云计算中心模式已经无法满足实时性、安全性等方面的需求。于是,边缘计算应运而生,而边缘网关作为边缘计算的核心设备,正成为物联网时代的关键枢纽。本文主要介绍边缘计算网关EG8200采集Modbus RTU数据,通过MQTT协议连接阿里云物联网平台的过程,希望对读者有所帮助。

    

下文默认已经采集到Modbus RTU数据。

需求分析

网关配置:

第一步:采集Modbus RTU数据

第二步:安装第三方阿里云节点

第三步:MQTT上报

第四步:下行写Modbus RTU

平台配置:

第一步:添加产品

第二步:添加设备

第三步:添加物模型

第四步:数据展示

第五步:下发写数据演示

需求实现

网关配置

第一步:采集多个PLC的数据

此处为采集Modbus RTU数据,不在过多赘述,可参考其他案例。

第二步:安装第三方阿里云节点

节点名称node-red-contrib-alibabacloud

点击安装后等待安装成功(注意:网关需要成功连网络才能安装节点)

边缘计算网关/物联网平台/网关模块/纵横智控

安装成功后节点库会出现刚才安装的节点:

边缘计算网关/物联网平台/网关模块/纵横智控

第三步:MQTT上报

使用属性上报节点,参考平台配置第三步的内容填写MQTT链接信息:

设备名称:阿里云三要素之一 deviceName

设备实例所在区域:cn-shanghai

productKey:阿里云三要素之一 productKey

deviceSecret:阿里云三要素之一 deviceSecret

边缘计算网关/物联网平台/网关模块/纵横智控


第四步:下行写Modbus RTU

使用属性设置节点接收下行指令,使用函数节点将阿里云物联网平台下行的Json格式转换为Modbus格式,queue节点限制数据的发送频率(200ms一次,防止发送过快导致粘包),Modbus写节点用于向从机写入数据,演示请参考平台配置第六步:


边缘计算网关/物联网平台/网关模块/纵横智控

平台配置

第一步:添加产品

进入阿里云物联网平台:

设备管理->产品->创建产品

产品名称:自定义

所属类型:标准品类(根据自己实际使用类型来选择)

节点类型:直连设备

联网方式:蜂窝

数据格式:Alink JSON

其他默认:

边缘计算网关/物联网平台/网关模块/纵横智控


第二步:添加设备

设备管理->设备->添加设备:

产品:现在第一步创建的产品

DeviceName:自定义填入(这里使用网关SN)

备注名称:自定义

边缘计算网关/物联网平台/网关模块/纵横智控


第三步:激活设备

设备管理->设备->查看:

边缘计算网关/物联网平台/网关模块/纵横智控


将三要素填入阿里云属性上报节点,详见网关配置第三步:


边缘计算网关/物联网平台/网关模块/纵横智控


此时可以看到设备已经在线:

边缘计算网关/物联网平台/网关模块/纵横智控


第四步:添加物模型

设备管理->产品->产看->功能定义

前往编辑草稿->添加自定义功能

功能名称:自定义

标识符:数据上报的Key名相同

类型:根据自己的类型选择


边缘计算网关/物联网平台/网关模块/纵横智控


添加完成后点击发布:


边缘计算网关/物联网平台/网关模块/纵横智控


第五步:数据展示

设备管理->设备->查看->物模型数据:

网关触发数据发送,可以看到阿里云物联网平台物模型数据更新:


边缘计算网关/物联网平台/网关模块/纵横智控


第六步:下发写数据

向两个开关发送闭合指令,两个发送频率分别为50和60。从设备端可以看见节点返回了true即表示写入成功,同时阿里云物联网平台监控界面数据也同步发生变化:


边缘计算网关/物联网平台/网关模块/纵横智控

总结

本文介绍了一个相对复杂的流程,旨在表述网关所具备的能力,因此并未对程序的安全性、稳定性、灵活性等方面做优化。通过理解本流程,相信你已经对网关的可视化编程有了一定的熟悉。接下来,深入学习每个节点的功能用法吧,掌握它们将会为你制作更复杂的流程提供更多的选择和可能!

源码

网关的流程支持以Json格式导入导出,方便与其他人分享做好的流程。本章节的流程Json文件如下,复制后在菜单栏右上角选择导入粘贴即可,导出同理


[{"id":"d968892da4e40a46","type":"inject","z":"7b370dcd7ad073da","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"5","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":520,"y":780,"wires":[["9b935c0dd6a63827","3bc2eb81af744a6d"]]},{"id":"9b935c0dd6a63827","type":"modbusRead","z":"7b370dcd7ad073da","name":"读线圈","uid":"1","dataType":"1","modbus":"f4b98c3be57ddcad","columns":[{"Key":"MotorControl1","Address":"0","Type":"23","Tdata":""},{"Key":"MotorControl2","Address":"1","Type":"23","Tdata":""}],"x":670,"y":780,"wires":[["de1ce0dfa2e082f8"]]},{"id":"30fa1cad395c11c4","type":"modbusRead","z":"7b370dcd7ad073da","name":"读频率","uid":"1","dataType":"3","modbus":"f4b98c3be57ddcad","columns":[{"Key":"Requency1","Address":"0","Type":"1","Tdata":""},{"Key":"Requency2","Address":"1","Type":"1","Tdata":""}],"x":670,"y":860,"wires":[["de1ce0dfa2e082f8"]]},{"id":"de1ce0dfa2e082f8","type":"join","z":"7b370dcd7ad073da","name":"","mode":"custom","build":"merged","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"0.5","count":"","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":870,"y":820,"wires":[["95bd16daa8a2c276","2b0581f8ebdf6d1f"]]},{"id":"3bc2eb81af744a6d","type":"delay","z":"7b370dcd7ad073da","name":"","pauseType":"delay","timeout":"200","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":530,"y":860,"wires":[["30fa1cad395c11c4"]]},{"id":"95bd16daa8a2c276","type":"debug","z":"7b370dcd7ad073da","name":"调试 1","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1030,"y":820,"wires":[]},{"id":"9f85b7f4156038ba","type":"function","z":"7b370dcd7ad073da","name":"函数计算 1","func":"var sendObj = {\n    uid: 1, //从机地址\n    fc: 5,//功能码写多个线圈\n    address: 0,//寄存器地址\n    value:null \n}\n\nvar obj = msg.payload\nvar keyArray = Object.keys(obj.params)\n\nkeyArray.forEach((item)=>{\n    if (item == \"MotorControl1\"){\n        sendObj.address = 0\n        sendObj.fc = 5\n        sendObj.value = obj.params.MotorControl1\n        node.send({ payload: sendObj})\n    } else if (item == \"MotorControl2\"){\n        sendObj.address = 1\n        sendObj.fc = 5\n        sendObj.value = obj.params.MotorControl2\n        node.send({ payload: sendObj })\n    } else if (item == \"Requency1\"){\n        sendObj.address = 0\n        sendObj.fc = 6\n        sendObj.value = obj.params.Requency1\n        node.send({ payload: sendObj })\n    } else if (item == \"Requency2\") {\n        sendObj.address = 1\n        sendObj.fc = 6\n        sendObj.value = obj.params.Requency2\n        node.send({ payload: sendObj })\n    }\n   \n})\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":610,"y":960,"wires":[["ee218e37bc8a988d"]]},{"id":"dc772b2797c696fa","type":"modbusWrite","z":"7b370dcd7ad073da","name":"","model":"2","uid":"1","dataType":5,"address":"1","quantity":"1","modbus":"f4b98c3be57ddcad","x":910,"y":960,"wires":[["603fa8f8678db1a2"]]},{"id":"2b0581f8ebdf6d1f","type":"alibabacloud-property-post","z":"7b370dcd7ad073da","name":"","device":"2de325e2514d684b","x":960,"y":720,"wires":[]},{"id":"f1b50c093c9e1359","type":"alibabacloud-property-set","z":"7b370dcd7ad073da","name":"","device":"2de325e2514d684b","x":430,"y":960,"wires":[["9f85b7f4156038ba"]]},{"id":"ee218e37bc8a988d","type":"queue","z":"7b370dcd7ad073da","name":"","firstMessageBypass":false,"bypassInterval":"200","x":770,"y":960,"wires":[["dc772b2797c696fa"]]},{"id":"603fa8f8678db1a2","type":"debug","z":"7b370dcd7ad073da","name":"调试 2","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1070,"y":960,"wires":[]},{"id":"f4b98c3be57ddcad","type":"modbus config","name":"","model":"2","host":"127.0.0.1","port":"502","serialport":"/dev/ttyAS3","baudrate":"9600","databits":"8","stopbits":"1","parity":"none","timeout":"50","reqtimeout":"1000"},{"id":"2de325e2514d684b","type":"alibabacloud-device","device_name":"820000003058164F","region":"cn-shanghai"}]

注意

MQTT配置节点导出时,不会携带用户名和密码。因此导入时需要重新录入用户名和密码


热门产品