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

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

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