基于CDMA的车载终端数据通信实现
扫描二维码
随时随地手机看文章
摘要:本文介绍了一种用于自动检测CDMA与GSM网络质量参数的监测系统的实现。详细论述了车载终端如何通过 CDMA无线网络接入Internet与监控中心服务器建立TCP连接并传输数据,给出了通信模块的硬件连接图和相应的AT指令。最后总结了开发过程中遇到的典型问题,并提出了解决方案。
关键词:车载终端;CDMA;TCP;AT指令
在传统的移动网络中,很多网络问题需要工程师或者技术人员携带仪表驾车路测来发现。这种测试方法在以往的网络优化测试中已采用多年,存在系统复杂、人员管理不方便、效率低下等问题。且每个技术人员或工程师都不可能负责太多的基站小区优化工作和问题分析。为此,建立无线网络质量自动监测系统的工作是有必要的。
车载终端简介
车载终端组成
图1为车载终端的结构图,车载数据终端主要包括单片机(rabbit2000)、GPS模块、CDMA 手机模块、GSM手机模块、铁电存储器、电源变换模块等。其中,CDMA模块负责所采集数据的无线传输。
图1 车载终端结构图
车载终端工作原理
车载终端的工作原理可以描述为数据采集、数据处理及存储、数据上传几个过程。其中数据采集读取GPS模块返回的消息,提取经纬度信息,通过GSM和CDMA 模块分别采集CDMA和GSM网络质量参数;数据处理及存储根据经纬度信息判断车辆行驶距离,由此距离判断是否记录该次采集的数据,上传数据时再从铁电中读取这些数据;数据上传通过简单IP实现与监控中心的TCP连接,并实时检测TCP连接状态,连接中断则立即重新连接,保证数据能实时地上传给监控中心。
数据传输的实现
硬件连接
本文中采用了MG815+模块及UIM卡,硬件连接如图2所示。图中左侧为UIM卡连接参考电路,右侧为MG815+模块连接参考电路。由于模块串口输出电平为3.8V,而Rabbit串口输出电平为5V,因此在两者之间增加了串口电平转换芯片NC7WZ07,以提升Rabbit和模块之间串口通信的可靠性。
图2 MG815+及UIM卡的硬件连接图
AT指令
AT(Attention) 指令最初由 Hayes 公司推出,主要用于对调制解调器的控制,现在已演化为一种标准,所有移动模块都支持 AT 指令。虽然不同厂家的手机模块都参照 GSM 协议,但格式还是有所不同,开发过程中一定要认真参考厂家给的资料。AT 指令格式如下:
AT指令都以“AT”开头,以结束,例如 “ATE0rn”
AT指令返回格式:<跟AT指令相关的字符串>,例如,对于上一AT命令的返回为“ATE0rnrnOKrn” 。
TCP连接的建立
TCP的连接建立经过以下过程:
① 建立拨号连接,AT命令为AT+ZPPPOPENrn。
② 建立TCP连接,AT 命令为AT+ZIPSETUP=SOCKET_NUM, IP_AD, PORT_NUM rn,例如AT+ZIPSETUP=1,211.136.18.171,5000rn。
③ TCP连接成功建立后,可以发送数据,AT命令为AT+ZIPSEND=, rrn,例如AT+ZIPSEND=1,4rgoodrn,发送的数据为“good”。
这里所用到的查询命令及各命令返回说明包括:
①查询拨号连接状态命令:AT+ZPPPSTATUSrn
返回有三种状态:拨号连接建立rn+ZPPPSTATUS: OPENEDrnrnOKrn
拨号连接断开 rn+ZPPPSTATUS: CLOSEDrnr nOKrn
正在拨号 rn+ZPPPSTATUS: * rnrnOKrn
②查询TCP连接状态命令:AT+ZIPSTATUS= SOCKET_NUM rn
返回有三种状态:TCP连接建立 rn+ZIPSTATUS: ESTABLISHEDrnrnOKrn
TCP连接失败 rn+ZIPSTATU S:CLOSEDrnrnOKrn
正在建立连接 rn+ZIPSTATUS:SYN_SENTrnrn OKrn
数据的发送和接收
模块从TCP通道接收到数据后,由串口返回消息:+ZIPRECV:0,1,, rn,例如,+ZIPRECV: 0,10,1234567890rn,则TCP通道接收的数据为1234567890。
+ZIPRECV为异步消息,在任意时刻返回,在接收该消息时要注意。
数据传输的软件设计
终端与监控中心以报文形式交互数据,报文包括数据包(采集的数据信息)、心跳包(定时发送,以维持网络连接)以及校时请求,以上均由终端主动发起,监控中心回复。数据通信子程序的流程如图3。
图3 数据通信流程图
根据流程图可知,发送数据后等待监控中心的回复消息,设置等待时间,若超时还无回复消息,则退出等待;下次发送数据时重新发送。
数据传输实例
终端发送的数据包如下:
01780102000146003030407 5345460008184101641000105 03010701221632303903.6741N1215 3.1326E27990357079425-70-66-632 004070031040828531405011144 1801194100068722100694210807 02200906902012
数据包中0178为报文长度;01为版本号;02为命令字;0001为数据包序列号;460030304075345为UIM卡号;460008184101641为SIM卡号;00010503为系统工作状态字;01为后面跟1条数据(每条长度126)。
0701221632303903.6741N12153.13 26E27990357079425-70-66-63200407003104082853140501114 418011941000687221006942 1080702200906902012为一条数据,依次为时间、经纬度、C网质量参数和G网质量参数。
注意事项
拆包现象
模块支持在TCP通道一次发送1024字节数据,但模块内部发送缓冲区为536字节,使用+ZIPSEND命令一次发送1024字节数据时,发送的1024 字节数据拆分为2条socket数据先后传送给监控中心服务器。可通过降低一次发送的数据量来避免此现象,即一次传输不多于536字节。
连包现象
如果两条+ZIPSEND指令时间间隔过小,或前一包数据还未发送成功时模块收到新的数据发送命令,则模块把两条指令中的数据合并为一条socket数据发送。此时,可以从两方面解决此问题:一是模块发送端每发送一个数据包后,等待监控中心返回确认消息后再继续其他工作,这样只能最大限度地防止上述现象的发生;另一方面是在监控中心接收端对上述现象进行容错处理。
此外,如果监控中心发送两条数据的时间间隔太短,模块接收数据时会出现中心发送的两条数据合并,以+ZIPRECV消息从串口返回,终端处理TCP数据时要考虑此问题。
异步消息的返回
模块返回的异步消息主要为TCP通道返回的数据。该消息的返回格式在前文中已说明。由于异步消息返回时间的不确定性,该消息会以两种方式从串口输出。一是单独返回。二是向模块发送AT指令后,异步消息随该指令的返回值一同返回,例如,当发AT指令查询拨号连接状况时,模块在TCP通道收到数据,则返回如下:rn+ZPPPSTATUS:OPENEDrnrnOK rn+ZIPRECV:1,24,002401810 000070312120016rn。在接收和处理异步数据时应充分考虑异步消息的这两种返回情况,以免丢失数据。
结语
本文详细论述了如何通过CDMA模块MG815+的数据传输功能实现车载终端与监控中心的通信,并给出了软件设计流程。最后对实测过程中遇到的问题提出相应解决方案,这对相关开发人员有很大的参考价值