熊山山+班釗
【摘 要】 彎板式計重儀是一種基于彎板傳感器的動態計重儀器系統,具有精度高、穩定性好、堅固耐用、易于維護等特點,大量用于高速軸載檢測和收費站低速計重。本文簡單描述彎板式計重儀計重原理與系統硬件組成后,探討了為何選擇WinCE 5.0系統作為計重儀操作系統,以及如何在WinCE 5.0下實現大量采樣數據的內存存儲。在文章最后,通過總結彎板式計重儀的特點,闡述了WinCE 5.0嵌入式系統的應用場景。
【關鍵詞】 動態計重儀 WinCE 文件映射
1 彎板式計重儀介紹
動態計重儀是指車輛不停車通過計重儀后就可以得到車輛重量及相關信息的儀器系統。目前市場上使用的計重傳感器主要有三大類——稱臺式、石英式及彎板式傳感器。稱臺式傳感器由于響應時間長,一般僅適用于車輛低速計重;石英傳感器由于衰減厲害,需要頻繁對其進行標定,同時,由于材質脆,容易損壞;彎板式傳感器具有響應迅速、不易衰減、結實耐用、易維護的優點,在高速計重和低速計重均有良好的應用。高速計重指車輛高速行駛過程中(一般30km/h以上)的計重,主要用于公路車輛軸載檢測;低速計重一般定義為速度小于15km/h的車輛計重,主要用于高速公路計重收費時的車輛計重。
彎板式計重儀由多塊彎板式傳感器(低速計重時四塊,高速計重時兩塊或四塊×車道數,如圖1)、橋盒放大器、AD數據采集卡、DA卡、嵌入式主機及相關輔助配件組成。當車輛通過安裝在路面上的彎板傳感器時,彎板式傳感器會將車輪壓力轉化為電壓變化,電壓經過橋盒放大后送入AD采集卡,計重軟件通過分析一段時間的各個傳感器AD值信息就可以得到車輛通過時的各個輪重及相關信息,進而得到軸重、車重、速度、軸距、車型等信息。由于彎板式傳感器及橋盒放大器中電阻對溫度變化敏感,需要計重軟件通過DA卡輸出電壓控制橋盒調零。彎板式計重儀原理流程如圖2所示。
2 主機硬件結構
計重儀器系統需要在野外保證長時間運行,為了克服溫度變化大、揚灰嚴重等惡劣環境,必須采用工業級板卡設備;同時為了配合無市電供給情況下時,使用風能、太陽能低功率發電設備供電,應當選用低功耗板卡。考慮到公路現場重型貨車通過時產生的震動,為了保證板卡連接硬件堅固耐用,我們選擇基于PC104接口的工業級嵌入式板卡搭建儀器主機。儀器主板選擇研祥104-1645型工業計算機主板,板載500M主頻CPU、512M內存,采用2G DOM盤作為存儲設備;AD采集卡使用中泰公司PM511型AD采集卡,12位數據精度,可16路循環采樣,最大采樣頻率100KHz;DA卡選用中泰PM524型8路DA卡,根據實際需要可多塊疊加。
3 主機操作系統
目前市場上主流的嵌入式操作系統有WinCE系統和嵌入式Linux兩大類。WinCE嵌入式操作系統是微軟公司推出的32位嵌入式操作系統,相較于微軟桌面操作系統具有系統穩定、資源占用小、價格便宜等特點。嵌入式Linux操作系統是一個開源系統,可以免費使用,但是人機界面不友好、開發調試難度大,維護成本較高。通過二者對比表(見表1),可以發現,在需要良好人機交互、對價格敏感度不高的情況下,選用WinCE嵌入式操作系統具有內核完善、界面友好、開發調試容易、廠商支持多、易于維護等優勢。
WinCE 5.0是CE系統發展過程中一個比較重要的階段。CE 5.0相較于之前的CE版本,內核結構及內存管理模式基本沒有太大的變化,但在CE 5.0之后的CE 6.0,微軟就重新設計了其內核架構及內存管理。在CE 6.0及后面版本中,內存管理由平面模式提升為立體模式,從而實現了提升進程限制和單進程虛擬內存限制。同時,為提升內核安全性,CE 6.0修改了驅動模式,將驅動分為用戶態和內核態,使得OEM廠商可以限制第三方驅動在內核態的運行。如此,在CE 6.0系統下,大量外圍設備如AD采集卡、DA采集卡的添加就必須有主板提供商CE系統的支持,為外圍設備選型增添了諸多麻煩。考慮到計重儀器系統是面向單一應用,CE 5.0操作系統的32個進程總數限制對我們儀器開發不會造成任何影響,而且,由于CE 5.0成熟時間長,廠商支持多,應用成熟,故而WinCE 5.0嵌入式系統用作彎板式計重儀操作系統是一個很好的選擇。
4 計重軟件內存開辟失敗及解決辦法
開發計重軟件,尤其是開發低速計重軟件時,考慮到車輛通過計重儀時間可能過長,需要保存一定量的傳感器原始數據。在低速計重中,為了保證計重精度,每個通道的采樣頻率為8096Hz,共4個通道,總采樣頻率為32384Hz;每個采樣點數據精度12位,需要2個字節的short型來保存數據,這樣每秒鐘的數據量為63KB。為了保存15分鐘的原始傳感器信息,需要內存空間為15×60×63KB=55MB。但是,當直接開辟55MB的內存空間時,程序會直接報錯退出,提示空間不夠。而通過查看內存使用情況時,發現還有遠遠大于55MB的內存空閑。
通過查找文獻發現,CE 5.0操作系統對虛擬內存實施分片式管理,每個進程僅僅只分配了32MB的虛擬內存空間,虛擬內存分配如圖3所示(圖片從網絡截取)。32位的CE 5.0系統可以管理4GB的虛擬內存,其中高地址2GB部分,也就是地址從0x80000000到0xFFFFFFFF的虛擬內存為內核占用空間,應用程序無法使用。低地址0x00000000到0x7FFFFFFF部分為應用程序使用空間。應用程序使用部分,一共分為64個分割槽(slot),每個分割槽的大小為32MB,其中slot0為當前運行進程的內存空間,slot1到slot32共32個分割槽(512MB虛擬空間)分別供每個進程獨立使用,slot33到slot62這部分虛擬內存供所有進程公用,slot63保存一些資源信息。在每個分割槽中,進程使用虛擬內存的方式如圖4所示(圖片從網絡截取),進程內存占用從低地址向高地址方向,動態庫內存占用從高地址向低地址方向,當從兩個方向的地址分配相遇時,進程內存便被消耗殆盡,進程崩潰。endprint
為了實現計重軟件大量采樣數據的存儲,計重程序必須實現大內存的分配使用,此時僅僅從進程分割槽中32M的內存空間中分配顯然是不現實的,必須要在進程分割槽外,也就是公共內存區,實現內存分配。通過查找資料,參閱微軟MSDN library,CE 5.0系統提供了一套文件映射API接口以供實現在公共內存區分配使用內存。具體函數原型如下:
開辟內存空間接口:
HANDLE CreateFileMapping(
HANDLE hFile, //開辟文件映射的位置,(HANDLE)INVALID_HANDLE_VALUE表示在內存中開辟
LPSECURITY_ATTRIBUTES lpFileMappingAttributes, //屬性,為NULL
DWORD flProtect, //文件保護模式,為讀,寫,可執行的組合
DWORD dwMaximumSizeHigh,//開辟大小的高字節位
DWORD dwMaximumSizeLow, //開辟大小的低字節位
LPCTSTR lpName //映射對象的字符串表示
);
內存空間使用接口:
LPVOID MapViewOfFile(
HANDLE hFileMappingObject, //使用的映射文件,也就是CreateFileMapping的返回值
DWORD dwDesiredAccess, //需要的文件使用模式(讀,寫還是可執行)
DWORD dwFileOffsetHigh,//開辟位置偏移量的高字節位
DWORD dwFileOffsetLow, //開辟位置偏移量的低字節位
DWORD dwNumberOfBytesToMap //開辟空間大小
);
內存空間釋放接口:
BOOL UnmapViewOfFile(
LPCVOID lpBaseAddress //釋放空間的位置
);
通過上面的文件映射函數原型可以發現,公共內存空間的開辟和釋放都很簡單,但是如何使用開辟的空間卻略有麻煩,需要知道使用的具體地址,也就是偏移量。為了使用方便,我們將4K個采樣數據作為一個采樣塊,整體存儲使用,每次存儲數據量為8KB,偏移量為8096。然后記錄下每個采樣塊的序號、大小、首地址(Map View Of File的返回值)等信息以供采樣數據的使用與釋放。這樣我們就實現了大量采樣數據在內存中的存儲使用,解決了計重軟件內存分配失敗問題,從而實現了基于WinCE 5.0系統的彎板式計重儀軟件開發。
5 結語
通過WinCE 5.0嵌入式操作系統在彎板式計重儀上的應用可以看出,雖然有單進程內存32MB的限制,但是通過文件映射的方式,可以很容易在公共內存區開辟額外內存,同時,只需稍微調整下數據格式就可以很方便的使用該部分內存。故而,在面對應用單一、價格敏感度不高的應用時,選擇WinCE 5.0作為操作系統具有選型方便、廠商支持成熟、系統穩定、界面友好、開發調試方便等優點。
參考文獻:
[1]賀曙新.車輛動態稱重技術的歷史、現狀與展望.中外公路,2004(6):104 - 108.
[2]桂紅,陶振凱.解決WinCE應用程序32MB的限制.沈陽理工大學學報,2007,26(3).
[3]何宗鍵.Windows CE嵌入式系統.北京航空航天大學出版社,2006.endprint
為了實現計重軟件大量采樣數據的存儲,計重程序必須實現大內存的分配使用,此時僅僅從進程分割槽中32M的內存空間中分配顯然是不現實的,必須要在進程分割槽外,也就是公共內存區,實現內存分配。通過查找資料,參閱微軟MSDN library,CE 5.0系統提供了一套文件映射API接口以供實現在公共內存區分配使用內存。具體函數原型如下:
開辟內存空間接口:
HANDLE CreateFileMapping(
HANDLE hFile, //開辟文件映射的位置,(HANDLE)INVALID_HANDLE_VALUE表示在內存中開辟
LPSECURITY_ATTRIBUTES lpFileMappingAttributes, //屬性,為NULL
DWORD flProtect, //文件保護模式,為讀,寫,可執行的組合
DWORD dwMaximumSizeHigh,//開辟大小的高字節位
DWORD dwMaximumSizeLow, //開辟大小的低字節位
LPCTSTR lpName //映射對象的字符串表示
);
內存空間使用接口:
LPVOID MapViewOfFile(
HANDLE hFileMappingObject, //使用的映射文件,也就是CreateFileMapping的返回值
DWORD dwDesiredAccess, //需要的文件使用模式(讀,寫還是可執行)
DWORD dwFileOffsetHigh,//開辟位置偏移量的高字節位
DWORD dwFileOffsetLow, //開辟位置偏移量的低字節位
DWORD dwNumberOfBytesToMap //開辟空間大小
);
內存空間釋放接口:
BOOL UnmapViewOfFile(
LPCVOID lpBaseAddress //釋放空間的位置
);
通過上面的文件映射函數原型可以發現,公共內存空間的開辟和釋放都很簡單,但是如何使用開辟的空間卻略有麻煩,需要知道使用的具體地址,也就是偏移量。為了使用方便,我們將4K個采樣數據作為一個采樣塊,整體存儲使用,每次存儲數據量為8KB,偏移量為8096。然后記錄下每個采樣塊的序號、大小、首地址(Map View Of File的返回值)等信息以供采樣數據的使用與釋放。這樣我們就實現了大量采樣數據在內存中的存儲使用,解決了計重軟件內存分配失敗問題,從而實現了基于WinCE 5.0系統的彎板式計重儀軟件開發。
5 結語
通過WinCE 5.0嵌入式操作系統在彎板式計重儀上的應用可以看出,雖然有單進程內存32MB的限制,但是通過文件映射的方式,可以很容易在公共內存區開辟額外內存,同時,只需稍微調整下數據格式就可以很方便的使用該部分內存。故而,在面對應用單一、價格敏感度不高的應用時,選擇WinCE 5.0作為操作系統具有選型方便、廠商支持成熟、系統穩定、界面友好、開發調試方便等優點。
參考文獻:
[1]賀曙新.車輛動態稱重技術的歷史、現狀與展望.中外公路,2004(6):104 - 108.
[2]桂紅,陶振凱.解決WinCE應用程序32MB的限制.沈陽理工大學學報,2007,26(3).
[3]何宗鍵.Windows CE嵌入式系統.北京航空航天大學出版社,2006.endprint
為了實現計重軟件大量采樣數據的存儲,計重程序必須實現大內存的分配使用,此時僅僅從進程分割槽中32M的內存空間中分配顯然是不現實的,必須要在進程分割槽外,也就是公共內存區,實現內存分配。通過查找資料,參閱微軟MSDN library,CE 5.0系統提供了一套文件映射API接口以供實現在公共內存區分配使用內存。具體函數原型如下:
開辟內存空間接口:
HANDLE CreateFileMapping(
HANDLE hFile, //開辟文件映射的位置,(HANDLE)INVALID_HANDLE_VALUE表示在內存中開辟
LPSECURITY_ATTRIBUTES lpFileMappingAttributes, //屬性,為NULL
DWORD flProtect, //文件保護模式,為讀,寫,可執行的組合
DWORD dwMaximumSizeHigh,//開辟大小的高字節位
DWORD dwMaximumSizeLow, //開辟大小的低字節位
LPCTSTR lpName //映射對象的字符串表示
);
內存空間使用接口:
LPVOID MapViewOfFile(
HANDLE hFileMappingObject, //使用的映射文件,也就是CreateFileMapping的返回值
DWORD dwDesiredAccess, //需要的文件使用模式(讀,寫還是可執行)
DWORD dwFileOffsetHigh,//開辟位置偏移量的高字節位
DWORD dwFileOffsetLow, //開辟位置偏移量的低字節位
DWORD dwNumberOfBytesToMap //開辟空間大小
);
內存空間釋放接口:
BOOL UnmapViewOfFile(
LPCVOID lpBaseAddress //釋放空間的位置
);
通過上面的文件映射函數原型可以發現,公共內存空間的開辟和釋放都很簡單,但是如何使用開辟的空間卻略有麻煩,需要知道使用的具體地址,也就是偏移量。為了使用方便,我們將4K個采樣數據作為一個采樣塊,整體存儲使用,每次存儲數據量為8KB,偏移量為8096。然后記錄下每個采樣塊的序號、大小、首地址(Map View Of File的返回值)等信息以供采樣數據的使用與釋放。這樣我們就實現了大量采樣數據在內存中的存儲使用,解決了計重軟件內存分配失敗問題,從而實現了基于WinCE 5.0系統的彎板式計重儀軟件開發。
5 結語
通過WinCE 5.0嵌入式操作系統在彎板式計重儀上的應用可以看出,雖然有單進程內存32MB的限制,但是通過文件映射的方式,可以很容易在公共內存區開辟額外內存,同時,只需稍微調整下數據格式就可以很方便的使用該部分內存。故而,在面對應用單一、價格敏感度不高的應用時,選擇WinCE 5.0作為操作系統具有選型方便、廠商支持成熟、系統穩定、界面友好、開發調試方便等優點。
參考文獻:
[1]賀曙新.車輛動態稱重技術的歷史、現狀與展望.中外公路,2004(6):104 - 108.
[2]桂紅,陶振凱.解決WinCE應用程序32MB的限制.沈陽理工大學學報,2007,26(3).
[3]何宗鍵.Windows CE嵌入式系統.北京航空航天大學出版社,2006.endprint