COM組件技術(shù)在現場(chǎng)總線(xiàn)控制系統組態(tài)軟件中的應用
摘要:簡(jiǎn)要介紹現場(chǎng)總線(xiàn)控制系統的組成以及組成軟件的功能,重點(diǎn)講述了COM組件技術(shù)在組態(tài)軟件中的應用及VxD驅動(dòng)程序的開(kāi)發(fā)。
本文引用地址:http://dyxdggzs.com/article/161736.htm關(guān)鍵詞:現場(chǎng)總線(xiàn) 組態(tài)軟件 COM VxD
COM(Component Object Model)組件技術(shù)是構造二進(jìn)制兼容軟件的規范,通過(guò)它可以建立能夠相互傳輸數據的組件,其服務(wù)器-客戶(hù)機結構非常適合工控軟件應用程序的開(kāi)發(fā)。由于工控軟件不僅包括PC機上的HMI(人-機界面)程序,還包括與各種基于ISA或PCI總線(xiàn)的數據采集卡進(jìn)行數據交換的程序,這部分程序對開(kāi)人員的硬件水平要求較高,而且開(kāi)發(fā)難度較大,與HMI程序是相互獨立的,所以可以把工控軟件分成兩部分,即把HMI程序作為客戶(hù)機端程序,把與硬件進(jìn)行數據交換的程序作為服務(wù)器端程序?;谶@種思想,本文將服務(wù)器-客戶(hù)機結構應用到現場(chǎng)總線(xiàn)控制系統的組態(tài)軟件中,著(zhù)重介紹客戶(hù)機和服務(wù)器的功能及實(shí)現。首先介紹現場(chǎng)總線(xiàn)控制系統的組成。
1 系統組成
現場(chǎng)總線(xiàn)控制系統主要由PC機、ISA或PCI總線(xiàn)智能適配器、智能測控模塊、組態(tài)軟件、HMI軟件、COM服務(wù)器、用戶(hù)軟件等構成。
現場(chǎng)總線(xiàn)系統中所有信息的傳遞都是雙向的,COM服務(wù)器介于智能適配器和上位機軟件之間,負責完成數據的傳輸。上位機軟件相當于客戶(hù)機端應用軟件,它使用COM服務(wù)器提供的接口來(lái)操作適配器,對適配器進(jìn)行初始化及向特定單元寫(xiě)入和讀出數據。
由于在Windows保護模式下不能直接訪(fǎng)問(wèn)存儲器,所以需要編寫(xiě)VxD驅動(dòng)程序,將物理地址轉換成線(xiàn)性地址,然后COM就可以象使用DLL一樣調用VxD的函數,完成對ISA或PCI總線(xiàn)智能適配器的操作。
從測控模塊到上位機軟件自下而下的數據傳輸完成了用戶(hù)對測控模塊的監測;而上層軟件通過(guò)COM將數據送往適配器,再由適配器送往測控模塊,實(shí)現了用戶(hù)對測控模塊工作參數的設置及工作狀態(tài)的管理。圖1給出了系統軟件結構框圖。
2 組態(tài)軟件的功能
現場(chǎng)總線(xiàn)控制系統組態(tài)軟件是一套基于Windows 98和Windows 2000平臺(或更高版本)、用于快速構造和生成上位機監控系統的組成軟件,它提供了從數據采集到數據處理、遠程控制、報警處理、報表輸出等實(shí)際工程問(wèn)題的完整解決方案。它使用COM服務(wù)器提供的接口與適配器進(jìn)行數據交換,是COM客戶(hù)機端的程序。
3 COM組件技術(shù)
組件是完成一定功能的軟件塊,可以被其它程序使用,而且容易替換。為了使每個(gè)人編寫(xiě)的組件具有可移植性,必須建立一個(gè)標準,保證其兼容性和可互換性。COM正是這樣一種標準,遵循COM規則就可以建立能夠相互交換數據的組件。
在現場(chǎng)總線(xiàn)控制系統中,COM組件服務(wù)器負責組態(tài)軟件等上位機軟件與智能適配器之間的數據傳輸,因為適配器通過(guò)CAN現場(chǎng)總線(xiàn)與測控模塊連接,所以對適配器的操作就是對模塊的監測與控制。
COM服務(wù)器提供的接口中有適配器初始化、模塊檢查、向模塊發(fā)送數據及讀取模塊數據等函數。下面著(zhù)重介紹數據發(fā)送接收模式及如何編寫(xiě)這4個(gè)有代表性的函數。
3.1 適配器初始化函數
只有適配器初始化成功后,才能進(jìn)行其它操作。由于在Windows保護模式下不能直接訪(fǎng)問(wèn)適配器,COM程序需要調用VxD程序將存儲對應的物理地址轉換成線(xiàn)性地址指針lpBaseAddress,這樣對適配器的操作就轉換成對以該指針為首地址的數組的操作。向這個(gè)數組的0x3F0、0x3F1和0x3F8單元分別寫(xiě)入上閏機節點(diǎn)號以及適配器與模塊間的通信波特率和適配器程序規定的命令字0xC6(表示適配器初始化),等待幾十ms后,如果適配器接收到上面的數據并做出適當的反應,它會(huì )將0x3F8單元清零,這就表示初始化適配器成功;如果該單元不為零,則初始化失敗。
3.2 數據傳輸格式
適配器初始化成功后,就可以同它交換數據了。下而簡(jiǎn)單說(shuō)明一下發(fā)送數據和接收數據的格式。
適配器初始化得到的線(xiàn)性地址指針lpBaseAddress的1~5單元分別存放上位機節點(diǎn)號、模塊節點(diǎn)號、保留字、發(fā)送或接收字節長(cháng)度及模塊操作的命令字。lpBaseAddress[6]~lpBaseAddress[256]存放所要發(fā)送的數據;從lpBaseAddress[0x106]單元開(kāi)始存放接收到的數據,lpBaseAddress[0x3F8]存放操作適配器的命令字,適配器根據這個(gè)單元內容進(jìn)行處理,如果是0xC6,則初始化適配器和模塊上的CAN控制器;如果是0xC7,則將數組里的數送給模塊上的E2PROM,模塊收到數據后根據lpBaseAddress[5]的命令字進(jìn)行相應處理;如果是0xB0,則按照接收到的數據配置模塊工作狀態(tài);如果是0xA5,則將此時(shí)的測量值送到適配器上,由COM程序讀出。
3.3 模塊檢查函數
適配器初始化成功后,還要檢查適配器與下面的測控模塊是否連接好,或者是否存在組態(tài)軟件要組態(tài)的模塊,也就是要進(jìn)行模塊檢查操作。模塊檢查的命令字是0xAD,向數組的1~5單元分別寫(xiě)入上位機節點(diǎn)號、模塊節點(diǎn)號、保留字、發(fā)送數據長(cháng)度和模塊檢查命令字0xAD,向0x3F8單元寫(xiě)入0xC7(表示向適配器寫(xiě)入數據),等待幾十ms后,如果0x3F8單元清零而且0x100單元被置為0xAA,表示該模塊存在而且可以通信;否則,表明該模塊不存在或者硬件上有問(wèn)題。
3.4 寫(xiě)適配器數據函數
在確定了網(wǎng)絡(luò )中存在哪些可通信的模塊之后,就可以向它們發(fā)送數據并進(jìn)行配置。為了實(shí)現向適配器發(fā)送數據,總共編寫(xiě)了4個(gè)函數、SendData([in]BYTE SendBuf[256])、SendFinish([in]BOOL bFinish)、FinishQuery([out]BOOL*bFinish)和ReceiveResult([out]BOOL *bSendFinish)。SendData負責把一個(gè)模塊所需要發(fā)送的數據以數組的形式放到服務(wù)器的一個(gè)二維數組(Room[64][256])里,每個(gè)模塊的數據作為一行。由于向適配器發(fā)送數據后,要等待一段時(shí)間判斷模塊是否接收成功,所以SendFinish中開(kāi)啟輔助線(xiàn)程來(lái)發(fā)送數據并等待結果,這相可不占用COM主程序的時(shí)間,使客戶(hù)調用接口函數后能立即返回,執行其它操作。FinishQuery查詢(xún)數據發(fā)送是否結束。ReceiveResult彈出一個(gè)非模式對話(huà)框,顯示哪些模塊接收到數據,哪些沒(méi)有。
3.5 讀適配器數據函數
除了向適配器發(fā)送數據,還可以從適配器上讀取模塊傳上來(lái)的數據。讀取數據的命令字是0xA5。實(shí)現該任務(wù)的函數是GetPV([in]BYTE bDesNode,[out]float value[8]),第一個(gè)參數是模塊節點(diǎn)號,第二個(gè)參數是返回的測量值數組。
這里,COM是用ATL編寫(xiě)的本地服務(wù)器,COM對象的線(xiàn)程是套間線(xiàn)程。接口定義了6個(gè)函數,COM程序流程圖如圖2所示。
COM對象接口的函數聲明以及適配器初始化的程序如下:
COM接口定義:
interface INCardWork :IDispatch
{
[id(1),helpstring(適配器初始化函數,返回值為是否成功)]
HRESULT NcardInit([in]BYTE
bSrcNode,[in]BYTE bIntrAdd,[in]BYTE bRate,[in]long bSegmantAdd,[out]BOOL *flag);
[id(2),helpstring(將客戶(hù)端傳送的數組賦值給Room[][])]
評論