主函数在完成节点相关初始化之后会进入无限循环过程,该过程会一直检测操作系统的任务链表中是否有事件要进行处理。
3.2 节点工作流程
为便于管理和调度,节点所要实现的功能都是将其定义为事件进行处理的。每个事件完成相应功能。将事件按一定关系串接,就能实现节点工作时要完成的系统功能。采集节点和汇聚节点的工作流程如图4、图5所示。
汇聚节点和采集节点在同一时刻醒来。当汇聚节点创建网络成功,并且采集节点入网成功后,全网节点处于通信状态。汇聚节点会通过串口向数据中转器发送1个表示网络准备就绪的消息,数据中转器接收到该消息之后根据上位机的要求决定要不要上传数据,以及上传哪些数据。汇聚节点接收到命令之后会触发相应的事件进行处理,先命令采集节点将相应的数据上传给它,再通过触发串口事件将数据发送至数据中转器。采集节点在入网成功以后也处于准备就绪的状态,等待接受汇聚节点的命令,做相应的事件触发处理。
在每次通信结束之前,汇聚节点会向数据中转器发送1个请求休眠的消息,数据中转器接收到该消息之后会按照上位机的要求对全网节点的休眠过程进行设置。
3.3 串口通信协议
汇聚节点与数据中转器之间的通信是通过串口进行的。串口通信协议保证数据的安全收发,便于汇聚节点和数据中转器对数据进行解析和存储管理。数据中转器和汇聚节点之间的串口通信数据帧格式如下所示:
其中,SOP为起始标志符,用1字节来表示数据包的起始,将这个字节定义为0x02;CMD表示命令ID,用1字节的数据来标识命令消息。LEN表示DATA的长度,用1字节来指示DATA位的数据的长度。DATA为具体要发送的数据。FCS是校验位,这里使用XOR(异或校验),校验CMD、LEN、DATA中的所有数据。
当汇聚节点和数据中转器通过串口接收到数据后,都是通过判别CMD对数据进行解析的。串口数据的CMD有如下几种:
①0x03,数据中转器发送上传路由表命令。作为响应,汇聚节点通过串口上传路由表数据的CMD标识为0x83。
②0x04,数据中转器发送上传邻居表命令。作为响应,汇聚节点通过串口上传邻居表数据的CMD标识为0x84。
③0x05,数据中转器发送上传采集数据命令。作为响应,汇聚节点通过串口上传采集数据时的CMD标识为0x85。
④0x89,汇聚节点发送至数据中转器,表示网络创建成功,等待命令消息。
⑤0xF9,汇聚节点发送至数据中转器,表示数据全部上传完毕,等待休眠。作为响应,数据中转器通过串口向汇聚节点发送CMD为0x09的休眠设置命令。
LEN表示数据的长度,方便数据中转器对接收到的数据进行空间分配和存储。FCS是校验位,用于表征数据的准确性。
当汇聚节点接收到串口数据时,汇聚节点会触发自身应用层的串口事件,用于解析发送过来的命令消息,然后根据该命令来触发相应的事件进行处理。
3.4 休眠设置
实验证实,节点在休眠过程中处于断网状态。因此,为节省节点频繁联网带来的功耗和保证全网节点工作状态同步,在软件上设计为节点在联网成功后只执行通信任务,而休眠过程中只执行采集任务。当节点采集时刻到来,触发采集事件,打开传感器的开关对环境数据进行采集,并控制I/O口对传感器采集得到的信号进行A/D采样,最后将采样值以SPI方式存入外部存储器。在每次通信结束之前节点都会判断是否有休眠设置命令,若接收到休眠设置命令,节点则会按照该设置进行休眠,直到下一次醒来;若没接收到命令,节点则会按照上一次的休眠设置进行休眠。
上一页 [1] [2] [3]