傳統的數據采集與控制系統采用單片機進行控制,未采用或是僅采用功能十分簡單的操作系統,這已無法滿足目前日益增加的工控系統要求,比如可視化的操作界面、網絡化控制等。
Windows CE是一個32 位、多任務的模塊化嵌入式操作系統,它的中斷嵌套與優先級處理機制滿足了嵌入式數據采集系統的實時性要求。同時它還支持多種架構的CPU和豐富的外設,具有強大的通訊和數據存儲管理能力,并對開發人員提供了操作系統定制、驅動程序、應用程序的一整套開發工具。最具特色的是它具有與桌面Windows相似的圖形界面,便于用戶操作;它的應用程序開發工具也類似于桌面系統,可以有效縮短系統的開發周期。因此,我們基于PC/104 總線進行硬件系統設計,選用了微軟的Windows CE 5.0操作系統作為其軟件開發平臺,從而構建了一個功能強大的嵌入式數據采集與控制系統。
1 基于Windows CE的數據采集與控制系統總體方案設計
嵌入式數據采集與控制系統在軟硬件上都需要嚴格考慮功能、尺寸、功耗及可擴展性等方面的要求。為了實現傳統監控系統和控制系統的一體化,硬件上我們采用常用的PC/104總線連接數據采集與控制系統的各模塊;軟件上采用Windows CE 5.0作為開發平臺。
1.1 系統硬件設計
整個系統可以劃分為幾個部分,包括物理參數檢測與信號調理子系統、數據采集子系統、中央監控子系統、控制策略執行子系統以及報警子系統。具體的硬件結構示意圖如下:

圖1系統硬件結構示意圖
其中的監控子系統選擇美國國家半導體的GX1-233MHz的CPU模塊作為數據采集與控制系統核心,配置了兩個串口,一個作為調試用,另一個作為通訊口;采用128MB的SDRAM以保證操作系統與應用程序的流暢運行;網絡接口確保了與其他數據采集與控制系統以及與高層管理系統的高速通訊;大屏幕LCD與鍵盤用于人機交互。為了適應惡劣的工業環境與系統小尺寸要求,我們使用CF卡作為永久存儲設備。數據采集子系統與監控子系統之間通過PC/104總線進行堆棧式連接,從而構建一個功能強大并滿足低功耗、小尺寸的嵌入式數據采集與控制系統。
1.2 系統軟件設計
系統的軟件開發分為兩大模塊:(1)Windows CE操作系統在數據采集與控制系統硬件平臺上的移植,包括系統鏡像的裁剪定制、外設驅動的編寫加載和引導啟動程序bootloader的實現;(2)Windows CE下數據采集與控制系統應用程序的開發,包括板卡參數配置程序、數據采集程序、控制程序、人機交互界面程序。
2 嵌入式數據采集與控制系統關鍵技術研究與實現
由于嵌入式數據采集與控制系統的硬件平臺設計技術已經較為成熟,以下將重點研究基于Windows CE 5.0的嵌入式軟件開發技術。
2.1 軟件系統開發流程
基于Windows CE的軟件開發流程比較統一,即使用Platform Builder定制出針對特定硬件平臺的操作系統鏡像文件NK.bin, 使用evc或vs.net開發用戶應用程序。驅動程序和操作系統引導啟動程序的開發也是其中重要的組成部分。
對于本數據采集與控制系統來說,具體開發流程為:首先開發系統外設驅動(包括網卡,A/D,D/A板卡),在Platform Builder中修改系統源代碼和配置文件(包括*.bib,*.reg),裁剪數據采集與控制系統所需的組件,并把外設驅動打包到鏡像中,通過反復修改調試生成操作系統鏡像文件NK.bin,導出其對應的SDK用于應用程序的開發。而后實現NK.bin在數據采集與控制系統硬件平臺的引導加載,并在數據采集與控制系統硬件平臺和開發主機間建立以太網交叉調試通道,將開發好的應用程序下載到目標平臺的CF卡上,從而實現整個嵌入式數據采集與控制軟件平臺的開發。
2.2 外設驅動的開發與移植
2.2.1 網卡驅動移植
由于硬件系統中采用了Intel82559er的網卡,必須將網卡驅動打包到操作系統內核里。具體步驟簡單描述如下:
(1)從INTEL網站下載Intel8255xer for wince 5.0的驅動文件e100ce.dll,并將該文件拷貝到所定制平臺的release目錄下。
(2)參考所下載驅動的config.bib,在系統配置文件的memory段中添加語句:EPKTBUF 801DC000 00020000 RESERVED,用來在內存中為網卡保留空間。
(3)在project.reg中添加驅動的相關注冊表項,對網卡驅動進行加載聲明,并設置網絡相關參數。
(4)在project.bib的module部分里添加打包驅動字段:
E100CE.dll $(_FLATRELEASEDIR)\E100CE.dll NK SH,用以指導Windows CE定制程序在系統編譯的sysgen階段將網卡驅動打包到定制操作系統的內核鏡像里。
2.2.2 數據I/O板卡驅動開發與移植
Windows CE的驅動程序按照接口方式的不同可以分成兩類:本地驅動和流式驅動。所謂流式驅動,即對應用程序提供流式接口函數的驅動。它把外設抽象成一個特殊的文件,應用程序使用文件API函數(如CreateFile、DeviceIoControl)對設備進行訪問,操作系統接受API后調用系統進程FileSys.exe,進而轉到device.exe,由此進程調用流接口函數來操作硬件。數據采集與控制系統中的A/D、D/A板卡即采用這種流式驅動的方式進行開發。
Windows CE流式驅動的開發主要包括以下幾部分:(1)編寫一個DLL文件實現流接口函數;(2)編寫DLL的導出函數文件*.DEF,以便應用程序調用流接口函數;(3)為驅動程序寫入注冊表項,以便系統啟動后識別和管理驅動;(4)修改*.bib文件,把驅動打包到操作系統鏡像中。在開發A/D、D/A板卡驅動時,我們需要在DLL中實現XXX_Init、XXX_Deinit、XXX_Open、XXX_Close、XXX_Read、XXX_Write等流接口函數,以完成板卡的初始化、數據讀寫等。
完成驅動對應的DLL和DEF文件后,我們還需要把驅動程序加載到操作系統中,這樣應用程序才能調用驅動。Windows CE下驅動的加載有兩種途徑:系統啟動時加載或者在應用程序中調用ActivateDeviceEx()函數加載。本系統采用啟動時加載的方式。具體實現方法是在系統配置文件project.reg中添加驅動的注冊表項,基本形式如下:
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\**]
"Dll"="**.dll" //DLL文件名
"Prefix"="DRV" //代表設備的文件名前綴,流接口函數即用此前綴
"Order"=dword:0 //設備驅動啟動順序
流式驅動在定制操作系統中的打包類似于網卡驅動,通過拷貝dll文件到定制系統平臺release目錄和修改project.bib實現。
2.3 在CF卡上實現基于Hive的注冊表
由于數據采集與控制系統是一個無電池的嵌入式系統,為了確保用戶配置信息在系統掉電或重起后不丟失,我們采用基于Hive的注冊表來保存數據。要做到這一點,除了在系統定制時加入HIVE-based Registry組件外,還需要修改注冊表配置文件platform.reg。
要實現Hive的關鍵在于把存儲注冊表的設備驅動和文件系統驅動相關的注冊表信息加入到引導hive區域內,即; HIVE BOOT SECTION和;END HIVE BOOT SECTION關鍵字之間。在CF卡上實現掉電保存注冊表文件,需要在配置文件中添加以下四部分:
(1)[HKEY_LOCAL_MACHINE\init\BootVars]
"SYSTEMHIVE"="Documents and Settings\\system.hv" //注冊表名稱"PROFILEDIR"="Documents and Settings" //注冊表保存的位置"StartDevMgr"=dword:1 //啟動設備管理器"Registryflags"=dword:1 //自動刷新保存注冊表
(2) CF卡存儲驅動的注冊表項 [HKEY_LOCAL_MACHINE\Drivers\PCMCIA\ATADisk]和[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\HDProfile]下的字段
(3)文件系統的注冊表項 [HKEY_LOCAL_MACHINE\System\StorageManager\FATFS]
(4)在Windows CE 5.0 中與之前版本的區別在于[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\HDProfile]下需要添加一行:"MountAsBootable"=dword:1,表示引導hive存儲在此設備上。
2.4 數據采集與控制系統專用操作系統鏡像的定制
在完成系統外設模塊驅動的移植后,我們可以使用微軟提供的集成開發環境Platform Builder來定制一個專用于數據采集與控制的操作系統鏡像。針對所采用的硬件平臺定制操作系統的關鍵步驟如下:
(1)選擇 AMD Geode: X86的BSP(板卡支持包)。
(2)根據系統需求,選擇industrial controller作為基本模版。
(3)在工作區的Catalog中添加各種組件(如CF卡驅動相關組件: FAT文件系統,ATAPI PCI/IDE以及CF Card Storage;網絡通訊所需組件Network User Interface;命令窗口程序Console Window;交叉編譯下載程序所需的Platform Manager;應用程序開發所需的MFC支持等)。
(4)進行各種定制所需的系統變量設置,修改配置文件project.reg,project.bib等,把驅動程序打包到操作系統鏡像里。
完成系統組件定制與配置文件的修改后,可以編譯源代碼,生成操作系統映像文件NK.bin。
2.5 引導啟動程序Bootloader的實現
Bootloader是在操作系統內核運行前用于初始化基本的硬件設備(如CPU,SDRAM,串口)、引導并啟動操作系統的一段程序,是嵌入式操作系統運行的前提。在X86平臺下,有三種Bootloader: x86 ROM BootLoader,x86 BIOS BootLoader和MSDOS+Loadcepc。
為方便起見,本系統采用MS-DOS+loadcepc的方式從CF卡啟動并加載操作系統鏡像。
具體實現過程:
(1) 用PB中的工具websetup.exe以及cepcboot.144做一個MS-DOS啟動軟盤。
(2) 用DOS下的fdisk工具為CF卡建立FAT16格式的主分區。
(3) 將CF卡格式化, 創建系統引導文件,拷貝軟盤下所有文件以及loadcepc.exe至CF卡中。
(4)根據需要修改文件,如autoexec.bat,config.sys等,設置啟動默認選項和啟動時間。
在完成了定制的操作系統到硬件平臺上的移植后,我們可以從Platform Builder中導出定制平臺的SDK,并建立以太網交叉調試環境,使用Embedded VC++(evc)開發數據采集和控制程序。這個過程類似于桌面應用程序開發,不再贅述。