摘要: GE公司的SCADA類軟件iFix具有開放的體系結構,其靈活開放的實時數據和歷史數據編程接口EDA和HDA在項目開發中具有廣泛的應用,本文結合實際工作,具體介紹了EDA和HDA在VB,VC,Delphi編程語言環境中的應用。
關鍵詞:iFix;實時數據庫訪問接口EDA;歷史數據訪問接口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作為工業控制領域內穩定可靠優秀的SCADA軟件,具有可靠性高,穩定性好,功能強大的特點,尤其是其iFix數據訪問開發工具包(iFix DataBase Access Toolkit)允許應用程序編程人員訪問iFix的實時和歷史數據,該工具包主要包括了實時數據訪問接口(East DataBase Access-EDA),歷史數據訪問接口(Historical Data Access-HDA)以及創建應用程序所需用到的其他函數(Helper Function)部分的功能。開發工具包中所提供的編程接口函數說明是針對于Visual Basic和標準的C,C++語言,而且并不提供搭建應用程序的具體細節。本文根據實際應用開發經驗,給出了如何在Visual Basic, Visual C++和Delphi編程環境下編寫應用程序的具體步驟。
1.Visual Basic編程環境下的應用
在創建的VB應用程序項目中應該首先添加2個模塊(Module),這2個模塊都是由iFix數據訪問開發工具包提供的,其中一個模塊是用于EDA編程接口使用的vdba.bas,另外一個模塊是用于HDA編程接口使用的fixtools.bas,在vdba.bas模塊中主要是基于VB格式的EDA接口函數,數據結構,常數的聲明,而在fixtools.bas模塊中主要是實現對fixtools.dll動態鏈接庫的聲明,基于VB格式的HDA接口函數,數據結構,常數的聲明,此外還提供了其他函數聲明,如iFix軟件的安裝路徑,iFix是否正在運行,即上面提到的Helper Function聲明。編程人員也可以根據自己的需要按照這兩個模塊的聲明建立符合自己需要的VB模塊。在添加了編程接口的聲明模塊后,就可以在VB應用程序中調用這些函數了,如下面就是一個在VB中讀取iFix實時數據的程序段:
Private Sub EDAReadData()
…….
G1 = eda_define_group(1, 0)
‘根據讀取的iFix標簽名(TagName)數組,定義需要讀取的一組標簽的實時值“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
‘將讀取到的每個標簽的實時數據讀出賦值給變量
eda_err = eda_get_float(G1, TagNtf(i), fvalue)
DataValue(i) = Format(fvalue, "###0.0#")
Next i
eda_delete_group(G1)
……
End sub
執行上述的子程序后,定義在TagName數組中的iFix實時數據庫中的標簽名的實時數據將被讀出,當然,EDA編程接口也支持向iFix的實時數據庫寫入值。
2.在Visual C++編程環境下的應用
iFix的應用編程開發包中提供的是標準的C語言的函數調用范例,為了讓EDA,HDA編程接口可以在Visual C++集成開發環境中正常使用,也需要在Visual C++中進行一定的設置才可以使得整個應用程序編譯通過。其設置步驟如下:
(1)在Visual C++集成開發界面的ToolsOption點擊Directories選項卡在“Include Files”列表項中添加一行iFixtools提供的include文件路徑,如:C:\iFixtools\include,然后再在“Library Files”列表項中添加一行iFixtools提供的library文件路徑,如:C:\iFixtools\lib。
(2)在編程界面的ProjectSettings….的Link選項卡中的Object\Library modules下面的文本框中填上:dmacsdba.lib fixtools.lib這2個庫文件。
(3)在include文件目錄下的“DataType.h”文件中添加一行:#define OS_WNT
(4)在相應調用iFix EDA函數的C++程序文件中,添加如下的語句聲明使用標準的C語言的函數調用:
extern "C" {
#include "fixeda.h"
}
經過上述4個步驟就可以在Visual C++集成開發環境中調用EDA,HDA函數讀寫數據了,下面的代碼就是Visual C++中調用iFix EDA函數的例子。
// 定義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編程環境下的應用
由于iFix的應用編程接口主要是面向微軟公司的編程平臺下的語言而開發的,因此在Borland公司的Delphi編程軟件下要使用EDA,HDA編程接口,需要自己編寫相關的接口函數聲明等,為了實現這個目的,我們可以根據intellution公司提供的VB下的VDBA.bas和FixTools.bas這2個模塊,對他們進行Delphi編程語言語法的改寫,形成相應的2個單元(unit)文件VDBA.pas和FixTools.pas,在應用程序部分將這2個單元文件包含(include)進來,因此在Delphi下的開發應用是如何正確地將VDBA.bas和FixTools.bas這2個VB模塊翻譯成Delphi語言中的單元文件。 這里需要注意的是:在iFix提供的VB模塊中,接口函數調用參數的傳遞是使用指針傳遞的,因此在Delphi的單元文件中應注意將函數參數的傳遞也使用指針進行傳遞的。完成了接口函數調用的單元文件后,在Delphi語言中的調用方法和步驟與VB或VC中的是一樣。下圖1就是在Delphi編程環境中的iFix EDA編程接口函數的聲明部分。
圖1:Delphi編程環境中的應用
4.結論
掌握并靈活應用iFix 軟件的EDA,HDA編程接口,我們就可以用自己熟悉的編程語言開發出符合用戶不同需求的應用程序,iFix軟件體系的開放性和靈活性得到了充分的體現。利用該編程接口使得iFix軟件應用在DCS系統的人機界面成為可能,華能新銳控制技術有限公司的DCS控制系統PineControl的操作員站部分PineHMI就是基于iFix上進行了大量的系統二次開發而完成的,這其中就必須大量運用到EDA,HDA編程接口來滿足DCS系統人機界面部分的一些特殊功能。此外利用該接口還可以拓展iFix軟件的應用范圍,如華能國際電力股份公司的發電廠實時監管的廠站側系統以此為主搭建起來的。編程人員還可以將這些編程接口封裝成ActiveX動態鏈接庫,ActiveX控件等方式進行互聯網應用的擴展等方面的應用。
參考文獻:
[1].GE.Intelution公司. iFix Electronic Book
[2].GE.Intelution公司.iFix Database Access Toolkit Help