嵌入式驅動程序是運行在嵌入式操作系統(tǒng)平臺上驅動程序。嵌入式操作系統(tǒng)如WinCE,其運行環(huán)境和Win2000在硬件和和軟件方面都有很大不同,嵌入式操作系統(tǒng)主要運行在單板機上,嵌入式驅動是操作單板機的串口,網(wǎng)口等資源的程序。
一、嵌入式驅動的運行環(huán)境
Mcgs嵌入式驅動程序是運行在WinCE操作系統(tǒng)平臺上。由嵌入式Mcgs軟件調用。 在從上位機下載工程到嵌入機的同時,驅動程序(一般為*E.drv文件)也被下載,嵌入機中運行的Mcgs調用驅動程序,完成對數(shù)據(jù)的采集。
二、嵌入式驅動的編譯過程
- 使用VC6.0編譯能在組態(tài)環(huán)境下運行的驅動程序,文件名為*.DLL。
- 編譯通過,調試成功后用_unicode重新編譯,文件名為*U.DRV。
- 用模擬環(huán)境調試運行是否正常。
- 用ECV4.0建立工程,加入VC6.0中的所有文件,重新編譯,文件名為*E.DRV。
編譯過程中的注意事項:
- 調試程序時用McgsSetE調試版,發(fā)行版本用Mcgs發(fā)行版,版本必須一致。
- 在調試unicode版時,經常會出現(xiàn)字符串編譯錯誤,解決辦法是用_T(“”)括起來。
- 在調試unicode版和EVC4.0編譯時,有的函數(shù)不能使用,出現(xiàn)這種情況大多因為一些函數(shù)在Win2000和WinCE下不同而造成的,特別是一些函數(shù)WinCE下是不支持的。遇到這種問題,可以參考MSDN,選用適當?shù)暮瘮?shù)。
- 編碼時要注意編碼規(guī)范,可參閱編碼規(guī)則。
三、嵌入式驅動的接口函數(shù)功能。
驅動中對外接口函數(shù)共有14個,編制驅動主要是編制各個函數(shù),函數(shù)由主程序調用,不同的驅動在函數(shù)內部處理也不同。
- SvrDoHelp
- SvrGetProperty
- SvrEnumPropertyValue
- SvrSetProperty
- SvrEditProperty
- SvrEditCustomProperty
- SvrInitDevSet
- SvrInitDevRun
- SvrCollectDevData
- SvrDevIOCtrl
- SvrExitDevRun
- SvrGetChannel
- SvrDoHelp
- SvrGetDevInfo
部分函數(shù)的功能:
- SvrGetProperty()函數(shù)功能,設置設備屬性列表,如圖所示:

函數(shù)主要是設置屬性頁中最小采樣周期以后的設備屬性名(strPropertyName[])、設備屬性名(strPropertyValue[]),和是否有下拉框(bPropertyHasValueArray)。設置下拉菜單用SvrEnumPropertyValue()函數(shù)。
- SvrSetProperty()函數(shù)功能:設置設備屬性列表,主程序在調通道連接和設備調試屬性頁之前運行,系統(tǒng)獲取基本屬性頁中的數(shù)據(jù)。在SvrGetProperty()中設置的通道(每一行),必須保存。
- SvrCollectDevData()函數(shù)功能:采集數(shù)據(jù)顯示到各個通道中,或者讀取通道中的值對設備進行控制。
- SvrGetChannel()函數(shù)功能:設置通道個數(shù)。數(shù)組strChannelName中設置名稱,數(shù)組tyChannelType中設置類型。VSINGLE為只讀數(shù)值型,-VSINGLE為可寫數(shù)值型,VSTRING為只讀字符型,-VSTRING為可寫字符型。如圖,畫面上顯示11個通道。

四、嵌入式數(shù)據(jù)保存
- MCGS_DATA結構由MCGS負責分配,其中有許多系統(tǒng)信息,包括父設備類型(m_ParentType)等。
- MCGS_DATA結構中的void* m_pDevData指向DEV_DATA結構體,DEV_DATA結構體中保存設備信息用的自定義結構,設備編寫者在設備初始化中分配,在設備退出時釋放,也就是主屬性頁中添加的變量。
五、編輯客戶自定義屬性
當調內部屬性頁函數(shù)SvrEditCustomProperty()時,情況比較復雜。由于是在DLL中調用對話框,需要裝載資源,而對話框中的數(shù)據(jù)要讓系統(tǒng)保存需要將數(shù)據(jù)流化到系統(tǒng)中,這部分可以參照PLC驅動程序。
六、CParentDevHelper是一個幫助類,其中集成了許多公用函數(shù),比如對串口的操作Svr_WriteComm(),Svr_ReadComm()等。
七、CownerArchive是一個流化類,用于流化數(shù)據(jù)。
|