新闻中心
PRESS CENTER本文主要实现的功能是:使用EG系列网关内置的缓存队列节点实现数据断网续传的功能。
本示例以MQTT通信为例:当MQTT连接正常时,数据直接上传;当MQTT连接异常时,采集数据缓存到缓存队列节点中,等MQTT连接恢复后,在按照先进先出(FIFO)的规则依次上传。
缓存队列节点将数据存储在网关内存中,因此无法持久化,掉电会丢失
本案例由缓存队列节点实现。该节点的具体使用方法请参考:此处为语雀内容卡片,点击链接查看:https://iotrouter.yuque.com/org-wiki-iotrouter-rlzwv5/eg8000/bgp8fuouan9p49e7
为方便演示,下面使用注入节点模拟采集数据,演示缓存队列节点的工作原理。如下图所示:
1.当点击第一个注入节点时,模拟采集数据,点击一次表示采集一次数据,依次存储在缓存队列中,缓存队列节点下标显示当前存储的数据条数。同时,缓存队列默认1000毫秒释放一条数据。当注入频率大于释放频率时,缓存队列的数据条数会一直累加(生产者大于消费者)。
2.当点击第二个注入节点时,设置bypassInterval==0,表示缓存队列不在主动释放数据。注入的数据会在缓存队列中一直累加。
3.当点击第三个注入节点时,设置bypassInterval==1000,表示缓存队列继续以1000毫秒的间隔释放数据。
1. 实现原理
根据MQTT连接状态,设置缓存队列是否释放数据。其基本原理为:当MQTT连接正常时,缓存队列节点按照正常间隔依次释放数据,表示向MQTT服务器发布数据;当MQTT连接异常时,缓存队列不在释放数据,表示不向MQTT服务器发布数据。流程图如下所示:
2. MQTT连接与状态监听
如下所示:建立MQTT连接,并使用监听节点监听MQTT连接状态。无论是连接建立还是连接断开,监听节点都能捕捉到状态的变化,因此示例添加了一个条件判断节点用于区分连接的建立还是断开。当连接建立时,设置bypassInterval=200,表示缓存节点正常释放数据;当连接断开时,设置bypassInterval=00,表示缓存节点不在释放数据,数据缓存在队列中。
此处为语雀视频卡片,点击链接查看:见文末
3. 采集数据
此处以采集Modbus传感器数据为例,将采集到的数据以Json格式上报。本文以介绍缓存为主,采集数据流程在此不过多赘述。
此处为语雀视频卡片,点击链接查看:见文末
此处函数代码:
var RS485_DATA = msg.payload var time = Date.now()
var sendData = { id: "16544", time:time, data: RS485_DATA } msg.payload = JSON.stringify(sendData); return msg; |
4. 借助缓存队列实现断点续传
按照下图所示,制作流程,观察效果。当MQTT连接断开时,缓存队列下标的数据一直累加,表明数据缓存在队列中;当MQTT连接成功时,缓存队列下标依次减少,表明依次释放缓存的数据。
此处为语雀视频卡片,点击链接查看:见文末
本示例以采集Modbus传感器数据为例演示EG系列网关的断点续传功能。实际使用中,数据来源不限,通信方式也不限,主要目的在于熟悉缓存队列节点的使用方法。熟练掌握该节点的使用后,可以轻松实现各种断网续传的需求,例如:采集PLC数据TCP上报的断网续传等等。、