一種智能公交系統(tǒng)方案
電子站牌收到公交車發(fā)來的信息后, 將通過GPRS-DTU發(fā)送到監(jiān)控中心, 然后由監(jiān)控中心將所有公交車發(fā)來的信息通過Internet發(fā)送給站牌。
GPRS DTU有透傳模式、AT+i命令模式、自動IP注冊模式、遠程維護和流控五種模式。在系統(tǒng)的電子站牌終端中, DTU將使用透傳模式與服務器進行信息的交互。通過透傳模式可將電子站牌異步串口通信轉(zhuǎn)換成基于TCP/UDP協(xié)議的網(wǎng)絡通信。其主要目的是通過串行通信的簡單設備實現(xiàn)在IP網(wǎng)絡上的通信, 而數(shù)據(jù)格式不發(fā)生任何改變。這一點非常重要, 由于數(shù)據(jù)格式在經(jīng)過DTU前后均不發(fā)生任何變化, 由此, 電子站牌原有的設備及軟件不用作任何升級, 就可直接應用。
DTU的透傳模式可使電子站牌客戶端在發(fā)起通信請求時, 使DTU必須與服務器建立網(wǎng)絡連接。也就是說, 電子站牌下位機與服務器進行數(shù)據(jù)傳輸時, 首先是電子站牌下位機要與DTU設備的串口相連, 在DTU進入透傳模式后自動被調(diào)用, 并與服務器建立網(wǎng)絡連接, 當網(wǎng)絡連接建立后, DTU將自動完成串口到網(wǎng)絡通信的轉(zhuǎn)換, 以便所有數(shù)據(jù)可透明地在服務器軟件與電子站牌下位機之間雙向傳輸。
服務器與電子站牌終端通信可通過套接字socket 來實現(xiàn)。首先在服務器上建立一個監(jiān)聽Socket對象, 并綁定在一個固定端口上, 然后,每當電子站牌客戶端發(fā)送一個SOCKET連接請求,服務器端就會新開啟一個線程, 并在其中創(chuàng)建一個socket與電子站牌客戶端的socket通訊, 直到電子站牌客戶端程序關閉, 該線程結束, 然后服務器主線程的socket在應用程序退出時關閉。通過多線程的Socket程序設計, 可以實現(xiàn)一個服務器與多個電子站牌客戶端的通信。
以下是服務器基于socket多線程的具體實現(xiàn)程序代碼:
DWORD WINAPI AnswerThread ( LPVOIDlparam) //收發(fā)線程入口
{//創(chuàng)建線程時把服務器建立的新套接字傳給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] =‘’;}
while (bytesRecv==SOCKET_ERROR)
{ bytesRecv =recv ( ClientSocket,recvbuf,32,0) ;} //⑤接收電子站牌客戶端的數(shù)據(jù)
評論