




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、车载GPS智能终端通信模块的设计与 实现蒋治平 裴文江摘要本文以车载GPS系统为基础,设计并实现了车载GPS监控系统通信模 块。结合串口通信与SOCKET通信知识,详细分析了GPS终端与服务器,以 及服务器与客户端之间通信的设计思路与实现方法。关键词: GPS 通信模块 串口通信 SOCKET通信 通 信 热 点蒋治平男,东南大学信息科学与工程学院,硕士研究生。裴文江男,东南大学信息科学与工程学院,教授,博士生导师。GPS车辆监控系统整合了全球定位系统、数字移动 通信系统、计算机网络系统、地理信息系统和应用软件, 它能对车辆进行实时监控、跟踪、调度和管理。GPS监 控系统主要由通信模块、数据处
2、理模块、数据显示模块构 成。心3部分组成,终端主要实现车辆定位、信息收发及车辆 的实时安全监控; 通信网络完成车载终端与监控中心的双 向数据传输; 监控中心完成对车载终端的数据存储、远程 调度及监控等功能1。本文介绍了车载GPS智能通信模块的设计与实现。 通信模块主要完成GPS接收机-服务器-客户端三者间的数 据传递,包括基于串行通信的服务器端与车载GPS终端通 信的实现,以及基于WinSock的服务器端与客户端通信的 实现。1车载GPS系统结构如图1所示,该系统由车载终端、通信网络、监控中图1 车载GPS系统结构整个系统的工作原理大致如下:车载终端通过接收 到的GPS信息,计算出车辆当前的经
3、度、纬度、速度、方412009.7.广东通信技术通 信 热 点向和其他信息(时间、状态等),然后利用GPRS模块通过 移动通信网络传送至监控中心,监控中心在接到车辆上传 的信息后,根据车辆的当前状况科学地进行调度和管理。2 系统硬件设计如图2所示,车载调度监控系统终端由智能控制系 统、 电源系统、 通信系统( GPS接收机和GPRS通信 机)、接口扩展系统以及摄像系统组成,用以实现对GPS 信息、报警信号、故障信息、车辆状态和管理信息等数据 的采集。uint8 time6;/*中心命令时间*/ uint8 reqTime6; /*回复命令时间*/ uint8 avi;/*数据有效位*/uint
4、8 latitude9; /*纬度*/uint8 latitudeType; /*纬度标志*/ uint8 longitude9; /*经度*/uint8 longitudeType; /*经度标志*/ uint8 speed6; /*速度*/uint8 status;/*车辆状态*/ ComRequest; 3.1.2 通信过程的实现GPS接收机与服务器的串行通信利用Windows提供 的API函数来实现2,实现过程主要包括:串口打开、设 置串口、读取串口信息、写串口信息。具体实现如下所 述:通 信 热 点图2 车载GPS系统硬件设计图3通信模块的设计与实现3.1 GPS接收机与服务器串行通
5、信的设计3.1.1 通信协议GPS接收机与服务器间的通信需要合理的数据协 议,为交互提供有效的平台。服务器向GPS接收机发送的数据结构如下:typedef struct uint8 serialNo10;/*车载机序列号*/ uint8 command; /*发送命令号*/uint8 time6;/*发送命令时间*/ uint8 param3117; /*命令参数指针*/ uint8 nParam;/*命令参数个数*/ GPS接收机返回的数据结构如下: typedef struct uint8 sn10;/*车载机序列号*/uint8 type2; /*车载机返回信息类型*/ uint8 co
6、mmand3; /*中心命令号*/(1) 串口打开 在进行通信前, 必须首先创建一个串行通信的句柄,并且调用CreateFile函数打开串口,具体实现如下:Handle m_SCom;m_ SCom= Create File(“ COM 2 ”, GENERIC_ R e a d | G E N E R I C _ W R I T E , 0 , N U L L , O P E N _ EXISTING,FILE_ATTRIBUTE_NORMAL, NULL);CreateFile函数中标示了要打开的串口为COM2,GENERIC_Read和GENERIC_WRITE表示可以对该串口 进行读写
7、操作,0PEN_EXISTING表示COM2串口是已经 存在的。(2) 设置串口通信内部缓存 在打开通信设备句柄后,常常需要对串行口进行一些初始化工作,这需要通过一个DCB结构来进行,具体实 现如下:DCB dcb;DCB是串行通信设备的控制字,DCB结构包含了诸 如波特率、每个字符的数据位数、奇偶校验和停止位数等 信息。在查询或配置置串行口的属性时,都要用DCB结构 来作为缓冲区。下面举例说明设置的过程:首先通过GetCommState函数获得串口默认设置,该 函数把当前配置填充到一个DCB结构中。42车载GPS智能终端通信模块的设计与实现GetCommState(m_SCom,&d
8、cb);根据通信需求,必须修改相应的DCB参数,如下所示:dcb.BaudRate = CBR_9600; /*设置波特率*/ dcb.Parity = NOPARITY; /*无校验*/dcb.ByteSize = 8; /*设置发送的一个字节为8比特*/设 置 完 d c b 这 个 结 构 体 之 后 , 必 须 调 用 SetCommState函数使得设置过的参数生效,如下所示: SetCommState(m_SCom,&dcb);(3) 设置串口通信时限COMMTIMEOUTS结构体用于设置通信设备时限参 数,结构体定义如下:typedef struct COMMTIMEOU
9、TS DWORD ReadIntervalTimeout;/*设置两连续字节最大时间间隔*/DWORD ReadTotalTimeoutMultiplier;/*接收每字节的平均允许时间*/ DWORD ReadTotalTimeoutConstant;/*接收时间常数*/设置完成COMMTIMEOUTS的实例对象后需调 用Set Comm Timeouts函数使配置生效。 如下所示: SetCommTimeouts(m_SCom,& timeouts);(4) 读串口信息 从串口读信息应调用ReadFile函数,实现如下 ReadFile(m_SCom,pBuffer,iLen,&a
10、mp;pRead,NULL); 将读到的数据放在内存pBuffer里,pBuffer为申请的内存空间,iLen为需要读的数据长度,pRead存放实际读 的数据长度。(5) 写串口信息 向串口写信息应调用WriteFile函数3:writeFile (m_SCom,pBuffer,iLen,&pRead,NULL);将要写的数据放在内存pBuffer里,iLength为需要写 的数据长度,pRead存放实际写的数据长度。3.2 服务器与客户端通信的设计服务器与客户端间的通信主要传送定位数据和控制信息,控制信息主要用来完成客户端对服务器的登陆,退 出,查询用户信息以及服务器端监控中心权限,
11、安全管理 等方面的数据请求。定位数据主要包含经纬度数据和车辆 状态数据等。如图3所示,客户端与服务器端通信由请求应答两 部分组成,通信采用基于MFC的socket通信实现。图3 客户端-服务器通信模型通 信 热 点3.2.1 Socket通信原理 Socket是网络通信的基本构件,它是被命名和寻址的通信端点,使用中的每一个Socket都有其类型和一个与之相连的进程。Windows Socket有两类:数据报套接字(SOCK_ DGRAM)和流套接字(SOCK_STREAM)。本文所述的客 户端与服务器端的通信采用流套接字。基于流套接字的异步Socket通信方式采用客户、服 务器的模式4,通信流
12、程如图4所示图4 Socket通信流程432009.7.广东通信技术通 信 热 点服务器端和客户端都必须建立通信套接字。而且服 务器端应先进入监听状态,然后客户端套接字发出连接请 求,服务器端收到请求后,建立另一个套接字进行通信。 原来负责监听的套接字仍进行监听,如果有其他客户发来 连接请求,则再建立一个套接字5。3.2.2 请求客户端在向服务器端发起连接请求的过程包括组包 和发包两个步骤。(1) 组包 客户端在向服务器请求数据前,需将数据打包发送通 信 热 点给服务器。这些数据包括了发起连接所需的必要信息,例 如客户端将希望获得的服务类型封装在RequestType结构 体中,然后将此结构体
13、做为请求数据包的一部分发送给服 务器,服务器通过解析该结构体即可获知客户端所需的服 务内容。该结构体定义如下:typedef enum RequestType REQUEST_LOGIN , /*请求登录*/ REQUEST_STATUS , /*请求汽车状态*/ REQUEST_LOGOUT , /*请求登出*/ REQUEST_TRAIL, /*请求汽车轨迹*/REQUEST_DRIVER_USER_INFO, /*请求用户信息*/REQUEST_ALARM, /*请求警报*/ REQUEST_UPDATE, /*请求更新*/ REQUEST_CAPTURE , /*请求地图数据*/ (2
14、) 发包客户端在完成组包之后,将调用相应的函数将数据 包发送给服务器,在这里通过一个实例加以说明。假设客户端向服务端请求地图数据,则客户端将服 务类型设置为REQUEST_CAPTURE,同时调用Send_ REQUEST_GET_PICTURE函数向服务器端发起请求, 服务器识别接收到的数据包中的服务类型,产生应答6。Send_REQUEST_GET_PICTURE核心部分如下:S e n d _ R E Q U E S T _ G E T _ P I C T U R E ( U I N T 3 2iDeviceId)requestPic.iDeviceID = htonl(iDeviceI
15、d);requestPic.iPacketLen= htonl(sizeof(requestPic); requestPic.iRequestType = REQUEST_CAPTURE; SendDataBySocket();该段代码中,requestPic结构体包含请求信息,该结 构体如下所示:typedef requestPic iDeviceID; iPacketLen; iRequestType其中iDeviceID表示请求数据的客户端ID,iPacketLen为发送的数据包的大小,iRequestType为客户端请求的服 务类型。在设置该结构体之后, SendDataBySocke
16、t()函 数将被调用,向服务器端发送请求。3.2.3 应答服务器在收到客户端的请求后,进行应答的过程包 括解包、连接建立、发包、连接异常处理。(1) 解包 服务器端在接收到客户端的请求之后, 通过调用ParseBuffer函数,对客户端发送的数据包进行解析,解 析过程如下:ParseBuffer(TCHAR *pBuffer) if ( pBuffer != NULL ) m e m c p y ( ( v o i d * ) & p a r s e d _ d a t a p B u f f e r,sizeof(PARSED_DATA); 该段代码中,服务器端首先判断pBuffer
17、(即缓存)中是否有数据,如果没有则继续保持等待状态。如果收到 数据,则调用memcpy函数将缓存pBuffer中的数据放入 parsed_data中,通过sizeof(PARSED_DATA)可以获得须 接收数据的大小。(2) 连接建立 服务器首先通过一个循环判断与客户端的连接是否建立。若与客户端未建立连接,则将bRet这个布尔型变量 设置为FALSE,否则调用memcpy函数将缓存szBuffer中44车载GPS智能终端通信模块的设计与实现的数据包发送给客户端,注意iTotalLen这个变量表示数据 包的大小,这个变量的存在有助于判断客户端接受的数据 包是否完全。if(m_ClientSoc
18、ket.m_bConnected =FALSE)bRet= FALSE ;elsememcpy(szBuffer,iTotalLen) (3) 发包服务器端调用send函数发送客户端请求的数据包,send(szBufferSend+iOffSet, iTotalLen-iOffSet ); send是WinSock提供的函数,用于向已建立的接口发送数据。szBufferSend这个变量存储的是已发送的数据 的长度,iTotalLen存储的是需要发送的数据包的总长, iOffSet则表示每次发送的数据的大小。由于网络带宽等限 制,不可能一次性将数据全部发送完毕,因此在发方需要 统计已发送的数据量
19、,当(iTotalLen-iOffSet)等于0时,发 送完成,发方停止数据传输。(4) 连接异常处理服 务 器 端 需 要 对 连 接 中 可 能 出 现 的 问 题 进 行 处 理 。 如 果 连 接 发 生 问 题 , 则 服 务 器 端 可 以 通 过 调 用WSAGetLastError函数,获得错误类型,然后采取相应的 处理。由于篇幅限制,这里只分析一种类型的错误处理。下面是一个连接错误的实例:if (iErrorCode= WSAECONNABORTED) m_ClientSocket.ShutDown();CString logIf;logIf.Format(“%sSoftware caused connection abort:”);首先根据iErrorCode判断可能发生的错误类型。 WSAECONNABORTED表示本机某种软件问题所导致的 连接中断,这种软件问题可能是数据传输超时或者是通 信协议存在错误。捕获到该信息时,通过调用shutdown 函数, 服务器端终止与客户端的通信, 同时创建一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年全国汽车知识技能大赛理论知识竞赛题库及答案
- 2025年行政管理经济法试题及答案解析
- 2025年二级消防工程师模拟练习及答案
- 2025年低压电工作业安全生产模拟考试题库及答案
- 2025年安徽初级保育员理论及技能知识竞赛题库及答案
- 2025年高校教师岗前培训高等教育心理学知识竞赛考试题库80题及答案
- 2025年传染病疫情信息报告管理培训考核试题及答案
- 语音合成系统的人机交互设计原则考核试卷
- 医药行业风险管理中的新兴技术影响分析考核试卷
- 专科护理人文关怀教育考核试卷
- 2025年度网格员招聘考试复习题库(含答案)
- 2025年宜昌市西陵区选调事业单位工作人员(3人)笔试备考试题附答案详解(夺分金卷)
- 2025年甘肃兰州市事业单位招考笔试《公共基础知识》题库(共50题)及答案
- 主变就位专项施工方案交底
- 海口充电桩管理办法
- 2025至2030中国虚拟电厂行业市场深度研究及发展前景投资可行性分析报告
- 医生避免在公共区域谈论病情
- 关键后备人才管理办法
- 潘三煤矿二水平东一B组煤采区地面瓦斯治理井工程环评资料环境影响
- 2025年社区党建与管理相关能力考核试题及答案
- 2025年辅警招聘考试真题(含答案)
评论
0/150
提交评论