一种智能公交系统方案
电子站牌收到公交车发来的信息后, 将通过GPRS-DTU发送到监控中心, 然后由监控中心将所有公交车发来的信息通过Internet发送给站牌。
GPRS DTU有透传模式、AT+i命令模式、自动IP注册模式、远程维护和流控五种模式。在系统的电子站牌终端中, DTU将使用透传模式与服务器进行信息的交互。通过透传模式可将电子站牌异步串口通信转换成基于TCP/UDP协议的网络通信。其主要目的是通过串行通信的简单设备实现在IP网络上的通信, 而数据格式不发生任何改变。这一点非常重要, 由于数据格式在经过DTU前后均不发生任何变化, 由此, 电子站牌原有的设备及软件不用作任何升级, 就可直接应用。
DTU的透传模式可使电子站牌客户端在发起通信请求时, 使DTU必须与服务器建立网络连接。也就是说, 电子站牌下位机与服务器进行数据传输时, 首先是电子站牌下位机要与DTU设备的串口相连, 在DTU进入透传模式后自动被调用, 并与服务器建立网络连接, 当网络连接建立后, DTU将自动完成串口到网络通信的转换, 以便所有数据可透明地在服务器软件与电子站牌下位机之间双向传输。
服务器与电子站牌终端通信可通过套接字socket 来实现。首先在服务器上建立一个监听Socket对象, 并绑定在一个固定端口上, 然后,每当电子站牌客户端发送一个SOCKET连接请求,服务器端就会新开启一个线程, 并在其中创建一个socket与电子站牌客户端的socket通讯, 直到电子站牌客户端程序关闭, 该线程结束, 然后服务器主线程的socket在应用程序退出时关闭。通过多线程的Socket程序设计, 可以实现一个服务器与多个电子站牌客户端的通信。
以下是服务器基于socket多线程的具体实现程序代码:
DWORD WINAPI AnswerThread ( LPVOIDlparam) //收发线程入口
{//创建线程时把服务器建立的新套接字传给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) ;} //⑤接收电子站牌客户端的数据

评论