微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 模拟电路设计 > 基于无线通信技术的智能公交系统设计(二)

基于无线通信技术的智能公交系统设计(二)

时间:09-23 来源:互联网 点击:

数、行驶方向等信息发送到电子站牌。公交车ZigBee模块发送模式的API帧结构定义如图6所示。其中的Bytes6-13为站牌的MAC地址。

图6 公交车TX请求API帧结构图

(2) ZigBee发送状态

为实现可靠传输, 当公交车传送信息给电子站牌的请求完成后, 必须得到电子站牌的确认信息, 因此还必须得到电子站牌回馈给公交车的发送状态信息。这个信息将指出数据包是否被成功发送, 或者发送失败。如果发送失败必须重新发送公交车的信息, 直至发送成功。

电子站牌根据公交车的MAC地址, 不断的向PAN内发送信息, 并通过回读发送状态来确定是否有公交车加入网络, 如果有, 则根据网络地址识别公交车, 并将公交车的定位信息发送到监控中心, 从而实现对GPS定位方式的补充。

图7为公交车ZigBee模块的TX状态帧结构

其中的Bytes 9为传送状态信息, Bytes6、7为接收模块的16位网络地址。

(3) ZigBee接收包。

电子站牌收到公交车发来的状态信息数据包后便进行解析, 并通过站牌的GPRS模块发送到监控中心。电子站牌ZigBee模块接收模式的API帧结构定义如图8所示。图中的Bytes5-12为公交车的MAC地址。

图8 电子站牌RX的API帧结构图

3.3 GPRS网络通信设计

电子站牌收到公交车发来的信息后, 将通过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] ='\0';}

while (bytesRecv==SOCKET_ERROR)

{ bytesRecv =recv ( ClientSocket,recvbuf,32,0) ;} //⑤接收电子站牌客户端的数据

send ( ClientSocket,recvbuf,strlen ( recvbuf) ,0) ; //⑥向电子站牌客户端发送数据

}

}

WSAStartup (MAKEWORD (2,2) ,wsaData) ;//初始化Winsock

socket ( AF_INET,SOCK_STREAM,IPPROTO_TCP) ;//①创建一个监听socket

bind ( m_socket, ( SOCKADDR*) service,sizeof(service)) //②绑定套接字

listen (m_socket,20) //③监听套接字

SOCKET AcceptSocket;

while (1) //一直等待客户端的请求, 请求到来后,建立新的连接套接字

{ AcceptSocket=SOCKET_ERROR;

while (AcceptSocket==SOCKET_ERROR)

{ AcceptSocket =accept ( m_socket,NULL,NULL) ;} /*④等待客户请求到来,请求到来后,接受连接请求, 返回一个新的对应此次连接的socket*/

hThread =CreateThread ( NULL,NULL,AnswerThread, ( LPVOID) AcceptSocket,0,dwThreadId) ;} /*创建新线程, 将新的连接套接字传给AnswerThread入口函数*/

}

4 结束语

本系统中, 公交车与电子站牌通过ZigBee网络实现信息交互,

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top