新聞中心

        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: //提取緯度……//提取經度、速度、方位角、校驗數據等其它信息。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 银川市| 二手房| 黄冈市| 孟津县| 泰顺县| 阆中市| 白银市| 包头市| 惠来县| 乳山市| 阿尔山市| 龙山县| 资溪县| 大名县| 会泽县| 宁乡县| 邓州市| 吕梁市| 日照市| 裕民县| 襄汾县| 蓬溪县| 印江| 和林格尔县| 竹北市| 汉源县| 江孜县| 祁连县| 五常市| 黎城县| 阳高县| 繁峙县| 赤峰市| 综艺| 永丰县| 句容市| 府谷县| 青神县| 枣庄市| 克山县| 崇文区|