精品毕业设计基于嵌入式Linux的车辆稽查系统设计书定.docx

上传人:b****5 文档编号:7654195 上传时间:2023-01-25 格式:DOCX 页数:29 大小:143.30KB
下载 相关 举报
精品毕业设计基于嵌入式Linux的车辆稽查系统设计书定.docx_第1页
第1页 / 共29页
精品毕业设计基于嵌入式Linux的车辆稽查系统设计书定.docx_第2页
第2页 / 共29页
精品毕业设计基于嵌入式Linux的车辆稽查系统设计书定.docx_第3页
第3页 / 共29页
精品毕业设计基于嵌入式Linux的车辆稽查系统设计书定.docx_第4页
第4页 / 共29页
精品毕业设计基于嵌入式Linux的车辆稽查系统设计书定.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

精品毕业设计基于嵌入式Linux的车辆稽查系统设计书定.docx

《精品毕业设计基于嵌入式Linux的车辆稽查系统设计书定.docx》由会员分享,可在线阅读,更多相关《精品毕业设计基于嵌入式Linux的车辆稽查系统设计书定.docx(29页珍藏版)》请在冰豆网上搜索。

精品毕业设计基于嵌入式Linux的车辆稽查系统设计书定.docx

精品毕业设计基于嵌入式Linux的车辆稽查系统设计书定

基于嵌入式Linux的车辆稽查系统设计书

摘要

本论文主要是设计并实现一个基于嵌入式Linux和GPRS的车辆稽查系统,该系统的终端具有体积小、携带方便、集成部分手机功能等特点,可以做为交通部门路面车辆稽查的强有力补充。

系统分为终端和服务器两大部分。

终端采用了基于arm9核的s3c2410芯片和Linux2.6.9内核,并采用QTE作为图形界面开发包。

在终端设计方面,本文着重地介绍了u-boot、Linux在s3c2410上的移植方法和Linux下的串口编程方法、QTE图形界面编程方法。

并且对终端系统的源代码进行总结和分析,最后展现了终端系统的软件运行结果。

服务器采用了红帽Linux企业版操作系统和oracle11g数据库,并以Java做为服务器软件编程语言。

论文详细地介绍了JDBC编程方法、数据库设计和服务器软件流程图,并且对服务器核心的java源代码进行分析和总结,最后也展示了服务器软件运行结果。

在论文的最后,对本系统做出了进一步分析和总结,提出了系统存在的不完善之处和相关的解决方法。

关键词嵌入式,Linux,交通稽查

1.引言

1.1项目简要介绍

本项目采用嵌入式Linux技术,结合GPS、GPRS通信技术和DES加解密技术,实现一个远程车辆稽查手持终端和相应的企业级服务器。

该系统具有车辆稽查所需要的常用操作和数据库,并具有高安全性和全网监控的功能。

1.2项目提出的背景和意义

目前,我国的公路基础建设已进入快速发展阶段,公路里程有了大幅度的提高,汽车已经逐渐进入家庭,在路车辆不断增加。

据不完全统计,每年全国漏征养路费高达人民币30-40个亿,给国家造成了巨大的经济损失。

同时汽车的盗抢、丢失、违章等事件越来越多,需要交通征费稽查部门、公安交警部门上路检查的时间大大增加。

因此,在路面进行移动车辆稽查显得越发重要。

在城市车辆稽查中,通常有以下三种方法:

第一种是通过单纯的人力进行路面拦截的车辆稽查。

这种方法只能检查车辆驾驶员当时是否违反交通法则、驾驶员是否有相应的驾驶照、驾照是否过期失效或者是车辆是否超载违规、年审失效等基本信息,而关于车辆以前违规次数、车辆欠费情况等现场不能取得的重要信息往往无能为力。

甚至有时候驾驶员无证驾驶,也可以推搪说成是忘记带驾驶证了,这给交通部门工作带来很大的干扰。

第二种是采用笔记本电脑,通过查询笔记本电脑存储的车辆信息和驾驶员信息数据库而进行的车辆稽查。

这种方法首先最大的缺点是数据库不能够实时同步,并且需要经常更新和维护数据库,给工作人员带来很大麻烦。

其次是携带不方便,浪费资源。

因为笔记本只用来查询,而不能集工作人员手机功能与一身,并且投资巨大,浪费财政。

第三种是采用便携式智能车辆稽查系统,该系统由笔记本电脑、摄像机、支架、Windows2000/XP操作系统、相关的识别软件构成,可以安放在收费站上面,也可以安放在车辆上面,具有实时捕捉图像、自动识别车牌号,并且检查车辆是否欠费或者来历不明并且进行报警。

该系统是目前最为先进的车辆稽查系统,能够大大提高工作人员的工作效率。

主要缺点是费用高,每套系统要5到6万人民币,并且在不能代替一切的车辆稽查,比如查询不能通过摄像头拍到的车辆或者是查询泊车是否超时等,均无能为力。

三种方法的优缺点比较如下表所示:

表1-2三种稽查方法的优缺点比较

基于嵌入式Linux的车辆稽查系统可以有效解决上述问题,用户只要一个手持终端,就可以进行路面车辆的轻松稽查,方便快捷,并且可以和数据库实时同步。

该系统成本低廉、功耗低、集合了开源Linux技术,具有推广使用价值和借鉴意义。

1.3特色和创新点

虽然嵌入式Linux并不是一个新鲜的话题,但是本系统在设计的时候充分考虑到了用户成本、系统稳定性、用户的需要等内容,使得本系统具有以下特色和创新点。

●充分采用开源技术。

终端大部分技术均采用了开源技术,包括引导程序、Linux操作系统、图形界面开发框架,服务器也采用了开源的Linux作为服务器。

●成本低廉。

由于采用了开发技术,可以减少成本,而终端的设计本身就是立足在高性价比的ARM芯片上,而上网是采用GPRS上网,可以减少大部分的通信费用。

●高安全性。

采用DES加密算法实现服务器和终端的安全通信,并且用户需要认证才可以接入数据库。

●集中控制。

终端采用GPS技术,使得服务器可以监控所有终端的状态、位置。

●系统的可维护性和升级。

大部分嵌入式系统在完成产品推出后,系统就难以升级,而本系统由于有强大的Linux做为操作系统,可以不断地添加外部设备,充分利用开源技术,并且可以保持与时俱进,进行产品的升级。

由于采用了中央数据库,从而可以保证系统的可维护性。

●用户界面友好。

大部分嵌入式设备的图形界面均相当简单,主要是满足了不同的需求,而本系统采用的图形界面框架,可以设计出和Window上相似的图形界面,相比其他嵌入式产品来说,友好的图形界面是一大特色。

●可规模生产,具有产业价值。

嵌入式系统的一大特点就是用户量大,同样,本系统一旦设计完成通过调试,可以大规模生产,并做为推广之用。

●自主知识产权。

2任务概述

2.1目标

本系统的目标是实现一个基于嵌入式Linux技术、GPRS技术、GPS技术、加解密技术的手持终端设备和基于Internet的服务器系统。

系统采用C/S模型,可以解决路面车辆信息的查询和数据库更新、拨打电话等功能,并具有高安全性和全网监控、全球导航功能。

2.2用户特点

本系统面向的用户属于交通稽查部门或者交警相关部门人员。

这些人员对计算机的熟悉程度较低,因此系统应该具有友好的使用界面和稳定性。

对于服务器可以由相关专业人员维护。

2.2系统特点

1.终端性价比高。

因为采用了arm9芯片和Linux操作系统,在提高终端性能的同时降低价格。

并且GPRS上网费用低,永远在线,按流量计费也进一步降低了费用,解决了费用问题。

2.终端功能多。

该系统集成查询、拨打电话、发送短消息功能于一身,并且提供了一个PDA界面,可以获得很多的桌面应用软件,比如上网、文本编辑器等。

在后续的开发中,可以加上无线局域网、蓝牙功能,与小型打印机相连,实现增开罚单、缴费开单等功能。

3.终端携带方便。

本系统体积小,可以随身携带,可以当做通用的智能手机那样使用,因此适合街道交通警察查询车辆情况。

4.高安全性。

服务器和终端的通讯是加密的,可以保证通信的安全。

用户登录采用认证系统,可以保护本地数据库。

服务器可以监控所有终端的状态信息。

3需求分析

3.1功能需求

服务器

全网监控

终端管理

数据库管理

GPS

导航

手持终端设备

基于嵌入式Linux车辆稽查系统

图形界面

数据库更新

车辆查询

图形界面

拨打电话

图3-1系统功能结构图

系统的功能结构图如图2-1所示。

3.2性能需求

终端响应时间:

<0.8秒

持续供电:

>3天

可靠性:

>365天

服务器可支持终端:

>500台

3.3成本需求

终端单价:

<600元

3.4安全性需求

由于车辆稽查数据库为保密性数据库,非合法人员不能使用、窃取数据库数据,因此,在通信时候必须保证安全性。

本系统通过用户认证、通信加密等方式来实现安全性。

4.总体设计

根据需求分析结果,总结出车辆稽查系统需要满足的一些特性,分别为:

低成本、高安全、界面友好、性能稳定、具有可扩展性、服务器并发量大。

根据这些特点,作者在此提出了如下系统结构,采用C/S模型。

如图4-1所示。

图4-1系统总体结构图

终端采用ARM9芯片,带有GPRS模块可以无线上网,以触摸屏做为数据输入和显示,并具有GPS功能。

采用Linux作为操作系统和C/C++编程语言,借助QT框架,提供了友好的图形界面。

查询数据以TCP/IP数据包的形式输送给GPRS网络。

GPRS网络通过无线基站,将收到的数据包通过其网关(GGSN)送入到因特网中,而因特网将数据包传送到服务器,供服务器处理。

稽查系统服务器采用红帽Linux企业版做为操作系统,以Oracle作为后台数据库,以java作为编程语言。

主要负责接收终端发送过来的TCP/IP数据包并执行数据库查询或更新操作,并且返回给果,同时提供图形界面以支持对终端的管理工作、监控工作和对数据库进行操作。

在实际运行的时候,服务器可以采用专线接入到GPRS网络中,这样可以避免重要数据库在因特网上的传送。

5.终端详细设计

5.1终端硬件设计

GPS模块

终端硬件设计如下图所示,其中电源电路、复位电路等没有标出来。

下图主要是列举了一些重要的功能,考虑可扩展性,可以在未来接上WIFI和蓝牙、红外、摄像头等接口。

5.1.1处理器

终端采用三星公司的S3C2410芯片。

S3C2410是一款基于ARM920T内核的16/32位RISC嵌入式微处理器,主要面向手持设备以及高性价比,低功耗的应用。

运行的频率可以达266MHz。

ARM920T核由ARM9TDMI,存储管理单元(MMU)和高速缓存三部分组成。

其中MMU可以管理虚拟内存,高速缓存由独立的16KB指令Cache和16KB数据Cache组成。

S3C2410丰富的接口电路为以后的扩展性打下了基础。

S3C2410外设概览:

Ø支持STN和TFT的LCD控制器;

ØSDRAM控制器和外部存储器接口;

ØNandFlash控制器;

Ø3个通道的UART,其中一个通道可作为IrDA红外通讯接口;

Ø4个通道的DMA;

Ø4个具有PWM功能的定时器和一个内部时钟;

Ø8通道的10位ADC;

Ø四线电阻式触摸屏接口;

ØIIS音频接口;

Ø2个USB主机接口,1个USB设备接口;

Ø1个IIC总线接口和2个SPI总线接口;

ØSD卡接口;

Ø看门狗定时器和RTC实时时钟;

Ø117位通用I/O口和24位外部中断源。

5.1.2GPRS模块

GPRS模块采用PTM100模块,该模块兼容标准的AT指令集,内嵌TCP/IP协议和彩信功能和GSM功能,可以很好地满足我们的实验要求。

处理器和GPRS模块通信采用AT指令,部分AT指令如下:

1.ATE0用于关闭GPRS模块的串口回显

2.ATZ测试是否正常工作

3.ATD+电话号码用于拨打电话

4.AT+CMGF=1、AT+GMGS=“电话号码”用于发送短消息

5.AT^CIPSTART=TCP,对方IP,端口号建立TCP连接

6.AT^CIPSEND=字符串发送TCP数据

7.AT^CIPCLOSE关闭TCP连接

5.1.3GPS模块

GPS接收模块选用芬兰Fastrax公司的iTrax100。

该模块支持NMEA0183和SonyASCⅡ协议的数据格式。

GPS模块通过串口将数据以固定的帧格式发送至处理器。

GPS模块需要配备专门的GPS天线接收GPS卫星信号。

一般在比较开阔的地区,需接收3颗以上的GPS卫星信号才能进行准确定位。

其输出语句采用的是NMEA0183即ASCII格式码,包括GGA、GSA、RMC、GSV、RMC、RMT、VTG等。

这些定位语句不仅给出了位置、速度、时间等信息,而且指出了当地的卫星接收情况。

根据项目的实际需求,本设计只提取GGA数据。

GGA数据的数据格式为:

所有的信息由$开始,以换行结束,紧跟着$后的五个字符解释了信息的基本类型,多重的信息之间用逗号隔开。

其中〈CR〉代表回车控制符,〈LF〉代表换行控制符。

具体说明如下:

$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,*checksum

<1>UTC时间:

hhmmss.sss格式;

<2>定位状态:

A=有效定位,V=无效定位;

<3>纬度ddmm.mmmm格式;

<4>纬度半球N(北半球)或S(南半球);

<5>经度dddmm.mmmm格式;

<6>经度半球E(东经)或W(西经);

<7>地面速率;

<8>地面航向;

<9>UTC日期,ddmmyy(日月年)格式;

<10>磁偏角;

5.2终端软件设计

拨打电话、发送短信

终端软件由引导程序、操作系统、应用程序组成。

而应用程序借助操作系统,实现了车辆查询、更新、拨打电话、加解密、图形界面显示等功能。

三者关系如下:

5.2.1终端引导程序

BootLoader就是在操作系统内核运行之前运行的一段小程序。

通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。

对于嵌入式系统来说,常用的Bootloader很多,有u-boot、vivi、Blob、RedBoot、ARMBoot等等,也可以自己开发制作Bootloader,为了减少软件开发周期,应该选择开放的Bootloader,通过修改部分代码进行移植。

u-boot是德国DENX小组开发的用于多种嵌入式CPU的bootloader程序,它可以运行在基于ARM、PowerPC、MIPS等多种嵌入式开发板上。

由于其开源性,并且可移植的平台多、功能丰富、稳定性好,本系统使用u-boot做为启动引导程序。

5.2.2操作系统

随着消费类电子产品的快速发展,嵌入式操作系统得到了广泛的应用。

目前,主流的嵌入式操作系统有Vxworks、WindowsCE、uc/OS-II、uClinux、EmbeddedLinux等。

本系统采用嵌入式Linux为软件开发平台,采用了2.6内核,沿袭了主流Linux的绝大部分特性,是一个完全免费的、开放源代码的系统,用户可以根据用户自己的不同要求对操作系统进行裁减,以节省不必要的开销。

另外,Linux系统开发资源丰富,拥有丰富的驱动程序、应用程序和开发工具,能够根据用户的需要,移植到嵌入式Linux系统中。

开源的操作系统和驱动程序,为终端的开发缩短了周期。

5.2.3应用程序

应用程序采用C和C++混合编程。

主要完成系统的大部分功能,利用Linux系统调用,可以直接通过串口和GPS、GPRS通信,从而完成无线上网、全球导航等功能,利用GSM功能,还可以实现拨打电话、发送短息等等。

利用QT框架,可以编写图形界面,将有关数据以图形界面显示出来。

应用程序与服务器的数据需要经过加解密,因此需要借助加解密算法进行数据的封转,和服务器的通信需要遵循一定的协议,这个协议是架设在TCP协议之上的应用层协议,是本系统专有的。

应用程序模块图如图5-3所示。

注意如果需要和服务器通信的数据一般需要加解密,而数据如果本地使用,则不需要加解密。

GPRS/GPS通用函数

5.2.3.1图形界面

图形界面采用QTE。

QT/Embedded是一个为嵌入式设备上的图形用户接口和应用开发而定做的C++开发包,它通常可以运行在多种不同的处理器平台上。

运行Qt/Embedded所需要的系统资源可以很小,只要求一个较小的存储空间和内存。

Qt/Embeded可以运行在不同的处理器上部署的Linux系统。

图形界面采用QT框架开发,而有关的GPS导航功能、查询车辆功能、开罚单功能、打电话、发信息等终端功能依赖函数实现,属于面向对象和面向过程混合编程。

这些封转好的函数如下表所示:

 

函数原型

功能描述

intlogin(char*name,

char*passwd)

功能:

用户登录

参数:

name存放用户名称,passwd存放密码

返回值:

成功返回0,失败返回-1,错误原因存放在result变量中

intsearch(char*number,

char*buf,

intlen)

功能:

查询车辆

参数:

number存放车辆号码,buf存放查洵得到的数据,len存放buf的长度

返回值:

成功返回0,失败返回-1,错误原因存放在result变量中

intupdate(char*number,

char*item,

intvalue)

功能:

更新数据库车辆信息,供开罚单使用

参数:

number存放车辆号码,item指定要更新的条目,value是对应的值

返回值:

成功返回0,失败返回-1,错误原因存放在result变量中

intget_gps(char*buf,

int*len)

功能:

取得GPS定位信息

参数:

buf存放GPS定位信息,len存放buf长度

返回值:

成功返回0,失败返回-1,错误原因存放在result变量中

voidcall(char*number)

功能:

拨打电话

参数:

number存放电话号码

返回值:

voidsend_msg(char*number,

char*buf,

intlen)

功能:

发送短消息

参数:

number为电话号码,buf存放要发送的信息,len为发送信息的长度

返回值:

intsend_gps(char*buf,

int*len)

功能:

发送GPS定位信息到服务器

参数:

buf存放GPS定位信息,len存放buf长度

返回值:

成功返回0,失败返回-1,错误原因存放在result变量中

voidget_all(void**ip,

void**number,

void**name,

void**location)

功能:

取得其他终端的信息

参数:

ip为联网的终端IP表,number为手机号码表,name为名字列表,location为位置信息

返回值:

5.2.3.2加解密引擎

加解密算法采用标准DES算法,分别在服务器和终端实现。

密钥管理采用数据库表进行管理,和对应的终端表连接起来。

保证每个终端的加解密信息均不一样。

密钥预先写入到终端里面,并且不可改变,由数据库统一维护。

加解密只需要三条函数

voidget_key(unsignedchar*key)

功能:

取得密钥信息

参数:

key存放密钥

返回值:

voiddata_encrypt(unsignedchar*buf,intlen,unsignedchar*buf2,int*len2)

功能:

加密数据

参数:

buf存放需要加密的数据,len存放加密数据长度,buf2存放已经加密的数据,len2存放buf2长度

返回值:

voiddata_decrypt(unsignedchar*buf,intlen,unsignedchar*buf2,int*len2)

功能:

解密数据

参数:

buf存放需要解密的数据,len存放解密数据长度,buf2存放已经解密的数据,len2存放buf2长度

返回值:

5.2.3.4GPS/GPRS通用函数

除了Linux系统自带的API外,本系统为了操作的方便,将许多功能性的操作集成在一起,设计了一些供上层使用的函数,比如操作串口函数,与GPRS通信函数,与GPS通信函数,在这里列举了一些做为代表。

与GPRS通信的列表如下:

函数原型

功能描述

intinit_ttyS(void)

功能:

初始化串口为波特率115200,1个停止位,无奇偶校验和流控

参数:

返回值:

成功返回0,失败返回-1

intopen_ttyS(void)

功能:

打开串口

参数:

返回值:

成功返回0,失败返回-1

intwriteAtCmd(char*at)

功能:

往GPRS写AT命令

参数:

at为指向AT命令字符串的指针

返回值:

成功返回0,失败返回-1

intreadFromTty(char*buf)

功能:

读取串口传送过来的字符,并使其以\0结束

参数:

buf为指向一定数量的字符串缓冲区

返回值:

成功返回0,失败返回-1

intcheckOK(char*buf)

功能:

比较buf字符串有没有“OK”

参数:

指向需要比较的字符串

返回值:

有返回0,没有返回-1

intcheckCONNECTOK(char*buf)

功能:

检测TCP连接是否建立

参数:

buf指向GPRS返回的数据

返回值:

成功返回0,失败返回-1

intwriteData(char*data)

功能:

往TCP发送字符串data

参数:

data指向发送的字符串

返回值:

成功返回0,失败返回-1

intreadData(char*buf)

功能:

读取TCP传送过来的字符串

参数:

buf指向存储缓冲区

返回值:

成功返回0,失败返回-1

intstopEcho(void)

功能:

停止GPRS的回显功能

参数:

返回值:

成功返回0,失败返回-1

inttcpConnect(constchar*ip,constchar*port)

功能:

建立TCP连接

参数:

ip指向IP地址字符串,port指向端口字符串

返回值:

成功返回0,失败返回-1

voidtcpClose(void)

功能:

关闭TCP连接

参数:

返回值:

inttty_sendMsg(char*number,char*content)

功能:

发送短信息

参数:

number指向手机号码字符串,content为发送的内容

返回值:

成功返回0,失败返回-1

intcheckIfLogin(char*buf)

功能:

检查是否登陆到服务器

参数:

buf为指向GPRS返回的数据

返回值:

成功返回0,失败返回-1

5.2.3.5LinuxAPI简要说明

在termios.h头文件里面,还有关于操作串口的API定义,Linux内核没有实现他们,主要是库函数通过调用ioctl函数来实现各种串口操作的。

本系统开发的时候会用到这些函数,这些函数是定义在termios.h文件里面。

如下:

//返回termios_p所指termios结构中的接收波特率。

externspeed_tcfgetispeed(structtermios*termios_p);

//返回termios_p所指termios结构中的发送波特率。

externspeed_tcfgetospeed(structtermios*termios_p);

//将termios_p所指termios结构中的接收波特率设置为speed。

externintcfsetispeed(structtermios*termios_p,speed_tspeed);

//将termios_p所指termios结构中的发送波特率设置为speed。

externintcfsetospeed(structtermios*termios_p,speed_tspeed);

//等待fildes所指对象已写输出数据被传送出去。

externinttcdrain(intfildes);

//挂起/重启fildes所指对象数据的接收和发送。

externinttcflow(intfildes,intaction);

//丢弃fildes指定对象所有已写但还没传送以及所有已收到但还没有读取的数据。

externinttcflus

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1