基于TI Z-STACK的智能小车调度系统设计
3 软件设计
3.1基于Z-STACK协议栈的无线网络组建
3.1.1Z-STACK无线网络组建的基本流程
Z-STACK是TI公司推出的符合ZigBee2006规范,定义了完全构建在应用层上的操作系统抽象层(Operation System Abstraction Layer,OSAL层)来隔离Z-STACK协议栈和特定硬件系统,采用轮询及优先级控制方式实现任务调度。在进入应用层小车调度任务(Car_Dispatch)处理之前,需首先进行无线网络的组建。本系统采用星形网络拓扑结构,由通信指挥车(协凋器)负责网络的发起。在Z-STACK(基于ZigBee2006)中,无线网络组建的基本流程为:
main()→osal_init_system()→osalInitTasks()→ZDApp_Init(taskID++)→ZDOInitDevice(0)→ZDApp_NetworkInit(extendedDelay)→osal_set_event(ZDAppTaskID,ZDO_NETWORK_INIT)
通过tasksEvents[ZDAppTaskID] |=ZDO_NETWORK_INIT向ZDAppTaskID任务中添加ZDO_NETWORK_INIT事件(消息),进行网络初始化,接下来在ZDApp_event_loop中处理ZDO_NETWORK_INIT事件,其过程为:
ZDApp_event_loop→ZDO_StartDevice
在该函数中,协调器将通过NLME_NetworkFor-mationReques发起网络,执行回调函数ZDO_NetworkFormationConfirmCB(),向ZDAppTask ID任务发ZDO_NETWORK_START消息,然后在ZDApp_event_loop中通过osal_set_event(ZDAppTaskID,ZDO_STATE_CHANGE_EVT)向应用层发ZDO_ STATE_CHANGE_EVT消息,应用层的小车调度任务处理函数根据ZDO_STATE_CHANGE_EVT判断无线网的状态,并确定探路车、运输车的注册情况;而路由器和终端节点将通过NLME_NetworkDiscoveryRequest发现网络,并执行回调函数ZDO_NetworkDiscoveryConfirmCB(),加入协调器组建的无线网络。
3.1.2 网络拓扑与数据帧格式
本系统采用星型网络拓扑结构,通信指挥车负责系统的调度。无线网络上下行链路以及各小车的车载CC2430模块与51单片机模块通信的数据帧格式如图3所示。本文引用地址://m.amcfsurvey.com/article/159897.htm
以探路车为例,它与通信指挥车通信的信息流向如图4所示。图中①为Endpoint向Sink注册;②为51单片机利用传感器采集路面信息,通过串口发送到Endpoint;③为Endpoint通过RF方式将数据传输到Sink;④为Sink从收到的数据中提取信息,分析出路面状态,然后向Endpoi nt下发控制指令;⑤为Endpoint从收到的数据控制指令后进行处理,然后通过串口向51单片机下发控制指令;⑥为循环执行①~⑤。
3.2 CC2430程序买现
从图4可知,CC2430通信模块的主要功能是完成无线数据传输和处理串口事件。在处理串口事件上,需首先注册串口,然后编写串口处理函数。串口波特率设置为57 600波特,以满足使用11.059 2 MHz晶振的单片机模块与CC2430通信模块通信。串口注册由函数SPIMgr_Regis terTaskID(Car_Dispatch_TaskID)实现。串口接收处理函数在协议栈MT层SPIMgr.c中,由uartConfig.callBackFunc=SPIMgr_ProcessZTool Data指明串口接收回调函数。为能接收自定义格式的串口数据,需修改协议栈自带的SPIMgr_ProcessZToolData函数,包括在SPIMgr.h中定义图3中SOP(#define SOP1_VALUE 0x2A),FCS(#defineEND 0x23),在SPIMgr.c中重构数据格式,向APP层Car_Dispatch应用程序发送CMD_ SERIAL_MSG消息等。根据图3可知,Endpoint上行传输需在第6个字节发送数据长度LEN-Token,因此在串口数据重构中需添加SPI_Msg->msg[5]=LEN_Token,然后在Car_Dispatch应用程序中的SYS_EVENT_MSG消息处理函数下面,加入处理串口消息代码:
评论