COM組件技術在現(xiàn)場總線控制系統(tǒng)組態(tài)軟件中的應用 2011-06-08 19:36:21來源:互聯(lián)網(wǎng)

COM(Component Object Model)組件技術是構造二進制兼容軟件的規(guī)范,通過它可以建立能夠相互傳輸數(shù)據(jù)的組件,其服務器-客戶機結構非常適合工控軟件應用程序的開發(fā)。由于工控軟件不僅包括PC機上的HMI(人-機界面)程序,還包括與各種基于ISA或PCI總線的數(shù)據(jù)采集卡進行數(shù)據(jù)交換的程序,這部分程序對開人員的硬件水平要求較高,而且開發(fā)難度較大,與HMI程序是相互獨立的,所以可以把工控軟件分成兩部分,即把HMI程序作為客戶機端程序,把與硬件進行數(shù)據(jù)交換的程序作為服務器端程序?;谶@種思想,本文將服務器-客戶機結構應用到現(xiàn)場總線控制系統(tǒng)的組態(tài)軟件中,著重介紹客戶機和服務器的功能及實現(xiàn)。首先介紹現(xiàn)場總線控制系統(tǒng)的組成。

1 系統(tǒng)組成

現(xiàn)場總線控制系統(tǒng)主要由PC機、ISA或PCI總線智能適配器、智能測控模塊、組態(tài)軟件、HMI軟件、COM服務器、用戶軟件等構成。

現(xiàn)場總線系統(tǒng)中所有信息的傳遞都是雙向的,COM服務器介于智能適配器和上位機軟件之間,負責完成數(shù)據(jù)的傳輸。上位機軟件相當于客戶機端應用軟件,它使用COM服務器提供的接口來操作適配器,對適配器進行初始化及向特定單元寫入和讀出數(shù)據(jù)。

由于在Windows保護模式下不能直接訪問存儲器,所以需要編寫VxD驅動程序,將物理地址轉換成線性地址,然后COM就可以象使用DLL一樣調(diào)用VxD的函數(shù),完成對ISA或PCI總線智能適配器的操作。

從測控模塊到上位機軟件自下而下的數(shù)據(jù)傳輸完成了用戶對測控模塊的監(jiān)測;而上層軟件通過COM將數(shù)據(jù)送往適配器,再由適配器送往測控模塊,實現(xiàn)了用戶對測控模塊工作參數(shù)的設置及工作狀態(tài)的管理。圖1給出了系統(tǒng)軟件結構框圖。

2 組態(tài)軟件的功能

現(xiàn)場總線控制系統(tǒng)組態(tài)軟件是一套基于Windows 98和Windows 2000平臺(或更高版本)、用于快速構造和生成上位機監(jiān)控系統(tǒng)的組成軟件,它提供了從數(shù)據(jù)采集到數(shù)據(jù)處理、遠程控制、報警處理、報表輸出等實際工程問題的完整解決方案。它使用COM服務器提供的接口與適配器進行數(shù)據(jù)交換,是COM客戶機端的程序。

3 COM組件技術

組件是完成一定功能的軟件塊,可以被其它程序使用,而且容易替換。為了使每個人編寫的組件具有可移植性,必須建立一個標準,保證其兼容性和可互換性。COM正是這樣一種標準,遵循COM規(guī)則就可以建立能夠相互交換數(shù)據(jù)的組件。

在現(xiàn)場總線控制系統(tǒng)中,COM組件服務器負責組態(tài)軟件等上位機軟件與智能適配器之間的數(shù)據(jù)傳輸,因為適配器通過CAN現(xiàn)場總線與測控模塊連接,所以對適配器的操作就是對模塊的監(jiān)測與控制。

COM服務器提供的接口中有適配器初始化、模塊檢查、向模塊發(fā)送數(shù)據(jù)及讀取模塊數(shù)據(jù)等函數(shù)。下面著重介紹數(shù)據(jù)發(fā)送接收模式及如何編寫這4個有代表性的函數(shù)。

3.1 適配器初始化函數(shù)

只有適配器初始化成功后,才能進行其它操作。由于在Windows保護模式下不能直接訪問適配器,COM程序需要調(diào)用VxD程序將存儲對應的物理地址轉換成線性地址指針lpBaseAddress,這樣對適配器的操作就轉換成對以該指針為首地址的數(shù)組的操作。向這個數(shù)組的0x3F0、0x3F1和0x3F8單元分別寫入上閏機節(jié)點號以及適配器與模塊間的通信波特率和適配器程序規(guī)定的命令字0xC6(表示適配器初始化),等待幾十ms后,如果適配器接收到上面的數(shù)據(jù)并做出適當?shù)姆磻?,它會?x3F8單元清零,這就表示初始化適配器成功;如果該單元不為零,則初始化失敗。

3.2 數(shù)據(jù)傳輸格式

適配器初始化成功后,就可以同它交換數(shù)據(jù)了。下而簡單說明一下發(fā)送數(shù)據(jù)和接收數(shù)據(jù)的格式。

適配器初始化得到的線性地址指針lpBaseAddress的1~5單元分別存放上位機節(jié)點號、模塊節(jié)點號、保留字、發(fā)送或接收字節(jié)長度及模塊操作的命令字。lpBaseAddress[6]~lpBaseAddress[256]存放所要發(fā)送的數(shù)據(jù);從lpBaseAddress[0x106]單元開始存放接收到的數(shù)據(jù),lpBaseAddress[0x3F8]存放操作適配器的命令字,適配器根據(jù)這個單元內(nèi)容進行處理,如果是0xC6,則初始化適配器和模塊上的CAN控制器;如果是0xC7,則將數(shù)組里的數(shù)送給模塊上的E2PROM,模塊收到數(shù)據(jù)后根據(jù)lpBaseAddress[5]的命令字進行相應處理;