1 引言
在车辆定位系统中,GPS 系统是目前世界上应用得最为广泛的,其功能作用已广为人所接受。它能为用户提供全球、全天候、高精度、连续实时的导航、定位和授时。
随着移动 GPRS 业务的开展,GPRS 在无线传输中已经成为一种成熟可靠的传输方式。
GPRS 网本身支持TCP/IP、X.25 等协议,可以直接与IP 网或X.25 网互通,实现GPRS 终端的上网功能。它
可以保证永远在线,而且是按照流量记费,不传输数据时不计费,同时中国移动公司的众多基站和可靠的频段信号能够保证信息传输及时、无误。
2 系统总体结构和实现功能介绍
本系统基于 GPS/GPRS 进行设计,主要以出租车公司为服务对象,总体结构如图1:
图1 系统总体结构
主要实现的功能为:
出租车终端利用 GPS 模块实时地接收其定位、速度、时间等信息,然后通过GPRS 模块将这些信息上传至监控中心,在遇到紧急情况时,向监控中心发出求救警报。
监控中心将接收到的信息写入数据库,对车辆的位置、速度进行实时的监控,必要时发出警告信息,处理客户预订业务时向出租车发送调度信息。
3 整体系统的设计
本系统的设计主要由三部分组成:出租车终端软硬件设计、监控中心软件设计以及车载终端和监控中心通信程序设计。
3.1 出租车终端的软硬件设计
3.1.1 出租车终端的硬件设计
该终端硬件部分主要由主控芯片、GPRS 模块、GPS 模块组成。
主控芯片选用三星公司生产的 S3C2410 处理器,该处理器采用ARM920T 内核,S3C2410外围电路包含电源模块、64M SDRAM、64M FLASH、RS232 串行口、USB 接口、4×4 键盘接口模块、LCD 模块等。
GPS 模块选用的是Compass Systems 公司生产的GM611 滑鼠型GPS 卫星接收机,它具有超高灵敏度、超低功耗和超小体积的特点,而且带强力磁性,拥有严格的防水设计,可将其直接吸附于车顶使用,2D 定位精度小于10 米。该GPS 模块与主板的串口1 连接,上电后以每秒钟一次的频率将定位信息传送给处理器。
GPRS 模块选用的是WAVECOM 公司生产的WISMO QUIK Q2406A 模块,它是GSM/GPRS 900/1800 双频模块,与标准的AT 指令兼容。它与S3C2410 主板的串口2 连接,实现GPRS 拨号上网。
3.1.2 出租车终端的软件设计
该终端的软件设计主要包含两个部分:GPS 定位信息的接收和GPRS 拨号上网的实现。
由于终端移植了嵌入式Linux(内核版本为2.6.16),它提供丰富的设备支持和成熟的系统管理能力,因而大大地简化了软件的开发过程。
(1)GPS 定位信息接收的实现
该过程主要通过 Linux 串口通信编程来实现,在实现过程中的关键处理部分是:串口属性设置以及对接收到的GPS 信息的解析。
由于 GPS 模块输出的每帧数据都是以换行符结束,所以在设置串口属性的时候可将其模式设为规范(Canonical)模式,即每次读取串口时先将数据保存到缓存,直到读到换行符时所有数据才会被传输,这样就能保证每次读取的是整帧数据,方便之后的帧头判断和信息解析。接下来还要根据GPS 模块的默认参数配置串口传输速率为4800bps,8 位数据位,1 位停止位,无校验位,串口属性就设置完毕了。
GPS 模块的输出帧遵循NMEA0183 标准,具有多种格式,主要由帧头进行标志,包括$GPGGA、$GPGLL、$GPGSA、 $GPGSV、$GPGMC、$GPVTG 六种帧,分别描述不同信息,一般来说$GPRMC 帧就可以提供我们所关心的数据,如经纬度、速度、时间等,所以只需对该帧信息进行提取。$GPRMC 帧的格式如图2:
图2 GPRMC 帧的格式
在每次读取的时候首先需要对帧头进行判断是否是$GPRMC 帧,然后再根据帧中的逗号位置,对该帧数据进行解析,提取所需的定位、速度和时间信息。
(2)GPRS 拨号上网的实现
该部分是整个系统的关键,是实现出租车终端和监控中心进行无线通信的基础,该过程主要依靠PPP(点到点协议)来实现,它可以实现在串行链路上创建和运行IP 协议。
为了能够实现PPP 连接,首先需要配置内核使其支持PPP,然后通过交叉编译生成ARM平台下的pppd 和chat 应用程序。PPP 连接的建立和维持需要由pppd 和内核中的PPP 驱动程序配合完成。chat 程序主要用于和GPRS 模块进行交互,完成拨号和各项配置。执行pppd的时候将首先调用chat 程序进行拨号连接,PPP 链路的建立流程如图3:
图3 PPP 链路建立流程
首先执行 chat 程序对中国移动的接入号码进行拨号,建立与PPP 服务器端的物理连接,然后进行LCP 链路的协商,主要协商一些链路参数(数据帧格式、最大传输单元等),协商成功后将建立与PPP 服务器端的数据链路,接着向PPP 服务器端提供用户和口令进行PAP验证,在未通过验证之前是不能进行任何数据传输的,最后,进行IPCP 协商,主要进行IP地址的协商,协商成功后,出租车终端将获得GGSN(GPRS 网关)为其动态分配的IP 地址。PPP 链路就建立完成了,之后出租车终端就相当于公网上的一台主机,可以自由地与Internet 的其他主机进行数据交互了。
3.2 监控中心的软件设计
监控中心是位于出租车公司的控制中心,它与公司服务器进行局域网连接如图1,服务器具有固定公网(Internet)IP 地址,而监控中心的IP 地址为局域网IP,公网上的主机(出租车终端)是不能通过该IP 来访问监控中心的,要想实现这个过程,必须在公司服务器设置端口映射,端口映射的原理是将拥有固定IP 地址的服务器端口映射到处于局域网的某台主机端口上,如图4:
图4 端口映射示意
上图中,将服务器的1111 端口映射到局域网内监控中心的2222 端口,这样外网主机发往服务器1111 端口的数据都将被重定向到监控中心的2222 端口,监控中心只要开放并监听该端口,即可获得相关数据。
监控中心主机采用 Debian Linux 操作系统,Debian 是一套为计算机设计的自由操作系统,它包含一万五千多个软件包,都是自由开源的,并被包装成容易安装的deb 格式,Debian是一款功能强大的Linux 操作系统。
监控中心的软件设计主要完成以下两个任务:接收出租车终端发送过来的信息并写入数据库;设计图形管理软件,方便各项功能的实现。
(1)接收出租车终端发送过来的定位信息并写入数据库
设计一个守护(Daemon)进程,它可以实现在操作系统启动后一直在后台运行,不受控制终端的控制,该进程主要用于监听本监控中心的指定端口,接收由出租车终端发送过来的定位、速度和时间信息,然后将所有信息写入POSTGRESQL8.0 数据库[4]。POSTGRESQL数据库是世界上可以获得开放源码的最先进的数据库系统,支持几乎所有 SQL 构件(包括子查询,事务和用户定义类型和函数),并且为多种开发语言提供接口(包括 C,C++,Java 等)。
Linux 系统下采用C 语言对该数据库进行操作,主要用到以下三个函数:
PQconnectdb(“dbname=psql_data”)用于打开名为psql_data 的POSTGRESQL 数据库;PQexec(PQconnectdb(),sql_query)用于对打开的数据库执行各种SQL 语句;PQfinish()用于关闭打开的数据库。
(2)图形管理软件设计
监控中心采用 GTK+2.0 进行图形管理软件的开发,GTK+2.0 采用面向对象的C 语言开发框架,尽管完全用 C 写成的,但它是基于类和回调函数的思想实现的,应用它可以轻松的在Linux 系统平台的X WINDOW 环境下开发出漂亮的图形界面应用程序。
该管理软件采用双线程编程,实现的功能如图5:
图5 监控中心软件功能
POSTGRESQL 数据库中保存的信息是各项功能实现的基础。由于GTK+2.0 开发可以完全使用C 语言来实现,所以在一个GTK+2.0 程序中可以很方便的进行POSTGRESQL 数据库的各项操作。需要注意的是在使用GTK+2.0 开发中文软件的时候要将输入字符设置为utf-8 的格式,否则软件不能正常显示中文字。
3.3 车载终端和监控中心通信程序设计
出租车终端已获得 IP 实现拨号上网,监控中心也进行了服务器端的端口映射,两者都成为了连上Internet 的主机,接下来就可以通过Socket(嵌套字)实现两主机进程间的通信。
在网络通信过程中,各主机的进程是由与其绑定的端口号来进行区分的。
出租车终端和监控中心采用 client 和server 模型,因为数据发送比较频繁,所以使用UDP 协议进行数据包的传输,以提高传输速率。首先由车载终端进程创建一个Socket,接着向监控中心指定端口发起连接请求。监控中心进程也创建一个Socket,并将其绑定到该指定端口,接着对该端口进行监听,一旦检测到连接请求,随即调用connect 函数建立该连接,从而在两主机上的Socket 之间建立连接,之后双方进程之间就可以通过send()和recv()函数进行数据的发送和接收操作了。
4 结论
经过实际调试应用后,系统运行稳定。再加上本系统软件部分都是在Linux 操作系统下实现,使得系统开发成本大大降低,如果在车载终端硬件设计时能够进行针对性的优化配置,将使得成本进一步降低。另外,在本系统的基础上扩展其他功能也是很方便的。