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

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

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