WinCE 5.0操作系统在弯板式计重仪上的应用

2014-04-16 02:21熊山山班钊
中国科技纵横 2014年3期

熊山山+班钊

【摘 要】 弯板式计重仪是一种基于弯板传感器的动态计重仪器系统,具有精度高、稳定性好、坚固耐用、易于维护等特点,大量用于高速轴载检测和收费站低速计重。本文简单描述弯板式计重仪计重原理与系统硬件组成后,探讨了为何选择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