新闻中心

EEPW首页>嵌入式系统>设计应用> 基于ARM9的物流终端定位功能的设计和实现

基于ARM9的物流终端定位功能的设计和实现

作者: 时间:2013-01-04 来源:网络 收藏

软硬件系统设计原理

  系统硬件开发板CPU采用的是三星公司的内部集成20T处理器核的S3C2410芯片。GPS模块提供卫星定位信号;GSM/GPRS模块提供通信与CELLID定位信息获取;RFIDS模块提供标签信息采集和RFID。终端通过GSM/GPRS通信网络与物流信息控制中心建立联系,提交相关数据采集信息和接收物流信息控制中心指令。

  系统软件采用嵌入式Linux操作系统,移植QT/Embedded 3.3.4和SQLITE数据库,采用QT嵌入式编程实现相应功能。

  软件系统设计

  本文的软件系统设计主要以S3C2410平台为核心,将从GPS模块、GSM/GPRS模块、RFID模块提取的定位信息进行相应分析处理,完成物流信息终端导航

  宿主机开发环境建立由于目标平台资源所限,需要搭建交叉编译环境,本系统开发过程中采用的平台如下:

  宿主机:RED HAT 9.0; QT/Embedded 3.3.4;SQLITE 2.8.16;cross-2.95.3.tar.bz2目标机:Linux Kernel 2.4.18;QT/Embedded 3.3.4;SQLITE 2.8.16 为了正确交叉编译QT/Embedded,需要确保UUID、ZLIB、JPEG、GIF、PNG、SQLITE等QT中所需要的头文件 、库文件在交叉编译前正确安装,并移植相应的库文件至目标机中。在交叉编译QT/Embedded 3.3.4前正确设置环境变量,本系统QT/Embedded 3.3.4交叉编译选项为:./configure -embedded arm -shared -debug -no-cups -thread -plugin-sql-sqlite -no-ipv6 -qt-mouse-Linuxtp,可根据实际情况进行相应裁减。

  软件关键技术分析

  1)GPS定位信息提取

  目前常用的GPS-OEM模块均支持NMEA-0183的数据格式。NMEA-0183是以语句来发送数据的,每条语句都相对独立并有完整意义。语句包含若干由ASCII文本字符组成的字段, 每条语句都以“$”开头,以回车换行结束,数据包含在字段中,字段之间由逗号分 隔。每条语句的第一个字段表明语句的意义,在标准语句中,“$”后的两位字符为“talkerID”,表示发送数据的设备,如GP表示GPS;接着的三位字符为“sentenceID”,表示了该语句的类型,如GGA,RMC等。语句中每个字段的含义随语句类型而定,语句的最后一个字段是检验和(checksum),由“*”和两位十六进制数字及回车换行符组成,检验和是“$”和“*”之间所有字符的逻辑异或运算结果,用于检验和确认数据的传输是否正确。

  对于终端导航而言,“$GPRMC”帧格式可以满足大部分需求,其帧长相对较短,便于信息处理。因此,在本系统中,选取“$GPRMC”帧进行定位信息提取。系统通过RS232串口从GPS-OEM模块中接收定位数据,从接收数据中的“$GPRMC”帧提取时间、经纬度、速度、方位角等定位导航信息。其程序模块主体结构如下:

  ……

  //判断是否为$GPRMC帧头,并进行标记

  if(Data[i]=='$' Data[i+3]=='R')……

  //判断是否为帧尾,帧尾以换行字符表示,数值为10 ''

  if(Data[i]==10 SectionID==13)

  { ……id_check=m*16+n; //得到检验数据的INT型

  if(chk_result!=id_check) //比较异或运算结果与检验数据是否一致

  …… i f( Data[i]=='*' SectionID==12 ) //异或运算结果

  ……

  //对$至*之间的字符进行异或运算,得到结果chk_result

  for( ; Data[n]!='*"; n++) chk_result^=Data[n];//判断逗号,区分识别数据,并判别*号,区分校验数据

  if(Data[i]==','||(Data[i]=='*' SectionID==12) )SectionID++;

  else

  { switch(SectionID){ case 1: //提取时间m_sTime[a++]=Data[i];break;case 2: //接收判别有效性数据A为有效,V为无效……case 3: //提取纬度……//提取经度、速度、方位角、校验数据等其它信息。



评论


相关推荐

技术专区

关闭