基于zigbee的消防监控系统毕业设计论文(编辑修改稿)内容摘要:

f 3. 在 APP 层和 MT 层中定义射频、串口数据存储缓冲区变量 在 APP 层的 中添加如下代码: extern RfUartDataUnion UartReceBuf。 //串口接收缓冲区 (用于MT 层 ) RfUartDataUnion UartSendBuf。 //串口发送缓冲区 RfUartDataUnion RfSendBuf。 //射频发送缓冲区 RfUartDataUnion RfReceBuf。 //射频接收缓冲区 其中, UartReceBuf 在 MT 层的 ,代码如下: RfUartDataUnion UartReceBuf。 //串口接收缓冲区 2)数据收发函数设计 //函数功能:射频发送数据封装函数 //参数说明: uint8 *func //帧类型, 3B // uint8 *phyaddr //源节点物理地址, 8B // uint16 addr //源节点网络地址, 2B // uuint8 *dat //数据包, 8B //返 回 值:无 void RfSendDataFrame( uint8 *func, uint8 *phyaddr, uint16 addr, uint8 *dat) { //(1)初始化待发送的数据( RfSendBuf) 基于 zigbee 的 消防监控系统 19 int cyc。 for(cyc = 0。 cyc 30。 cyc++) { [cyc] = 0x00。 } //(2)封装帧头 :amp。 WSN [0] = 39。 amp。 39。 [1] = 39。 W39。 [2] = 39。 S39。 [3] = 39。 N39。 //(3)封装帧类型 :JNS、 CPA、 SRS、 CNA 等 [0] = func[0]。 [1] = func[1]。 [2] = func[2]。 //(4)封装帧长度 :0x1E( 30B) = 0x1E。 //(5)封装物理地址: 8 字节 for(cyc = 0。 cyc 8。 cyc++) { [cyc] = phyaddr[cyc]。 } //(6)封装网络地址: 2 字节 基于 zigbee 的 消防监控系统 20 [0] = LO_UINT16(addr)。 [1] = HI_UINT16(addr)。 //(7)封装数据包: 8字节 for(cyc = 0。 cyc 8。 cyc++) { [cyc] = dat[cyc]。 } //(8)封装连接质量: 1 字节 = 0x00。 //(9)封装帧尾: 3字节 [0] = 39。 E39。 [1] = 39。 N39。 [2] = 39。 D39。 } //函数功能: WSN 点对点发送数据函数 //参数说明: uint16 addr目标节点地址 // uint8 clusterid消息簇号 // uint8 *buf待发送数据缓冲区 // uint8 len待发送数据长度 //返 回 值: 1发送成功; 0发送失败。 uint8 RfSendDataFuncP2P( uint16 addr, uint8 clusterid, uint8 *buf, uint8 Len) 基于 zigbee 的 消防监控系统 21 { afAddrType_t SendDataAddr。 = (afAddrMode_t)Addr16Bit。 = SAMPLEAPP_ENDPOINT。 = addr。 if( AF_DataRequest( amp。 SendDataAddr, //目标节点地址指针 amp。 SampleApp_epDesc, //目标节点的端点描述 clusterid, //发送端点的输出消息簇 ID 号 Len, //发送数据字节数 buf, //指向发送数据缓冲区指针 amp。 SampleApp_TransID, //发送序列号指针,如果消息缓存发送,这个序号将增加 1 AF_DISCV_ROUTE, //发送选型(路由发现,另有 APS 应答、跳过路由直接发等) AF_DEFAULT_RADIUS //最大 跳数半 基于 zigbee 的 消防监控系统 22 径 ) == afStatus_SUCCESS ) { return 1。 //发送成功 } else { return 0。 //发送失败 } } //函数功能: WSN 广播发送数据函数 //参数说明: uint8 clusterid消息簇号 // uint8 *buf待发送数据缓冲区 // uint8 len待发送数据长度 //返 回 值: 1发送成功; 0发送失败。 uint8 RfSendDataBroadcast(uint8 clusterid, uint8 *buf, uint8 Len) { afAddrType_t SendDataAddr。 基于 zigbee 的 消防监控系统 23 = (afAddrMode_t)AddrBroadcast。 = SAMPLEAPP_ENDPOINT。 = 0xffff。 //广播地址 if( AF_DataRequest( amp。 SendDataAddr, //目标节点地址指针 amp。 SampleApp_epDesc, //目标节点的端点描述 clusterid, //发送端点的输出消息簇 ID 号 Len, //发送数据字节数 buf, //指向发送数据缓冲区指针 amp。 SampleApp_TransID, //发送序列号指针,如果消息缓存发送,这个序号将增加 1 AF_DISCV_ROUTE, //发送选型(路由发现,另有 APS 应答、跳过路由直接发等) AF_DEFAULT_RADIUS //最大跳数半径 ) == afStatus_SUCCESS ) { 基于 zigbee 的 消防监控系统 24 return 1。 //发送成功 } else { return 0。 //发送失败 } } //函数功能:协调器收到 PC 的串口数据后,将数据转发到下级无线节点 //参数说明:无 //返 回 值:无 void UartRxComTransmit(void) { if defined(IOT_Coordinator) //重新封装数据:串口 UartReceBuf 》 无线网 RfSendBuf memcpy( , , 30)。 //转发数据(广播模式或者点对点模式) RfSendDataBroadcast(SAMPLEAPP_DATAMSG_CLUSTERID,atArr,30)。 endif } 基于 zigbee 的 消防监控系统 25 3) . 应用层功能程序设计 在 APP 层初始化任务 在 MT 层根据通讯协议接收串口数据 在 APP 层处理串口接收事件 case SPI_INCOMING_ZTOOL_PORT: { UartRxComTransmit()。 //调用转发数据到无线网下级节点函数 break。 } 在 APP 层处理射频接收事件 case AF_INCOMING_MSG_CMD: { SampleApp_MessageMSGCB( MSGpkt )。 break。 } 4)附加:联动功能 如果收到的实时数据帧类型是 SRS 并且是采集的烟雾的数据则,进行分析判断,然后封装数据包广播下发,则执行终端就会自动执行相应指令 case SAMPLEAPP_DATAMSG_CLUSTERID: //如果上传的实时数据 { 基于 zigbee 的 消防监控系统 26 HalUARTWrite ( HAL_UART_PORT_0, , 30)。 //从串口输出 uint8 func[3]。 //帧类型 uint8 *phyaddr。 //物理地址 uint16 addr。 //网络地址 uint8 dat[8]。 //数据 uint8 PhyAddrTemp[8]= {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}。 //存放默认物理地址(全 0); uint8 count = 0。 if(([0] == 39。 S39。 ) amp。 amp。 ([1] == 39。 R39。 ) amp。 amp。 ([2] == 39。 S39。 ) amp。 amp。 ([0]==39。 U39。 ) amp。 amp。 ([1]==0x00) ) { func[0] = 39。 C39。 func[1] = 39。 N39。 func[2] = 39。 A39。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。