基于TI Z-STACK的智能小車調度系統設計
3 軟件設計
3.1 基于Z-STACK協議棧的無線網絡組建
3.1.1 Z-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所示。本文引用地址:http://www.j9360.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消息處理函數下面,加入處理串口消息代碼:
評論