基于GPRS的车辆监控系统技术研究
扫描二维码
随时随地手机看文章
摘要:为了对危险品运输,客运、货运、工程车辆等特殊行业的车辆定位跟踪,采用了GPS定位系统和GPRS通信技术实现了车辆实时监控系统;实现了以GPRS通信技术作为信息传输载体在车载终端,监控中心进行数据通信,GPS定位和WebGIS技术实时展示车辆信息;该系统具有通信速度快、通信格式扩展性强、通信可靠性高,客户端对车辆的控制性强,前端使用Web页面展示车辆状态和位置,系统无需安装,用户使用便捷等特点。
关键词:车辆监控系统;GPS;GPRS;UDP
0 引言
随着我国经济的发展,车辆日益增多,交通运输的经营管理,货运、客运的安全管理等,已成为公安、交通系统中的一个重要问题。车辆监控系统以全球定位系统(Global Posit ion System,GPS)和GPRS(General Packet Radio service)通信技术基础,它可以将车载单元上接受到的实时定位数据通过无线网络传送至监控中心服务器上,监控中心计算机再利用地理信息系统的地图显示功能,以及信号指令的发送功能,实现对动态车辆的跟踪与调度控制,从而建立起的一种大范围、全方位发挥作用的、实时、准确、高效的综合车辆调度和管理系统。系统基于Internet网络,将监控中心、远程监控终端、数据服务器、无线移动通信网、GPS车载终端有机地结合在一起,以Internet服务器为核心实现分布式监控。
1 系统结构
基于GPRS的车辆监控信息系统由4个主要部分构成,即监控服务中心、车载终端、监控终端及无线通信网络构成;监控服务中心是系统的核心部分,它连接车载终端和客户端。监控服务中心由Web服务器,通信服务器,数据库服务器构成。通信服务器接受车载终端的数据,并将数据转发给Web服务器和数据库服务器。该系统结构图如图1所示。
2 系统关键技术
2.1 GPRS通信技术及UDP数据传输协议
在车辆和监控中心之间需要通信设备来发送或接收信息。通信手段的选择是监控系统的难点和技术关键。合理的通信方式的选择可以为监控系统的指挥调度、报警处理提供一个稳定、快速的平台。
车辆监控系统使用GPRS网络作为传输载体。GPRS是一种采用分组交换和传输技术的高效率数据传输方式。它克服了电路交换速率低、资源利用率差等缺点,最大限度地利用了现有的GSM网络资源,提高了传输速率。相对于短消息方式来说,GPRS服务既提高了质量又降低了使用费用。移动车载终端与监控调度中心之间的通信突发性较强,而每次数据量较小,使用GPRS网络作为其传输载体是目前比较理想的解决方案,GPRS通信主要分为TCP和UDP协议。
CP和UDP协议同在传输层,由于本系统每次传输的数据量小而且突发性强,所以采用UDP协议传输数据。UDP协议的主要作用是将网络数据流压缩成数据报的形式。一个典型的数据报就是一个二进制数据的传输单位。UDP协议为不可靠的传输协议,不提供数据传送的保障机制。如果在从发送方到接收方的传递过程中出现数据报的丢失,协议本身并不能做出任何检测或提示。因此,必须在应用层的协议中添加保障信息传输可靠性的确认机制。监控中心向终端下传数据时,要求终端返回接收正确或错误的确认信息,监控中心收到正确的确认信息后数据下传进程才完毕。否则,监控中心将在规定的时间内重发,直到收到正确的确认信息或发送次数标志溢出才终止。
GPRS网络UDP端口资源十分紧缺,变化很快;UDP由于自身特点,以及GPRS网络UDP端口资源的有限性,在一段时间没有数据流量后,端口容易改变,产生的影响就是从服务器中心端向GPRS终端发送数据,GPRS终端接收不到。原因是移动网关从中做了中转,需要隔一定时间给主机发UDP包来维持该IP和端口号,这样主机就能主动给GPRS发UDP包,笔者在测试中发现,这个间隔时间很短,约1 min发一次UDP包才能够维持,再长时间移动网关那边就要丢失这个端口了,逾期主机想主动发数据给终端,将无法送达。只有GPRS终端设备重新发一个UDP包过去,移动再分配一个中转IP和端口,才能够进行双向通信。为保证端口有效性和数据实时性,终端设备每5 s发送一条包含定位和状态的数据给服务器。
2.2 基于C#发送、接收UDP数据包使用的主要方法
(1)UDP数据类。用Visual C#实现UDP协议,最为常用,也是最为关键的类就是UdpClient,UdpClient位于命名空间System.Net.Sock ets中,Visual C#发送、接收UDP数据包都是通过UdpClient类的。UdpClient类主要有以下几个方法,见表1。
(2)接受终端UDP数据。接收UDP数据包使用的是UdpClient中的“Receive”方法。此方法的调用语法如下:public byte[]Receive(ref IPEndPoint remoteEP);参数remoteEP是一个IPEndPoint类的实例,它表示网络中发送此数据包的节点。下面就是通过侦听本地端口号“8 080”来获取信息代码:
UdpClient server=new UdpClient(8080);
IPEndPoint receivePoint=new IPEndPoint(IPAddress.Any,0);
byte[]recData=server.Receive(ref receivePoint);
recData就是接受到的UDP报文,其中UDP包头结构如下:源端口16位,目的端口16位,长度16位,校验和16位;上文中阐述了GPRS的UDP端口非常紧缺,随时会变化,在每次接受到UDP报文后,必须记录源端口、IP地址。receivePoint参数是引用类型,receive到新的UDP后,receivePoint对象的address和port属性值就是发送源的IP地址和端口。这个IP和端口未必是真的终端的IP和端口。因为终端上的应用程序绑定本地一个端口(比如是9002),通过这个端口发送请求给路由器,路由器由此记录下终端的内网IP和端口(9002),然后路由器分配自己的一个空闲端口(比如是7000),通过这个端口(7000)发送请求给监控中心。而对于监控中心,它没有任何关于终端的信息,它要做的只是回信息到路由器的外网IP的7000这个端口。路由器收到发送到其7000端口的数据后会再转发给终端。
(3)发送UDP数据报。发送UDP数据报使用“Send”方法。“Send”方法的调用语法如下:public int Send(byte[]dgram,int bytes,IPEndPoint endPoint);参数说明:dgram要发送的UDP数据文报(以字节数组表示)。bytes数据文报中的字节数。endPoint一个IPEndPoint,它表示要将数据文报发送到的主机和端口。返回值是已发送的字节数。下面使用UDPClient发送UDP数据包的具体的调用例子:
该代码实现了对某终端发送UDP报文后的回复。如果需要主动向终端发送报文则需要从数据库中提取该终端最近一次的IP和端口号,调用该方法发送内容。
2.3 数据封装和转存
监控中心与客户端的数据通信包含2种:一种是上行数据,一种是下行数据。上行数据包含终端汇报车辆的状态信息,车辆实时信息,车辆语音信息,视频信息等。下行信息包含对终端的回应,车辆的实时控制等信息。数据种类大约一百多种,可分为20多种格式。针对每种格式定义一个结构进行数据接受和转存到数据库,进行数据显示和分析。终端返回数据一般是结构类型,为保证数据转换准确和便捷,C#也使用同样的结构对数据进行接受。上文中UDP报文接受到的正文是byte类型,该byte内容有报文头和报文类型、校验部分和正文构成。根据报文类型找到对应的C#结构体structType。利用Marshal.SizeOf(structType);获取结构体大小,并进行分配空间:IntPtrstructPtr=Marsh al.AllocHGlobal(size);然后将byte数组拷到分配好的内存空间:Marshal.Copy(recData,0,structPtr,size);将内存空间转换为目标结构体objectobj=Marshal.PtrToStructure(structPtr. struct Type)。为提高系统的实时响应速度,这些数据分为2种处理方式,如非紧急数据直接保存到数据库,而如果是紧急数据,比如车辆报警数据,车辆控制数据则直接通过Socket连接发送到Web服务器,由Web服务器推送到浏览器监控端。
3 结语
本文主要分析了监控系统的GPRS通信技术,详细介绍了基于GPRS的UDP数据通信流程和方法,实现了C#环境下接受,发送UDP数据报文,协议的定制,数据转存等关键技术。本文解决的问题是监控系统的核心内容,但并不是全部,一个完整的系统还应包括终端硬件设计以及后台监控软件、GIS地图显示等许多方面。今后,应通过进一步的研究。解决系统其他相关技术。