基于Linux和ARM9的物流信息化终端平台上对终端定位功能实现

发布者:诗意世界最新更新时间:2018-02-17 来源: eefocus关键字:Linux  ARM9  物流信息化  终端定位 手机看文章 扫描二维码
随时随地手机看文章

  前 言

  物流的定位方案与技术的选择对提高现代物流配送管理效率,减少运营成本具有重要的影响。物流终端定位要求较高的定位精度,能提供全天候连续不间断的定位信息支持,能满足复杂地形条件的定位需求。

 

  本文针对当前物流行业终端定位功能的需求进行分析,针对当前定位技术现状,提出相适应的物流终端定位功能实现方案,并在基于嵌入式Linux和ARM9硬件核心的物流信息化终端平台上对终端定位功能进行了初步的实现。

  系统实现方案

  移动定位技术的现状分析目前,移动定位技术已经非常成熟,较广的应用主要可以分为两大类,一类是GPS等利用卫星进行后方交汇的定位技术;另一类是利用移动通信网技术提供位置服务的定位技术。常用的有:基于Cell-ID的定位技术;基于AFLT(Advanced Forward Link TrilateratiON)的定位技术;GPS定位技术;GPS辅助定位技术(A-GPS)等。

  GPS是当前在物流信息化中研究最广泛的定位技术之一,但是,当GPS终端在建筑密集的地方或在隧道等定位信号难以接收的地理位置时,往往不易获取有效的定位信息。而且,GPS定位功能无法满足仓储等高精度定位需求的场合,还需要进行相应的补充与完善。

  本系统实现方案

  基于现有网络建设的总体情况及物流管理过程中对定位数据的需求分析,并综合考虑各种定位技术的发展现状及技术成熟度、实现成本等因素,拟在物流配送网络中采用GPS辅助定位系统(GPS+Cell-ID+RFID+图形道路匹配相结合)的定位技术。其主要考虑如下:

  1)充分利用现有硬件资源。GPS、GSM、RFID模块为本物流信息终端课题已拟定的硬件平台,除GPS专为定位功能服务外,GSM和RFID模块同时具有通信和标签信息采集的功能。在不扩充硬件资源的前提下,最大限度地提高定位功能的服务质量。

  2)Cell-ID定位。确保终端在GPS定位失去信号的情况下,保持最低限度的定位信息的提供。Cell-ID方式在城市及人口密集区域能提供相对高的精度,与GPS在城市高层建筑、林荫道、地下隧道等遮蔽情况下性能的降低有较好的互补。由于GSM相对于CDMA具有更小的小区半径,因此具有相对高的Cell-ID定位精度。在本方案中拟采用GSM的CELLID定位方式。

  3)RFID定位。通过读取用于标识地理坐标的标签数据来获取定位信息。其定位精度仅取决于标签存储定位信息的精确性,理论上可以达到任意高精度。可用于仓库、码头等需要高精度定位信息的场所,来提供定位信息和其它辅助功能。

  4)图形道路匹配。当前物流运输主要是利用汽车等运输工具在固定的路线上进行,当路线基本确定的情况下,可通过图形道路匹配对定位信息进行适当纠正。但是,这一般适用于道路不太密集的区域或路线固定的情况,可在本方案中作为可选功能模块提供,适用于铁路、高速公路等道路信息明确的场合,尤其适用于铁路运输。

  软硬件系统设计原理

  系统硬件开发板CPU采用的是三星公司的内部集成ARM920T处理器核的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 '\n'

  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: //提取纬度……//提取经度、速度、方位角、校验数据等其它信息。

  2)Linux串口通信编程

  嵌入式Linux操作系统使用接口标准POSIX的termios接口来控制串口的行为。在Linux系统中,串口等设备被当作文件进行处理,其程序模块主体实现如下:

  int fd="open"("/dev/ttyS1",O_RDWRIO_NOCTTY);//打开串口

  ……new_options.c_cflag &=~PARENB;//无奇偶校验

  new_options.c_cflag &=~CSIZE;//不隐藏数据位

  new_options.c_cflag &=~CSTOP8;//无停止位

  new_options.c_cflag |=CS8;//8位数据位

  cfsetispeed(&new_options,B4800);//设置波特率

  4800bit/scfsetospeed(&new_options,B4800);

  tcflush(fd,TCIOFLUSH);

  tcsetattr(fd,TCSANOW,&new_options);//设置新的设备方式完成串口设置后,就可以使用read( )、write( )函数对串口进行操作。需注意的是,串口默认是阻塞型的,当没有数据到达时,将会阻塞挂起,这时可以通过多线程编程、串口超时设定或使用select轮询等方式进行调整控制。本系统主要采用多线程编程实现对串口阻塞的调控,使用的是QT的Qthread类,也可以直接使用Linux自身的多线程函数进行操作。

  3)QT/Embedded编程

  Qt/Embedded是着名的Qt库开发商TrolLTEch正在进行的基于framebuffer的面向嵌入式系统的Qt版本。因其面向对象、跨平台和界面设计方便美观而得到广泛应用。

  本设计采用QT/Embedded 3.3.4版本,它支持SQLITE数据库驱动,便于数据库操作与编程。设计主要使用了QTE的画布模块、SQL模块和网络模块。画布模块中,QCANvas库是一个高度优化的二维绘图库,与其它画布模块结合使用,能很方便地实现导航地图的显示、缩放、漫游以及鹰眼等功能。而SQL模块和网络模块能很方便地实现数据库编程和网络通信功能,极大地缩短了程序的开发周期,提高了开发效率。

  初步实现定位误差主要取决于GPS-OEM模块的定位精度,实验显示本系统能初步满足物流信息终端对定位功能的需求。

  结束语

  实验证明:系统定位数据精确、界面友好、系统可扩展性强,较好地完成了物流信息化终端定位功能。本系统可用于物流终端定位导航,也可适用于其它需要定位导航服务的场合,具有较普遍的适用价值和参考价值。


关键字:Linux  ARM9  物流信息化  终端定位 引用地址:基于Linux和ARM9的物流信息化终端平台上对终端定位功能实现

上一篇:基于ENC28J60嵌入式以太网/CAN网关设计
下一篇:基于ARM 的嵌入式系统与CF卡存储技术

推荐阅读最新更新时间:2024-03-16 15:55

基于Framebuffer的嵌入式GUI系统实现
0 前言 当前流行的商业化的GUI 系统包括Palm OS、Windows CE和Symbian OS 等。这些GUI 性能出众,一般都提供完整的解决方案,对Java、多媒体的支持较好,使用它们可以很方便地构建自己的嵌入式系统,缩短开发周期。但这些都是商业化产品,使用它们不可避免地要付出昂贵的授权费用,没有公开源代码,用户也不能很自由地定制自己的产品。 Linux 的出现给嵌入式产品的开发带来了新的活力,它拥有很多的优良特性非常适合于嵌入式开发。目前国内外基于Linux的GUI产品比较流行的包括 MiniGUI、MicroWindows、QT/Embedded 等,其中QT/Embedded 属于商业化的产品,其他属于开源
[嵌入式]
linux 2.6.22.6 移植
板子是国嵌的 GQ2440 主要移植步骤参考 韦东山老师的《嵌入式linux应用开发完全手册》 1、下载内核,打补丁 2、是用config_ok 配置内核 3、在 include/asm-arm/mach-types.h 中修改 MACH_TYPE_S3C2440 的值为 1999 因为MACH_TYPE_S3C2440 对应的机器结构在 arch/arm/mach-s3c2440/mach-smdk2440.c 中定义 所以 要把这个文件编译进内核,所以配置中有:System Type - s3c2440 Machines - SMDK2440 4、在arch/arm/mach-s3c2440/mach-smdk2440.c
[单片机]
Linux下s3c6410的GPIO操作(2)
1、还接着看上一篇的这个函数 arch_initcall(s3c64xx_gpiolib_init); static __init int s3c64xx_gpiolib_init(void) { s3c64xx_gpiolib_add(gpio_4bit, ARRAY_SIZE(gpio_4bit), s3c64xx_gpiolib_add_4bit); s3c64xx_gpiolib_add(gpio_4bit2, ARRAY_SIZE(gpio_4bit2), s3c64xx_gpiolib_add_4bit2); s3c64xx_gpiolib_add(gpio_2bit, ARRAY_SI
[单片机]
单片机和linux有什么区别?
  随着嵌入式行业硬件平台的性能增强,项目需求和功能日益复杂,ARM公司推出的 CORTEX-M3,更是让以往做单片机的工程师在芯片和技术选型面临两难选择,本专题将从芯片价格、整个系统的硬件软件设计及维护的成本等各个方面给您提供一个参考, 并从技术角度分析单片机和带操作系统的系统的软件开发的异同点。   ● 1.单片机与ARM等新处理器的价格比较   ● 2.带操作系统与不带操作系统的软件开发的区别   ● 2.1.驱动开发的区别   ● 2.2.应用程序开发的区别   1. 单片机与ARM等新处理器的价格比较   表1   从表1里面各种芯片的资源,大概就可以猜知它们的应用场合。51单片机通常被用来做一些比较简单
[单片机]
单片机和<font color='red'>linux</font>有什么区别?
Linux系统下超线程感知的调度算法研究
  随着计算机应用的日益普及,用户对计算机的处理能力的需求成指数级增长。为了满足用户的需求,处理器生产厂商采用了诸如超流水、分支预测、超标量、乱序执行及缓存等技术以提高处理器的性能。但是这些技术的采用增加了微处理器的复杂性,带来了诸如材料、功耗、光刻、电磁兼容性等一系列问题。因此处理器设计人员开始寻找新的途径来提高处理器的性能。Intel公司于2002年底推出了超线程技术,通过共享处理器的执行资源,提高CPU的利用率,让处理单元获得更高的吞吐量。    1 超线程技术背景   传统的处理器内部存在着多种并行操作方式。①指令级并行ILP(Instruction Level Paramllelism):同时执行几条指令,单CP
[嵌入式]
OK6410A学习笔记二:嵌入式Linux驱动开发环境的配置和测试
环境配置: Window7 32-bit OS + VMware Workstation 6.5 + Ubuntu9.10 FORLINX OK6410A开发板 嵌入式Linux驱动开发环境的搭建 1. 安装arm-linux-gcc交叉编译器,并设置环境变量 2. 将飞凌提供的FORLINX_linux-3.0.1.tar.gz拷贝到/usr/src,解压并进入linux-3.0.1目录 3. 执行以下命令:#make oldconfig; #make prepare; 这两个命令用来测试交叉编译器和驱动开发需要的源文件包是否能正常使用,可能会出现提示arm-linux-gcc找
[单片机]
OK6410A学习笔记二:嵌入式<font color='red'>Linux</font>驱动开发环境的配置和测试
07-S3C2440驱动学习(一)嵌入式linux字符设备驱动-按键驱动程序
一、异步通知机制 从按键的实现方式来说,可以分为以下几种方式 查询方式,极度耗费CPU资源 中断方式,平时休眠,按键按下,唤醒休眠 poll机制,不需要一直read,根据poll返回值来决定是否read 以上都是应用程序主动去read。 下面来介绍异步通知实现按键,由驱动程序,提醒应用程序有按键按下了,告诉应用程序现在需要去read了。 1测试应用程序,命令行发信号 (1)进程间发信号如何实现呢: 我们可以通过ps查看某个应用程序的PID是多少。然后执行: Kill -9 PID来杀死这个应用程序进程。当然我们可以自定义一些信号类型,发送给应用程序,执行相应的方法。 (2)我们写一个测试应用程序,然后给
[单片机]
07-S3C2440驱动学习(一)嵌入式<font color='red'>linux</font>字符设备驱动-按键驱动程序
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved