您現(xiàn)在的位置:
中國傳動網(wǎng)
>
技術(shù)頻道
>
技術(shù)百科
>
COM組件技術(shù)在現(xiàn)場總線控制系統(tǒng)組態(tài)軟件中的應(yīng)用
時間:2006-11-07 14:16:00來源:jiangf
2 組態(tài)軟件的功能
現(xiàn)場總線控制系統(tǒng)組態(tài)軟件是一套基于Windows 98和Windows 2000平臺(或更高版本)、用于快速構(gòu)造和生成上位機監(jiān)控系統(tǒng)的組成軟件,它提供了從數(shù)據(jù)采集到數(shù)據(jù)處理、遠程控制、報警處理、報表輸出等實際工程問題的完整解決方案。它使用COM服務(wù)器提供的接口與適配器進行數(shù)據(jù)交換,是COM客戶機端的程序。
3 COM組件技術(shù)
組件是完成一定功能的軟件塊,可以被其它程序使用,而且容易替換。為了使每個人編寫的組件具有可移植性,必須建立一個標準,保證其兼容性和可互換性。COM正是這樣一種標準,遵循COM規(guī)則就可以建立能夠相互交換數(shù)據(jù)的組件。
在現(xiàn)場總線控制系統(tǒng)中,COM組件服務(wù)器負責(zé)組態(tài)軟件等上位機軟件與智能適配器之間的數(shù)據(jù)傳輸,因為適配器通過CAN現(xiàn)場總線與測控模塊連接,所以對適配器的操作就是對模塊的監(jiān)測與控制。
COM服務(wù)器提供的接口中有適配器初始化、模塊檢查、向模塊發(fā)送數(shù)據(jù)及讀取模塊數(shù)據(jù)等函數(shù)。下面著重介紹數(shù)據(jù)發(fā)送接收模式及如何編寫這4個有代表性的函數(shù)。
3.1 適配器初始化函數(shù)
只有適配器初始化成功后,才能進行其它操作。由于在Windows保護模式下不能直接訪問適配器,COM程序需要調(diào)用VxD程序?qū)⒋鎯?yīng)的物理地址轉(zhuǎn)換成線性地址指針lpBaseAddress,這樣對適配器的操作就轉(zhuǎn)換成對以該指針為首地址的數(shù)組的操作。向這個數(shù)組的0x3F0、0x3F1和0x3F8單元分別寫入上閏機節(jié)點號以及適配器與模塊間的通信波特率和適配器程序規(guī)定的命令字0xC6(表示適配器初始化),等待幾十ms后,如果適配器接收到上面的數(shù)據(jù)并做出適當?shù)姆磻?yīng),它會將0x3F8單元清零,這就表示初始化適配器成功;如果該單元不為零,則初始化失敗。
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]的命令字進行相應(yīng)處理;如果是0xB0,則按照接收到的數(shù)據(jù)配置模塊工作狀態(tài);如果是0xA5,則將此時的測量值送到適配器上,由COM程序讀出。
3.3 模塊檢查函數(shù)
適配器初始化成功后,還要檢查適配器與下面的測控模塊是否連接好,或者是否存在組態(tài)軟件要組態(tài)的模塊,也就是要進行模塊檢查操作。模塊檢查的命令字是0xAD,向數(shù)組的1~5單元分別寫入上位機節(jié)點號、模塊節(jié)點號、保留字、發(fā)送數(shù)據(jù)長度和模塊檢查命令字0xAD,向0x3F8單元寫入0xC7(表示向適配器寫入數(shù)據(jù)),等待幾十ms后,如果0x3F8單元清零而且0x100單元被置為0xAA,表示該模塊存在而且可以通信;否則,表明該模塊不存在或者硬件上有問題。
3.4 寫適配器數(shù)據(jù)函數(shù)
在確定了網(wǎng)絡(luò)中存在哪些可通信的模塊之后,就可以向它們發(fā)送數(shù)據(jù)并進行配置。為了實現(xiàn)向適配器發(fā)送數(shù)據(jù),總共編寫了4個函數(shù)、SendData([in]BYTE SendBuf[256])、SendFinish([in]BOOL bFinish)、FinishQuery([out]BOOL*bFinish)和ReceiveResult([out]BOOL *bSendFinish)。SendData負責(zé)把一個模塊所需要發(fā)送的數(shù)據(jù)以數(shù)組的形式放到服務(wù)器的一個二維數(shù)組(Room[64][256])里,每個模塊的數(shù)據(jù)作為一行。由于向適配器發(fā)送數(shù)據(jù)后,要等待一段時間判斷模塊是否接收成功,所以SendFinish中開啟輔助線程來發(fā)送數(shù)據(jù)并等待結(jié)果,這相可不占用COM主程序的時間,使客戶調(diào)用接口函數(shù)后能立即返回,執(zhí)行其它操作。FinishQuery查詢數(shù)據(jù)發(fā)送是否結(jié)束。ReceiveResult彈出一個非模式對話框,顯示哪些模塊接收到數(shù)據(jù),哪些沒有。
3.5 讀適配器數(shù)據(jù)函數(shù)
除了向適配器發(fā)送數(shù)據(jù),還可以從適配器上讀取模塊傳上來的數(shù)據(jù)。讀取數(shù)據(jù)的命令字是0xA5。實現(xiàn)該任務(wù)的函數(shù)是GetPV([in]BYTE bDesNode,[out]float value[8]),第一個參數(shù)是模塊節(jié)點號,第二個參數(shù)是返回的測量值數(shù)組。
這里,COM是用ATL編寫的本地服務(wù)器,COM對象的線程是套間線程。接口定義了6個函數(shù),COM程序流程圖如圖2所示。
COM對象接口的函數(shù)聲明以及適配器初始化的程序如下:
COM接口定義:
interface INCardWork :IDispatch
{
[id(1),helpstring("適配器初始化函數(shù),返回值為是否成功")]
HRESULT NcardInit([in]BYTE
bSrcNode,[in]BYTE bIntrAdd,[in]BYTE bRate,[in]long bSegmantAdd,[out]BOOL *flag);
[id(2),helpstring("將客戶端傳送的數(shù)組賦值給Room[][]")]
HRESULT SendData[in]BYTE SendBuf[256]);
[id(3),helpstring("啟動多線程")]
HRESULT SendFinish ([in]BOOL bFinish);
[id(4),helpstring("此函數(shù)返回值表示數(shù)據(jù)是否已向下位機發(fā)送完畢,同時可顯示哪些模塊未被配置,通常在此函數(shù)前先用FinishQuery([out]BOOL*bFinish)查詢發(fā)送是否完畢")]
HRESULT ReceiveResult([out]BOOL *bSendFinish);
[id(5)],helpstring("此函數(shù)返回值表示數(shù)據(jù)是否已向下位機發(fā)送完畢,“真”表示發(fā)送完畢")]
HRESULT FinishQuery([out]BOOL *bFinish);
[id(6),helpstring("網(wǎng)絡(luò)檢查,用來在發(fā)送數(shù)據(jù)前檢測是否有該節(jié)點存在")]
HRESULT NetCheck[in]BYTE sour,[in]BYTE des,[in]BYTE type,[out]BOOL *flag);
[id(7),helpstring("讀取模塊的測量值")]
HRESULT GetPV([iv]BYTE bDesNode,[out]float value[256]);
}
適配器初始化函數(shù):
#include 標簽:
傳動網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來源:傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為傳動網(wǎng)(www.wangxinlc.cn)獨家所有。如需轉(zhuǎn)載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個人轉(zhuǎn)載使用時須注明來源“傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請保留稿件來源及作者,禁止擅自篡改,違者自負版權(quán)法律責(zé)任。
產(chǎn)品新聞
更多>2025-11-07
2025-10-31
2025-10-22
2025-10-17
2025-10-11
2025-10-09