答辩稿.doc

DZ236车辆定位追踪系统

收藏

压缩包内文档预览:
预览图 预览图 预览图 预览图
编号:511822    类型:共享资源    大小:874.68KB    格式:RAR    上传时间:2015-11-12 上传人:QQ28****1120 IP属地:辽宁
6
积分
关 键 词:
毕业设计
资源描述:
DZ236车辆定位追踪系统,毕业设计
内容简介:
长春工业大学毕业论文智 能 车 辆 定 位 追 踪 系 统学校:长春工业大学 专业:自动化 姓名:吕亮日期:2005年6月摘 要智能车辆定位追踪系统是智能交通的重要组成部分。随着社会的不断进步,车辆在人们的生活中起了越来越重要的作用,而车辆带来的问题也日趋明显,本系统能够利用现有的道路设施,减少交通拥挤,加强对车辆的集中管理和调度,为驾驶员提供足够的道路状况、交通监管、环境天气等信息,实现人、车、路的密切配合与和谐统一,将极大地提高交通运输效率,保障交通安全,增强行车的舒适性,改善环保质量,提高能源的利用率。另外,由于本系统采用GSM通信网络实现车载GPS终端与网站管理中心计算机网络之间的通信,大大降低了系统的成本和运行费用,具有广泛的应用前景。关键词 GPS,GIS,GSM,地图匹配,模糊逻辑Title:The intelligern avtomobile orients the tracing systemAbstractCars are more and more popular these days. Then the problems of cars safety and management are coming increasingly. This case will realize the cars positioning and tracking and will effectively prevent the cars from stolen and will also help the cars managing, tracking, directing and make sure of car drivers safety. And this case can help to manage the traffic and avoid the traffic jam and improve the efficiency of transportation. Moreover, this system uses the GSM mobile network to realize the communication between the car terminal of GPS and the management center. So the cost of the system is greatly decreased. Then the application of the system will be very wide in the future. Keywords GPS, GIS, GSM, map matching, fuzzy logic目 录摘 要1Abstract3第一章 绪论71.1智能车辆导航追踪系统概述71.2车载GPS导航系统可行性分析71.3 课题主要研究内容9第二章 系统的总体设计142.1 GPS技术的介绍142.1.1 GPS概述142.1.2 GPS的组成142.1.3 GPS的定位原理142.2 GSM技术的介绍152.2.1 GSM技术的提出152.2.2 GSM系统的体系结构152.2.3 通过GSM网传输车辆定位信息的优点172.2.4 GSM业务的选择172.3.车辆定位系统的组成21第三章 系统的硬件设计223.1 GPS定位信号接收部分的设计223.1.1 GPS定位模块的分类与选择223.1.2 GPS模块部分的硬件设计与调试243.2 车载终端移动通信系统的基本原理与硬件设计253.2.1 GSM模块的选择253.2.2 GSM模块部分的硬件设计与调试263.3 单片机系统的整体设计293.3.1 AVR单片机简介293.3.2 AVR单片机的体系结构293.3.3 单片机系统硬件的总体设计303.4 本章小结31第四章 系统的软件设计324.1 GPS模块部分的软件设计324.1.1 GPS15L模块的配置324.1.2 GPS15L模块定位信息的接收程序324.2 GSM模块部分的软件设计344.2.1 基本的AT命令与格式344.2.2 MC35模块部分的软件设计354.3 单片机系统软件的设计364.4 本章小结39第五章 基于模糊逻辑的地图匹配算法的设计405.1 地图匹配的意义405.2 常见的地图匹配算法405.3 模仿航位推算的基于模糊逻辑的地图匹配算法415.3.1基于模糊逻辑的地图匹配算法的基本原理415.3.2 基于模糊逻辑的地图匹配算法的仿真与验证465.4 本章小结48结 论49致谢50参考文献51附录A54附录B58第一章 绪 论1.1 智能车辆导航追踪系统概述智能车辆导航追踪系统的主要功能是通过GPS接收机接收GPS工作卫星的导航信号,通过单片机用GSM通讯网将信息传回监控中心由监控中心将位置信息存入导航电子计算机的数据库中,最后在具有强大的地理信息查询功能的电子地图上显示出来。同时,智能车辆导航追踪系统还可以实时连续地对车辆的准确位置,速度,方向以及周围的详细地理环境进行监控和查询,对最优路径进行计算和规划,帮助驾驶员及时了解车辆目前的位置和状况,使驾驶员在陌生的地理环境中能够准确地选择路线,快速地熟悉周围环境,从而快速,安全,准确地到达目的地。随着经济的迅速发展,车辆的普及率越来越高,车辆在扩大人们的活动范围,给人们的生活带来方便的同时也带来了更多的困惑,复杂的交通网络使人们无所适丛,频繁发生的交通堵塞使人们难于选择正确的行车路线,处在陌生的地理环境中无法准确的了解周围的交通条件和自己的准确位置,需要服务时却不了解周围服务设施的分布21世纪初的一项研究发现,仅美国的主要城市每年因交通拥挤而造成的浪费就已超过475亿美元,每年的交通拥挤浪费了多达143.5亿升的燃料和27亿个工作小时,而且这些数字还将以每年5-10%的速度继续递增。目前我国城市的机动车保有量正以15%的高速率增长,而城市道路的增长率仅为3%左右,经济的高速发展和城市进程的加快,使我国的城市交通基础设施承受着巨大的压力。同时,低效率利用及管理技术落后并存的现象又加剧了交通设施短缺造成的困难。我国大中城市普遍存在人车混行,运输效率低下的现象。因此,发展智能交通系统的意义非常重大。智能交通系统是利用最尖端的电子信息技术,形成人员,公路和车辆三位一体的新型公路交通系统的总称。智能交通系统能够利用现有的道路设施,减少交通拥挤,加强车辆的集中管理和调度,为驾驶员提供足够的交通,公安,娱乐等信息,实现人,车,路的密切结合和和谐统一,这将极大地提高交通运输效率,保障交通安全,增强行车的舒适性,改善环保质量,提高能源的利用率。智能车辆定位追踪系统是智能交通系统(ITS)的一个重要组成部分,而GPS定位技术更是ITS的技术核心。因此研究GPS智能车辆定位系统意义重大。另外,从国家安全角度考虑,限制国外导航厂商获取中国高精度电子地图是必须要做的事情,所以,打破外国的技术垄断,开发具有自主知识产权的车辆导航产品将具有跟深层次的意义。1.2 车载GPS导航系统可行性分析一、 项目简介 近年来,汽车工业已成为我国的支柱产业,汽车在日常生活和生活中起的作用也越来越突出。而如何实现各类车辆的有效指挥、协调控制和管理已经成为交通运输和安全管理部门面临的一个重要问题。根据统计资料显示,西方发达国家由于公路堵塞而造成的直接和间接经济损失十分惊人。所以为了满足提高运输效率和安全保障的需要,各国都相继开展了对车辆导航定位系统的研究。改革开放后,随着我国交通运输事业的迅速发展,如何研究一套适合我国国情的车载导航和定位系统,使之能满足国内运输和车辆管理的需要,这对我国的国民经济建设有重要的现实意义和经济价值。正是基于此,我们开展了GPS/DR导航定位系统的研究。众所周知,全球定位系统(GPS)是一种广泛使用的最新卫星定位系统,在地球上空分布有24颗卫星,用户通过GPS接收机接收卫星的信号,就可以实时地获得高精度的三维位置/速度和时间信息。但就目前陆地车辆导航系统而言,无论是在城市还是在郊区,GPS卫星信号都有可能会受到高楼或者隧道等障碍物的遮挡,因此仅用现有GPS导航定位系统来实现连续不间断的定位是很困难的甚至是不可能的;而本文研究的GPS/DR,正是基于车辆航位推算(Dead Reckoning-DR)的一种自主式的车辆导航系统,它能利用陀螺及里程仪的传感信息来实时地记录和推算出当前的位置,具有短时间内精度高,但导航误差随时间积累的特点。因此,将现有的GPS系统和DR系统组合来构成车载导航系统,既可以很好的解决车辆短时间内会丢失GPS卫星信号的问题,又可以避免DR系统的误差随时间积累性,从而有效的确定车辆移动的位置。二、 国内外相关技术、产品、产业发展的现状和趋势 智能车载导航系统一经问世,即显示出强大的生命力和广阔的应用前景,并产生了巨大的社会和经济效益,可能成为90年代整个世界新的经济增长点之一。 由于巨大的市场潜力和不可估量的发展前景,日本几乎所有的汽车生产厂家都参加了这一高科技角逐,仅近几年投入市场的新系统就有30多个。如日本的宏达、尼桑、本田、马自达、三菱以及松下、先锋、阿尔派、健伍等公司都已开发出自己的车载导航产品。世界其它发达国家如美国、德国、荷兰不甘落后,力图在该市场占有一席之地。目前在欧洲,由飞利浦、西门子开发的车载导航系统1995年已在雷诺、菲亚特等大众化民用车辆上使用;奔驰-S系列、宝马-7系列。从1994年起,厂装车辆已将GPS车载导航系统列在选装清单上。此外,根据GPSWord杂志刊登的美国工业发展研究机构的预测,到2005年,日本、北美和欧洲每年将有1500-2500万套产品售出,在2010-2015年间,约有50的汽车在出厂时,就已装备了车载导航系统,在以后时间里该系统的普及率将会逐渐提高到100。国内也已有部分厂商和研究单位推出了一些车载导航定位系统,但要么由于技术简单,定位精度不够,要么由于成本昂贵,不能为一般用户所承受,因而不能在实际车载系统中得到广泛的应用。要将这种系统实用化,则必须在提高精度的同时大幅度降低成本。三、 国内外市场前景 据统计,全世界用于车载导航系统的投资在1994年为1.8亿美元,比1993年增加了80,从1995年到2000年平均每年的增长率达到60.8。美国一家咨询公司(决策咨询公司)所提出的一项新报告表明,汽车导航系统代表了GPS的最大潜在市场。美国的福特和克莱斯勒公司等企业正在开发先进的系统,以满足潜力无限的市场需求。据日本专家研究,车辆导航系统是民间企业最有希望的领域。在日本,导航系统的开发到目前已创造出2000亿日元规模的市场,并且随着ITS的推进,在相关的汽车、电子、通讯领域,今后20年间预计将创造出50兆亿日元(约500亿美元)的新市场。通过我们的调查发现,近年来,我国的汽车销售总量和私人购车数量逐年上升。见表1。 表1 1994-1999年国内汽车市场销售总量 1994 1995 19961997 1998 1999 汽车销售总量(万)110120 130 145160170私人购车总量(万)47.6355.4464.2275.9885.7694.52私人购车百分比43.346.249.452.453.655.6我国虽然是一个发展中国家,但是正像计算机和移动电话一样,在车载导航系统方面具有极为广阔的发展机遇。例如仅在交通部门,若我国境内的高级轿车的10装上导航系统,就会有数亿的利润。 车载导航系统在当今中国有着千载难逢的发展机遇,这是因为车辆导航系统中包含有数字地图,而生产和加工数字地图要受到每个国家的各种限制,这就为国内民族工业的振兴留下了一是时没有竞争的空间。此外,在软件开发和数据采集方面我们有着自己独特的优势。我国拥有丰富的技术人员和劳动力资源,可以形成强大的知识密集型和劳动密集型的车载导航系统产业。加之现代科技的飞速发展,使得硬件生产技术不断成熟和完善。因此,发展我国的车载导航系统产业适逢其时,机不可失。四、 关键技术、技术性能及达到的水平 我们研制的GPS/DR车辆组合导航系统采用了先进的导航定位技术,具有成本低、体积小和可靠性高等特点。本系统最大特点是将两种优势互补的导航系统(GPS、DR)组合到一起,实现高精度连续导航定位。下面研究中的关键技术,便是研究降低组织系统阶数时系统所能达到的技术精度。要降低系统的成本,就必须对系统进行必要的简化,以使用低廉的单片机实现。同时还要能达到一定的精度,有较好的重复性和机动性等等。 1.3 课题主要研究内容GPS车辆定位系统一般均由三部分组成。这三部分分别为GPS车载终端,数据通信部分以及对车辆运行状态进行监控的监控中心。GPS车载终端一般由一个GPS定位模块配以一定的控制及通信系统实现,它可以看作为一个相对独立的系统。数据通信部分原本是GPS发展的一个障碍,因为如果自己建立通信网络将耗费大量的资金,且数据传输范围又极其有限。这是一笔动辄成百上千万元的巨额耗资工程,使人们很久以来对GPS都“只闻其名,不见其貌”。但是,由于现在数字移动通信GSM的迅速普及,GSM几乎已覆盖了全国任何一个地方,这为卫星定位的数据传输彻底扫清了障碍,并且为卫星定位数据的传输提供了多种方式,如SMS、GPRS等。本系统采用点对点的SMS(Short Message Service)数据通信方式,即短消息通信。监控中心是整个系统的控制指挥部分。主要有两种用户系统方案,一种是多用户系统,这种系统由一个监控中心来控制管理许多用户,按需要或事先的设置来响应和满足不同用户的需求;一种是单用户系统,这种系统每一套都是一个独立的部分,每个用户分别具有自己的定位部分和控制中心,但是一般造价比较高。本项目采用的是多用户系统,具有较强的管理优势,在车辆调度方面可以起到较大的作用。1.车辆GPS车载终端(车载台)(1)车载终端的主要组成本系统的车载终端不是一个完全孤立的部分,它必须依赖于监控中心,由监控中心实现对车辆的位置进行显示,并且由监控中心来控制车载终端的工作状态。本系统的车载终端主要由GPS接收机,GSM收发模块,单片机主控模块等组成。目前,市场上可供选择的接收机种类很多,工作原理大致相同,接收机的具体分类及选择情况将在后面章节给出。卫星接收机常称为GPS OEM板,它用来接收GPS卫星发来的原始电文,并根据从三颗以上不同卫星发来的电文计算出定位目标的具体状态,以1秒/次的刷新间隔提供出本定位目标的运动状态,如:经度、纬度、高度、时间、速度、航向等数据。这些数据通过单片机串口送给单片机并存储,以便随时向监控中心提供定位信息。单片机用来控制整个车载台的协调工作,通过事先编好的程序,按照一定的指令负责将存储的GPS定位信息通过GSM通信模块传送到控制中心。控制车载终端的指令由监控中心下达,单片机以固定的格式接收,如果指令不正确,车载终端将不执行该指令。GSM模块负责信息通信的无线发送与接收,即接收命令和传输定位信息。在信息的发送和接收时,GSM模块需要由AT命令来控制,并且根据相应的的短消息模式进行短消息的发送。单片机程序通过串口将AT命令发送给GSM模块,并根据监控中心的命令控制GSM模块不同的工作状态。GPS车载终端是系统硬件设计的主要组成部分,在后面章节中将对其进行详细介绍。(2)车载终端的工作方式车载终端在通电后自动启动并进入工作状态,这时车载终端即开始工作。第一次开机时,车载终端的默认工作状态是不发送位置信息,每30分钟刷新一次EEPROM中的位置信息,并且保存每天一条的位置信息,最多保存最近五天。正常工作状态下,车载终端时时检测GSM模块的状态,当监控中心通过短消息指定车载终端的工作状态时,GPS车载终端在按照监控中心的要求向监控中心发送定位信息或不发送定位信息。发送定位信息的方式可选为每分钟发送一次,每十分钟发送一次,每十五分钟发送一次,每三十分钟发送一次,每天发送一次等,其中每次的定位信息包含五条在相应的等分时间间隔上的位置信息。也可以命令车载终端发回前五天的位置信息,以查询车辆的历史轨迹。监控中心的控制命令以一定的格式发送给车载终端,只有通过这种格式才能正确的对车载终端下达命令,保证了控制命令的保密性。2.移动通信系统(GSM)GSM其实是一种网络规范,它定义了建设该网络及服务的各种标准,这些标准由欧洲电信标准化协会(ETSI)掌管,常称为GSM标准。GSM网络其实是一种无线数字蜂窝通讯系统,实现中通常使用频率900MHZ、1800MHZ、1900MHZ,其中中国的GSM网实现在900MHZ和1800MHZ上,这也就是GSM的双频。基于GSM的短消息服务是无线通信在二十世纪末所做的一次重要飞跃。这使得移动网络不仅可以传送音频,也可以传送数据。正是因为有了数据业务,更多的移动终端产品才凸现出强大的生命力,也为本项目提供了数据的传输方式。移动通信近年来发展十分迅速,有非常好的网络覆盖情况。中国移动通信集团公司主要经营移动话音、数据、 IP电话和多媒体业务,有着大量的客户,是世界上最大的GSM移动通信运营公司。移动电话的产生和发展,满足了人们随时随地进行信息交流和商务活动的要求,取得了惊人的发展。移动通信和数据通信的融合,产生了移动数据业务。目前,GSM提供的服务,可以使得人们不受空间、地域的限制,随时随地获取所需的信息,可以在移动中收发短信,收发E-mail、收发传真、访问Internet等通信。在这些服务中,短消息通信和GPRS通信引起了我们的注意。短信息系统(SMS),其中SMS是Short Message Service的缩写,系统的关键部分是短消息业务中心,作为短消息的存储转发的单元,可实现移动终端间的点对点短消息通信。所谓点对点方式的通信,即在车载智能终端和监控中心都装有GSM手机,双方通过短消息方式,由GSM短信息服务中心存储转发后,进行各种数据的相互交换。通过GSM手机接收车载终端以短消息方式发回的数据和应答监控中心的控制命令。监控中心的控制命令通过GSM手机以短消息的方式发送给车载终端。通用分组无线业务(GPRS),在GPRS结构中引入了分组交换和分组传输的概念,这样使得GSM网络对数据业务的支持从网络体系上得到了加强。GPRS网络在原有的GSM网络的基础上增加了SGSN(服务GPRS支持节点)、GGSN(网关GPRS支持节点)、PTMSC(点对多点服务中心)等功能实体,并且对原有的移动台、基站、相关信令作了相应的更改或补充。GPRS信道的分配很灵活,每个TDMA帧可分配1-8个时隙。时隙均由用户共享,上、下行链路单独分配。无线接口资源在话音和数据业务之间动态共享。GSM全球通讯移动系统是目前国内覆盖最广、系统可靠性最高、话机保有量最大的数字移动通讯系统。更重要的是,GSM系统除提供话音业务外,还提供数据业务、短消息(SMS)业务等多项功能。我们的系统就是采用了SMS功能实现控制中心与移动车辆之间的数据传输。GSM是近几年以惊人速度发展起来的全球数字通讯网,由于通讯业爆炸式的发展,GSM网络基站越建越密,在城市中已基本做到无缝覆盖。我们的系统利用GSM网络,是通过电信业务交换中心延伸出的增值平台的增值服务,即短消息增值服务功能。该增值服务利用控制信道进行数据传递,使用时不占用语言信道,对同一手机用户,二者可同时进行。可以方便的实现数据通信功能,而且利用现有网络不仅可以省去大量的硬件投资,并且具有很强的可移植性。首先,GSM网覆盖区域广,系统投资小。而且GSM网是目前国内覆盖范围最好的无线通信网,依托于该通讯网无需专门架设费用昂贵的通信平台,无需为频点资源的申请而费心。其次,GSM短消息业务运营使用费低廉。GSM短消息业务目前国内收费标准为发出0.1元条,接收免费,并且对待特殊用户有30甚至免费的优惠政策,有助于降低运营的使用费。再次,GSM车载设备性价比较高。相对于其它通信平台的车载设备,GSM车载设备具有价格低,功能多的特点。3.监控中心电子地图系统(GIS)监控中心是系统的显示部分,通过电子地图显示车辆的运行状况,并实现监控功能。作为监控中心一般都具有以下的功能:(1)电子地图显示功能实现电子地图的缩放显示、地图漫游、距离面积量算、图层管理、属性信息查询、机构的重要信息查询等;地图应显示车辆位置,对不同类型车辆使用不同的符号显示。使之能清楚的区分。对处于不同工作状态的车辆也用不同颜色进行显示。(2)中心监控功能多视窗多目标的监控、行驶轨迹的存储与回放、对车载终端的工作方式进行设置等,实现对车辆的合理监控。监控中心能够实现对选定车辆进行实时跟踪导航等,并可以控制车辆状态的刷新频率。(3)报警处理功能自动接受车辆的报警信号,在地图上将对该目标进行鲜明色彩及图标的突出显示并以声、光报警提醒值班员注意,同时在屏幕上显示该移动目标的用户卡片资料,如车辆编号、车牌号、车型、颜色及司机名等,加强行车安全。 (4)数据管理功能车辆用户资料管理、更新,地图信息的修改等。并且可以存储车辆的历史位置信息,历史行程跟踪可以根据用户需要,对车辆的历史行程情况进行查询。(5)地图匹配功能GPS定位由于星历表的误差、卫星钟的误差、电波传播的误差、接受设备的误差等等,使定位信息不能反映物体的真实位置,所以需要采用一定的算法进行道路匹配,减小定位误差。本项目采用模拟航位推算(DR)的基于模糊逻辑的地图匹配算法,根据一定的模糊原则使车辆匹配到适当的道路上,从而提高车辆的定位精度。由于本地图匹配算法不需要额外的硬件投入,所以不会增加成本,实施起来比较方便。地图匹配算法的具体细节将在后面章节中详细介绍。 第二章 系统的总体设计2.1GPS技术的介绍2.1.1GPS概述GPS(Global Positioning System)全球定位系统是美国继阿波罗登月计划,航天飞机之后的第三大航天工程。历经二十余年发展,耗资超过一百亿美元,是一种全球性,全天候,连续的卫星无线电导航系统,可提供实时的三维位置,三维速度和精确的时间信息。由于GPS定位技术具有精度高,速度快,成本低的显著优点,因而已成为目前世界上应用范围最广,实用行最强的全球精密授时,测距,导航,定位系统。2.1.2GPS的组成GPS系统由三部分组成,即GPS卫星(空间部分),地面支撑系统(控制部分)和GPS接受机(用户部分)。其中前两部分由专门机构投资建立,维护和运行,一旦工作,将不停的发送GPS卫星信号,该信号包含有三种信号分量:数据码,测距码和载波。a. 数据码(又称导航电文或D码)包含卫星星历,系统时间,卫星钟参数,卫星工作状态以及电离层延迟校正等信息,是用户用来定位和导航的数据基础。b. 测距码是两种不同性质的精度的位随机码:C/A码和P码。C/A码也叫做明码,提供民用导航定位数据,精度约为14m,P码是保密码,定位精度达到3m,仅供军方和得到特许的民间用户使用。c. 载波为L波段上的两个不同频率(L1:1575.42MH2;L2:1227.60MH2)的电磁波,用于调制上述数据码和测距码,从而有效传送至用户接受机。 2.1.3 GPS的定位原理 GPS定位的基本原理是比较简单的,如图2-1所示。 图 2-1 卫星发射来的时钟信号GPS接受机收到4颗卫星发送来的时钟信号Dt,将之与自身的标准时钟对比,分别得出的时钟偏差即为卫星信号传播的时间,将之乘以电磁波的传播速度-光速,既为信号传播的距离。于是我们得到一个简单的多元方程组: 式中Xt,Yt,Zt为四颗卫星的三维坐标,由GPS卫星以50Hz的速度向球不间断广播,UX,UY,UZ为接收机的位置,R1传播的距离,R1=CD1,其中i=1,2,3,4 Cb 为用户的标准时钟偏差参数,于是得到四个方程,这四个方程对于四个未知数UX,UY,UZ,Cb,一般来说都有唯一的解,因此我们得到了接受机精确的位置参数信息2.2 GSM技术的介绍2.2.1 GSM技术的提出由于GPS定位系统是一个单向导航系统,它把信号传给地面,但并不传给卫星,而在具体应用中,一般都需要把利用GPS测出的信息传送到调度中心。因此,需要用通信手段来实现。而且只有解决好这个问题,才能真正实现车辆调度系统的预期效果。鉴于此,我们以它作为决定系统总体方案的依据。目前车辆调度系统采用的信息传输方式,无论是VHF/UHF单信道呼叫还是集群移动通信网都是调频制式的模拟通信系统,主要是为话音通信而设计的,若传送GPS信息 首先要通过音频调制解调器把数字信号转换为模拟音频信号,再加到音频车载电台上进行传输(有些数字电台只不过是将调制解调部分放到电台里。同样在调度中心接受GPS信息也要经过这一系列的转换,这势必不能充分满足高效调度工作的需要。所以,我在设计中决定采用GSM网来传输车辆定位信息。2.2.2 GSM 系统的体系结构 GSM 数字蜂窝移动通信系统(简称GSM系统)是公众移动通信网。由中国电信和中国联通经营。到1998年底为止,GSM网已覆盖了全国所有的城市和较发达的农村地区。因此,用GSM网组建GPS车辆调度系统是可行的。 GSM中的功能实体:GSM体系结构分成两部分:网络与交换子系统(NSS)和基站子系统(BSS)。网络与交换子系统的主要作用是管理用户和其他电信网络用户之间的通信。它包括GSM的主要交换功能以及管理用户数据和移动性所需的数据库。分为归属位置寄存器(HLR),拜访位置寄存器(VLR),移动业务交换中心(MSC),设备识别寄存器(EIR)和监权中(AUC)五个功能实体。 基站子系统包括GSM无线蜂窝方面特有的基础设施。BSS通过无线接口与移动台直接连接,它包括负责在无线路径上发送,接收及管理的设备:另一方面BSS也与网络和交换子系统的交换机连接。在一定的无线覆盖区中,由移动业务交换中心(MSC)控制,与MS进行通信。一个BS的无线设备可包含一个或多个小区的无线设备。根据功能,BSS可分为基站控制器(BSC)和基站收发信台(BTS)两类功能实体。A 接口与协议 从图2-2可以很清楚的看出GSM中存在的各个接口。移动台与BTS 之间的无线接口Um, BTS 与BSC之间的Abis接口。BSC与MSC之间的A接口及交换子系统内部各个接口都有相应的协议。描述系统的组成部分怎样协同工作完成功能的要求。这里有许多重要的GSM协议,GSM04.08,GSM09.02 等。在NSS内部,每个设备都与SS7信令支持网有一个单独接口,相应的协议堆共享相同的较低层; 在SS7 网络上应用传输信令的协议称为 MTP ,在 MTP 之上,协议可能根据涉及的对等实体而不同。在MSC 与外部网络之间与呼叫有关的信令利用TUP(电话用户单元)ISUP(ISDN单元)。GSM特有的,与呼叫不相关的信令对应许多不同协议,组合在MAP(移动应用部分)中。图2-2 的信令平面上标出了这一系列接口:B接口:MSC与VLR之间的接口。C接口:MSC与HLR之间的接口。D接口:VLR与HLR之间的接口E接口:MSC之间的接口。F接口:MSC与EIR之间的接口。G接口:VLR之间的接口。BG接口对应的协议用BMAP/X开区分。另外,将MAP/H定义为传输短消息的协议,尽管相应的MAP接口是MSC之间的E接口。所有MAP协议都使用SS7协议TCAP(事务处理应用部分)和SCCP(信令连接控制部分)提供的业务。2.2.3 通过GSM网传输车辆定位信息的优点a GSM是蜂窝式小区结构。在用户密集的地区采用小区制,极大地提高了频率利用率,且多经效应影响降低,通信盲区减少。b GSM系统是数字通信体制。它采用的高斯滤波最小移频键控(GSMK)调制解调方式适合无线传输,而且分集,自适应均衡,跳频等抗干扰措施和前项纠错技术,使得其通信质量远好于模拟体制的单位道和集群系统。因此,在车辆定位系统中,较少的通信误码,保证能够得到车辆的正确位置,大大提高工作的可信度。2.2.4 GSM业务选择GSM标准的大部分都与系统的工程应用有关,最主要的内容是接受方的多通道信号传输处理方案,以及发送方与接受方的同步。他的综合运用分槽ALOHA,FDM和TDM来控制信道访问。GSM系统中的每个单元都拥有多达200个全双工通道,每个信道包括下行链路频率(从基站到可移动站)和上行链路频率(从可移动站到基站),每个频段宽200KHz,入图2-3所示。 在124个频率信道中,每一个均可采用时分复用技术,支持8个独立的连接。每个当前活动的站点在某一信道中分配一个时隙。虽然理论上每个单元可支持992个信道,但为了避免与相邻单元的频率冲突,其中许多都不能使用。在图2-3中8个阴影的时隙属于同一个信道,每个方向上有4个。如果可以移动站分配890.4/935.4MHz和时隙2,当他想向基站发送数据时,它使用下方的4个阴影时隙(以及其后相应的时隙),把数据放入这些时隙中,直至所有的数据发送完毕。图2-3所示的TDM时隙只是复杂的分一部分。每一个时隙均有特定的结构,多组TDM时隙就构成可多帧,他同样也有特定的结构。图2-4给出了这种层次结构的一种简化模型。从图上可以看到,每个TDM时隙由一个148bit的数据帧构成,该数据帧的起始段和结束段均为3个0bit。该帧中还包含可两块57bit的信息段,每块均由一个控制位表明后续信息段是声音还是数据。在两个信息段之间,是一个28位的同步段,他被用来使接受方与发送方的帧边界同步。该数据帧的传输时间为547us,但传输方每4.615ms才能发送一帧,以为还有7个站点也共享同一个信道。每个信道的总速率为270833b/s,在8个用户中均分,但是扣除开销后,每个连续只能发送一个压缩的声音信号或者9600b/s 的数据。 图2-4 GSM分帧结构的一个简化模型从图2-4还可以看出,8个数据帧构成一个TDM帧,26个TDM帧构成1个120ms的多帧。在多帧的26个TDM帧中,12号被用作控制帧,25号保留被将来用于其他方面,因此 只有24个帧可用作用户通信。除了图2-4中示出的26时隙的多帧以外,还使用了一种51时隙的多帧(图中未画出)。其中的一些时隙用于系统管理的控制信道。广播控制信道是从基站来的连续输出流,它包含了基站的身份以及信道的状态。所有的可移动站都监视该信道的信号强度以确定何时进入了一个新的单元。专用控制信道用作方位更新,注册以及呼叫建立。特别地,每个基站都维持一个当前的管辖之下的可移动站点的数据库。维持该数据库所需要的信息在专用控制信道上传送。最后,还有公共控制信道,它被分成3个逻辑子信道。第一个子信道是寻呼信道,基站用它来宣布到来的呼叫。每个可移动站持续监视该信道,看是否有它应该回答的呼叫,第二个信道是随机访问信道,它运行一个分槽ALOHA系统,允许一个可移动站在专用控制信道上请求一个时隙。使用这个时隙,该站可以建立一个呼叫。所分配的时隙在第三个子信道一一访问授权信道中宣布。GSM系统可提供多种业务,常用的有话音也,数字业务,短消息业务等,具体选择哪一种业务传输GOS定位信息,关系着车辆调度系统的整体性能和运营成本。下面我们对这一关键性的选择作仪讨论:首先,话音业务是GSM最基本的业务,它采用的话音编码技术为带有长期预测的规则脉冲激励性编码(RPE-LTP),使用1300Hz以上的正弦波复制带有严重的幅频起伏,导致所测频率响应的不规则性,不适合经过音频调制解调器转换的GOS定位信息的传输(以前的车载话音电台传输GPS定位数据也遇到过此类问题)。其次,数据业务提供2400bps,4800bps。9600bps的异步数据传输,理论上讲可用于传输GPS定位信息,但使用时需建立连接,一旦建立连接即开始按分钟计费。GPS每次定位数据不到20个字节,若以9600bos的速率,50%的编码效率计算。传输一次GPS位置数据的时间大约为384ns,而计费却按一分钟,再加上拨号处理延时,用数据业务传输GPS定位信息是极不经济的。再次,短消息业务(SMS)是GSM通信网特有的,它分为两类:点到点短消息业务和蜂窝广播短消息业务,后者不再本文讨论范围。点到点业务是一种由GSM移动台发送和接受有限长度消息的方法,他的提供利用了短消息业务中心(SMSC以下简称为SC)作为短消息的存储转发中心,既不需要拨号建立连接,而是直接把要发的信息加上信宿地址发往SC,再由SC前转给最终的信宿。该业务又分为移动起始(MO)短消息业务和移动终接(MT)短消息业务。MO消息将从MS传送到SC,这些传送将传送给其他移动用户或者是固定用户:MT消息将从SC传送到MS,这些消息由其他移动用户后者固定网用户:MT消息将从SC传送到MS,这些消息由其他移动用户(通过MO)发往SC或由其他信源发出,如话音等。 短消息业务的基本网络结构如下图25所示。其中,SME是短消息实体,即一个可以发送和/或接受短消息的实体。XMS-GMSC用于移动台终接的短消息业务,SMS-IWMSC用于移动台其始的短消息业务。由此可见,短消息业务与前两种业务有着明显的不同,因为他以分组传输模式进行传输,是非电路特性的通信。故而点到点短消息业务可以与其他基本业务并行发,收。在无线接口上,同时存在两种相互独立的流。一种专用于传送信令报文,另一种用于短消息业务。这两种流由一个称为SAPI(业务接入点识别符)的链路识别符来区分。SAPI取值为0表示信令,SAPI取值为3表示传送的,为了避免时延过长,短消息的信息量受限于七号信令的MTP,最大长度为140个8位组(7比特编码,140个字符 ,70个汉字),这对于GPS定位信息已足够了,因此,这种业务适合把每次的定位信息随时发送出去。综上所述,从运营费用和系统实现难易程度等方面考虑,选用GSM短消息业务传输定位信息最为合适,同时还可以辅助话音业务进行调度,两者互不冲突。 2.3 车辆定位系统的组成基于GPS/GSM技术的车辆定位系统主要是由车载单元和控制中心两大部分组成,其组成框图如图2-6所示。 车载单元是由GPS接受机,通信控制器和GSM用户终端构成的,其中GPS接受机用来接受GPS卫星发来的信号并解算出定位数据,通信控制器进行数据提取,格式转换,同时能根据控制输入(报警,参数设置等)做出相应的响应。GSM用户终端则完成短消息的发送或与控制中心进行话音联系。控制中心仅由一台监控计算机和一部GSM用户终端构成,这里的GSM用户终端是用来接受短消息并将其实时传送给监控计算机。监控计算机则对数据进行处理和存储,处理既通过地图匹配技术将代表各车载单元位置的经纬度数据进行坐标变换,误差校正,飞点剔除等操作,最终在电子地图上显示运行轨迹。存储即指连续记录一段时间内多个车辆运行的轨迹(定时更新),以备相关部门监督,查询。此外,当检测到车载单元处于报警状态时,电子地图给予突出化显示,以提示监控人员及时与该车司机通话了解情况。由图2-6可以看出,通过GSM网实现树化兼容的车辆定位系统结构简单。在监控中心不需要附加自行开发的硬件设备,只要将GSM移动终端和监控计算机互连即可,而车载单元中的工作除设备集成外,还需要通信控制器进行设计,它是整个系统设计的重点。因此,本文不再对控制中心加以讨论,只研究车载单元的硬件和软件。 第三章 系统的硬件设计系统的硬件设计是非常重要和关键的一部分,这部分的设计情况将影响到系统功能的实现以及终端的大小与外观。对应于系统所要实现的功能,本系统的硬件设计主要由三部分组成。这三部分分别为GPS接收机部分,单片机控制系统部分和GSM短消息通信部分。通过这三部分的设计连接,单片机系统将实现对定位数据的接收与分类处理以及实现对监控中心的命令的接收与解析,控制整个系统的工作与运行状态。3.1 GPS定位信号接收部分的设计3.1.1 GPS定位模块的分类与选择在进行硬件设计时,应根据系统的需要来选择适合的硬件。最常用的GPS接收设备有如下两种:(1)汽车导航仪随着科技的发展使人们的生活更加快捷、轻松,汽车定位导航系统的出现为人们的生活提供了更大的方便。在发达国家,为了方便用户,很多汽车制造商在车辆出厂时就装配了汽车定位导航设备。汽车导航仪是集计算机、通信导航、地图信息为一体的高科技产品。内置GPS接收器,提供GPS天线接口,装载定位导航软件,利用接收到的GPS卫星信号为车辆提供全天候、全时域位置信息。系统可以在屏幕上显示当时车辆运行情况,或者不配备显示系统由监控中心统一管理车辆的调度运行。通过电子地图的管理和协调,监控中心可以提供一定的调度功能,选择最优行驶路径等。(2)GPS手持机GPS手持机是利用GPS基本原理设计而成的,体积小巧、携带方便、独立使用的全天候实时定位导航设备。GPS手持机一般没有内置地图,主要利用它来记录行走路线,加强人身及物品的安全。由于它的小巧轻便,GPS手持机可以有很大的适用范围,可以说是应用范围最广的GPS设备。在本系统的设计中,GPS接收器是基本的组成部分,由它来接收卫星信号,并且产生定位信息。下面分别介绍GPS接收机的分类与选择。1GPS接收机的分类GPS接收机可以根据用途、工作原理、接收频率等进行不同的分类。按接收机的用途进行分类可分为导航型接收机,测地型接收机,授时型接收机等;按接收机的载波频率进行分类可分为单频接收机,双频接收机;由于GPS接收机的定位原理多样,应用范围广泛,所以分类方法也多种多样,需要根据实际应用来选择适当的接收机。2GPS接收机的选择由于本项目开发的是用于汽车上车载GPS系统,所以根据车载系统的移动性和对精度要求不高的特点,应选择导航型的GPS模块。目前,有很多厂商都能提供GPS OEM板产品,如SiRF、Conexant、Sychip、GARMIN等公司。其中美国GARMIN公司是世界上最著名、深受用户信赖的专业GPS厂家,在GPS的定位、导航领域一直走在世界最前列,在提供各种类型的GPS成品的同时,还提供一系列最经典的GPS OEM板产品。GARMIN的GPS OEM产品的优良的性能既能够满足灵敏度需求,也能够满足动态需求,所以本项目选择GARMIN GPS15L作为GPS定位模块。它为12 通道的GPS 接收机,也就是同时可以跟踪多达12颗GPS 卫星,从而能够快速的定位。GARMIN 的GPS 接收机功耗非常小,数据更新率为每秒一次。3GPS15L的技术参数GPS15L对电压的要求比较低,在3.3V5.4V之间均可正常工作,每一秒输出一次定位数据。它的精度指标如表1所示:定位精度小于15 米(95%)速度精度0.05 米/秒RMS(稳定状态)差分精度小于5 米(95%)PPS 精度1 微秒(GPS15 无秒脉冲输出)速度上限1850 公里/小时加速度上限6G高度上限18000 米表1 GPS15L的精度指标由表1可以看出GPS15L的精度指标和动态性能完全可以满足车辆定位的需求。GPS15L的接口为RS232接口,可以很方便的通过计算机进行调试与配置。GPS15L的输出为NMEA0183版本2.00或3.00(可选)的ASCII 码语句,包括:GPALM,GPGGA,GPGLL,GPGSA,GPGSV,GPRMC,GPVTG(NMEA 标准语句);PGRMB,PGRME,PGRMF,PGRMM,PGRMT,PGRMV(GARMIN定义的语句);输入为初始位置、时间、秒脉冲状态、差分模式、NMEA输出间隔等设置信息。各语句的意义如表2所示:表2 NMEA0183语句的含义GPALM历书信息GPGGAGPS 定位信息GPGLL定位地理信息GPGSA当前卫星信息GPGSV可见卫星信息GPRMC推荐定位信息GPVTG地面速度信息PGRMB信标差分信息PGRME估计误差信息PGRMFGPS 定位信息PGRMM坐标系统信息PGRMT工作状态信息PGRMV三维速度信息3.1.2 GPS模块部分的硬件设计与调试GPS15L对电压的适应范围比较广,输入电压的范围在3.3V5.4V之间即可,所以可以与单片机使用同一电源。它的对外异步串行接口为RS232电平,而且波特率可选为300,600,1200,2400,4800,9600,19200,38400,默认值为4800。与其进行通信和控制的单片机的接口为TTL电平,所以需要对其进行电平转换。对这部分的硬件的设计如图1所示:单 片 机电源部分GPS15L模块电平转换GPS天线图1 GPS模块部分的电路设计由于GPS15L的接口电平为RS232电平,所以它可以很方便的与计算机串口相连,也就方便了调试和对其进行配置。在调试时,应用了自己编写的VB程序。否是开 始COM口是否已开开COM口发送程序结 束定时器中断接收程序结 束接收子程序图2 VB串口程序框图图2出示了VB串口程序框图。为了观察GPS模块发回的定位信息的数据格式和调试GPS的配置命令,这里应用VB编写COM口数据收发程序。在调试和配置时,需要通过计算机串口来进行。这里先将计算机的COM口引出线来,然后将GPS模块的串口接到计算机COM口的相应的输入输出引脚的位置上,这样调试的硬件准备就完成了。通过上述的VB串口程序,既可以清晰的显示从计算机串口输入的数据,也可以很方便的通过计算机串口向外发送指定的数据。通过利用上述VB串口程序和GPS模块自带的配置软件进行调试,熟悉了GPS命令的格式并且验证了GPS数据信息的格式,为接下来软件的设计提供了良好的前提。在完成对GPS的命令及数据信息格式的熟悉之后,用GPS模块自带的配置软件对GPS模块进行配置,使其工作在指定的工作状态上,发回指定的定位信息,并设定其每一秒发回一次定位数据。3.2 车载终端移动通信系统的基本原理与硬件设计3.2.1 GSM模块的选择本项目采用的是短消息的通信方式,可供选择的GSM模块种类很多,它们都有短消息功能,但是考虑到系统的可升级性,我们选用了有GPRS功能的GSM模块。GPRS(General Packet Radio Service, 通用分组无线业务)是一种新的移动数据通信业务,在移动用户和数据网络之间提供一种连接,给移动用户提供高速无线IP或X.25服务。GPRS采用分组交换技术,每个用户可同时占用多个无线信道,同一无线信道又可以由多个用户共享,资源被有效的利用,数据传输速率高达160Kbps,实际应用带宽大约在40100Kbps,在此信道上提供TCP/IP连接,可以用于INTERNET连接、数据传输等应用。使用GPRS技术实现数据分组发送和接收,用户永远在线且按流量计费,迅速降低了服务成本。现在市场上的有GPRS功能的GSM模块主要有以下三种,分别为西门子公司MC35,摩托罗拉公司的G18与索尼爱立信公司的GM47。这三种模块的特点分别如下所示:(1)GPRS模块在发射时的瞬间电流一般都在2A水平,因此在选择电源时,一定要留有余量,以免电压波动太大,影响GPRS模块工作的稳定性。在GPRS模块工作时,一旦电源跌落到它的下限,模块就会自动关机,在这里也可以加入大电容来稳压。(2)G18可直接+5V供电,在供电方面是最方便的一款。MC35的供电电压为3.3-4.8V,可采用简单的在+5V电源串接二极管的方式来降压供电。GM47的供电范围较窄,仅为3.4-4.0V,如果仍采用串接二极管的供电方式的话,主电源需调低在4.8V的水平。(3)在尺寸方面GM47和MC35差不多,G18的外形尺寸比GM47和MC35大,但集成了一个SIM卡座,所以总的使用面积三种GPRS模块类似。由于在试验中多次使用了西门子的手机,而且三种模块的具体差别并不是特别明显,本项目选择了西门子公司的MC35模块。3.2.2 GSM模块部分的硬件设计与调试GSM模块是车载终端与监控中心联系的纽带,GPS定位信息要通它传送到监控中心,是系统硬件设计的重要部分。本项目中应用的MC35模块在硬件连接方面电源是很重要的一环,因为电源波动太大容易使GSM模块自动关机,而且不易被系统察觉。MC35的供电电压为3.3-4.8V,可以采用二极管进行分压来提供电源,为了保证电压的稳定可以在电压的输入端并联一个大电容来进行稳压。MC35的串口采用的是CMOS电平,为了与单片机进行通信需要另加电平转换模块,将CMOS电平与TTL电平相互转换。不过在串口的通信方面MC35模块有一个比较方便的内在条件,它的串口可以自适应1200,2400,4800,9600,19200, 38400,57600,115200bps的波特率。在软件设计时,就不用担心两边波特率的协调问题了。另外,MC35模块在启动时需要一个启动时序,所以还需要添加一个启动电路。对于MC35模块的控制,IGT启动信号非常的重要,只有正确的IGT信号才可以使MC35模块正常的启动运行。IGT的下降沿启动MC35,并且IGT的低电平应该至少保持100ms,MC35正常工作后PD引脚会有方波输出,可以通过检测PD引脚来判断MC35是否启动。由于MC35模块不包含SIM卡插座,SIM卡插座部分需要自己安装连接,具体的联接方式可查找相关的资料或MC35的手册。综合上述的已知条件,可将MC35模块部分的硬件连接设计如下,具体的设计框图如图3所示:单 片 机电源模块MC35模块SIM卡电平转换控制启动电路降压稳压电路图3 MC35模块部分的电路原理图在对MC35模块进行调试时,为了调试方便,安装了一个工作状态指示灯,每当MC35模块扫描网络或收发短消息时,指示灯都会闪烁。当车载终端工作时,可以通过观察指示灯来判断MC35模块是否向监控中心发送短消息。电路连接完毕后,先对MC35模块的启动情况进行测试,通过单片机运行启动时序使MC35模块启动,然后通过拨打SIM卡的电话号码来判断MC35模块是否启动。如果MC35模块正常启动,电话可以打通,而且指示灯会不停的闪烁。当确定硬件连接没有问题,而且MC35模块也可以正常启动后,就可以对它进行AT命令的调试了。由于MC35模块采用的是CMOS电平,而计算机串口采用的是RS232电平,所以无法直接与计算机进行通信,这就给调试带来了难度。但是考虑到可以利用现有的电路板作为MC35模块的开发调试板,简化MC35模块的调试步骤。通信路径如图4所示:GPS串口计算机电平转换单片机电平转换GSM模块图4 通信路径原理图车载终端的电路板上有为GPS模块留出的RS232接口,GPS模块与单片机的接口是经过电平转换的,而且MC35模块和单片机的接口也是经过电平转换的,所以考虑到可以利用为GPS模块留出的接口收发数据并通过单片机中转来实现与MC35模块的通信,对MC35模块进行调试。这里采用和调试GPS模块相似的方法,仍然采用上面用过的VB计算机串口收发程序,向MC35模块发送命令,并观察MC35模块串口的回应。在这里,单片机的作用是将从GPS串口输入的数据发送到GSM的输入口,并将GSM串口输出的数据转发,使其从GPS串口输出,发回到计算机。单片机在这里起的是数据中转的作用,并利用数据收发队列模拟缓冲区来管理输入输出数据。数据中转程序框图如下:图5数据中转程序框图在AT命令还不熟悉时,为了观察AT命令的格式以及短消息发送的工作流程,我们通过现成的手机短消息收发软件,控制配有西门子手机模块的手机发送短消息,手机通过专用的手机数据线与电脑相连,并且通过计算机串口将发送命令的格式接收回来并保存,然后通过VB串口发送程序发送给MC35,通过这种方法验证了MC35工作正常,并可以发送短消息,而且也熟悉了短消息发送的工作流程。3.3 单片机系统的整体设计3.3.1 AVR单片机简介本项目的单片机选用了Atmel公司生产的ATmega128,它是一种高性能的RISC微控制器。它备有两个串行口,可以分别用来控制GPS15L模块和MC35模块,与它们进行通信,而且片内有4k的EEPROM,可以用来存储历史数据和监控中心的指令等。ATmega128 具有如下特点:128K 字节的系统内可编程Flash(具有在写的过程中还可以读的能力,即RWW)、4K 字节的EEPROM ,4K 字节的SRAM 、53 个通用I/O 口线、32个通用工作寄存器、实时时钟RTC 、4 个灵活的具有比较模式和PWM 功能的定时器/计数器(T/C)、两个USART 、面向字节的两线接口TWI 、8 通道10 位ADC(具有可选的可编程增益)、具有片内振荡器的可编程看门狗定时器、SPI 串行端口、与IEEE 1149.1 规范兼容的JTAG 测试接口(此接口同时还可以用于片上调试),以及六种可以通过软件选择的省电模式。空闲模式时CPU 停止工作,而SRAM 、T/C 、SPI 端口以及中断系统继续工作;掉电模式时晶体振荡器停止振荡,所有功能除了中断和硬件复位之外都停止工作,寄存器的内容则一直保持;省电模式时异步定时器继续运行,以允许用户维持时间基准,器件的其他部分则处于睡眠状态;ADC 噪声抑制模式时CPU 和所有的I/O 模块停止运行,而异步定时器和ADC 继续工作,以减少ADC 转换时的开关噪声;Standby 模式时振荡器工作而其他部分睡眠,使得器件只消耗极少的电流,同时具有快速启动能力;扩展Standby 模式则允许振荡器和异步定时器继续工作。器件是以Atmel 的高密度非易失性内存技术生产的。片内 ISP Flash 可以通过SPI 接口、通用编程器,或引导程序多次编程。引导程序可以使用任何接口来下载应用程序到应用Flash 存储器。在更新应用Flash 存储器时引导Flash 区的程序继续运行,实现RWW 操作。通过将8 位RISC CPU 与系统内可编程的Flash 集成在一个芯片内,ATmega128 为许多嵌入式控制应用提供了灵活而低成本的方案3.3.2 AVR单片机的体系结构AVR单片机的体系结构具有如下特点:(1)在指令方面,它是RISC指令的单片机,并且指令系统的向上兼容性做的很好。 指令采用采用了两级流水线结构可以在一个周期内同时完成一条指令的执行和下一条指令的取指。最大限度地提高了每一个内部时钟周期的效率。具有高速的指令执行时间,16 MHz时钟情况下达到160 ns,即四个时钟周期执行一条指令,在单周期内可以对I/O口的任一位直接进行位操作。(2)在硬件结构方面,它采用的是哈佛(Harvard)双总线结构。其存储结构是基于哈佛双总线概念,数据和指令传输总线完全分开以避免出现典型的普通总线流量限制的瓶颈问题,图6显示了两种总线结构不同。图6 两种不同结构的示意图传统的冯诺依曼结构的计算机是在同一个存储空间取指令和数据(即普林斯顿结构),两者不能同时进行,故限制了工作带宽。而在哈佛结构的计算机中,指令和数据空间是完全分开的,一个用于指令,另一个用于数据。由于可以对程序和数据同时进行访问,所以提高了数据吞吐率。而且,数据总线与程序总线的独立也使得总线的宽度可以不一样,程序总线和数据总线具有不同的宽度。3.3.3 单片机系统硬件的总体设计在进行电路的总体设计时,主要考虑到各个部件的摆放,空间的节省等问题。在电源方面强调了电压的稳定性,着重减小电压的波动,以避免MC35模块错误的关机。为了增加串口通信的稳定性,单片机选择了11.0592MHz的晶振,这样在串口设置波特率时不会产生波特率的误差。单片机系统的总体电路设计如图7所示:单片机电源模块GPS15L模块GSM模块SIM卡电平转换电平转换控制启动电路图7 系统的总体电路图经过实际电路的调试与完善,GPS模块与MC35模块均工作正常,能够实现预定的功能。3.4 本章小结本章主要介绍了车载终端的硬件设计和各部分的工作原理和特点。在整个系统硬件的设计过程中,整体的掌握了系统的各个部分的功能以及它们在工作中各自的工作情况,并初步熟悉了各部分的指令格式。在系统的调试过程中,把一个大系统分成若干的小系统,并分别对其调试和熟悉,以模块化设计的思想进行设计和调试。结果证明,这种设计和调试方法有助于熟悉和了解系统的各部分的工作原理和工作情况,提高了设计效率,最后完成了项目整体的硬件设计。第四章 系统的软件设计系统的软件设计关系到系统运行效率和系统的使用寿命,也是非常重要和关键的一部分,系统软件的正确设计才能保证系统的正确运行。本项目的软件设计主要由下面几部分组成,GPS15L模块定位信息的接收程序,MC35模块的短消息收发程序,单片机系统的主程序以及EEPROM的历史定位信息和监控中心命令的读写程序。保证程序各个部分的正确运行,不相互冲突,是本系统设计要保证的一个前提。下面详细介绍系统各部分软件的设计。4.1 GPS模块部分的软件设计4.1.1 GPS15L模块的配置GPS模块在工作之前应对其先进行配置,使其按期望的工作方式进行工作。首先,先将GPS模块的坐标系统设置为WGS84坐标系,因为这个坐标系是比较通用的一个坐标系,而且和我国的坐标系统间的误差也较小。然后,设置GPS15L模块的NMEA0183信息的更新率为一秒钟,即每一秒输出一次定位信息。最后,将GPS15L的输出语句设为推荐的定位信息,即$GPRMC语句,并将波特率设置为19200。需要注意的是如果设置的输出语句过多,波特率就不能设置的太低,否则将不能保证NMEA0183信息每秒一次的刷新率,可能会出现设置为NMEA0183信息每秒一次的刷新率,而实际输出却是NMEA0183信息每两秒一次的刷新率。GPS15L模块的配置信息配置完毕后,配置信息将被保存在永久性的存储器中,下次加电时会自动生效。4.1.2 GPS15L模块定位信息的接收程序经过上一章所进行的对GPS15L模块的调试以及相关资料的查询,得到了GPS定位信息的详细格式,其中数据均以ASCII码方式表示。在本项目中,令GPS15L只发送$GPRMC语句,其标准格式如表2所示:表2 $GPRMC推荐定位信息语句格式$GPRMC,*hhUTC 时间,hhmmss(时分秒)格式定位状态,A=有效定位,V=无效定位纬度ddmm.mmmm(度分)格式(前面的0 也将被传输)纬度半球N(北半球)或S(南半球)经度dddmm.mmmm(度分)格式(前面的0 也将被传输)经度半球E(东经)或W(西经)地面速率(000.0999.9 节,前面的0 也将被传输)地面航向(000.0359.9 度,以真北为参考基准,前面的0 也将被传输)UTC 日期,ddmmyy(日月年)格式磁偏角(000.0180.0 度,前面的0 也将被传输)磁偏角方向,E(东)或W(西)模式指示(仅NMEA0183 3.00 版本输出,A=自主定位,D=差分,E=估算,N=数据无效)经调试发现,GPS的定位信息在有效和无效状态下的格式会略有不同。当定位信息无效时,$GPRMC将不包含,两项,即地面速率与地面航向,在编程时应注意这一点。GPS定位信息的接收程序流程图如下:图8 GPS定位信息接收子程序 用此子程序将GPS定位信息保存在一个临时的结构体中,待定位信息完全接收完毕后,将此结构体交给主程序使用。本子程序每一次中断仅接收一位ASCII码,通过一个接收计数临时寄存器来记录接收的进程,保证数据接收的连续性,并控制程序的运行。4.2 GSM模块部分的软件设计GSM模块部分的软件设计是系统的关键部分,它负责着车载终端与监控中心的通信,即将定位信息传送到监控中心和接收监控中心的命令,因而这部分设计的情况直接影响系统的运行效率与运行成本。在这部分软件设计时,还需要考虑到监控中心的控制命令的保密性,只有通过正确的命令格式才能对车载终端下达命令,控制车载终端的工作状态。4.2.1 基本的AT命令与格式AT命令前缀通常总是由AT两个字符组成,它是“Attention”的缩写,在本项目中主要应用了与短消息(SMS)相关的AT命令。短消息有三种模式,它们是Block模式,基于AT命令的Text模式和PDU模式。在三种模式中,Text模式是最方便使用和调试的,虽然不支持中文,但是本项目并不需要中文字符的收发,只需有定位数据的发送和监控中心命令的接收就可以了。PDU模式则需要对所发送的信息进行编码,增加了程序编写的难度,并且降低了可靠性。而Block模式需要手机生产厂家提供驱动支持。所以本项目使用Text模式收发短信,简化了程序的设计,提高了程序运行的可靠性。下面列出了与短消息(SMS)有关的主要的AT指令,它们的含义如表3所示:表3 与(SMS)有关的GSM AT指令AT 指令 功 能AT+CMGC Send an SMS command(发出一条短消息命令)AT+CMGD Delete SMS message(删除SIM卡内存的短消息)AT+CMGF Select SMS message formate(选择短消息信息格式:0-PDU;1-文本) AT+CMGL List SMS message from preferred store(列出SIM卡中的短消息PDU/text:0/“REC UNREAD”-未读,1/“REC READ”-已读,2/“STO UNSENT”-待发,3/“STO SENT”-已发,4/“ALL”-全部的)AT+CMGR Read SMS message(读短消息)AT+CMGS Send SMS message(发送短消息)AT+CMGW Write SMS message to memory(向SIM内存中写入待发的短消息) AT+CMSS Send SMS message from storage(从SIM内存中发送短消息) AT+CNMI New SMS message indications(显示新收到的短消息)AT+CPMS Preferred SMS message storage(选择短消息内存)AT+CSCA SMS service center address(短消息中心地址)AT+CSCB Select cell broadcast messages(选择蜂窝广播消息)AT+CSMP Set SMS text mode parameters(设置短消息文本模式参数)AT+CSMS Select Message Service(选择短消息服务)对MC35模块的AT命令操作主要有以下几步:第一步,单片机通过MC35模块的启动电路来使其启动后,通过向其ATE命令来确定MC35模块的启动,如果MC35模块已启动将返回“OK”。第二步,设定MC35模块的短消息模式为文本模式。进行设置的AT命令格式为“AT+CMGF=1”,设置成功后返回“OK”。第三步,进入工作状态后,发送指定的短消息并实时查询监控中心命令以及删除已读短消息。(1)发送短消息向MC35串口发送“ATCMGS”,等待GSM返回“”后,向GSM串口发送所要发送的短消息。(2)接收短消息向GSM串口发送“ATCMGLALL”,如果没有短消息返回“OK”,有短消息时返回“CMGL: ,短消息状态,手机号码,日期时间短消息内容。其中为短消息的条数,代表换行,代表回车。(3)删除短消息向GSM串口发送“ATCMGD”,成功删除短消息后,GSM返回“OK”。4.2.2 MC35模块部分的软件设计这部分的软件设计主要包含以下几个部分,首先是判断MC35模块是否启动的部分,如果MC35已经启动,中断子程序会收到OK,程序将继续向下运行,否则等待MC35模块启动;然后是接收监控中心的控制命令的部分,这部分子程序按一定的格式接收监控中心的命令,如果命令格式不对将不进行接收和保存,这相当于对系统进行了加密,保证了系统的安全性;正确的读取命令之后,将本条短消息删除,这个功能由主程序完成;还有短消息的发送部分,当MC35模块处于发送短消息状态时,中断程序接收发送短消息准备好标志,并设置标志寄存器,主程序收到标志后,将包含有定位信息的短消息发出。程序流程图如图9所示:图9 MC35模块部分软件流程图当MC35模块处于启动状态时,中断程序将走向图中右侧的分支,接收“OK”。当监控中心向车载终端发送控制命令时,中断程序沿图中中间的分支运行,利用这个中断子程序来完成控制命令的接收,并在主程序中进行保存。本子程序每次仅接收一位ASCII码,通过一个接收计数临时寄存器和工作状态标志寄存器来记录接收的进程,连续接收数据。当主程序等待接收短消息发送准备好标志时,中断程序走向左侧的分支,接收到准备好标志后,由本子程序置相应的标志寄存器,主程序收到标志后将短消息内容发送出去。4.3 单片机系统的软件设计这部分的主要任务就是将各部分子程序组织到一起的工作,如何将系统各部分子程序良好的组织在一起,使各个子程序能够协调运行不互相干扰是这部分软件设计重要课题。由于整个软件系统中子程序众多,为了不至于造成混乱,提高设计效率,一个清晰的程序流程图是十分重要的。图9显示了单片机系统的主程序流程图。 图9 单片机系统主程序流程图单片机系统的软件设计是车载终端软件设计的最后部分,需要设计各部分子程序而且要经过调试确保它们的工作的协调性和可靠性。对各种数据的保存也需要仔细斟酌,既要确保数据存储空间的有效利用,又要使数据有较好的可读性。在本项目中,延时子程序和串口收发子程序都经过了单独调试,验证了工作的可靠性;GPS数据采用结构体方式来存储,增强了可读性,也方便了数据的调用。对于一些重要数据,如历史定位数据,监控中心控制命令数据以及监控中心号码等都存储到了单片机的EEPROM中,不会随系统的断电而丢失,既增加了系统运行的可靠性,又提供了查询历史定位信息的功能。当系统各部分启动完成并发出每天一条的定位信息后,程序就进入主循环。 图10 主循环的程序框图主循环的程序框图如图10所示,在主循环中,程序完成实时接收监控中心的控制命令和按规定的时间间隔向监控中心发送定位信息,并且将最近的5条定位信息和最近5天的每天一条的定位信息保存在EEPROM中,同时也将监控中心的命令和电话号码也保存在EEPROM中,下次开机自动执行上次的控制命令。单片机系统的软件设计到此就全部完成了,随着系统的运行还需要有一些完善的工作和系统的可靠性增强的工作等。监控中心的控制命令可分别取为01、10、15、30、24、00、11、55,其中01、10、15、30、24分别代表了令车载终端每一、十、十五、三十分钟和每二十四小时发回一条短消息,每条短消息中包含五条等时间间隔的定位信息;00代表不发送短消息;11代表发回一条最近的有效定位信息后停止发送短消息;55代表发回前五天的每天一条的定位信息,即历史定位信息。4.4 本章小结本章主要介绍了车载终端的软件设计过程以及各个模块的通信协议等内容,例如GPS模块的NMEA0183语句和短消息相关的AT命令等。在单片机系统软件设计的过程中,曾出现过许多问题,一般都是因为对通信协议的不够了解或者程序方面的错误。现有的硬件连接在正确连接并调试完毕后,硬件方面都会可靠的工作,能够满足系统的需要。需要注意的是,当在室外进行定位时,如果GPS15L长时间没有进行过定位,系统的启动时间可能会被延长,因为GPS模块需要一段时间重新扫描天空,但一般不会超过5分钟。在系统运行时需要向EEPROM中写入数据,单片机中的EEPROM可擦写次数为一百万次,完全可以满足系统的需要。所以,车载终端的软件设计是可靠的,可以满足系统的要求。第五章 基于模糊逻辑的地图匹配算法的设计地图匹配算法在车辆定位系统中有着很强的实用价值,它应用软件算法来提高系统的定位精度,不需要硬件的投入。GPS可提供全球性、低成本的位置、速度信息,电子地图用于汽车定位的主要功能是为了在屏幕上标明汽车的运动位置。近年来由于电子地图制作方法的改进,其精度得到了很大提高,从而可以利用高精度的电子地图对汽车的位置进行修正,地图匹配这个概念也应运而生。本项目采用模仿航位推算DR(Dead Reckoning)的基于模糊逻辑的地图匹配算法,期望利用GPS定位的数据信息模仿航位推算的效果,尽量接近GPS定位与航位推算DR相组合系统的定位效果。5.1 地图匹配的意义对于车载导航系统,获得车辆的精确定位是最基本的要求。目前国外的车载导航系统采用了航位推算(DeadReckoning,DR),差分GPS技术,用高精度的载波相位接收机等提高定位精度的方法等等。但这些方法要求成本较高,技术实现复杂,且不太适合中国国土辽阔、地形复杂的国情,所以实际系统中通常采用地图匹配算法来提高车辆导航系统的定位精度。GPS定位由于卫星星历误差、卫星钟误差、电离层传播延迟与接收设备误差等的影响,使得GPS定位存在着误差。特别是在城市路段上运行的情况下,经常会出现高层建筑和立交桥阻挡,使接收机失去对部分卫星锁定,GPS数据产生数据漂移,这时就会有较大的偏差。当应用于车辆定位时,车辆不会显示在道路上,不仅定位点误差比较大,而且影响车辆轨迹的可读性。于是,考虑到汽车在大部分的时间里都是在道路上行驶的,将汽车匹配到正确的道路上至少会消除垂直于道路的误差,而且很大的提高了汽车行驶轨迹的可读性,于是产生了地图匹配算法。地图匹配又称Map Matching(MM),是近年来伴随GPS全球定位的发展和电子地图精度的提高而产生的提高定位精度的方法,多用于移动目标的定位上。由于电子地图精度的提高,使得地图系统不仅仅只作为显示工具,而且还可以结合定位目标的特点提高定位精度和显示的效果。地图匹配在汽车定位中一般都假定两个前提:(1)当前被定位车辆正在道路上行驶。(2)用于地图匹配的电子地图有较高的精度。5.2 常见的地图匹配算法由于地图匹配算法的实用性比较强,所以也产生了较多的地图匹配算法。基本的地图匹配算法有以下几种:(1)基于几何距离的地图匹配算法这种方法的主要思想是在一定的地理区域内直接查找距离当前车辆位置最近的道路路段,并把当前获得的定位数据投影到所得到的路段上,把投影点的坐标作为车辆的修正位置。这种算法简单易行,在一定程度上可以提高车辆的定位精度。但是存在着效率低,稳定性差的问题。(2)基于行驶轨迹形状的地图匹配算法这种方法的主要思想是比较车辆行驶轨迹和路段形状的相似性,取形状最接近的路段为匹配路段,然后再用投影的办法将定位点匹配到该路段上,把投影点坐标作为车辆的修正位置。这种方法在计算时要复杂一些,但是由于用到了较多的信息量,所以在进行地图匹配时的效果会更好一点。(3)基于概率或模糊逻辑的地图匹配算法由于这种地图匹配算法可以建立不同的模型和匹配规则,所以具有比较大的灵活性,在设计地图匹配算法时有较大的空间可以发挥。这种算法在一般设计得比较复杂,应用地图的和GPS定位的信息比较多,所以在匹配时会得到比较好的效果。(4)GPS定位与航位推算DR(Dead Reckoning)相组合的地图匹配算法这种定位方法采用多种定位方式的组合来获取定位信息,在地图匹配时不仅有GPS定位信息,还有航位推算DR(Dead Reckoning)信息的支持,所以在地图匹配时这种地图匹配方式的匹配效果最好。但是应用这种地图匹配方法需要在系统中增加硬件投入,即航位推算DR系统,增加了定位系统的硬件成本。另外,地图匹配还有其它的一些方法,如基于代价函数的地图匹配方法,基于模式识别的地图匹配算法等等,这些方法也都有各自的优缺点,这里不一一介绍。本算法中应用了多种基本算法的组合,以期望能够结合各种算法的优点,达到更好的匹配效果。5.3 模仿航位推算的基于模糊逻辑的地图匹配算法由于GPS的定位信息误差的存在,使得车辆不能定位到正确的位置上,所以为了提高定位精度,令定位轨迹更加具有可读性,这里采用模仿航位推算的基于模糊逻辑的地图匹配算法进行地图匹配。普通的航位推算需要有速度和方向传感器等硬件设备,不仅增加了硬件投入,还使得系统体积增大。这里采用的航位推算完全为软件算法,所需的信息均由GPS定位信息得来,不需要增加硬件投入,降低了系统成本。根据车辆GPS定位的特点,假设下述条件:(1)用于地图匹配的电子地图具有比较高的精度(2)当前被定位汽车正在道路上行驶由于汽车定位的特点,车辆在绝大多数运行时间内都处于道路上,因此这样的假定条件是成立的。利用软件算法进行地图匹配可以在不增加硬件投入的前提下提高定位精度,节约了系统成本,提高了系统性能。5.3.1基于模糊逻辑的地图匹配算法的基本原理本地图匹配算法主要由以下几部分构成:1确定待匹配路段这部分的工作主要是将符合条件的待匹配路段寻找出来。选取待匹配路段的范围既不能太大也不能太小,范围过大会增加地图匹配时的计算量,而范围过小又有可能将真实的匹配路段漏掉。所以确定一个适当的误差范围是十分必要的。通常应用概率的方法来确定误差范围,使误差范围以较高的概率包含车辆的实际位置,找出所有符合条件的路段以供匹配。由GPS15L的精度指标可知,GPS的定位精度以95的概率小于15米。假定误差服从正态分布,根据其误差的分布情况且假设定位误差在x和y方向上相互独立,则误差分布的概率密度函数可设为:f(x,y)=exp-()+()其中由于电子地图中也有一部分误差,所以可以以20米为半径画圆,与该圆相交的路段即为待匹配路段。以这种方式确定待匹配路段弃真的可能性很小,而且又不至于使概率圆取得过大,产生太多的待匹配路段,增加计算量。待匹配路段的选取如图11所示。图11 待匹配道路选取示意图2寻找最佳的匹配路段误差范围确定后,就可以从地图数据库中提取与概率圆相交的道路信息,以便寻找最佳的匹配路段。结合GPS定位信息,按照匹配算法就可以找出最佳的匹配路段。匹配路段的确定通常基于以下几点考虑:(1)路段方向是否与车辆行驶方向一致或接近以候选路段走向与车辆行驶方向的差course(单位:度)值为论域X,令(x), (x)为取向差x隶属于模糊子集“路段与车辆行驶方向一致性好”和“路段与车辆行驶方向一致性差”的隶属度,则(x), (x)可取为:(x)=(x)=从直观上考虑,如果车辆行驶方向与道路取向越接近,则车辆在行驶该道路上的概率就越高,车辆行驶方向与道路取向的接近性的隶属度函数的图形如图12所示:图12 方向接近性的匹配隶属度图 在图中可以看出,隶属度函数在角度差小于60度时,为线性变化的;当角度差大于60度时,隶属度函数为常数。这是因为考虑到如果角度差太大的可能性比较小,所以误差大于60度的就不予以考虑了,而且取这样的隶属度函数在计算时比较方便,算法设计相对简单。(2)路段位置与定位点距离是否接近设P(x,y)代表当前的车辆定位点,P(x,y)是点P在路段上的投影点,则以候选路段到车辆定位点的距离distance=(单位:m)值为论域Y,令(y),(y)为距离值y隶属于模糊子集“路段与定位点接近度好”和“路段与定位点接近度差”的隶属度函数。则(y),(y)可取为:(y)=(y)=这部分考虑到,如果定位点与路段的距离越近,则路段是匹配路段的可能性就越高。同样,如果路段与定位点的距离过远,则认为是不可能的,而且由待匹配路段的选取办法也决定了路段与定位点的距离不可能超过20米。路段与定位点接近度的隶属度函数的图形如图13所示:图13 路段与定位点接近度的隶属度 在图中可以看出,隶属度函数在距离差小于20米时,为线性变化的;当距离差大于20米时,隶属度函数为常数。这是由待匹配路段的选取原则决定的,即便待匹配路段的选取原则改变,这样的隶属度函数仍然有它的合理性。(3)路段形状是否与车辆行驶轨迹相似在初始位置给定时,可以利用DR航位推算的原理能够描述出车辆在短时间内的行驶轨迹。因此路段形状与车行轨迹的相似性可以根据DR航位推算原理推算得出,即将初始位置取为定位点到待匹配路段的投影点,然后通过计算推算点到该路段的距离来判断路段形状与车辆行驶轨迹的相似性。一般的航位推算需要配有车载的陀螺仪等惯性导航器件,本算法利用惯性导航的原理,利用GPS定位信息中的角度和速度信息,通过模拟惯性导航来计算近期的车辆行驶轨迹,并通过模糊逻辑来判断车辆行驶轨迹与路段形状的相似性,以期系统能达到GPS定位与惯导航位推算组合系统的效果。这种算法在车辆转弯的路段上效果尤为明显。这样不仅减少了硬件投入,还有利于减小定位系统的硬件体积,增加了系统的应用范围。根据航位推算原理,现时刻t的车辆位置(x,y)可根据上一时刻t的车辆位置(x,y),行驶取向、和形式速度v、v按下列公式推算得出: x=x+dcos()/2 y= y+ dsin()/2 d= (t- t)(vv)/2其中d是t到t时刻车辆行驶过的距离,v是t时刻车辆行驶的速度,v是t时刻车辆行驶的速度,是t时刻车辆行驶的角度,是t时刻车辆行驶的角度 (,v,v均由GPS15L模块提供)。取车辆当前定位位置P(x,y)在候选路段上的投影点P(x,y)为t时刻DR航位推算定位的初始位置,则由DR航位推算公式可以反推出下一时刻的推算定位参考点。通过多次推算即可获得一组参考点,具体数量可根据实际应用的要求确定。这里取参考点数目为5,则可定义候选路段与前5个单位时间内的DR航位推算定位轨迹平均距离差(单位:m)为:d=/5其中(x,y)是t时刻的推算定位参考点位置,(x,y)是其在候选路段上的投影点位置。显然,d越小则候选路段形状与推算定位轨迹的相似度越好。以d值作为论域Z,令(z),(z)分别为z(d值)隶属于模糊子集“路段与航位推算轨迹相似度好”和“路段与航位推算轨迹相似度差”的隶属度,则(z), (z)可取为(z)=(z)=在这部分主要考虑路段形状与车辆行驶轨迹的相似性,如果路段形状与车辆行驶轨迹相似性高,则路段是匹配路段的可能性大。路段形状与航位推算轨迹相似度的隶属度函数的图形如图14所示:图14 路段与航位推算轨迹相似度的隶属度 在这里的隶属度函数与距离差的隶属度函数相似,当距离差小于20米时,隶属度函数为线性变化的;当距离差大于20米时,隶属度函数为常数。由GPS定位误差的参数可知,这样的隶属度函数是合理的。(4)确定综合评判隶属度根据上述的隶属度函数,可以综合得出当前路段是否为实际行驶路段的隶属度。以此隶属度为论域U,将其中元素u与前述的论域X、Y和Z的笛卡尔乘积集XYZ=(x,y,z)|xX,yY,zZ的元素(x,y,z)建立一一对应关系,即u可取为前面三个隶属度的加权和。在求取综合隶属度u时,因素集可以取为E=X,Y,Z,评语集可取为F=可能性大,可能性小。可以按照以下步骤求出综合评判隶属度。首先,求出对应于X、Y、Z论域的隶属度,利用其结果构造表示E与F之间模糊关系矩阵。设对应于因素X、Y、Z的单因素隶属度结果分别为模糊向量R=(x), (x),R=(y),(y)和R=(z),(z),则将以上模糊向量组合在一起便得到因素集E的模糊矩阵R=R, R, R。然后,确定权向量P=p1,p2,p3其中p1,p2,p3分别表示因素x,y,z在u中的重要程度,并且令p1+p2+p3=1。最后,作模糊变换Q=P*R,所得模糊向量Q就是被评判对象u在评语集合F上的评判结果,即候选路段的可能性评价矩阵,其中的2个分量表示候选路段是车辆所在路段的可能性大和小的程度。(5)候选路段是否与车辆前一时刻匹配路段相连通在进行地图匹配时,应考虑到候选路段与前一时刻匹配路段的连通性,为此再引入以下规则:如果候选路段就是前一时刻匹配路段或者与前一时刻的匹配路段相连通,则利用该候选路段进行匹配所得结果的可信度高。以修正结果为评判对象,取评判指标矩阵为,其中Q是候选路段的可能性评价矩阵,Q是连通性评价矩阵,当候选路段与前一时刻匹配路段有连通关系时,Q取为前一时刻匹配路段的可能性评价矩阵,否则以0,1矩阵取代。取评判权向量为P=p1,p2,其分量分别对应于Q和Q的各个分量,且p1+p2=1。将指标矩阵与权向量相乘,得=P*,称,为“路段是车辆行驶路段的可能性大”和“路段是车辆行驶路段的可能性小”的隶属度。以此为依据,得到最大的隶属度的路段即为匹配路段。至此,匹配算法全部完成,本算法的最大优点就是不需要额外的硬件设备,而且在匹配过程中模拟了DR航位推算原理,更多更全面的应用了GPS的定位信息,提高了GPS定位信息的利用率。5.3.2 基于模糊逻辑的地图匹配算法的仿真与验证1GPS定位数据的模拟根据本项目所采用的GPS15L模块的精度指标,假设定位信息在x、y方向上的误差服从相互独立的N(0,7.5)分布。根据相关资料的查找,假设角度误差服从N(0,30)分布。由于GPS15L的速度精度很高,精度指标为0.05 米/秒RMS,所以这里忽略不计。下面以坐标表示车辆的定位位置,设汽车行驶的真实位置为:x=0,25,50,60,60,65,90,115,120,120,130,155,180y=60,60,60,75,100,120,120,120,100,75,60,60,60则车辆的真实位置如图9所示: 图9 汽车的真实位置图中的x代表汽车的真实位置。设汽车真实的行驶速度和角度分别为: v25,25,25,25,25,25,25,25,25,25,25,25,25d=0,0,0,90,90,0,0,0,-90,-90,0,0,0 其中v表示汽车行驶的速度,单位为米。d表示汽车行驶的角度,单位为度。设数据的更新频率为每秒钟一次。根据GPS15L模块的精度指标,向定位信息中加入误差,模拟真实的GPS定位信息。则真实的定位情况如图10所示,图中用*代表GPS模块的定位信息,这时的定位信息已经不在道路上了。图10 加入误差后的定位情况 到此为止已经完成了GPS定位信息的模拟,定位信息的数据是由真实位置加入随机误差模拟的,基本符合GPS定位信息的特点。下面进行对本地图匹配算法的仿真。2进行地图匹配的仿真根据前面的模拟航位推算的基于模糊逻辑的地图匹配算法的各个规则进行地图匹配,得到的匹配结果如图11所示: 图11 进行地图匹配后的定位结果其中o代表匹配后的定位点,虚线代表GPS传来的定位信息,实线代表地图匹配后的定位信息。仿真结果表明模仿航位推算的基于模糊逻辑的地图匹配算法对于地图匹配能够起到提高精度的目的,使定位轨迹更具有可读性,得到了比较满意的结果,所以利用GPS定位信息的模仿航位推算的基于模糊逻辑的地图匹配算法可以达到提高定位精度的目的。5.4 本章小结 本章主要介绍了利用GPS定位信息模仿航位推算的基于模糊逻辑的地图匹配算法以及该算法的仿真,也简要的介绍了一些基本的地图匹配算法,如基于几何距离或几何形状相似性的地图匹配方法。算法的设计思想是利用现有的硬件配置,更充分的利用GPS定位信息来提高定位精度。由于GPS定位与航位推算(DR)组合系统的定位精度会得到较大的提高,由此得到启发利用GPS定位信息来模拟航位推算,以达到模拟组合定位系统的定位精度的目的。经过仿真试验表明,本算法能够提高系统的定位精度,有比较好的匹配定位效果。结 论本课题主要解决了GPS车载终端的硬件与软件的设计问题,并在此基础上提出利用GPS定位信息模仿航位推算的基于模糊逻辑的地图匹配算法,并且对算法进行了仿真,验证了本算法的有效性。在整个系统硬件的设计过程中,整体的掌握了系统的各个部分的功能以及它们在工作中各自的工作情况。在系统的调试过程中,把一个大系统分成若干的小系统,并分别对其调试和熟悉,以模块化设计的思想进行设计和调试。结果证明,这种设计和调试方法有助于熟悉和了解系统的各部分的工作原理和工作情况,提高了设计效率。在车载终端系统软件的设计过程中,介绍了车载终端的软件设计思想以及各个模块的通信协议等内容,例如GPS模块的NMEA0183语句和短消息相关的AT命令等。并且详细的考虑了系统在运行中可能出现的问题,并且使车载终端只接收一定格式的监控中心的命令,保证了系统的安全性。当系统启动运行时,默认执行上最近一次监控中心的命令,不用每次都对车载终端的工作状态进行设置。在最后介绍了利用GPS定位信息模仿航位推算的基于模糊逻辑的地图匹配算法以及该算法的仿真,并且也简要的介绍了一些其它常用的地图匹配算法,本算法综合了多种算法的思想。本算法利用现有的硬件配置,更充分的利用GPS定位信息来提高定位精度,并且模拟GPS定位与航位推算(DR)组合系统的定位原理,期望达到模拟组合定位系统的定位精度的目的。并且在仿真试验中根据GPS模块的精度参数和相关资料模拟了GPS的定位信息,在仿真试验中可以看到,本地图匹配算法可以起到比较好的效果。这种带有监控中心的汽车定位系统有助于更好的管理车辆的运行,提高车辆的运行效率,加强行车安全。这种系统的显示部分集中于监控中心,省去了车载的显示部分,而且采用了纯软件的地图匹配方法,所以造价比较低,容易被普通用户接受致 谢论文收尾之际,也是我的本科学习生涯即将结束之时。追忆四年的学习生活,感激与眷恋之情一言难表。 首先感谢我的导师,张袅娜老师,对我的关爱与栽培,她的严谨治学和诲人不倦使我深受其益,尤其她对知识的孜孜以求更加激励我,鞭策我不断上进。同时,我也要感谢关心和帮助过我的各位老师,同学,是他们启发了我的思维给了我灵感,我再一次表示深深的谢意。 人生有涯,学无止境。面临毕业,任重而道远,在今后的人生路上,我会更加努力,不断进步,以加倍努力来回报在我成长过程中给予过我帮助的各位师长,同学和朋友们!参 考 文 献1 洪大永. GPS全球定位系统技术及其应用. 厦门大学出版社. 1998: 48-562 曹学军. 美国宣布中止GPS精度降级政策. 遥感信息. 2000, 2: 423 张正禄,巢伯崇,黄全义,郭际明,罗年学. 地面控制测量工程一体化自动化系统的研究与实现. 武测科技. 1995, (3): 10-124 G. Mintsis, S. Basbas, P. Papaioannou, C. Taxiltaris, I.N. Tziavos. Applications of GPS technology in the land transportation system. European Journal of Operational Research. 2004: 399-4045 P.K. Brown. A GPS SENSOR FOR “ONCE IN A LIFETIME” APPLICATIONS. Mobile and Personal Communications. 1993: 189-1926 R.P. Van Zuydam. A drivers steering aid for an agricultural implement, based on an electronic map and Real Time Kinematic DGPS. Computers and Electronics in Agriculture. 1999: 153-1567 R. Earl, G. Thomas, B.S. Blackmore. The potential role of GIS in autonomous field operations. Computers and Electronics in Agriculture. 2000, 25: 107-1208 王仁礼,陈天泽,王冬红. 智能型地图匹配综合算法的研究. 计算机辅助设计与图形学学报. 2003,15(11): 1443-14479 向怀坤,刘小明. GPS/GIS/GSM车辆动态监控调度系统的设计与开发. 公路交通科技. 2002,(4): 97-10010 陈雷,丁晓明,赵惠芳,吴晓. GPS/GPRS车辆监控系统中移动终端的开发. 现代电信科技. 2004,(1): 38-4011 张其善,吴今培,杨东凯. 智能车辆定位导航系统及应用. 科学出版社. 2002: 19-4512 GSM13 冯悦,李小民,冯振声. GSM技术在GPS车辆监控系统中的应用. 微机算计信息. 1999, 15(6): 29-3214 GPRS15 GSM16 Takakuni Douseki, Takeshi Yamada, Junzo Yamada, Kazuyuki Ito, Kazuo Nishi. Photovoltaic display module in a mobile GPS. Solar Energy Materials & Solar Cells. 2001: 543-54917 ByoungJu Kim, Sung H. Han, Keewon Nam, Jaeho Park, Seungah Han. Presenting Map Information on a Global Positioning System. Computers ind Engng. 1997, 33: 529-53218 Stefano Panzieri, Federica Pascucci, Giovanni Ulivi. An Outdoor Navigation System Using GPS and Inertial Platform. TRANSACTIONS ON MECHATRONICS. 2002, 7 (2): 134-141 19 彭飞,柳重堪,张其善. 基于模糊逻辑的GPS/DR组合导航系统地图匹配算法. 遥测遥控. 2001, 22(1): 32-472021 张杏谷,黄丽卿,胡稳才. GPS在VTS中的应用研究. 航海技术. 2002, 2: 23-2422 江锦康,唐定富. GPS/GIS在上海公安车辆自动定位系统中的应用. 微电脑应用. 1998, 3: 19-2223 Shaw M, Sandhoo K, Turner D. Modernization of the Global Positioning System. GPS World. June 2000: 36-4424 Muellerschoen R J, Bar-Sever Y N, Bertiger W I, et al. NASAS Global DGPS World. 2001, 12(1): 14-2025 房俊龙,董守田,于寿馨. 车辆GPS定位系统中移动站硬件和软件设计.农机化研究. 2002, (1): 71-7226 张书毕,刘作才. 基于GIS的GPS车辆监控系统设计与实现. 测绘通报. 2002, (6): 31-3327 Duan Lingyu, et al. GPS Vehicle Navigation System. Transaction of Nanjing University of Aeronautics & Astronautics. 1998, 15(2): 172-17828 李小民,李先亮. 单片机在基于GPS技术车辆监控系统中的应用. 电子技术及应用. 1997, (4): 36-3829 蒋同译. 现代移动通信系统. 电子工业出版社. 1994, 8-26 30 冯锡生,赵晓琳. GPS及其通信组网. 中国铁道出版社. 1996: 6-2131 何秀凤,刘建业,袁信. GPS接收机的数据采集与处理. 数据采集与处理. 1996, 11(2): 154-15632 王广运,郭秉义,李洪涛. 差分GPS定位技术应用. 电子工业出社. 1996: 25-3533 Talor Micael A P, Woolley Jeremy E, Zito Rocco. Integration of the Global Positioning System and Geographical Information Systems for Traffic Congestion Studies. Transportation Research Part C. 2000, (8): 257-28534 Krakiwsky E.J. Innovations in Vehicle Tracking and Navigation. GPS World. 1994, (3): 42-4635 Hay C. The GPS Accuracy Improvement Imitative. GPS World. June 2000: 56-6136 吴春晖,郝燕玲. 基于GPS的车辆监控系统的研究与设计. 黑龙江自动化技术与应用. 1998, (3): 41-4237 张震. GPS应用系统中定位数据的读取. 技术创新. 2002, (3): 17-1838 林世究,杨寿金,赵昂. 计算机与GPS-OEM板通信的研究与实现. 计算机应用研究. 2002, (6): 99-10539 何光林,马宝华. 计算机与GPS-OEM板通信的研究. 探测与控制学报. 2002, (2): 54-5740 谢小娟. GPS数据采集系统. 微机发展. 1997, (2): 55-5641 Petei J Pulli, et al. Concurrent Engineering for real-time Systems. IEEE Software. 1993,11: 135-13742 Quiroga Cear A, Bullock Darcy. Travel Time Studies With Global Positioning and Geographic Information System: An Integrated Methodology. Transportation Research Part C. 1998, (6): 101-12743 侯井林,冯立清,张晓丹. GPS动态定位技术在车辆自动定位导航系统的应用. 三晋测绘.1997, (2): 28-3544 高尚. GPS定位技术的应用分析. 天中学刊. 1997, 12(05): 120-12145 Quiroga Cear, Bullock Darcy. Travel Time Studies with Global Positioning and Geographic Information System and Integrated Methodology. Transportation Research Part C. 1998, 6: 101-12746 李英涛,郝川,孟维晓,刘书菊,徐玉滨,张乃通. 用GPS和集群通信组成动态指挥调度系统. 系统工程与电子技术. 1996, (8): 11-1547 杨正宇. 移动通信系统无线电的干扰及抑制. 现代通信. 1994, 3:448 姜宾. 超短波通信常见无线电干扰. 中国无线电管理. 1998, 5:24-2549 季亚军. 集群通信系统的互调干扰问题. 警用通信. 1996, (2): 2-450 欧亮. GPS车辆监控系统中相关通信技术的研究. 中国科学院测量与地球物理研究所工学硕士学位论文. 2000, 6: 36-4451 Motorola Corporation. GM300 Service Manual. 1992: 1-852 龚国清,曾文. GPS电子地图的设计与实现. 中国地质大学信息工程学院. 1996: 81-8353 刘光远,韩丽斌. 电子地图技术与应用. 北京测绘出版社. 1996: 25-2954 李曙光,荆便顺,尹如军,苏彦民. 交通电子地图设计和制作. 西安交通大学学报. 2001, (1): 78-8055 易玉丹,季善标,白征东,王解先. 车载 GPS 导航定位系统中电子地图的建立. 工程勘察. 1998, (05): 46-5056 徐智,孙尧. 基于MapInfo环境的电子海图显示技术研究. 计算机工程. 2002, 26(4): 20-21, 5357 孙枫,郝燕玲. 组成导航系统的电子海图显示技术. 中国航海. 1992, (1): 35-4458 邓跃明,翟娅娟,刘治枝. 基于MapInfo的专题地图制作. 测绘通报. 2001, 7: 17-1859 詹舒波,张其善. GPS/电子地图的坐标转换算法实现. 北京航空航天大学学报. 1996, 22(5): 530-534附 录 A 程 序 流 程 图图1 主程序流程图说明|:调试方法:单片机串口1的接收和发送数据管脚和MC35相连,串口2的接收数据管脚和GPS15L相连,而发送数据管脚在调试时和一台计算机的串口相连,用串口调试工具即可接收其上传的数据。在程序里的几个关键的位置插入从串口2发送字符的语句,就可以通过串口调试工具大致了解程序运行到了什么地方了。在主循环的最开始将看门狗定时器清零。在主循环中单片机不断查询MC35是否接收到监控中心的命令。若没接受到监控计算机发来的命令,返回主循环的最开始处,需要大约2-3秒钟;而一旦接收到了监控计算机发来的命令即收到短消息,单片机要控制MC35将短消息删除,再按照命令把需要的GPS定位数据以短消息的形式返回监控中心,最后回到主循环的最开始处,这一过程需要大约12-13秒钟。所以我将看门狗定时器溢出时间设为约1分钟,若程序跑飞回不到主循环最开始处最多1分钟就可以令单片机复位。低优先级中断服务程序:接收GPS15发来的定位数据高优先级中断服务程序:接收GSM模块对AT命令的响应信息 图2 高级中断服务程序流程图 图3 低级中断服务程序流程图附 录 B 程 序#include #include #include #define uS_CNT 256#defineDelayUs(x) unsigned char _dcnt; if(x=10) _dcnt=(x/10); else _dcnt=1; while(-_dcnt 0) asm(nop);asm(nop);asm(nop);asm(nop);asm(nop);asm(nop);asm(nop);asm(nop);asm(nop);asm(nop);asm(nop);asm(nop);asm(nop);asm(nop);asm(nop);asm(nop);asm(nop);asm(nop);asm(nop);asm(nop);asm(nop);continue; /修改日期 2004年 9月1日/定义常数*#define Pre_time 0x00 /0003上次传送短信的时间,单位是秒,长整数4Bytes#define Pre_UTCdate 0x04 /0405,上次传送短信的日期,单位是天,整数2Bytes#define GPSEEADD_D 0x07 /07,存放每天刷新的GPS地址(5表示第5条)#define GSMEECOMM 0x08 /08地址存放GPS命令(1,10,15,30,24,0,11,55共8种,)/(共8种,1 表示每1分钟发送一条短信,每个GPS信息间隔12秒(调试模式)/gsmcomm=10 表示每10分钟发送一条短信,每个GPS信息间隔2分钟/(EEPROM的使用寿命为2*5*1000000/(60分钟*24小时*365天)19年)/gsmcomm=15 表示每15分钟发送一条短信,每个GPS信息间隔3分钟/gsmcomm=30 表示每30分钟发送一条短信,每个GPS信息间隔6分钟/gsmcomm=24 表示每一天发送一条短信,每个GPS信息间隔288分钟/gsmcomm=00 停止发送短消息(默认)/gsmcomm=11,发送一条短信后停止发送 /55表示查询前5天的GPS信息#define Phone_EENo 0x0A /0A18H存放电话号码共14位#define EEOK0x20/20H存放K表示写入正常,否则表示写入EEPROM过程中有中断/定义10组EEPROM地址入口存放GPS数据/前5组存放要发送的GPS信息,后5组存放前5天的GPS位置信息,/GPSEE0_N=O表示0位置是旧的GPS信息,GPSEE0_N=N表示新信息#define GPSEE0 0x100/10013BH ,256-315#define GPSEE0_N 0x13B#define GPSEE1 0x13C/13C177H ,316-375#define GPSEE1_N 0x177#define GPSEE2 0x178/1781B3H ,376-435#define GPSEE2_N 0x1B3#define GPSEE3 0x1B4 /1B41EFH ,436-495#define GPSEE3_N 0x1EF#define GPSEE4 0x200/20023BH ,521-571#define GPSEE4_N 0x23B#define GPSEE5 0x23C/23C277H ,572-631#define GPSEE6 0x278/2782B3H ,632-691#define GPSEE7 0x2B4 /2B42EFH ,692-751#define GPSEE8 0x300/30033BH ,768-827#define GPSEE9 0x33C /33C377H ,828-887#define GPSEE10 0x378/3783B3H ,888-947#define GPSEE5_N 0x3B5#define GPSEE6_N 0x3B6#define GPSEE7_N 0x3B7#define GPSEE8_N 0x3B8#define GPSEE9_N 0x3B9/定义常数,在不同命令下的GPS指令间隔时间#define D_time1 12#define D_time10 120#define D_time15180#define D_time30360#define D_time0 0#define D_time110static unsigned char RC_ONE=0,time_sent20;/从GSM网络收到的发送时间,最多20位ASCII码 static unsigned int time_sent_num=0;/发送时间的字符个数 最多20位static unsigned char ok_time,large_time,cmgs_time,delect_time,delect_wait;/循环次数static unsigned int D_time24=17280;/定义变量*static unsigned long wdt_times=0;/*GPS信息的接收和存储*static unsigned long temp_Utime,U_timetemp;static unsigned char temp_Utime_0;static unsigned int temp_Udate=0,U_datetemp=0;/U_timetemp,U_datetemp保存上次保存在position中的GPS时间static unsigned char temp_Udate_0;/上面是时间日期暂存寄存器,用于EEPROM的读写static signed long U_time;static signed int U_date;/P_Utime,P_Udate存放上次发送短信的时间/U_time表示UTC()时间,U_date表示UTC日期/天数和时间为距离2004.1.1的天数(天)和距离当天0点的时间(秒)/天的最大值是32768天(约100年),时间最大86400(秒)static int EE_Udate; /存放每天存储一条GPS信息数据,上次的存储时间static unsigned char RC2TEMP,RC2STATUE=0;/RC2TEMP为串口2暂存寄存器,RC2STATUE为串口2接收到第几个数据的寄存器typedef struct char UTCtime6,status1,titude9,hemi_ns1,latitude10; /27Byteschar hemi_ew1,speed5,course5,UTCdate6,magne5,magnedir1;/23Bytessigned long U_time; /4Bytessigned int U_date; /2Bytesgps; /GPS数据结构体(共56bytes,U_date和U_time)static gps position5; /暂存5条GPS信息static gps tempposi1; /收到信息暂存寄存器static unsigned char GPSOK=0;/GPSOK=1成功收到GPS定位信息,GPSA_V表示收到信息是否有效(0无效,A有效)/posiOK=1表示整个结构体接受完毕,ptemp代表结构体的第几个数组正在接受 static unsigned char GPSADD_date,GPSADDEE=0;/GPSADD表示现在GPS位置信息存放的位置,如GPSADD=0则存放在position0中/GPSADDEE将要刷新的GPS信息地址/GPSADDEE表示存放在EEPROM中GPS信息的地址,GPSADD_date表示每天一条的存放在EEPROM中的地址/temp_EE为EEPROM中GPS信息的地址的暂存寄存器(前5条信息)/temp_EEdate为每天一条的存放一条GPS指令的暂存寄存器(后5条信息)/static unsigned char EEok; /EEPROM存储正常static unsigned char Uyear,Umon; /Uyear表示UTC年,Umon表示UTC月/*MC35收发短信的控制部分*static unsigned char RC1TEMP,RC1STATUE=0;/RCTEMP为串口1的接收暂存寄存器,RCSTATUE表示串口1接收到几个数据的寄存器static unsigned char GPSCOMM;/从GSM网络获得的命令/存放GPS命令(01,10,15,30,24,00,11共7种),定义同GSMEECOMMstatic unsigned char GSMCOMM2;/从GSM网络收到的命令,两位ASCII码 static unsigned char ATstatu; /GSM手机接收命令状态寄存器 /ATstatu=1表示GSM正在返回的OK/ATstatu=3,表示MC35正在返回指令/ATstatu=2表示正在返回CMGL指令static unsigned char mc35ok=0,PH_NoOK=0, GSMEND=0,GSMCOMOK,SMS=1;/mc35ok=1表示MC35已经返回OK指令,SMS1表示刚发完短信,position还没有接受/发送电话号码成功标志,当PH_NoOK=1表示电话号码发送成功等待发送短消息/ GSMEND表示MC35的CMGL指令命令结束 /从GSM网络接收的命令信息,当GSMCOMOK=1表示信息有效,当GSMCOMOK=0表示信息无效可以删除/加入nearstatic unsigned char CMGL_No,CMGL_BYS3;near static unsigned char Phone_No16;/Phone_No存放短信发送端的电话号码/CMGL_BYS3表示列出短消息的条数,CMGL_No表示共多少位如CMGL_BYS3=11则=2static unsigned char ATE4=ATE;static unsigned char SMSO8=ATSMSO;static unsigned char CMGF110=AT+CMGF=1;static unsigned char ATCMGS9=AT+CMGS=;static unsigned char CMGL12=AT+CMGL=ALL;static unsigned char CMGD9=AT+CMGD=;void putch1(unsigned char c) /串口1发送单个字符子程序while(!TRMT1) / TRMT1 is set when TSR is emptycontinue;TXREG1 = c;/ load the register/TXREG2 = c;/ load the registervoid putch2(unsigned char c) /串口2发送单个字符子程序while(!TRMT2) / TRMT1 is set when TSR is empty continue;TXREG2 = c;/ load the registervoid putchstr1(unsigned char *tr1,unsigned char l1) /串口1发送字符串子程序,*tr1字符串首地址,l1字符串长度,l1=0默认字符串长度unsigned char i,k;if(l1=0) k=strlen(tr1);else k=l1; for(i=0;ik;i+) putch1(tr1i);void putchstr2(unsigned char *tr,unsigned char l) /串口2发送字符串子程序,*tr字符串首地址,l字符串长度,l=0默认字符串长度unsigned char i, k;if (l=0) k=strlen(tr);else k=l;for(i=0;i8)&0xFF);EEADR=(address)&0xFF);EEDATA=data;EEPGD=0;CFGS=0;CARRY=0;if(GIE) CARRY=1;GIE=0;DC=0;if(PEIE) DC=1;PEIE=0;WREN=1;EECON2=0x55;EECON2=0xAA;WR=1;while(WR) continue;EEIF=0;WREN=0;if(CARRY)GIE=1;if(DC)PEIE=1;void writetime(void) temp_Utime=tempposi0.U_time;temp_Udate=tempposi0.U_date;temp_Utime_0=temp_Utime&0xFF;EE_write(Pre_time,temp_Utime_0);temp_Utime_0=(temp_Utime8)&0xFF;EE_write(Pre_time+1,temp_Utime_0);temp_Utime_0=(temp_Utime16)&0xFF;EE_write(Pre_time+2,temp_Utime_0);temp_Utime_0=(temp_Utime24)&0xFF;EE_write(Pre_time+3,temp_Utime_0);temp_Udate_0=(temp_Udate)&0xFF;EE_write(Pre_UTCdate,temp_Udate_0);temp_Udate_0=(temp_Udate8)&0xFF;EE_write(Pre_UTCdate+1,temp_Udate_0);char EE_read(unsigned int address)CARRY=0;if(GIE) CARRY=1;GIE=0;DC=0;if(PEIE) DC=1;PEIE=0;EEADRH=(address)8)&0xFF);EEADR=(address)&0xFF);EEPGD=0;CFGS=0;RD=1;if(CARRY)GIE=1;if(DC)PEIE=1;return EEDATA;/*高优先级中断子程序*/高优先级中断子程序,中断向量地址0x08void interrupt HI_ISR(void)if(RCIE)&(RCIF)&(RCIP) /串口1中断子程序,接受手机信息RC1TEMP=RCREG1;/TXREG2 = RC1TEMP;switch(ATstatu)case 1: /OK指令switch(RC1STATUE) case 0:if(RC1TEMP=0x4F) RC1STATUE=1; else RC1STATUE=0; break;case 1:if(RC1TEMP=0x4B) RC1STATUE=2; else if(RC1TEMP=0x52) RC1STATUE=4; else RC1STATUE=0; break;case 2:if(RC1TEMP=0x0D) RC1STATUE=3; else RC1STATUE=0; break;case 3:if(RC1TEMP=0x0A) mc35ok=1;RC1STATUE=0;break;case 4:if(RC1TEMP=0x0D) RC1STATUE=5; else RC1STATUE=0; break;case 5:if(RC1TEMP=0x0A) mc35ok=2;RC1STATUE=0; break;case 2: /CMGL指令/格式+CMGL: 11,REC READ,+8613704802750,04/04/01,19:21:18+00/ HIT651,15 如没有信息MC35返回OKswitch(RC1STATUE) case 0:if(RC1TEMP=+& RC_ONE=0) RC1STATUE=1; else if(RC1TEMP=O)RC1STATUE=101;else RC1STATUE=0; break;case 1:if(RC1TEMP=C) RC1STATUE=2; else RC1STATUE=0; break;case 2:if(RC1TEMP=M) RC1STATUE=3;else RC1STATUE=0; break;case 3:if(RC1TEMP=G) RC1STATUE=4;else RC1STATUE=0; break;case 4:if(RC1TEMP=L) RC1STATUE=5;else RC1STATUE=0; break;case 5:if(RC1TEMP=:) RC1STATUE=6;else RC1STATUE=0; break;case 6:if(RC1TEMP= ) RC1STATUE=7;else RC1STATUE=0; break;/接受记录号CMGL_BYS,CMGL_No=1;case 7:if(!(RC1TEMP=0x2C) RC1STATUE=8;CMGL_BYS2=RC1TEMP;CMGL_No=1; else RC1STATUE=10; break;case 8:if(!(RC1TEMP=0x2C) RC1STATUE=9;CMGL_BYS1=RC1TEMP;CMGL_No=2; else RC1STATUE=10; break;case 9:if(!(RC1TEMP=0x2C) RC1STATUE=10;CMGL_BYS0=RC1TEMP;CMGL_No=3; else RC1STATUE=10; break;case 10:if(RC1TEMP=,)RC1STATUE=11; break; /接收到第2个逗号case 11:if(RC1TEMP=)RC1STATUE=12; else RC1STATUE=0; break;case 12:if(!(RC1TEMP=0x2C) RC1STATUE=13;Phone_No0=RC1TEMP; else RC1STATUE=30; break; /+case 13:if(!(RC1TEMP=0x2C) RC1STATUE=14;Phone_No1=RC1TEMP; else RC1STATUE=30; break; /8case 14:if(!(RC1TEMP=0x2C) RC1STATUE=15;Phone_No2=RC1TEMP; else RC1STATUE=30; break; /6case 15:if(!(RC1TEMP=0x2C) RC1STATUE=16;Phone_No3=RC1TEMP; else RC1STATUE=30; break; /1case 16:if(!(RC1TEMP=0x2C) RC1STATUE=17;Phone_No4=RC1TEMP; else RC1STATUE=30; break; /3case 17:if(!(RC1TEMP=0x2C) RC1STATUE=18;Phone_No5=RC1TEMP; else RC1STATUE=30; break; /0case 18:if(!(RC1TEMP=0x2C) RC1STATUE=19;Phone_No6=RC1TEMP; else RC1STATUE=30; break; /0case 19:if(!(RC1TEMP=0x2C) RC1STATUE=20;Phone_No7=RC1TEMP; else RC1STATUE=30; break; /9case 20:if(!(RC1TEMP=0x2C) RC1STATUE=21;Phone_No8=RC1TEMP; else RC1STATUE=30; break; /7case 21:if(!(RC1TEMP=0x2C) RC1STATUE=22;Phone_No9=RC1TEMP; else RC1STATUE=30; break; /2case 22:if(!(RC1TEMP=0x2C) RC1STATUE=23;Phone_No10=RC1TEMP; else RC1STATUE=30; break; /1case 23:if(!(RC1TEMP=0x2C) RC1STATUE=24;Phone_No11=RC1TEMP; else RC1STATUE=30; break; /1case 24:if(!(RC1TEMP=0x2C) RC1STATUE=25;Phone_No12=RC1TEMP; else RC1STATUE=30; break; /2case 25:if(!(RC1TEMP=0x2C) RC1STATUE=30;Phone_No13=RC1TEMP; else RC1STATUE=30; break; /7case 30:if(RC1TEMP=,)RC1STATUE=40; break; /接收到第3个逗号case 40:if(RC1TEMP=,)RC1STATUE=50; break; /接收到第4个逗号case 50:if(RC1TEMP=,)RC1STATUE=55; break; /接收到第5个逗号case 55:if(RC1TEMP=0x0A)RC1STATUE=60; break; /接收到换行符号case 60:if(RC1TEMP=H)RC1STATUE=61;else RC1STATUE=0; break; case 61:if(RC1TEMP=I)RC1STATUE=62;else RC1STATUE=0; break; case 62:if(RC1TEMP=T)RC1STATUE=63;else RC1STATUE=0; break; case 63:if(RC1TEMP=6)RC1STATUE=64;else RC1STATUE=0; break; case 64:if(RC1TEMP=5)RC1STATUE=65;else RC1STATUE=0; break; case 65:if(RC1TEMP=1)RC1STATUE=66;else RC1STATUE=0; break; case 66:if(RC1TEMP=,)RC1STATUE=67;else RC1STATUE=0; break; case 67:RC1STATUE=68;GSMCOMM0=RC1TEMP; break; /GSM命令case 68:RC1STATUE=69;GSMCOMM1=RC1TEMP;RC_ONE=1; break; /GSM命令 case 69:if(RC1TEMP=,) RC1STATUE=70;time_sent_num=8;else RC1STATUE=0;break; /接收的发送时间字符数清零 case 70: RC1STATUE=71;time_sent0=RC1TEMP; break; case 71: if(RC1TEMP=:) time_sent1=RC1TEMP;RC1STATUE=72;time_sent_num=7; else time_sent1=RC1TEMP;RC1STATUE=72; break; case 72: RC1STATUE=73;time_sent2=RC1TEMP; break; case 73: RC1STATUE=74;time_sent3=RC1TEMP; break; case 74: RC1STATUE=75;time_sent4=RC1TEMP; break; case 75: RC1STATUE=76;time_sent5=RC1TEMP; break;case 76: if(time_sent_num=7)time_sent6=RC1TEMP;GSMCOMOK=1;RC1STATUE=0; else time_sent6=RC1TEMP;RC1STATUE=77; break; case 77: RC1STATUE=0;time_sent7=RC1TEMP;GSMCOMOK=1; break; case 101:if(RC1TEMP=K) GSMEND=1;RC1STATUE=0; else RC1STATUE=0;break; break;case 3:/接收符号switch(RC1STATUE) case 0:if(RC1TEMP=0x0D) RC1STATUE=1; else RC1STATUE=0; break;case 1:if(RC1TEMP=0x0A) RC1STATUE=2; else RC1STATUE=0; break;case 2:if(RC1TEMP=0x3E) PH_NoOK=1; else RC1STATUE=0; break; break; /end switch(ATstatu)RC1IF=0; /endifif(TMR0IP&TMR0IE&TMR0IF) TMR0IF=0; if( wdt_times=70) CLRWDT(); /TXREG2=wdt_times+97; while(!TRMT2) / TRMT1 is set when TSR is empty continue; /TXREG2=0x0D; while(!TRMT2) / TRMT1 is set when TSR is empty continue; /TXREG2=0x0A; wdt_times+; /*if( wdt_times=4) / 判断MC35是否启动ATstatu=1; RC1STATUE=0; /设定接收OKwhile(FERR1)RC1TEMP=RCREG1; asm(nop);asm(nop);while(OERR1)CREN1=0;CREN1=1;asm(nop);asm(nop); TXREG1=A; while(!TRMT1) / TRMT1 is set when TSR is empty continue; TXREG1=T; while(!TRMT1) / TRMT1 is set when TSR is empty continue; TXREG1=; while(!TRMT1) / TRMT1 is set when TSR is empty continue; TXREG1=S; while(!TRMT1) / TRMT1 is set when TSR is empty continue; TXREG1=M; while(!TRMT1) / TRMT1 is set when TSR is empty continue; TXREG1=S; while(!TRMT1) / TRMT1 is set when TSR is empty continue; TXREG1=O; while(!TRMT1) / TRMT1 is set when TSR is empty continue; TXREG1=0x0D; while(!TRMT1) / TRMT1 is set when TSR is empty continue; TXREG1=0x0A; */ /end HI_ISR/*低优先级中断子程序*/低优先级中断子程序,中断向量地址0x18void interrupt low_priority LOW_ISR(void)if(RC2IE)&(RC2IF)&(!RC2IP) /串口2中断子程序,接受GPS数据/$GPRMC,111847,V,4543.3535,N,12636.2186,E,160404,010.2,W*76 RC2TEMP=RCREG2; switch(RC2STATUE)/指令case 0: if(RC2TEMP=$)RC2STATUE=1;else RC2STATUE=0; break;case 1: if(RC2TEMP=G)RC2STATUE=2;else RC2STATUE=0; break;case 2: if(RC2TEMP=P)RC2STATUE=3;else RC2STATUE=0; break;case 3: if(RC2TEMP=R)RC2STATUE=4;else RC2STATUE=0; break;case 4: if(RC2TEMP=M)RC2STATUE=5;else RC2STATUE=0; break;case 5: if(RC2TEMP=C)RC2STATUE=6;else RC2STATUE=0; break;case 6: if(RC2TEMP=,)RC2STATUE=7;else RC2STATUE=0; break;/时间case 7: RC2STATUE=8;tempposi0.UTCtime0=RC2TEMP; break;case 8: RC2STATUE=9;tempposi0.UTCtime1=RC2TEMP; break;case 9: RC2STATUE=10;tempposi0.UTCtime2=RC2TEMP; break;case 10: RC2STATUE=11;tempposi0.UTCtime3=RC2TEMP; break;case 11: RC2STATUE=12;tempposi0.UTCtime4=RC2TEMP; break;case 12: RC2STATUE=13;tempposi0.UTCtime5=RC2TEMP; break;case 13: if(RC2TEMP=,)RC2STATUE=14;else RC2STATUE=0; break;/状态case 14: RC2STATUE=15;tempposi0.status0=RC2TEMP; break;/case 14: if(RC2TEMP=A)RC2STATUE=15;else RC2STATUE=0;tempposi0.status0=RC2TEMP; break;/如果定位信息有效就接收,无效重新接收case 15: if(RC2TEMP=,)RC2STATUE=16;else RC2STATUE=0; break;/纬度case 16: RC2STATUE=17;tempposi0.titude0=RC2TEMP; break;case 17: RC2STATUE=18;tempposi0.titude1=RC2TEMP; break;case 18: RC2STATUE=19;tempposi0.titude2=RC2TEMP; break;case 19: RC2STATUE=20;tempposi0.titude3=RC2TEMP; break;case 20: RC2STATUE=21;tempposi0.titude4=RC2TEMP; break;case 21: RC2STATUE=22;tempposi0.titude5=RC2TEMP; break;case 22: RC2STATUE=23;tempposi0.titude6=RC2TEMP; break;case 23: RC2STATUE=24;tempposi0.titude7=RC2TEMP; break;case 24: RC2STATUE=25;tempposi0.titude8=RC2TEMP; break;case 25: if(RC2TEMP=,)RC2STATUE=26;else RC2STATUE=0; break;/N半球,S半球case 26: RC2STATUE=27;tempposi0.hemi_ns0=RC2TEMP; break;case 27: if(RC2TEMP=,)RC2STATUE=28;else RC2STATUE=0; break;/经度case 28: RC2STATUE=29;tempposi0.latitude0=RC2TEMP; break;case 29: RC2STATUE=30;tempposi0.latitude1=RC2TEMP; break;case 30: RC2STATUE=31;tempposi0.latitude2=RC2TEMP; break;case 31: RC2STATUE=32;tempposi0.latitude3=RC2TEMP; break;case 32: RC2STATUE=33;tempposi0.latitude4=RC2TEMP; break;case 33: RC2STATUE=34;tempposi0.latitude5=RC2TEMP; break;case 34: RC2STATUE=35;tempposi0.latitude6=RC2TEMP; break;case 35: RC2STATUE=36;tempposi0.latitude7=RC2TEMP; break;case 36: RC2STATUE=37;tempposi0.latitude8=RC2TEMP; break;case 37: RC2STATUE=38;tempposi0.latitude9=RC2TEMP; break;case 38: if(RC2TEMP=,)RC2STATUE=39;else RC2STATUE=0; break;/E,W半球case 39: RC2STATUE=40;tempposi0.hemi_ew0=RC2TEMP; break;case 40: if(RC2TEMP=,)RC2STATUE=41;else RC2STATUE=0; break;/地面速度,格式 000.0 case 41: if(RC2TEMP=,)RC2STATUE=47;else RC2STATUE=42;tempposi0.speed0=RC2TEMP; break;case 42: RC2STATUE=43;tempposi0.speed1=RC2TEMP; break;case 43: RC2STATUE=44;tempposi0.speed2=RC2TEMP; break;case 44: RC2STATUE=45;tempposi0.speed3=RC2TEMP; break;case 45: RC2STATUE=46;tempposi0.speed4=RC2TEMP; break;case 46: if(RC2TEMP=,)RC2STATUE=47;else RC2STATUE=0; break;/地面航向case 47: if(RC2TEMP=,)RC2STATUE=53;else RC2STATUE=48;tempposi0.course0=RC2TEMP; break;case 48: RC2STATUE=49;tempposi0.course1=RC2TEMP; break;case 49: RC2STATUE=50;tempposi0.course2=RC2TEMP; break;case 50: RC2STATUE=51;tempposi0.course3=RC2TEMP; break;case 51: RC2STATUE=52;tempposi0.course4=RC2TEMP; break;case 52: if(RC2TEMP=,)RC2STATUE=53;else RC2STATUE=0; break;/UTC日期case 53: RC2STATUE=54;tempposi0.UTCdate0=RC2TEMP; break;case 54: RC2STATUE=55;tempposi0.UTCdate1=RC2TEMP; break;case 55: RC2STATUE=56;tempposi0.UTCdate2=RC2TEMP; break;case 56: RC2STATUE=57;tempposi0.UTCdate3=RC2TEMP; break;case 57: RC2STATUE=58;tempposi0.UTCdate4=RC2TEMP; break;case 58: RC2STATUE=59;tempposi0.UTCdate5=RC2TEMP; break;case 59: if(RC2TEMP=,)RC2STATUE=60;else RC2STATUE=0; break;/磁偏角case 60: RC2STATUE=61;tempposi0.magne0=RC2TEMP; break;case 61: RC2STATUE=62;tempposi0.magne1=RC2TEMP; break;case 62: RC2STATUE=63;tempposi0.magne2=RC2TEMP; break;case 63: RC2STATUE=64;tempposi0.magne3=RC2TEMP; break;case 64: RC2STATUE=65;tempposi0.magne4=RC2TEMP; break;case 65: if(RC2TEMP=,)RC2STATUE=66;else RC2STATUE=0; break;/磁偏角方向case 66: RC2STATUE=67;tempposi0.magnedir0=RC2TEMP; break;case 67: RC2STATUE=0; GPSOK=1; break;RC2IF=0; /*void main(void)static unsigned char i,k; /循环控制变量/static unsigned char ok_time,large_time,cmgs_time;/循环次数/initialise uart1 19200TRISC=0xBF;TXSTA1=0x24;RCSTA1=0x80;SPBRG1=35;/intialise uart2 19200TRISG=253;TXSTA2=0x24;RCSTA2=0x80;SPBRG2=35; /使能中断优先级设置IPEN=1;GIE=1;PEIE=1;/定时器0TMR0L=0;TMR0H=0;TMR0IP=1;T0CON=132;TMR0IE=0;/使能串口1中断(MC35),高中断优先级RCIE=1;RCIP=1;/使能串口2中断(GPS),低中断优先级RC2IE=1;RC2IP=0;GPSOK=0; CREN2=1;/putch2(A);putch2(0x0D);putch2(0x0A);CREN1=1;putch1(0x0D);putch1(0x1A);/清楚等待/判断MC35是否启动ATstatu=1; RC1STATUE=0; /设定接收OKif(FERR1)RC1TEMP=RCREG1; asm(nop);asm(nop);if(OERR1)CREN1=0;CREN1=1;asm(nop);asm(nop);putchstr1(ATE,3); putch1(0x0D);putch1(0x0A);DelayMs(200); DelayMs(200);DelayMs(200);DelayMs(200);DelayMs(200);DelayMs(200);DelayMs(200);DelayMs(200); DelayMs(200);DelayMs(200); DelayMs(200);DelayMs(200); DelayMs(200);DelayMs(200); DelayMs(200);DelayMs(200); if(mc35ok=0) DelayMs(200);DelayMs(200);/启动MC35TRISE=0;LATE1=0;DelayMs(200);DelayMs(200);LATE1=1;DelayMs(200);DelayMs(200);DelayMs(200);DelayMs(200);LATE1=0;DelayMs(200);DelayMs(200);DelayMs(200);DelayMs(200);DelayMs(200);DelayMs(200);DelayMs(200);DelayMs(200);DelayMs(200);DelayMs(200);DelayMs(200);DelayMs(200);DelayMs(200);DelayMs(200);DelayMs(200);DelayMs(200);DelayMs(200);DelayMs(200);DelayMs(200);DelayMs(200);DelayMs(200);DelayMs(200);elsemc35ok=0;/读EEPROM,GPSCOMM表示从GSM网络获得的GPS命令,GPSADD表示GPS地址,/Phone_No表示目的电话号码GPSCOMM=EE_read(GSMEECOMM); /08Hif(!(GPSCOMM=1)|(GPSCOMM=10) |(GPSCOMM=15)|(GPSCOMM=30)|(GPSCOMM=24)|(GPSCOMM=0)|(GPSCOMM=11)GPSCOMM=0; /如果GPSCOMM不等于1,10,15,30,24,0,11则令GPSCOMM=0GSMCOMM1=(GPSCOMM%10)+48; GSMCOMM0=(int)(GPSCOMM/10)+48;/读EEPROM中的电话号码for (i=0;i=13;i+)Phone_Noi=EE_read(Phone_EENo+i);if(Phone_No0!=+)/如果EEPROM中的电话无效,则电话号码设为+8613009721127Phone_No0=+;Phone_No1=8;Phone_No2=6;Phone_No3=1;Phone_No4=3;Phone_No5=0;Phone_No6=5;Phone_No7=9;Phone_No8=0;Phone_No9=1;Phone_No10=7;Phone_No11=3;Phone_No12=8;Phone_No13=1;if(EE_read(GPSEE9_N)=N)GPSADD_date=5;if(EE_read(GPSEE5_N)=N)GPSADD_date=6;if(EE_read(GPSEE6_N)=N)GPSADD_date=7;if(EE_read(GPSEE7_N)=N)GPSADD_date=8;if(EE_read(GPSEE8_N)=N)GPSADD_date=9;else GPSADD_date=0;switch(GPSADD_date)case 5:for(i=0;i=55;i+)position0.UTCtimei=EE_read(GPSEE5+i);for(i=0;i=55;i+)position1.UTCtimei=EE_read(GPSEE6+i);for(i=0;i=55;i+)position2.UTCtimei=EE_read(GPSEE7+i);for(i=0;i=55;i+)position3.UTCtimei=EE_read(GPSEE8+i);for(i=0;i=55;i+)position4.UTCtimei=EE_read(GPSEE9+i);break;case 6:for(i=0;i=55;i+)position0.UTCtimei=EE_read(GPSEE6+i);for(i=0;i=55;i+)position1.UTCtimei=EE_read(GPSEE7+i);for(i=0;i=55;i+)position2.UTCtimei=EE_read(GPSEE8+i);for(i=0;i=55;i+)position3.UTCtimei=EE_read(GPSEE9+i);for(i=0;i=55;i+)position4.UTCtimei=EE_read(GPSEE5+i);break;case 7:for(i=0;i=55;i+)position0.UTCtimei=EE_read(GPSEE7+i);for(i=0;i=55;i+)position1.UTCtimei=EE_read(GPSEE8+i);for(i=0;i=55;i+)position2.UTCtimei=EE_read(GPSEE9+i);for(i=0;i=55;i+)position3.UTCtimei=EE_read(GPSEE5+i);for(i=0;i=55;i+)position4.UTCtimei=EE_read(GPSEE6+i);break;case 8:for(i=0;i=55;i+)position0.UTCtimei=EE_read(GPSEE8+i);for(i=0;i=55;i+)position1.UTCtimei=EE_read(GPSEE9+i);for(i=0;i=55;i+)position2.UTCtimei=EE_read(GPSEE5+i);for(i=0;i=55;i+)position3.UTCtimei=EE_read(GPSEE6+i);for(i=0;i=55;i+)position4.UTCtimei=EE_read(GPSEE7+i);break;case 9:for(i=0;i=55;i+)position0.UTCtimei=EE_read(GPSEE9+i);for(i=0;i=55;i+)position1.UTCtimei=EE_read(GPSEE5+i);for(i=0;i=55;i+)position2.UTCtimei=EE_read(GPSEE6+i);for(i=0;i=55;i+)position3.UTCtimei=EE_read(GPSEE7+i);for(i=0;iputchstr1(ATCMGS,8); /发送AT+CMGS=putchstr1(Phone_No,14);putch1(0x0D);putch1(0x0A); /发送+8613009721127DelayMs(200);DelayMs(200);DelayMs(200);DelayMs(200);while(PH_NoOK=0);if(GPSADD_date!=0)/发送前五天的信息或当前位置信息 ATstatu=1;RC1STATUE=0;mc35ok=0; /设定接收OK for(i=0;i5;i+) putchstr1(positioni.UTCtime,6); putchstr1(positioni.status,1); putchstr1(positioni.titude,9); putchstr1(positioni.hemi_ns,1); putchstr1(positioni.latitude,10); putchstr1(positioni.hemi_ew,1); putchstr1(tempposi0.UTCdate,2); putch1(GSMCOMM0);putch1(GSMCOMM1);putch1(d);putch1(a);putch1(t);putch1(e); putch1(0x1A);putch1(0x0D);else ATstatu=1;RC1STATUE=0;mc35ok=0; /设定接收OK putchstr1(tempposi0.UTCtime,6); putchstr1(tempposi0.status,1); putchstr1(tempposi0.titude,9); putchstr1(tempposi0.hemi_ns,1); putchstr1(tempposi0.latitude,10); putchstr1(tempposi0.hemi_ew,1); /putchstr1(tempposi0.speed,5); /putchstr1(tempposi0.course,5); putchstr1(tempposi0.UTCdate,6);putch1(t);putch1(e);putch1(m);putch1(p);putch1(GSMCOMM0);putch1(GSMCOMM1); putch1(0x1A);putch1(0x0D);doasm(nop);while(mc35ok=0);/如果MC35没返回OK继续等待*/PH_NoOK=0;CREN2=1;CREN1=0;mc35ok=0;CMGL_No=0;k=0;/putch2(B);putch2(0x0D);putch2(0x0A);WDTCON=1; /主循环*while(1)PH_NoOK=0; CLRWDT();/putch2(W);putch2(0x0D);putch2(0x0A);/*do 0 /设定短消息发送方式为文本方式ATstatu=1; RC1STATUE=0; /设定接收OKCREN2=0;CREN1=1;putchstr1(CMGF1,9); putch1(0x0D);putch1(0x0A);DelayMs(200);while(mc35ok=0); mc35ok=0;*/if(GPSOK=1)&(RC2STATUE=0)/putch2(G);putch2(0x0D);putch2(0x0A); TMR0IE=0; wdt_times=0; TMR0IE=1; GPSOK=0;CREN2=0;/清除串口1的错误CREN=1;while (FERR1)RC1TEMP=RCREG1;while (OERR1)CREN1=0;CREN1=1;ATstatu=2; /接收CMGL指令putch1(0x1A);putchstr1(CMGL,11); putch1(0x0D); putch1(0x0A); /发送CMGL=ALL while(GSMEND=0)while(FERR1)RC1TEMP=RCREG1; asm(nop);asm(nop);while(OERR1)CREN1=0;CREN1=1;asm(nop);asm(nop); /等待接收完毕 GSMEND=0; RC_ONE=0; /putch2(R);putch2(0x0D);putch2(0x0A);DelayMs(200);DelayMs(200);DelayMs(200);DelayMs(200);DelayMs(200);DelayMs(200); /putch2(R);putch2(0x0D);putch2(0x0A);if(GSMCOMOK=1) /成功收到从网络传输过来的GPSCOMM指令for(i=0;i=13;i+)EE_write(Phone_EENo+i,Phone_Noi);GPSCOMM=(GSMCOMM0-48)*10+GSMCOMM1-48);/putch2(GSMCOMM0);putch2(GSMCOMM1);EE_write(GSMEECOMM,GPSCOMM);GSMCOMOK=0;GPSADDEE=0;SMS=1;U_datetemp=0;U_timetemp=0; else for(i=0;i=3)tempposi0.U_date=tempposi0.U_date+1; /遇到闰年在三月后的日期中加一天/*计算结束*tempposi0.U_date为日期,tempposi0.U_time是秒数 switch(GPSADD_date) case 5:EE_Udate=EE_read(GPSEE9+43)-48+(EE_read(GPSEE9+42)-48)*10;break; case 6:EE_Udate=EE_read(GPSEE5+43)-48+(EE_read(GPSEE5+42)-48)*10;break;case 7:EE_Udate=EE_read(GPSEE6+43)-48+(EE_read(GPSEE6+42)-48)*10;break;case 8:EE_Udate=EE_read(GPSEE7+43)-48+(EE_read(GPSEE7+42)-48)*10;break;case 9:EE_Udate=EE_read(GPSEE8+43)-48+(EE_read(GPSEE8+42)-48)*10;break;default:EE_Udate=0; /向EEPROM写每天保存一条GPS信息if(tempposi0.U_date!=EE_Udate)&(tempposi0.status0=A) switch(GPSADD_date) case 6:for(i=0;i=55;i+) EE_write(GPSEE6+i,tempposi0.UTCtimei);EE_write(GPSEEADD_D,7);EE_write(GPSEE6_N ,N);EE_write(GPSEE5_N ,0);GPSADD_date=7;break;case 7:for(i=0;i=55;i+) EE_write(GPSEE7+i,tempposi0.UTCtimei);EE_write(GPSEEADD_D,8);EE_write(GPSEE7_N ,N);EE_write(GPSEE6_N ,0);GPSADD_date=8;break;case 8:for(i=0;i=55;i+) EE_write(GPSEE8+i,tempposi0.UTCtimei);EE_write(GPSEEADD_D,9);EE_write(GPSEE8_N,N);EE_write(GPSEE7_N ,0);GPSADD_date=9;break;case 9:for(i=0;i=55;i+) EE_write(GPSEE9+i,tempposi0.UTCtimei);EE_write(GPSEEADD_D,5);EE_write(GPSEE9_N,N);EE_write(GPSEE8_N ,0);GPSADD_date=5;break;default: for(i=0;i=D_time1)/与上条记录是同一天 if(positionGPSADDEE.status0!=A) positionGPSADDEE=tempposi0;U_datetemp=tempposi0.U_date;U_timetemp=tempposi0.U_time;SMS=0; switch(GPSADDEE) case 0:for(i=0;i=55;i+) EE_write(GPSEE0+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE0_N,N);EE_write(GPSEE4_N,O);break; case 1:for(i=0;i=55;i+) EE_write(GPSEE1+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE1_N,N);EE_write(GPSEE0_N,O);break; case 2:for(i=0;i=55;i+) EE_write(GPSEE2+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE2_N,N);EE_write(GPSEE1_N,O);break;case 3:for(i=0;i=55;i+) EE_write(GPSEE3+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE3_N,N);EE_write(GPSEE2_N,O);break;case 4:for(i=0;i=55;i+) EE_write(GPSEE4+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE4_N,N);EE_write(GPSEE3_N,O);break; if (GPSADDEE=D_time1)/与上条记录相差一天 if(positionGPSADDEE.status0!=A)positionGPSADDEE=tempposi0;U_datetemp=tempposi0.U_date;U_timetemp=tempposi0.U_time;SMS=0; switch(GPSADDEE) case 0:for(i=0;i=55;i+) EE_write(GPSEE0+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE0_N,N);EE_write(GPSEE4_N,O);break;case 1:for(i=0;i=55;i+) EE_write(GPSEE1+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE1_N,N);EE_write(GPSEE0_N,O);break;case 2:for(i=0;i=55;i+) EE_write(GPSEE2+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE2_N,N);EE_write(GPSEE1_N,O);break;case 3:for(i=0;i=55;i+) EE_write(GPSEE3+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE3_N,N);EE_write(GPSEE2_N,O);break;case 4:for(i=0;i=55;i+) EE_write(GPSEE4+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE4_N,N);EE_write(GPSEE3_N,O);break; if (GPSADDEE=3) GPSADDEE=GPSADDEE+1;else GPSADDEE=0;break;default: if(positionGPSADDEE.status0!=A) positionGPSADDEE=tempposi0;U_datetemp=tempposi0.U_date;U_timetemp=tempposi0.U_time;SMS=0; switch(GPSADDEE) case 0:for(i=0;i=55;i+) EE_write(GPSEE0+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE0_N,N);EE_write(GPSEE4_N,O);break;case 1:for(i=0;i=55;i+) EE_write(GPSEE1+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE1_N,N);EE_write(GPSEE0_N,O);break;case 2:for(i=0;i=55;i+) EE_write(GPSEE2+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE2_N,N);EE_write(GPSEE1_N,O);break;case 3:for(i=0;i=55;i+) EE_write(GPSEE3+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE3_N,N);EE_write(GPSEE2_N,O);break;case 4:for(i=0;i=55;i+) EE_write(GPSEE4+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE4_N,N);EE_write(GPSEE3_N,O);break; if (GPSADDEEputchstr1(ATCMGS,8); /发送AT+CMGS=putchstr1(Phone_No,14);putch1(0x0D);putch1(0x0A); /发送+8613009721127DelayMs(200);DelayMs(200);DelayMs(200);DelayMs(200);if(PH_NoOK=1) ATstatu=1;RC1STATUE=0;mc35ok=0; /设定接收OKfor(i=0;i=D_time10)/与上条记录是同一天if(positionGPSADDEE.status0!=A) positionGPSADDEE=tempposi0;U_datetemp=tempposi0.U_date;U_timetemp=tempposi0.U_time;SMS=0; switch(GPSADDEE) case 0:for(i=0;i=55;i+) EE_write(GPSEE0+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE0_N,N);EE_write(GPSEE4_N,O);break;case 1:for(i=0;i=55;i+) EE_write(GPSEE1+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE1_N,N);EE_write(GPSEE0_N,O);break;case 2:for(i=0;i=55;i+) EE_write(GPSEE2+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE2_N,N);EE_write(GPSEE1_N,O);break;case 3:for(i=0;i=55;i+) EE_write(GPSEE3+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE3_N,N);EE_write(GPSEE2_N,O);break;case 4:for(i=0;i=55;i+) EE_write(GPSEE4+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE4_N,N);EE_write(GPSEE3_N,O);break; if (GPSADDEE=D_time10)/与上条记录相差一天 if(positionGPSADDEE.status0!=A) positionGPSADDEE=tempposi0;U_datetemp=tempposi0.U_date;U_timetemp=tempposi0.U_time;SMS=0; switch(GPSADDEE) case 0:for(i=0;i=55;i+) EE_write(GPSEE0+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE0_N,N);EE_write(GPSEE4_N,O);break;case 1:for(i=0;i=55;i+) EE_write(GPSEE1+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE1_N,N);EE_write(GPSEE0_N,O);break;case 2:for(i=0;i=55;i+) EE_write(GPSEE2+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE2_N,N);EE_write(GPSEE1_N,O);break;case 3:for(i=0;i=55;i+) EE_write(GPSEE3+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE3_N,N);EE_write(GPSEE2_N,O);break;case 4:for(i=0;i=55;i+) EE_write(GPSEE4+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE4_N,N);EE_write(GPSEE3_N,O);break; if (GPSADDEE=3) GPSADDEE=GPSADDEE+1;else GPSADDEE=0; break;default: if(positionGPSADDEE.status0!=A) positionGPSADDEE=tempposi0;U_datetemp=tempposi0.U_date;U_timetemp=tempposi0.U_time;SMS=0; switch(GPSADDEE) case 0:for(i=0;i=55;i+) EE_write(GPSEE0+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE0_N,N);EE_write(GPSEE4_N,O);break;case 1:for(i=0;i=55;i+) EE_write(GPSEE1+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE1_N,N);EE_write(GPSEE0_N,O);break;case 2:for(i=0;i=55;i+) EE_write(GPSEE2+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE2_N,N);EE_write(GPSEE1_N,O);break;case 3:for(i=0;i=55;i+) EE_write(GPSEE3+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE3_N,N);EE_write(GPSEE2_N,O);break;case 4:for(i=0;i=55;i+) EE_write(GPSEE4+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE4_N,N);EE_write(GPSEE3_N,O);break; if (GPSADDEEputchstr1(ATCMGS,8); /发送AT+CMGS=putchstr1(Phone_No,14);putch1(0x0D);putch1(0x0A); /发送+8613009721127DelayMs(200);DelayMs(200);DelayMs(200);DelayMs(200);if(PH_NoOK=1) ATstatu=1;RC1STATUE=0;mc35ok=0; /设定接收OKfor(i=0;i=D_time15)/与上条记录是同一天if(positionGPSADDEE.status0!=A) positionGPSADDEE=tempposi0;U_datetemp=tempposi0.U_date;U_timetemp=tempposi0.U_time;SMS=0; switch(GPSADDEE) case 0:for(i=0;i=55;i+) EE_write(GPSEE0+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE0_N,N);EE_write(GPSEE4_N,O);break;case 1:for(i=0;i=55;i+) EE_write(GPSEE1+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE1_N,N);EE_write(GPSEE0_N,O);break;case 2:for(i=0;i=55;i+) EE_write(GPSEE2+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE2_N,N);EE_write(GPSEE1_N,O);break;case 3:for(i=0;i=55;i+) EE_write(GPSEE3+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE3_N,N);EE_write(GPSEE2_N,O);break;case 4:for(i=0;i=55;i+) EE_write(GPSEE4+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE4_N,N);EE_write(GPSEE3_N,O);break; if (GPSADDEE=D_time15)/与上条记录相差一天 if(positionGPSADDEE.status0!=A) positionGPSADDEE=tempposi0;U_datetemp=tempposi0.U_date;U_timetemp=tempposi0.U_time;SMS=0; switch(GPSADDEE) case 0:for(i=0;i=55;i+) EE_write(GPSEE0+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE0_N,N);EE_write(GPSEE4_N,O);break;case 1:for(i=0;i=55;i+) EE_write(GPSEE1+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE1_N,N);EE_write(GPSEE0_N,O);break;case 2:for(i=0;i=55;i+) EE_write(GPSEE2+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE2_N,N);EE_write(GPSEE1_N,O);break;case 3:for(i=0;i=55;i+) EE_write(GPSEE3+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE3_N,N);EE_write(GPSEE2_N,O);break;case 4:for(i=0;i=55;i+) EE_write(GPSEE4+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE4_N,N);EE_write(GPSEE3_N,O);break; if (GPSADDEE=3) GPSADDEE=GPSADDEE+1;else GPSADDEE=0;break;default: if(positionGPSADDEE.status0!=A) positionGPSADDEE=tempposi0;U_datetemp=tempposi0.U_date;U_timetemp=tempposi0.U_time;SMS=0; switch(GPSADDEE) case 0:for(i=0;i=55;i+) EE_write(GPSEE0+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE0_N,N);EE_write(GPSEE4_N,O);break;case 1:for(i=0;i=55;i+) EE_write(GPSEE1+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE1_N,N);EE_write(GPSEE0_N,O);break;case 2:for(i=0;i=55;i+) EE_write(GPSEE2+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE2_N,N);EE_write(GPSEE1_N,O);break;case 3:for(i=0;i=55;i+) EE_write(GPSEE3+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE3_N,N);EE_write(GPSEE2_N,O);break;case 4:for(i=0;i=55;i+) EE_write(GPSEE4+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE4_N,N);EE_write(GPSEE3_N,O);break; if (GPSADDEEputchstr1(ATCMGS,8); /发送AT+CMGS=putchstr1(Phone_No,14);putch1(0x0D);putch1(0x0A); /发送+8613009721127DelayMs(200);DelayMs(200);DelayMs(200);DelayMs(200);if(PH_NoOK=1) ATstatu=1;RC1STATUE=0;mc35ok=0; /设定接收OKfor(i=0;i=D_time30)/与上条记录是同一天if(positionGPSADDEE.status0!=A) positionGPSADDEE=tempposi0;U_datetemp=tempposi0.U_date;U_timetemp=tempposi0.U_time;SMS=0; switch(GPSADDEE) case 0:for(i=0;i=55;i+) EE_write(GPSEE0+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE0_N,N);EE_write(GPSEE4_N,O);break;case 1:for(i=0;i=55;i+) EE_write(GPSEE1+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE1_N,N);EE_write(GPSEE0_N,O);break;case 2:for(i=0;i=55;i+) EE_write(GPSEE2+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE2_N,N);EE_write(GPSEE1_N,O);break;case 3:for(i=0;i=55;i+) EE_write(GPSEE3+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE3_N,N);EE_write(GPSEE2_N,O);break;case 4:for(i=0;i=55;i+) EE_write(GPSEE4+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE4_N,N);EE_write(GPSEE3_N,O);break; if (GPSADDEE=D_time30)/与上条记录相差一天 if(positionGPSADDEE.status0!=A) positionGPSADDEE=tempposi0;U_datetemp=tempposi0.U_date;U_timetemp=tempposi0.U_time;SMS=0; switch(GPSADDEE) case 0:for(i=0;i=55;i+) EE_write(GPSEE0+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE0_N,N);EE_write(GPSEE4_N,O);break;case 1:for(i=0;i=55;i+) EE_write(GPSEE1+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE1_N,N);EE_write(GPSEE0_N,O);break;case 2:for(i=0;i=55;i+) EE_write(GPSEE2+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE2_N,N);EE_write(GPSEE1_N,O);break;case 3:for(i=0;i=55;i+) EE_write(GPSEE3+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE3_N,N);EE_write(GPSEE2_N,O);break;case 4:for(i=0;i=55;i+) EE_write(GPSEE4+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE4_N,N);EE_write(GPSEE3_N,O);break; if (GPSADDEE=3) GPSADDEE=GPSADDEE+1;else GPSADDEE=0; break;default: if(positionGPSADDEE.status0!=A) positionGPSADDEE=tempposi0;U_datetemp=tempposi0.U_date;U_timetemp=tempposi0.U_time;SMS=0; switch(GPSADDEE) case 0:for(i=0;i=55;i+) EE_write(GPSEE0+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE0_N,N);EE_write(GPSEE4_N,O);break;case 1:for(i=0;i=55;i+) EE_write(GPSEE1+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE1_N,N);EE_write(GPSEE0_N,O);break;case 2:for(i=0;i=55;i+) EE_write(GPSEE2+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE2_N,N);EE_write(GPSEE1_N,O);break;case 3:for(i=0;i=55;i+) EE_write(GPSEE3+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE3_N,N);EE_write(GPSEE2_N,O);break;case 4:for(i=0;i=55;i+) EE_write(GPSEE4+i,positionGPSADDEE.UTCtimei);EE_write(GPSEE4_N,N);EE_write(GPSEE3_N,O);break; if (GPSADDEEputchstr1(ATCMGS,8); /发送AT+CMGS=putchstr1(Phone_No,14);putch1(0x0D);putch1(0x0A); /发送+8613009721127DelayMs(200);DelayMs(200);DelayMs(200);DelayMs(200);if(PH_NoOK=1) ATstatu=1;RC1STATUE=0;mc35ok=0; /设定接收OKfor(i=0;i=D_time24)/与上条记录是同一天if(positionGPSADDEE.status0!=A) positionGPSADDEE=tempposi0;U_datetemp=tempposi0.U_date;U_timetemp=tempposi0.U_time;SMS=0;switch(GPSADDEE) case 0:for(i=0;i=
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:DZ236车辆定位追踪系统
链接地址:https://www.renrendoc.com/p-511822.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2025  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知人人文库网,我们立即给予删除!