提出一種基于Windows CE嵌入式操作系統的物流車載終端設計方案。在此方案中集成了電子地圖、GPS定位、GPRS無線通信、熱敏打印機、電子秤等功能。文中給出了相應的實現及測試結果。
  物流在現代社會中正扮演著越來越重要的角色。但是,與國外技術密集型的物流行業相比,國內物流行業在信息化、智能化程度上還存在著">

      技術頻道

      基于Windows CE的物流車載終端設計

      提出一種基于Windows CE嵌入式操作系統的物流車載終端設計方案。在此方案中集成了電子地圖、GPS定位、GPRS無線通信、熱敏打印機、電子秤等功能。文中給出了相應的實現及測試結果。
        物流在現代社會中正扮演著越來越重要的角色。但是,與國外技術密集型的物流行業相比,國內物流行業在信息化、智能化程度上還存在著較大差距。鑒于這樣一種狀況,本文提出了一個基于Windows CE平臺的物流車載終端設計方案。該物流車載終端以Liod評估板(簡稱為“Liod板”)為硬件平臺,在嵌入式操作系統Windows CE上實現的功能有:電子地圖,實現地圖4級縮放、平移、歸中功能;無線通信,實現終端與控制中心的GPRS無線通信;GPS定位,定位車載終端當前的位置;稱重與打印,讀取電子秤數據,實現票據的打印;語音提示,提供更好的人機交互功能。
        1 軟硬件平臺簡介
        本車載終端以Liod板為硬件平臺。Liod板的核心PXA270是一款屬于Intel XScale微架構的高性能、低功耗嵌入式處理器。在本設計中要用到的主要有LCD、觸摸屏、以太網接口、全功能串口、音頻接口等。本設計方案采用Windows CE作為軟件平臺。Windows CE是一種針對小容量、移動式、智能化設備的多任務、搶占式、模塊化實時嵌入式操作系統。Windows CE具有與桌面Windows幾乎完全兼容的API接口,為了配合Windows CE上的應用程序開發,微軟公司推出了eMbedded Visual C++(簡稱“eVC”)集成開發環境。本系統采用的是eVC 4.0。
        2 硬件設計
        2.1 系統硬件設計
        在Liod板的基礎上擴充了部分外圍電路。根據Liod板提供的硬件資源和系統需要使用的硬件情況,硬件設計主要包括兩個部分:以太網口轉串口電路設計和電子秤硬件電路設計。
        無線通信設備采用GPRS Modem。該GPRS Modem通過Liod板的串行口COM1發送和接收數據;GPS定位采用12通道定位模塊GARMIN15L;打印機采用TD58熱敏打印機;電子秤采用應變片壓力傳感器結合C8051F020單片機自行開發;語音提示模塊直接使用Liod板提供的音頻接口。由于GPS接收模塊、熱敏打印機、電子秤都要通過串行口與Liod板通信,Liod板原有的串口數量已經無法滿足要求,因此采用ZNE100T以太網轉串口模塊,把Liod板的以太網口擴充成3個串行口。

        系統的硬件連接如圖1所示。

      圖1 系統硬件連接示意圖

      表1 ZNC-100T模塊引腳定義

        上述引腳中,GPIO0~GPIO4是可控制通用I/O口。在功能板的設計中,使用了3個RS232串口分別發送和接收電子秤數據、打印機數據和GPS數據。本系統采用帶有使能控制信號的MAX3221電平轉換芯片選擇要使用的串口,具體做法是將GPIO0~GPIO2分別連接到3個MAX3221的使能端(EN),這樣就可以通過軟件來選擇需要的串口。使能端均為低電平有效,當有一個串口的使能端為0時,其他兩個串口使能端必須為1。
        2.3 電子秤硬件設計
        電子秤使用應變片壓力傳感器、AD8221運算放大器和C8051F020芯片進行設計。電子秤硬件電路框圖如圖2所示。

      圖2 電子秤硬件電路框圖

        物品重量通過應變片壓力傳感器轉換成比較微弱的電壓信號。此電壓信號經過AD8221運算放大器放大,送到C8051F020的ADC1轉換器;轉換后的數據通過串口發送出去,同時在擴展板的液晶顯示屏上顯示重量。電子秤的UART0和PC串口都使用9 600 bps的波特率。
        C8051F020的ADC1轉換器是8位的,因此轉換數據是0~255。電子秤的分辨率為20 g,最大稱量量程是5.1 kg。
        3 軟件設計
        3.1 電子地圖
        電子地圖模塊采用柵格圖像實現。柵格圖像又稱“位圖”,由像素點組成。與矢量圖像不同,柵格圖像在用作電子地圖時需要在地圖元素和數據之間建立對應關系。

      表2 地圖級別與放大倍數的對應關系

        首先對坐標系統進行簡單的說明。假設有一個形狀為嚴格矩形的地圖,其像素坐標原點為(0,0),地圖X軸方向上的寬度假設為W個像素點,Y軸方向的高度假設為H個像素點,某個點的像素坐標為(x,y),則定義該像素點的歸一化坐標為(x/W,y/H)。這樣,地圖左上角的歸一化坐標為(0.0,0.0),右下角歸一化坐標為(1.0,1.0)。把這樣的坐標系統稱為“歸一化坐標系”。
        采用歸一化坐標系可以簡化柵格地圖的多級縮放。由于本終端要將車輛當前的位置顯示在地圖上,而對于不同的地圖級別,地圖的分辨率是不一樣的。那么,當地圖放大或縮小時,車輛對應的像素坐標就會發生改變;但是,在GPS連續的兩次更新間隔之間,車輛在地圖上的歸一化坐標是不會變化的。地圖放大或縮小后,只需要用新地圖的像素寬度乘以歸一化x坐標,即可得到車輛在新地圖上的X軸像素坐標;同理,可得車輛在新地圖上的Y軸像素坐標。這樣,坐標計算過程就可以統一起來。本設計中的電子地圖模塊統一采用歸一化坐標系。

      圖3 經緯度坐標線性映射示意圖

        根據設計要求,本終端的電子地圖支持4級縮放。設計中采用一幅大小為2 251×1 557、格式為BMP的成都地圖作為原始地圖,即所能支持的最大分辨率的地圖。把縮小8倍以后的地圖作為所能支持的最小分辨率地圖,因此地圖級別與放大倍數之間具有如表2所列的對應關系。
        對于地圖左上角點和右下角點的經緯度坐標的求取,通過實際測量的方法是很難做到準確無誤的。因此本設計采用一種間接的方法來求得地圖左上角和右下角的經緯度坐標。

        假設在地圖邊界內部有兩個任意點,把這兩個點稱為“參考點”,并且已知這兩個參考點的經度、緯度、歸一化x坐標、歸一化y坐標;設參考點1的這4個參數為point1=(lon1, lat1, x1, y1),參考點2的這4個參數為point2=(lon2, lat2, x2, y2),即point1和point2已知。根據前面的說明可知,左上角點的歸一化坐標為(0.0, 0.0),而右下角點的歸一化坐標為(1.0,1.0)。另外假設左上角點用pointTL表示,其經緯度為lonTL和latTL;右下角點用pointBR表示,其經緯度為lonBR和latBR(TL意即TopLeft,BR意即BottomRight),則有pointTL=(lonTL,latTL,0.0,0.0)。同理,對于右下角的點有pointBR=(lonBR,latBR,1.0,1.0)。

        由于將經緯度與地圖坐標之間近似為線性映射關系,因此根據歐氏幾何原理可知,由已知的point1和point2,可以計算出pointTL和pointBR的未知參數:

      上述工作完成之后,參考點數據的存儲和讀取就比較簡單了。基準點和車輛位置的計算都只是簡單的代數計算過程,容易實現。至于地圖的顯示和控制則需要通過Windows CE的API接口來完成。
      3.2 GPRS模塊
        本車載終端采用GPRS Modem與控制中心進行無線數據通信,對GPRS Modem的控制和讀寫通過串口進行。由于與控制中心交互的數據種類較多,因此定義了相應的應用層數據包格式。數據包的所有字段均采用單字節ASCII編碼且為固定長度。在發送端,數值型字段需要在發送前格式化為定長字符串再封裝到數據包中;在接收端,需要將數據包中的格式化字符串還原為數值型常量。數值型字段不足部分以字符“0”為前導字符進行填充;字符型字段不足部分以空格(SPACE,0x20)為前導字符填充。字符串型字段的長度不包括字符串結尾的NULL字符(在C語言中為0x00)。所有采用UNICODE編碼的字符數據在封裝到數據包中之前必須進行轉換。
        定義的數據包主要有以下幾類:客戶端位置更新數據包;客戶端接件信息數據包;客戶端送達簽收數據包;服務器新任務數據包;客戶端確認數據包;服務器確認數據包;客戶端車輛故障數據包;客戶端道路堵塞數據包。
        為了能夠正確解析數據包中的數據,所有數據包都具有相同的包頭(head),即數據包類型(packet type)、時間戳標記(time stamp)、數據包順序號(packet sequence number)3個字段。當接收到一個數據包之后,根據包頭中的類型字段就能判斷該數據包主體部分的長度,由此即可正確解析出包中的內容。包頭之后是數據包主體(body)部分,不同數據包類型有著不同的字段和長度。上述8種定義類型之外的數據包均為未定義類型,應當被丟棄。類型為NTSK、TMLF、RCNG的數據包需要接收端的確認;而RECV、SEND、UPDT、CACK、SACK這5種類型的數據包不需要確認。
        GPRS Modem的數據傳輸與接收是通過串口編程來實現的。Windows CE平臺上的串口編程依賴于與文件相關的API接口:CreateFile()打開串口,ReadFile()從串口讀取數據,WriteFile()向串口寫入數據。由于網絡數據包的到來是一個異步過程,因此還需要處理串口的異步事件:GetCommMask()取得串口已經設置的事件,SetCommMask()設置串口事件集,WaitCommEvent()等待預先設置的串口事件集中的某一事件發生。
      3.3 稱重與打印模塊
        該模塊實現了電子稱重和憑單打印功能。
        由于采用ZNE100T以太網口轉串口模塊把Liod板的以太網口擴充為3個串口,因此對外擴的3個串口的訪問是通過以太網口進行的,這涉及Windows CE下的網絡編程。對外擴串口的控制是通過向ZNE100T模塊的3003端口寫入控制命令字來實現的;數據的收發是通過ZNE100T模塊的4001端口實現的。
        網絡編程接口采用的是Winsock1.1,采用面向連接的TCP協議。對數據的讀寫采用了非阻塞的方式:寫操作直接將數據寫到套接口的輸出緩沖區中;而數據的讀取因為是一個異步過程,因此放在一個單獨的線程中完成。在此線程中定義了OnRead()、onError()、OnDisconnect()回調函數,用于把線程中讀取到的數據遞交給上層或者處理讀取過程中發生的異常事件。
        由于打印機、電子秤、GPS都是通過ZNE100T模塊進行控制的,而Liod板提供的以太網口只有一個,因此在任何時刻都只能與打印機、電子秤、GPS三者中的一個通信,而其他兩個設備的串口則處于關閉狀態。這是通過向ZNE100T模塊的3003端口發送不同的控制命令字完成的。
        對于稱重,只存在由C8051F020單片機向Liod板的單向數據傳輸,稱量的范圍為40 g~5 100 g,因此重量數據采用2個字節表示,單位為g。為了確保數據傳輸的準確,除了2個字節的重量數據之外,還加入了幾個字節的冗余數據。電子秤的數據幀格式如下:

      文章版權歸西部工控xbgk所有,未經許可不得轉載。

      主站蜘蛛池模板: 日韩高清国产一区在线| 在线播放精品一区二区啪视频| 日本一区二区三区免费高清| 国产一区二区三区在线观看免费| 亚洲福利一区二区| 亚欧色一区W666天堂| 国产91一区二区在线播放不卡| 中文字幕日韩欧美一区二区三区| 亚洲视频一区二区在线观看| 免费av一区二区三区| 丰满少妇内射一区| 真实国产乱子伦精品一区二区三区| 视频精品一区二区三区| 免费人妻精品一区二区三区| 国产日韩精品一区二区三区| 精品久久久中文字幕一区| 精品国产一区二区三区在线| 亚洲国产精品无码第一区二区三区 | 91成人爽a毛片一区二区| 无码aⅴ精品一区二区三区浪潮| 亚洲日韩激情无码一区| 久久se精品一区二区国产| 国产AV午夜精品一区二区入口| 无码少妇一区二区三区浪潮AV| 免费无码VA一区二区三区| 亚洲福利视频一区二区三区| 日韩成人无码一区二区三区| 精品国产一区二区三区久久影院 | 亚洲一区二区三区在线视频| 久久久不卡国产精品一区二区| 99久久精品费精品国产一区二区| 制服中文字幕一区二区 | 亚洲AV美女一区二区三区| 色窝窝无码一区二区三区色欲| 色偷偷av一区二区三区| 亚洲国产AV无码一区二区三区| 无码人妻一区二区三区av| 国产日韩精品一区二区在线观看| 国产在线精品一区二区夜色| 亚洲福利电影一区二区?| 午夜一区二区在线观看|