iFix軟件EDA HDA編程接口的開發(fā)應用
關鍵詞:iFix;實時數(shù)據(jù)庫訪問接口EDA;歷史數(shù)據(jù)訪問接口HAD
The Development and Application of EDA and HDA Programming Interface for iFix
ABSTRACT: The SCADA software iFix from GE has an open software framework. The flexible and open real-time and historical database programming interface EDA and HDA are widely used in project development. This paper introduces the application of EDA and HDA in VB, VC, Delphi programming environment in detail.
Key Words: iFix, Easy data access interface EDA, Historical data access interface HDA
前言
GE公司的iFix作為工業(yè)控制領域內(nèi)穩(wěn)定可靠優(yōu)秀的SCADA軟件,具有可靠性高,穩(wěn)定性好,功能強大的特點,尤其是其iFix數(shù)據(jù)訪問開發(fā)工具包(iFix DataBase Access Toolkit)允許應用程序編程人員訪問iFix的實時和歷史數(shù)據(jù),該工具包主要包括了實時數(shù)據(jù)訪問接口(East DataBase Access-EDA),歷史數(shù)據(jù)訪問接口(Historical Data Access-HDA)以及創(chuàng)建應用程序所需用到的其他函數(shù)(Helper Function)部分的功能。開發(fā)工具包中所提供的編程接口函數(shù)說明是針對于Visual Basic和標準的C,C++語言,而且并不提供搭建應用程序的具體細節(jié)。本文根據(jù)實際應用開發(fā)經(jīng)驗,給出了如何在Visual Basic, Visual C++和Delphi編程環(huán)境下編寫應用程序的具體步驟。
1.Visual Basic編程環(huán)境下的應用
在創(chuàng)建的VB應用程序項目中應該首先添加2個模塊(Module),這2個模塊都是由iFix數(shù)據(jù)訪問開發(fā)工具包提供的,其中一個模塊是用于EDA編程接口使用的vdba.bas,另外一個模塊是用于HDA編程接口使用的fixtools.bas,在vdba.bas模塊中主要是基于VB格式的EDA接口函數(shù),數(shù)據(jù)結構,常數(shù)的聲明,而在fixtools.bas模塊中主要是實現(xiàn)對fixtools.dll動態(tài)鏈接庫的聲明,基于VB格式的HDA接口函數(shù),數(shù)據(jù)結構,常數(shù)的聲明,此外還提供了其他函數(shù)聲明,如iFix軟件的安裝路徑,iFix是否正在運行,即上面提到的Helper Function聲明。編程人員也可以根據(jù)自己的需要按照這兩個模塊的聲明建立符合自己需要的VB模塊。在添加了編程接口的聲明模塊后,就可以在VB應用程序中調(diào)用這些函數(shù)了,如下面就是一個在VB中讀取iFix實時數(shù)據(jù)的程序段:
Private Sub EDAReadData()
…….
G1 = eda_define_group(1, 0)
‘根據(jù)讀取的iFix標簽名(TagName)數(shù)組,定義需要讀取的一組標簽的實時值“F_CV”
For i = 0 To Tagnum
TagNtf(i) = eda_define_ntf(G1, Nodename, TagName(i), "F_CV", 0)
Next i
Call eda_lookup(G1)
Call eda_wait(G1)
Call eda_read(G1)
Call eda_wait(G1)
For i = 0 To Tagnum
‘將讀取到的每個標簽的實時數(shù)據(jù)讀出賦值給變量
eda_err = eda_get_float(G1, TagNtf(i), fvalue)
DataValue(i) = Format(fvalue, "###0.0#")
Next i
eda_delete_group(G1)
……
End sub
執(zhí)行上述的子程序后,定義在TagName數(shù)組中的iFix實時數(shù)據(jù)庫中的標簽名的實時數(shù)據(jù)將被讀出,當然,EDA編程接口也支持向iFix的實時數(shù)據(jù)庫寫入值。
2.在Visual C++編程環(huán)境下的應用
iFix的應用編程開發(fā)包中提供的是標準的C語言的函數(shù)調(diào)用范例,為了讓EDA,HDA編程接口可以在Visual C++集成開發(fā)環(huán)境中正常使用,也需要在Visual C++中進行一定的設置才可以使得整個應用程序編譯通過。其設置步驟如下:
(1)在Visual C++集成開發(fā)界面的ToolsOption點擊Directories選項卡在“Include Files”列表項中添加一行iFixtools提供的include文件路徑,如:C:\iFixtools\include,然后再在“Library Files”列表項中添加一行iFixtools提供的library文件路徑,如:C:\iFixtools\lib。
(2)在編程界面的ProjectSettings….的Link選項卡中的Object\Library modules下面的文本框中填上:dmacsdba.lib fixtools.lib這2個庫文件。
(3)在include文件目錄下的“DataType.h”文件中添加一行:#define OS_WNT
(4)在相應調(diào)用iFix EDA函數(shù)的C++程序文件中,添加如下的語句聲明使用標準的C語言的函數(shù)調(diào)用:
extern "C" {
#include "fixeda.h"
}
經(jīng)過上述4個步驟就可以在Visual C++集成開發(fā)環(huán)境中調(diào)用EDA,HDA函數(shù)讀寫數(shù)據(jù)了,下面的代碼就是Visual C++中調(diào)用iFix EDA函數(shù)的例子。
// 定義iFix EDA組
eh = eda_define_group(1,0);
if(!eh) exit(1);
//定義NTF
ei[0] = eda_define_ntf(eh, "fix", "FZ03-30MKA01CE903-XQ01", "F_CV", 0);
ei[1] = eda_define_ntf(eh, "fix", "FZ03-30MKA01CE005-XQ01", "F_CV", 0);
eda_lookup(eh);
eda_wait(eh);
eda_read(eh);
eda_wait(eh);
for(i=0;i<2;i++)
{
err=eda_get_float(eh,ei[i],&fvalue);
data[i]=fvalue;
if(err==1)
{
MessageBox("Read iFix Data Error");
}
else
{
m_sData.Format("%5.3f",data[i]);
UpdateData(FALSE);
}
}
eda_delete_group(eh);
3.在Delphi編程環(huán)境下的應用
由于iFix的應用編程接口主要是面向微軟公司的編程平臺下的語言而開發(fā)的,因此在Borland公司的Delphi編程軟件下要使用EDA,HDA編程接口,需要自己編寫相關的接口函數(shù)聲明等,為了實現(xiàn)這個目的,我們可以根據(jù)intellution公司提供的VB下的VDBA.bas和FixTools.bas這2個模塊,對他們進行Delphi編程語言語法的改寫,形成相應的2個單元(unit)文件VDBA.pas和FixTools.pas,在應用程序部分將這2個單元文件包含(include)進來,因此在Delphi下的開發(fā)應用是如何正確地將VDBA.bas和FixTools.bas這2個VB模塊翻譯成Delphi語言中的單元文件。 這里需要注意的是:在iFix提供的VB模塊中,接口函數(shù)調(diào)用參數(shù)的傳遞是使用指針傳遞的,因此在Delphi的單元文件中應注意將函數(shù)參數(shù)的傳遞也使用指針進行傳遞的。完成了接口函數(shù)調(diào)用的單元文件后,在Delphi語言中的調(diào)用方法和步驟與VB或VC中的是一樣。下圖1就是在Delphi編程環(huán)境中的iFix EDA編程接口函數(shù)的聲明部分。

圖1:Delphi編程環(huán)境中的應用
4.結論
掌握并靈活應用iFix 軟件的EDA,HDA編程接口,我們就可以用自己熟悉的編程語言開發(fā)出符合用戶不同需求的應用程序,iFix軟件體系的開放性和靈活性得到了充分的體現(xiàn)。利用該編程接口使得iFix軟件應用在DCS系統(tǒng)的人機界面成為可能,華能新銳控制技術有限公司的DCS控制系統(tǒng)PineControl的操作員站部分PineHMI就是基于iFix上進行了大量的系統(tǒng)二次開發(fā)而完成的,這其中就必須大量運用到EDA,HDA編程接口來滿足DCS系統(tǒng)人機界面部分的一些特殊功能。此外利用該接口還可以拓展iFix軟件的應用范圍,如華能國際電力股份公司的發(fā)電廠實時監(jiān)管的廠站側系統(tǒng)以此為主搭建起來的。編程人員還可以將這些編程接口封裝成ActiveX動態(tài)鏈接庫,ActiveX控件等方式進行互聯(lián)網(wǎng)應用的擴展等方面的應用。
參考文獻:
[1].GE.Intelution公司. iFix Electronic Book
[2].GE.Intelution公司.iFix Database Access Toolkit Help
文章版權歸西部工控xbgk所有,未經(jīng)許可不得轉載。