基于物联网的灯光控制系统-组网设计_第1页
基于物联网的灯光控制系统-组网设计_第2页
基于物联网的灯光控制系统-组网设计_第3页
基于物联网的灯光控制系统-组网设计_第4页
基于物联网的灯光控制系统-组网设计_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

毕业设计说明书设计题目:基于物联网的灯光控制系统 组网设计业级号名师教导专班学姓指业级号名师教导专班学姓指物联网XX二O一四年十二月二十日

设计内容:课题简介:以道惟尔公司CC2430无线传感器节点和光照传感器模块为载体,基于IAR和VS2010开发环境,设计一个灯光控制系统,实现对道路灯光亮灭进行控制,并接受上位机监控命令。主要任务:(1)传输层WSN组网程序与透明传输层程序开发;(2)撰写设计报告。主要技术要求如下:(1)采用模块化设计思想规划各子程序功能;(2)无线传感器网络通讯的基本数据帧格式为:帧头、父节点地址、源节点地址、数据长度、数据、帧尾。(3)CC2430协调器与PC串口通讯的基本数据帧格式为:帧头、功能码、数据长度、数据、帧尾;(4)传输层应实现透明传输。进度安排:.任务分解,收集有关资料并消化吸收2周;.制定设计方案 1周;.软件设计 6周;.撰写设计报告 2周;.准备毕业答辩。主要参考文献、资料(写清楚参考文献名称、作者、出版单位):[1]陈林是.无线传感器网络技术与应用.电子工业出版社,2009[2]高守玮,吴灿阳.ZigBee技术实践教程.北京航空航天大学出版社,2009[3]李文件,段如玉.ZigBee无线网络技术入门与实战.北京航空航天大学出版社,2007[4]金纯,罗祖秋,罗氏,陈前试.218860技术基础及案例分析.国防工业出版社,2008[5]黄嘉辉.C#.NET网络程序设计.科学出版社,2004[6]厉小军.信息技术基础.浙江大学出版社,2005[7——CC2430设计、开发与实践.国防工业出版社,2010审批意见教研室负责人:年月日#页第4章WSN无线网络软件开发与测试本设计中,应实现路灯协调器与PC之间的无线通讯。ZigBee无线传感器网络软件主要功能是将协调器上传的数据进行处理并上传到PC,再将PC下发的数据传到路灯。本任务将依据任务二中所分析出来的通信协议,进行无线传感网的软件开发,通过本任务的学习,可以达到以下目标:.能结合实际,描述ZigBee协议栈的任务调度流程。.能根据规划的通讯协议,编程实现所需功能。4.1无线传感器网络(WSN)简介4.1.1无线传感器网络概念WSN是wirelesssensornetwork的简称,即无线传感器网络。无线传感器网络(WirelessSensorNetwork,WSN)就是由部署在监测区域内大量的廉价微型传感器节点组成,通过无线通信方式形成的一个多跳的自组织的网络系统,其目的是实时监测、感知、采集和处理网络覆盖区域中被感知对象的信息,并发送给观察者。传感器、感知对象和观察者构成了无线传感器网络的三个要素。4数据结构设计(1)串口发送数据结构设计根据所制定的串口通讯协议,首先定义串口发送数据结构体如下:typedefstruct{uint8Head[4]〃帧头uint8func[3];〃帧类型uint8len[1]//帧长度uint8phyaddr[8];//物理地址uint16netaddr[2];〃网络地址uint8dat[7];〃数据int8Tail[3];〃帧尾}UartSendBuf;同时,为了操作方便,定义了一个数组,指向结构体typedef$仃口5,二者构成一个串口发送数据缓冲区共用体。其代码如下:Typedefuniontpedefunion{uint8RfSendBuf.DatArr[27];UartRfStructuartRfStructBuff;}RfUartDataUnion收发数据缓冲区变量定义externRfUartDataUnionUartReceBuf;〃串口接收缓冲区(用于MT层)RfUartDataUnionUartSendBuf;〃串口发送缓冲区RfUartDataUnionRfSendBuf;//射频发送缓冲区RfUartDataUnionRfReceBuf;//射频接收缓冲区4.2基于2-5七2。女协议栈应用程序的开发网络拓扑选择本系统的无线网络基于Z-Stack协议栈完成,由于监测点不多、分布范围较窄,故采用星形网络拓扑结构。Z-Stack无线网络运行的基本流程为了方便任务管理,ZigBee2006协议栈协议栈定义了OSAL层(OperationSstemAbstractionLaer,操作系统抽象层。OSAL完全构建在应用层上,主要是采用了轮询的概念,并且引入了优先级。它的主要作用是隔离Z-Stack协议栈和特定硬件系统,用户无须过多了解具体平台的底层,就可以利用操作系统抽象层提供的丰富工具实现各种功能,包括任务注册、初始化和启动,同步任务,多任务间的消息传递,中断处理,定时器控制,内存定位等。图3.1表示的是Z-Stack的启动流程和OSAL所处的位置。OSAL中判断事件发生是通过tasksEvents[id在务事件数组来进行的[28][29]。在OSAL初始化的时候,tasksEvents口数组被初始化为零,一旦系统中有事件发生,就用osal_set_event函数把tasksEvents[taskID赋值为对应的事件。不同的任务有不同的taskID,这样任务事件数组tasksEvents中就表示了系统中哪些任务存在没有处理的事件Z-Stack的启动流程和OSAL所处位置流程图如图4-1所示:

图4-1ZigBee2007Pro协议栈OSAL流程图然后就会调用各任务处理对应的事件,任务是OSAL中很重要的概念。任务通过函数指针来调用,参数有两个:任务标识符(taskID)和对应的事件(event)。Z-Stack中就已经有7种默认的任务了,它们存储在taskArr这个函数指针数组中。定义如下:constpTaskEventHandlerFntasksArr口={macEventLoop,nwk_event_loop,Hal_ProcessEvent,#ifdefined(MT_TASK)MT_ProcessEvent,#endifAPS_event_loop,ZDApp_event_loop,Water_Monitor_ProcessEvent};从7个事件的名字就可以看出,每个默认的任务对应着的是协议的层次。从上到下则反映出了任务的优先级,如MAC事件处理macEventLoop的优先级高于网路层事件处理nwk_event_loop。系统是按照死循环形式工作的,模拟了通常的多任务操作系统,把CPU分成N个时间片,在高速的频率下感觉就是同时运行多个任务了。4.3基于ZigBee2006的无线传感网组网编程ZigBee无线网络的工作过程如图3.2所示。首先由协调器建立网络,然后路由器和终端节点发现网络,并在加入网络后主动向协调器上报网络参数,然后转入等候命令状态。协调器在收到路由器和终端节点的入网信息后,通过ZigBee-ARM网关上报到应用层子系统的服务器中,然后转入等候命令状态。若网关收到来自通信服务器的socket命令,经解析后通过串口送往ZigBee协调器,再下发到终端节点4ZigBee无线网络的工作过程流程图ZigBee无线网络的工作过程流程图如图4-2所示:图4-2ZigBee无线网络的工作过程流程图协调器在收到路由器和终端节点的入网信息后,通过ZigBee_AMR网关上报到应用层子系统的服务器中,然后转入等候命令状态。若网关收到来自服务器的socket命令,经解析后通过串口送往ZigBee协调器,在下发到终端节点。4函数调用类任务.射频发送数据封装函数的(RfSendDataFrame)使用方法。(1)函数功能及参数声明如下//函数功能:射频发送数据封装函数〃参数说明:uint8*func 〃帧类型,3B// uint8*phyaddr〃源节点物理地址,8B// uint16netaddr 〃源节点网络地址,2B// uuint8*dat 〃数据包,7BvoidRfSendDataFrame(uint8*func,uint8*phyaddr,uint16netaddr,uint8*dat);(形参列表:定义形式)(2)如果已经有了功能码(func)、物理地址(phyaddr)、网络地址(netaddr)、数据(dat),定义如下:uint8func[3];〃帧类型uint8phyaddr;〃物理地址uint16netaddr;〃网络地址uint8dat[7]; 〃数据(3)首先将帧类型设置为"JNS”(注册网络),物理地址和网络地址为自动提取源节点的物理地址和网络地址,按协议装数据包,然后再封装为射频发送数据,实现代码如下。uint8func[3];〃帧类型uint8*phyaddr;//物理地址uint16netaddr;〃网络地址uint8dat[7]; //数据//装帧头func[0]=’J';func[1]=‘N';func[2]=’S';〃装物理地址uint8*ieeeAddr;ieeeAddr=NLME_GetExtAddr();uint8i;for(i=0;i<7;i++){phyaddr[i]=*(uint8*)(ieeeAddr+i);}〃装网络地址netaddr=NLME_GetShortAddr();〃装数据包:节点类型(38)、父节点网络地址(2B)、参数(2B)dat[0]=‘R';dat[1]=‘F';dat[2]=‘D';fatheraddr=NLME_GetCoordShortAddr();dat[3]=HI_UINT16(fatheraddr);dat[4]=LO_UINT16(fatheraddr);dat[5]=0;dat[6]=0;RfSendDataFrame(func,phyaddr,netaddr,dat);(1)再将帧类型设置为“CPA”(下发控制指令),物理地址和网络地址为自动提取源节点的物理地址和网络地址按协议装数据包,然后再封装为射频发送数据,实现代码如下。uint8func[3];〃帧类型uint8phyaddr;〃物理地址uint16netaddr;//网络地址uint8dat[7]; //数据//装帧头func[0]=’C';func[1]=‘P';func[2]=‘A';〃装物理地址uint8*ieeeAddr;ieeeAddr=NLME_GetExtAddr();uint8i;for(i=0;i<7;i++){phyaddr[i]=*(uint8*)(ieeeAddr+i);}〃装网络地址netaddr=NLME_GetShortAddr();〃装数据包42电]=11001111;//别墅灯dat[1]=‘O’;dat[2]=‘N’;dat[3]=0;dat[4]=0;dat[5]=0;dat[6]=0;RfSendDataFrame(func,phyaddr,netaddr,dat);(2)将帧类型设置为“RNP”(下发获取网络参数指令),物理地址和网络地址为自动提取源节点的物理地址和网络地址按协议装数据包,然后再封装为射频发送数据实现代码如下。uint8func[3]; 〃帧类型uint8*phyaddr;//物理地址uint16netaddr;〃网络地址uint8dat[7]; 〃数据〃装帧头func[0]=‘R';func[1]=‘N';func[2]=‘P';〃装物理地址uint8*ieeeAddr;ieeeAddr=NLME_GetExtAddr();uint8i;for(i=0;i<7;i++){phyaddr[i]=*(uint8*)(ieeeAddr+i);}〃装网络地址netaddr=NLME_GetShortAddr();〃装数据包dat[0]=0;dat[1]=0;dat[2]=0;dat[3]=0;dat[4]=0;dat[5]=0;dat[6]=0;RfSendDataFrame(func,phyaddr,netaddr,dat);4WSN点对点发送数据函数WSN点对点发送数据函数的(RfSendDataFuncP2P)使用方法。//(1)帧类型func[0]='S';func[1]='P';func[2]='S';//(2)封装物理地址:8字节phyaddr=NLME_GetExtAddr();//(3)封装网络地址:2字节netaddr=NLME_GetShortAddr();//(4)数据包fatheraddr=NLME_GetCoordShortAddr();dat[0]=LO_UINT16(fatheraddr);dat[1]=HI_UINT16(fatheraddr);if(SampleApp_NwkState==DEV_ROUTER)〃路由器节点{dat[2]='R';dat[3]='O';dat[4]='U';}elseif(SampleApp_NwkState==DEV_END_DEVICE)//终端节点{dat[2]='R';dat[3]='F';dat[4]='D';}//(5)调用函数,封装数据RfSendDataFrame(func,phyaddr,netaddr,dat);〃第二步:上传数据:将RfSendBuf的数据发送到协调器RfSendDataFuncP2P(0x0000,SAMPLEAPP_ONLINE_CLUSTERID,RfSendBuf.DatArr,29);//第三步:重启SAMPLEAPP_OnLine_MSG_EVT事osal_start_timerEx(SampleApp_TaskID,SAMPLEAPP_OnLine_MSG_EVT,SampleApp_OnLine_MSG_TIMEOUT);}#endif〃第四步:从消息队列中删除return(eventsASAMPLEAPP_OnLine_MSG_EVT);return0;}4.3.4协调器把从串口接受的PC数据转发给下级节点函数协调器收到PC的串口数据后,将数据转发到WSN的函数(UartRxComCallBack)使用方法。#ifdefSCITC_Coordinatormemset(UartSendBuf.DatArr,0,27);if(pkt->cmd.DataLength<=27){〃复制数据到串口发送变量memcpy(UartSendBuf.DatArr,pkt->cmd.Data,pkt->cmd.DataLength);〃修改帧头UartSendBuf.DatStr.Head[0]='&';UartSendBuf.DatStr.Head[1]='W';UartSendBuf.DatStr.Head[2]=T;UartSendBuf.DatStr.Head[3]='N';}switch(pkt->clusterId){caseSAMPLEAPP_JOIN_NWK_CLUSTERID:{HalUARTWrite(HAL_UART_PORT_0UartSendBuf.DatArr,27);break;}caseSAMPLEAPP_ONLINE_CLUSTERID:〃周期性上传的入网消息簇{,,break;}caseSAMPLEAPP_DATAMSG_CLUSTERID:〃如果上传的实时数据{HalUARTWrite(HAL_UART_PORT_0,UartSendBuf.DatArr,;break;}default:break;}#endif串口业务逻辑设计程序流程图如图4-3所示。开皑AFPFERKXMCCLt^^EUD?.----=.— — —--一. * _者提Ml头,帧长,帧尾YVj(到n数宠?二>— 4返e»¥«提取帧委塞Yes Yes Yes返回] (返回图4-3串口业务逻辑设计程序流程图第5章Server服务端软件开发与测试PC展示层软件用于实时接收ZigBee无限传感器网络上报的各交通路灯的亮灭状态,在本展示层软件中,主要分为窗体表示层、业务逻辑层、数据访问层。5.1三层架构程序设计简介在三层架构设计中,数据访问层一般用于对数据库进行各项操作,即实现对数据表的Select、Insert、Update.Delete操作。本项目不涉及数据库的操作,因此数据访问层的功能主要是完成串口的操作,包括获取可用串口、打开串口、关闭串口、通过串口收发数据等。2.业务逻辑层业务逻辑层是三层架构设计中体现核心价值的部分,主要负责业务规划的制定、业务流程的实现。表示层位于离用户最近的最上层,用于显示数据和接收用户输入的数据,为用户提供一种交互式操作的界面。三层架构设计方框图如图5-1所示:图5-1三层架构设计方

5.2CC2430终端节点对灯组的控制I/O口的分配关系各区域灯光控制分配端口如下表5-1所示:表5-1区域灯光控制星光大道0803星光大道南侧奇数灯0xFB0804星光大道北侧偶数灯0x6D星光大道北侧奇数灯星光大道南侧奇数灯太阳路0803太阳路偶数灯0xED太阳路奇数灯滨河路0803滨河路奇数灯0xF70804滨河路偶数灯0xDF月亮路0804月亮路0xFB水星路0803水星路奇数灯0xBE水星路偶数灯银河大道0803银河大道南侧偶数灯0x5F银河大道北侧偶数灯0804银河大道南侧奇数灯0xB7银河大道北侧奇数灯这次毕业设计我们做的是基于物联网灯光控制系统的项目。我们项目组共有3位成员,大家各自负责项目的一部分,我主要做的是项目中的CC2430无线传感器网络层软件设计。由于这一块在本次设计中有承上启下的作用,如果处理不当就会在实际调试中造成系统无法运行。通过与指导老师的交流和小组的共同努力我们一一解决了相应的问题。通过这次毕业设计我也发现自己专业基础知识的不足之处。比如缺乏综合应用专业知识的能力,对具体规范要求的不熟悉和对知识点的模糊,需要在做的过程中不断的去总结和查阅相关资料,在这个过程是对自己知识的不足之处的一个补充和巩固。这次毕业设计是对自己大学三年所学的一次大检阅,虽然马上要毕业了,但是自己的求学之路还很长,以后更应该在工作中学习,不断锻炼和提高自己的能力。在毕业设计期间,如果没有老师细心的指导,组员的帮助,而是自己一个人独自做设计,不与任何人交流,这是完全不行的,设计就是一个团队的工作,如果不能与他人进行良好的沟通与交流,那将会使自己困难重重。所以在本次毕业设计过程中,我懂得了一个道理,团结得力量,只有更好得与他人进行沟通与交流,吸取他人的建议,工作才会更加的顺利。在论文即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,这些日子里,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意!参考文献[1]陈林是.无线传感器网络技术与应用.电子工业出版社,2009[2]高守玮,吴灿阳.ZigBee技术实践教程.北京航空航天大学出版社,2009[3]李文件,段如玉.ZigBee无线网络技术入门与实战.北京航空航天大2007[4]金纯,罗祖秋,罗氏,陈前试.ZigBee技术基础及案例分析.国防工业出版2008[5]郭渊博,杨魁武,赵俭.ZigBee技术与应用——CC2430设计、开发与实践.国防工业出版社,2010[6]黄嘉辉.C#.NET网络程序设计.科学出版社,2004厉小军.信息技术基础.浙江大学出版社,2005孙利民,李建中,李偷朱,红松.无线传感器网络.清华大学出版社,2005[9]戴佳,戴卫.51单片机C语言应用程序设计实例精讲.电子工业出版社,2006宗小翀,,2009,2003附录一#include"OSAL.h"#include"ZGlobals.h"#include"AF.h"#include"aps_groups.h"#include"ZDApp.h"#include"SampleApp.h"#include"SampleAppHw.h"#include"OnBoard.h"#include"string.h"#include"MT_UART.h"#include"HAL_ADC.h"//包含自定义头文件#include"RfUartDataStruct.h"//定义消息簇constcId_tSampleApp_ClusterList[SAMPLEAPP_MAX_CLUSTERS]={SAMPLEAPP_FLASH_CLUSTERID,SAMPLEAPP_JOIN_NWK_CLUSTERID,SAMPLEAPP_ONLINE_CLUSTERID,SAMPLEAPP_DATAMSG_CLUSTERID};//定义终节点描述constSimpleDescriptionFormat_tSampleApp_SimpleDesc={SAMPLEAPP_ENDPOINT,SAMPLEAPP_PROFID,SAMPLEAPP_DEVICEID,SAMPLEAPP_DEVICE_VERSION,SAMPLEAPP_FLAGS,SAMPLEAPP_MAX_CLUSTERS,(cId_t*)SampleApp_ClusterList,SAMPLEAPP_MAX_CLUSTERS,(cId_t*)SampleApp_ClusterList};endPointDesc_tSampleApp_epDesc;//定义有关变量uint8uint8uint16uint8SampleApp_TaskID;uint8uint8uint16uint8devStates_tSampleApp_NwkState;SampleApp_TransID;SAMPLEAPP_MSG_TIMEOUT_Count=0;//周期性上传网络参数信息*ieeeAddr;//物理地址externRfUartDataUnion UartReceBuf;//串口接收缓冲区(用于MT层)RfUartDataUnionUartSendBuf;//串口发送缓冲区RfUartDataUnionRfSendBuf;//射频发送缓冲区RfUartDataUnionRfReceBuf;//射频接收缓冲区//函数声明externvoidRfSendDataFrame(uint8*func,uint8*phyaddr,uint16netaddr,uint8*dat);externuint8CharCmp(uint8*ptr1,uint8*ptr2,uint8len);externuint8RfSendDataFuncP2P(uint16addr,uint8clusterid,uint8*buf,uint8Len);voidSampleApp_MessageMSGCB(afIncomingMSGPacket_t*pckt);uint8SendData(uint16addr,uint8*buf,uint8Leng);uint8SendData_Period(uint16addr,uint8*buf,uint8Leng);voidUartRxComCallBack(void);uint8CheckUartData(uint8*arr,uint8n);voidUartOutNetDis(void);uint8SendDataBroadcast(uint8*buf,uint8Leng);voidsampleApp_DataFrame(Union_DATA*Data);voidSampleApp_MessageMSGCB_Node(afIncomingMSGPacket_t*pkt);uint8Send_Join_In_NWK_Data(uint16addr,uint8*buf,uint8Leng);//公共函数一:节点初始化函数voidSampleApp_Init(uint8task_id){SampleApp_TaskID=task_id;SampleApp_NwkState=DEV_INIT;SampleApp_TransID=0;#ifdefined(HOLD_AUTO_START)ZDOInitDevice(0);#endifSampleApp_epDesc.endPoint=SAMPLEAPP_ENDPOINT;SampleApp_epDesc.task_id=&SampleApp_TaskID;=(SimpleDescriptionFormat_t*)&SampleApp_SimpleDesc;SampleApp_epDesc.latencyReq=noLatencyReqs;afRegister(&SampleApp_epDesc);//Registerforallkeyevents-ThisappwillhandleallkeyeventsRegisterForKeys(SampleApp_TaskID); //注册按键MT_UartRegisterTaskID(SampleApp_TaskID);//注册串口}//任务处理函数uint16SampleApp_ProcessEvent(uint8task_id,uint16events){afIncomingMSGPacket_t*MSGpkt; //定义射频接收数据消息结构体(void)task_id;//Intentionallyunreferencedparameter(故意未弓[用参数)//系统事件处理入口if(events&SYS_EVENT_MSG){MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(SampleApp_TaskID);while(MSGpkt){switch(MSGpkt->hdr.event){//处理射频接收事件caseAF_INCOMING_MSG_CMD:{SampleApp_MessageMSGCB(MSGpkt);break;}//处理建立、发现、加入网络事件caseZDO_STATE_CHANGE:{SampleApp_NwkState=(devStates_t)(MSGpkt->hdr.status);〃如果是协调器节点,则对GPRS进行初始化if((SampleApp_NwkState==DEV_ZB_COORD)){osal_start_timerEx(SampleApp_TaskID,SAMPLEAPP_RUN_EVT,SAMPLEAPP_RUN_TIMEOUT);//启动超时定时器}//若是终端节点或者路由器节点,则转入发现网络和加入网络事件elseif((SampleApp_NwkState==DEV_ROUTER)||(SampleApp_NwkState==DEV_END_DEVICE)){P0SEL&=0x00;〃配置P0口为通用I/O口P0DIR1=0xFF;〃配置P0口为输出口P0=0x00;osal_start_timerEx(SampleApp_TaskID,SampleApp_JOIN_IN_NETWORK_EVT,SAMPLEAPP_MSG_TIMEOUT);}break;}//协调器处理串口接收时间caseSPI_INCOMING_ZTOOL_PORT:{#ifdefined(SCITC_Coordinator)UartRxComCallBack();//串口收到一帖数据的处理break;#endif}default:break;}osal_msg_deallocate((uint8*)MSGpkt);MSGpkt=(afIncomingMSGPacket_t*)osal_msg_receive(SampleApp_TaskID);}return(eventsASYS_EVENT_MSG);}return(eventsASampleApp_JOIN_IN_NETWORK_EVT);}//终端节点和路由器周期性上传入网信息事件处理入口中删除return(eventsASAMPLEAPP_OnLine_MSG_EVT);}return0;}voidSampleApp_MessageMSGCB(afIncomingMSGPacket_t*pkt){//自定义局部变量#ifdefined(SCITC_EndDevice)uint8func[3];uint8*phyaddr;uint16netaddr;uint8dat[5];uint16fatheraddr;uint8PhyAddrTemp[8]={0*00,0*00,0*00,0*00,0*00,0*00,0*00,0乂00};;//存放默认物理地址uint8NetAddrTemp[2]={0x00,0x00};//存放默认网络地址(全0);uint8ret;uint8IsMyMsg=0x00;〃终端节点判断是否为自己的RF消息标识符#endif〃协调器节点:修改帧头,转发数据到PC#ifdefSCITC_Coordinatormemset(UartSendBuf.DatArr,0,27);if(pkt->cmd.DataLength<=27){//复制数据到串口发送变量memcpy(UartSendBuf.DatArr,pkt->cmd.Data,pkt->cmd.DataLength);//修改帧头UartSendBuf.DatStr.Head[0]='&';UartSendBuf.DatStr.Head[1]='W';UartSendBuf.DatStr.Head[2]='T';UartSendBuf.DatStr.Head[3]='P';}switch(pkt->clusterId){caseSAMPLEAPP_JOIN_NWK_CLUSTERID://如果是加入网络消息簇{HalUARTWrite(HAL_UART_PORT_0,UartSendBuf.DatArr,27);//从串口输出break;}caseSAMPLEAPP_ONLINE_CLUSTERID://如果是周期性上传的入网消息簇{HalUARTWrite(HAL_UART_PORT_0,UartSendBuf.DatArr,27);//从串口输出break;}caseSAMPLEAPP_DATAMSG_CLUSTERID://如果是上传的实时数据{HalUARTWrite(HAL_UART_PORT_0,UartSendBuf.DatArr,27);//从串口输出break;}default:break;}#endif//终端节点:执行对交通灯的操作#ifdefined(SCITC_EndDevice)switch(pkt->clusterId){caseSAMPLEAPP_JOIN_NWK_CLUSTERID://如果是加入网络消息簇{break;}caseSAMPLEAPP_ONLINE_CLUSTERID://如果是周期性上传的入网消息簇{break;}caseSAMPLEAPP_DATAMSG_CLUSTERID://如果是上传的实时数据{if(pkt->cmd.DataLength<27)//不足一帧{break;}else//将RF接收的数据(pkt->cmd.Data)转存到RfReceBufmemcpy(RfReceBuf.DatArr,(uint8*)pkt->cmd.Data,pkt->cmd.DataLength);if(RfReceBuf.DatStr.Head[0]=='&'&&RfReceBuf.DatStr.Head[1]=='W'&&RfReceBuf.DatStr.Head[2]=='S'&&RfReceBuf.DatStr.Head[3]=='N')//帧头{if(RfReceBuf.DatStr.Tail[0]=='E'&&RfReceBuf.DatStr.Tail[1]=='N'&&RfReceBuf.DatStr.Tail[2]=='D')//帧尾{ret=CharCmp(PhyAddrTemp,RfReceBuf.DatStr.PhyAddr,8);if(ret==0){IsMyMsg=0xFF;//协调器以广播模式下发数据}elseif((NetAddrTemp[0] n==RfReceBuf.DatStr.NetAddr[0])&&(NetAddrTemp[1]==RfReceBuf.DatStr.NetAddr[1])){IsMyMsg=0xFF;//协调器以广播模式下发数据}if(IsMyMsg!=0xFF)//非广播模式下,判断是否是本节点该接收的数据{phyaddr=NLME_GetExtAddr()

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论