????? (2) ZigBee發(fā)送狀態(tài)
????? 為實(shí)現(xiàn)可靠傳輸, 當(dāng)公交車(chē)傳送信息給電子站牌的請(qǐng)求完成后, 必須得到電子站牌的確認(rèn)信息, 因此還必須得到電子站牌回饋給公交車(chē)的發(fā)送狀態(tài)信息。這個(gè)信息將指出數(shù)據(jù)包是否被成功發(fā)送, 或者發(fā)送失敗。如果發(fā)送失敗必須重新發(fā)送公交車(chē)的信息, 直至發(fā)送成功。
????? 電子站牌根據(jù)公交車(chē)的MAC地址, 不斷的向PAN內(nèi)發(fā)送信息, 并通過(guò)回讀發(fā)送狀態(tài)來(lái)確定是否有公交車(chē)加入網(wǎng)絡(luò), 如果有, 則根據(jù)網(wǎng)絡(luò)地址識(shí)別公交車(chē), 并將公交車(chē)的定位信息發(fā)送到監(jiān)控中心, 從而實(shí)現(xiàn)對(duì)GPS定位方式的補(bǔ)充。
?
圖7為公交車(chē)ZigBee模塊的TX狀態(tài)幀結(jié)構(gòu)
????? 其中的Bytes 9為傳送狀態(tài)信息, Bytes6、7為接收模塊的16位網(wǎng)絡(luò)地址。
???? (3) ZigBee接收包。
????? 電子站牌收到公交車(chē)發(fā)來(lái)的狀態(tài)信息數(shù)據(jù)包后便進(jìn)行解析, 并通過(guò)站牌的GPRS模塊發(fā)送到監(jiān)控中心。電子站牌ZigBee模塊接收模式的API幀結(jié)構(gòu)定義如圖8所示。圖中的Bytes5-12為公交車(chē)的MAC地址。
?
圖8 電子站牌RX的API幀結(jié)構(gòu)圖
????? 3.3 GPRS網(wǎng)絡(luò)通信設(shè)計(jì)
????? 電子站牌收到公交車(chē)發(fā)來(lái)的信息后, 將通過(guò)GPRS-DTU發(fā)送到監(jiān)控中心, 然后由監(jiān)控中心將所有公交車(chē)發(fā)來(lái)的信息通過(guò)Internet發(fā)送給站牌。
????? GPRS DTU有透?jìng)髂J健T+i命令模式、自動(dòng)IP注冊(cè)模式、遠(yuǎn)程維護(hù)和流控五種模式。在系統(tǒng)的電子站牌終端中, DTU將使用透?jìng)髂J脚c服務(wù)器進(jìn)行信息的交互。通過(guò)透?jìng)髂J娇蓪㈦娮诱九飘惒酱谕ㄐ呸D(zhuǎn)換成基于TCP/UDP協(xié)議的網(wǎng)絡(luò)通信。其主要目的是通過(guò)串行通信的簡(jiǎn)單設(shè)備實(shí)現(xiàn)在IP網(wǎng)絡(luò)上的通信, 而數(shù)據(jù)格式不發(fā)生任何改變。這一點(diǎn)非常重要, 由于數(shù)據(jù)格式在經(jīng)過(guò)DTU前后均不發(fā)生任何變化, 由此, 電子站牌原有的設(shè)備及軟件不用作任何升級(jí), 就可直接應(yīng)用。
????? DTU的透?jìng)髂J娇墒闺娮诱九瓶蛻?hù)端在發(fā)起通信請(qǐng)求時(shí), 使DTU必須與服務(wù)器建立網(wǎng)絡(luò)連接。也就是說(shuō), 電子站牌下位機(jī)與服務(wù)器進(jìn)行數(shù)據(jù)傳輸時(shí), 首先是電子站牌下位機(jī)要與DTU設(shè)備的串口相連, 在DTU進(jìn)入透?jìng)髂J胶笞詣?dòng)被調(diào)用, 并與服務(wù)器建立網(wǎng)絡(luò)連接, 當(dāng)網(wǎng)絡(luò)連接建立后, DTU將自動(dòng)完成串口到網(wǎng)絡(luò)通信的轉(zhuǎn)換, 以便所有數(shù)據(jù)可透明地在服務(wù)器軟件與電子站牌下位機(jī)之間雙向傳輸。
????? 服務(wù)器與電子站牌終端通信可通過(guò)套接字socket 來(lái)實(shí)現(xiàn)。首先在服務(wù)器上建立一個(gè)監(jiān)聽(tīng)Socket對(duì)象, 并綁定在一個(gè)固定端口上, 然后,每當(dāng)電子站牌客戶(hù)端發(fā)送一個(gè)SOCKET連接請(qǐng)求,服務(wù)器端就會(huì)新開(kāi)啟一個(gè)線程, 并在其中創(chuàng)建一個(gè)socket與電子站牌客戶(hù)端的socket通訊, 直到電子站牌客戶(hù)端程序關(guān)閉, 該線程結(jié)束, 然后服務(wù)器主線程的socket在應(yīng)用程序退出時(shí)關(guān)閉。通過(guò)多線程的Socket程序設(shè)計(jì), 可以實(shí)現(xiàn)一個(gè)服務(wù)器與多個(gè)電子站牌客戶(hù)端的通信。
????? 以下是服務(wù)器基于socket多線程的具體實(shí)現(xiàn)程序代碼:
????? DWORD WINAPI AnswerThread ( LPVOIDlparam) //收發(fā)線程入口
????? {//創(chuàng)建線程時(shí)把服務(wù)器建立的新套接字傳給lparam
????? SOCKET ClientSocket = ( SOCKET) ( LPVOID)lparam;
????? int bytesRecv;char sendbuf [ 32] = " " ;char
????? recvbuf [32] ="" ;
????? while (1)
????? {bytesRecv=SOCKET_ERROR;
????? for ( int i =0;i < ( int) strlen ( recvbuf) ;i ++ )
????? {recvbuf [i] ='\0';}
????? while (bytesRecv==SOCKET_ERROR)
????? { bytesRecv =recv ( ClientSocket,recvbuf,32,0) ;} //⑤接收電子站牌客戶(hù)端的數(shù)據(jù)
????? …
????? send ( ClientSocket,recvbuf,strlen ( recvbuf) ,0) ; //⑥向電子站牌客戶(hù)端發(fā)送數(shù)據(jù)
????? }
????? }
????? …
????? WSAStartup (MAKEWORD (2,2) ,&wsaData) ;//初始化Winsock
????? socket ( AF_INET,SOCK_STREAM,IPPROTO_TCP) ;//①創(chuàng)建一個(gè)監(jiān)聽(tīng)socket
????? bind ( m_socket, ( SOCKADDR*) &service,sizeof(service)) //②綁定套接字
????? listen (m_socket,20) //③監(jiān)聽(tīng)套接字
????? SOCKET AcceptSocket;
????? while (1) //一直等待客戶(hù)端的請(qǐng)求, 請(qǐng)求到來(lái)后,建立新的連接套接字
????? { AcceptSocket=SOCKET_ERROR;
????? while (AcceptSocket==SOCKET_ERROR)
????? { AcceptSocket =accept ( m_socket,NULL,NULL) ;} /*④等待客戶(hù)請(qǐng)求到來(lái),請(qǐng)求到來(lái)后,接受連接請(qǐng)求, 返回一個(gè)新的對(duì)應(yīng)此次連接的socket*/
????? hThread =CreateThread ( NULL,NULL,AnswerThread, ( LPVOID) AcceptSocket,0,&dwThreadId) ;} /*創(chuàng)建新線程, 將新的連接套接字傳給AnswerThread入口函數(shù)*/
????? }
????? 4 結(jié)束語(yǔ)
????? 本系統(tǒng)中, 公交車(chē)與電子站牌通過(guò)ZigBee網(wǎng)絡(luò)實(shí)現(xiàn)信息交互, 電子站牌與監(jiān)控中心通過(guò)GPRS網(wǎng)絡(luò)實(shí)現(xiàn)信息交互。公交車(chē)上用價(jià)格低廉的ZigBee模塊取代現(xiàn)有智能公交系統(tǒng)中的車(chē)載GPRS模塊, 可節(jié)約硬件成本, 而公交車(chē)與電子站牌之間的ZigBee網(wǎng)絡(luò)通信則可實(shí)現(xiàn)公交車(chē)的定位, 以作為GPS定位的補(bǔ)充, 從而增加了系統(tǒng)的可靠性。
????? 今后, 隨著3G、WiMAX、Wi-Fi等無(wú)線通信技術(shù)的成熟以及更加優(yōu)化的衛(wèi)星定位技術(shù)的出現(xiàn), 定會(huì)出現(xiàn)越來(lái)越多的智能公交系統(tǒng)方案, 從而在更大程度上推動(dòng)智能公交系統(tǒng)的發(fā)展。
評(píng)論