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

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

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