




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1.概要车载终端与调度中心通讯协议。背景:GPS车载系统是安装在出租车上的一款集导航,调度,娱乐,远程刷卡,电话等为一体的智能移动终端设备。此设备硬件环境为ARM9,ARM11等设备,操作系统可能为WINCE,LINUX,android等。有了GPS车载终端和调度中心这个平台,可以最优化驾驶员和乘客的出车和求车的资源配置。本项目为模拟GPS车载系统调度应用,使得初学者能很快了解到此项目的大概需求,为以后在实际工作中积累一点实战经验。本项目有些应用无法模拟的地方均作了简化。请学员们小心推敲琢磨。另外,文中提到的通信格式(协议)通俗讲是一种封装,就像收发信件需要信封一样。每条协议都是有加heade
2、r头的,一是考虑安全,二是考虑你这条协议是干什么的,这样socket通信中的网络数据互不干扰,各自处理。客户端和服务器端模型均采用linux+select IO复用去实现。2.通讯格式和消息类型2.1通讯格式start(0x02)0长度注 112FLAG%2563FLAG/2564消息体(body)5n校验码注 2n+1end(0x03)n+2注1:长度= FLAG + 消息内容 + 校验码(字段的长度)低位在前 (小端字节)注 2:校验码 = 从长度到消息体字节异或(data0data1datan)2.2车载终端发起消息类型FLAG消息类型附0x03e0参数读取0X03e1参数设置0x03e
3、2驾驶员登录签到0x03e3驾驶员登出签退0x03e4请求驾驶员相片url信息0x03e5url请求下载驾驶员相片0x03e6驾驶员注册2.3调度中心发起的消息类型FLAG类型附0x03d01秒的定位信息0x03d1业务信息处理要求保存最大5条消息记录,客户端能模拟查询3.消息体定义3.1参数读取车载终端发送(一次读取3个)参数ID0参数ID1参数ID注12调度中心返回(一次返回3个参数内容)参数ID0参数长度(len1)1参数内容2len1参数IDLen1+1参数长度(len2)注2len1+2参数内容len1+3 注1:当车载终端读取参数时一次读取3个参数 注2:有3个参数以此类推可读取的
4、参数列表(选前3个即可)参数ID:1=允许拨出电话(MAX16字节) 2=调度中心IP(4字节) 3=调度中心端口号(2个字节)3.2参数设置车载终端发送:参数ID0参数长度(n)1参数数据2nMDT返回,成功后需要改写数据库 结果码1-成功, 0-失败)0参数ID:1=允许拨出电话(MAX16字节) 2=调度中心IP(4字节) 3=调度中心端口号(2个字节)注意:设置IP和port时候请返回失败,目前只能设置允许拨出电话3.3驾驶员登录签到车载终端发送驾驶员账号(10)01.9驾驶员密码(10)10.19调度中心返回 结果码1-签到成功,0-签到失败03.4驾驶员签退车载终端发送 消息内容空
5、调度中心返回,注意签退后不能下载相片了,故需要记录状态 结果码1-签退成功,0-签退失败03.5请求驾驶员相片url信息车载终端发送 消息内容空调度中心返回(模拟返回mypic1.jpg和mypic2.jpg的URL)测试选2张相片即可相片个数0第一张相片URL的长度1相片URL数据 (n=后面URL字节长度)(23.第二张相片的长度以此类推注1.相片URL数据 (n=后面URL字节长度)(.注1:相片URL长度+数据 3.6 url请求下载驾驶员相片(注意:3.5返回后3.6自动请求,不需要手动选择,是个自动请求的过程)车载终端发送 消息内容空调度中心返回(模拟下载mypic1.jpg和 m
6、ypic2.jpg)消息内容空做简单模拟:(回路地址测试才有效),在本机中使用system(cmd)系统命令,cmd为cp -rf车载终端绝对路径 调度中心路径 ,车载终端收到以后稍微提示下,打开文件以后会看到车载终端绝对路径下有2个图片文件,前提是调度中心有2个图片文件。3.7驾驶员登录签到车载终端发送驾驶员账号(10)01.9驾驶员密码(10)10.19调度中心返回(成功则写到数据库中(模拟用配置文件) 结果码1-注册成功,0-注册失败03.8 一秒的定位信息(模拟来自美国全球卫星GPS定位数据)调度中心发送(模拟每秒发送,数据帧$GPRMC中只修改秒数,从1-5秒循环发送(把缓冲GPS数
7、据放入数组中,共5组数据),此处去掉GPS本身的校验)参考数据:$GPRMC,100119.999,A,2236.8226,N,11403.7299,E,0.62,120.87,220506,*(详解见下文)车载终端收到即解析数据,不作返回GPS解析知识提取定位数据GPS接收机只要处于工作状态就会源源不断地接收GPS导航定位信息。把数据放入缓存发送到车载终端进程处理,在没有进一步处理之前缓存中是一长串字节流,这些信息在没有经过分类提取之前是无法加以利用的。因此,必须通过程序将各个字段的信息从缓存字节流中提取出来,将其转化成有实际意义的。同其他通讯协议类似,对GPS进行信息提取必须首先明确其帧结
8、构,然后才能根据其结构完成对各定位信息的提取。在本文中,其接受的数据主要由帧头、帧尾和帧内数据组成,根据数据帧的不同,帧头也不相同,主要有"$GPGGA"、"$GPGSA"、"$GPGSV"以及"$GPRMC"等。这些帧头标识了后续帧内数据的组成结构,各帧均以回车符和换行符(0X0D、0X0A)作为帧尾标识一帧的结束。对于通常的情况,我们所关心的定位数据如经纬度、速度、时间等均可以从"$GPRMC"帧中获取得到,该帧的结构及各字段释义如下,数据丰富的最典型情况,均为ASCII字符数据。$GPRM
9、C,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>*hh<1> 当前位置的格林尼治时间,格式为hhmmss.sss<2> 状态, A 为有效位置, V为非有效接收警告,即当前天线视野上方的卫星个数少于3颗。<3> 纬度, 格式为ddmm.mmmm格式不定长,例如:3111.4364<4> 标明南
10、北半球, N 为北半球、S为南半球<5> 经度,格式为dddmm.mmmm 格式不定长,例如:12125.1027<6> 标明东西半球,E为东半球、W为西半球<7> 地面上的速度,范围为0.0到999.9<8> 方位角,范围为000.0到 359.9 度<9> 日期, 格式为ddmmyy <10> 地磁变化,从000.0到 180.0 度(不考虑)<11>
11、0;地磁变化方向,为E 或 W(不考虑)数据缺失的最典型情况将是:$GPRMC,<1>,<2>,*hh<1> 当前位置的格林尼治时间,格式为hhmmss.sss<2> 状态, A 为有效位置, V为非有效接收警告,即当前天线视野上方的卫星个数少于3颗。数据将会出项缺失,时间回复到出厂时间,定位情况为V,(不定位警告)。至于其他几种帧格式,除了特殊用途外,平时并不常用,虽然接收机也在源源不断地向主机发送各种数据帧,但在处理时一般先通过对帧头的判断而只对"$GPRMC&q
12、uot;帧进行数据的提取处理。如果情况特殊,需要从其他帧获取数据,处理方法与之也是完全类似的。由于帧内各数据段由逗号分割,因此在处理缓存数据时一般是通过搜寻ASCII码"$"来判断是否是帧头,在对帧头的类别进行识别后再通过对所经历逗号个数的计数来判断出当前正在处理的是哪一种定位导航参数,并作出相应的处理。下面就是对缓存Data中的数据进行解帧处理的主要代码,例如某数据:$GPRMC,100119.999,A,2236.8226,N,11403.7299,E,0.62,120.87,220506,*' 100
13、119.999 -十分秒(格林威治时间)' 2236.8226,N -北纬坐标(2236.8226) 2236.8226,S -南纬坐标'
14、11403.7299,E -东京坐标(11403.7299) 11403.7299,W -西京坐标' 0.62 -gps的移动速度'
15、0; 120.87 -地面的方位角' 220506 -日期/GPS数据结构typedef struct _GPSDatachar date15 /Gps数据日期char time15 /Gps数据时间char latitude_type; /纬度类型,北纬,南
16、纬char latitude15 /纬度值char longitude_type; /经度类型,东经,西经char longitude15 /经度值char speed6;/速度/char starNum; /卫星数目char IsValid;GPSData,*PGPSData;/*point为所有的帧数据,buflen为帧长度,要求您写的AnalyGpsData过滤掉其他帧,只处理$GPRMC数据*/void AnalyGpsData(char *point,
17、 int bufLen)int i,err = 0,nDotNum = 0;memset(&m_gpsCurData,0,sizeof(m_gpsCurData);/注意数据结构的初始化char buf16 = 0; /储存','到','之间的数据while(1)if(
18、*(point) = '$')/$GPRMCif(*(point) = '$')&&(*(point+1) = 'G')&&(*(point+2) = 'P')&&(*(point+3)= 'R')&&(*(point+4) = 'M')&&(*(point+5) = 'C')
19、while(1)i = 0;while(*point != ',')bufi = *point;i+;point+;point+;bufi = '/0'nDotNum+;switch(nDotNum)case 2:memcpy(m_gpsCurData.time,&buf0,strlen(buf);break; case 3: / Valid(A)/InValid(V)if(buf0 = 'V
20、9;) err = 1;/没有定位m_gpsCurData.IsValid = buf0;break; case 4: / 纬度:22.342551if(err = 0)memc
21、py(m_gpsCurData.latitude,&buf0,strlen(buf);break; case 5: /南北纬/if( (buf0 != 'N') && (buf0 != 'S') ) goto Wrong;if(err = 0)m_gpsCurData.latitude_type = buf0;break; case 6: / 经度:114.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 车辆保管寄售协议书
- 人工费外包合同协议书
- 驾校投资加盟协议书
- 采样作业安全协议书
- 解除期权股权协议书
- 代家长陪读合同协议书
- 让老公签忠诚协议书
- 农场看护房转让协议书
- 车祸报废赔偿协议书
- 解除增资扩股协议书
- 超星尔雅学习通《美学原理(北京大学)》2025章节测试附答案
- (高清版)DB11∕T2256-2024城市轨道交通钢轨踏面维修技术规范
- DB11∕T2279-2024社会单位消防安全评估规范
- 病历质量培训课件
- 机房施工安全培训
- 中国卒中学会急性缺血性卒中再灌注治疗指南+2024解读
- 装饰报价单完整版本
- 设计单位现场施工期间配合及技术经验服务措施
- 【MOOC期末】《英美文学里的生态》(北京林业大学)期末中国大学慕课MOOC答案
- 能源管理系统投标技术文件
- 大学生个人职业生涯规划课件模板
评论
0/150
提交评论