技術(shù)頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國傳動網(wǎng) > 技術(shù)頻道 > 技術(shù)百科 > 基于ADO技術(shù)的iFix歷史報表的設計與實現(xiàn)

基于ADO技術(shù)的iFix歷史報表的設計與實現(xiàn)

時間:2009-07-07 12:00:00來源:ronggang

導語:?本文介紹了采用ADO技術(shù)實現(xiàn)iFix歷史報表的實際應用。上位機采用組態(tài)軟件iFix3.5,通過Visual Basic 6.0作為開發(fā)工具,采用ADO技術(shù)設計實現(xiàn)基于iFix的歷史報表功能的程序
摘 要:本文介紹了采用ADO技術(shù)實現(xiàn)iFix歷史報表的實際應用。上位機采用組態(tài)軟件iFix3.5,通過Visual Basic 6.0作為開發(fā)工具,采用ADO技術(shù)設計實現(xiàn)基于iFix的歷史報表功能的程序,采用本文介紹的方法設計的報表應用程序具有普遍性,通過簡單設置可移植到其它工程中。 關鍵詞:ADO;iFix; 歷史報表;Visual Basic Abstract:Introduce how to design the history data report used ADO technology for iFix software. The iFix3.5 is as the configuration software in the upper computer and the Visual Basic 6.0 is as the development tool。The history data report software is designed by ADO component. Using the method to design report program can fit to any iFix project .the software can be applicated other projects through simple setting. Key words: ADO;iFix; History Report;Visual Basic 1 引言   iFIX是全球最領先的HMI/SCADA自動化監(jiān)控組態(tài)軟件。,已有超過300,000套以上的軟件在全球運行。世界上許多最成功的制造商都依靠 GE Fanuc的iFIX軟件來全面監(jiān)控和分布管理全廠范圍的生產(chǎn)數(shù)據(jù)。iFIX 軟件內(nèi)置功能強大的VBA腳本編譯器,能實現(xiàn)復雜工程對軟件的要求。但是,因不同項目對歷史數(shù)據(jù)報表要求不盡相同,而iFIX軟件又沒有提供針對歷史數(shù)據(jù)報表的通用組件,通常實現(xiàn)報表的方法是使用第三方提供的組件(如:水晶報表),因其封裝功能較多,編程不夠靈活,對于比較復雜的報表功能實現(xiàn)起來比較麻煩,而且需要在進行報表組態(tài)時單獨購買。ADO組件集成在Visual Basic 6.0中,對于復雜的報表功能,采用ADO技術(shù)訪問iFIX歷史數(shù)據(jù)庫實現(xiàn)報表非常靈活。 2 ADO技術(shù)與iFIX歷史數(shù)據(jù)庫   2.1 ADO 技術(shù)   ADO (ActiveX Data Objects) 是一個用于存取數(shù)據(jù)源的COM組件。它是Microsoft新數(shù)據(jù)庫訪問技術(shù),是建立在OLE DB之上的高層數(shù)據(jù)庫訪問技術(shù)。ADO易于使用、高速度和較低的內(nèi)存占有率的優(yōu)點使得編程效率更高。   ADO常用的組件對象有:ADODB.Connection和ADODB.Recordset。通過ADO 組件對象訪問數(shù)據(jù)庫,基本操作流程是:用Connection對象連接數(shù)據(jù)庫,利用建立好的連接通過Connection、Command對象執(zhí)行SQL命令,或利用Recordset對象取得結(jié)果記錄集進行查詢、處理。   2.2 iFIX歷史數(shù)據(jù)庫   在iFIX安裝時,iFIX安裝程序會自動在工作站上建立兩個系統(tǒng)數(shù)據(jù)源“FIX Dynamics Historical Data”和“FIX Dynamics Real Time Data”。 “FIX Dynamics Real Time Data”數(shù)據(jù)源連接的是iFIX實時數(shù)據(jù)庫;“FIX Dynamics Historical Data” 數(shù)據(jù)源連接的是iFIX歷史數(shù)據(jù)庫。   實時數(shù)據(jù)庫和歷史數(shù)據(jù)庫都可通過ODBC進行訪問。   在進行iFIX工程組態(tài)時,可以在iFIX工作臺系統(tǒng)樹下的“歷史定義”定義要查詢的歷史數(shù)據(jù)。當iFIX運行時,iFIX會按照組態(tài)好的要進行記錄歷史數(shù)據(jù)的標簽的實時值以歷史文件的形式保存。例如:工程節(jié)點名為“FIX”, 并且組態(tài)生成24小時的歷史文件,則這些歷史文件以xxxx.H24(其中xxxx為記錄時間)保存到工程目錄下的“…\HTRDATA\FIX\”。iFIX歷史數(shù)據(jù)庫主要有以下字段:   NODE為工程的邏輯節(jié)點名;TAG為數(shù)據(jù)庫標簽名;FIELD為數(shù)據(jù)庫標簽的域名;VALUE為數(shù)據(jù)庫標簽數(shù)值;DATETIME為記錄日期和時間;INTERVAL為查詢時間間隔。 3 歷史報表軟件的設計與實現(xiàn)   3.1 功能介紹   本軟件可實現(xiàn)與iFIX工程應用軟件的無縫連接,滿足查詢iFIX歷史數(shù)據(jù)并以報表形式顯示。   1)可以任意選擇要查詢的變量,變量在報表中的顯示順序只跟選擇要查詢變量的順序有關。   2)查詢變量時,按照日期查詢,用戶只需設置要查詢的變量,輸入“起始時間”、“結(jié)束時間”、“時間間隔”即可進行查詢。   3)查詢結(jié)果可導出。   3.2設計與實現(xiàn)   軟件設計主要包括利用ADO組件對象通過“FIX Dynamics Historical Data”數(shù)據(jù)源查詢iFIX歷史數(shù)據(jù)庫和將查詢的結(jié)果顯示出來。   1)建立數(shù)據(jù)庫標簽名描述文件   因iFIX歷史數(shù)據(jù)庫是按照TAG(數(shù)據(jù)庫標簽名)進行數(shù)據(jù)存儲的,而標簽名通常為字母以及編號組成,不便記憶,為了使報表更能直觀顯示,我們建立數(shù)據(jù)庫標簽名描述文件。該文件是一個文本文件,將每個標簽名(與iFIX數(shù)據(jù)庫管理器標簽名相同)與該標簽的描述對應起來,如圖1所示: [align=center] 圖1:數(shù)據(jù)庫標簽描述文件[/align]   2)配置軟件開發(fā)環(huán)境,添加ActiveX控件及引用ADO對象庫   本軟件開發(fā)環(huán)境需要安裝Visual Basic 6.0和Microsoft Office組件。進行報表查詢需要在VB工程中插入時間控件(DTPicker)。進行報表顯示需要顯示控件(SpreadSheet)。要在VB工程中添加ActiveX控件,步驟如下:打開工程→在“工程”菜單→選擇“部件” →在“部件”對話框找到“Microsoft Office XP Web Components”和“Microsoft Windows Common Controls-2.6.0”,選中選中相應復選框→點擊確定。這樣就把ActiveX控件添加到了VB工具箱了。   在使用ADO對象之前,必須先將對象庫引入當前工程中。使用VB集成開發(fā)環(huán)境“工程”菜單中的“引用”對話框,將其中的“Microsoft ActiveX Data Objects 2.6 Library”選中即可。   3)“添加查詢變量”窗口設計   該窗口設計如圖2所示: [align=center] 圖2:“添加查詢變量”窗口[/align]   通過該窗口可以任意添加要查詢的變量,設計思路如下:  ?、僭诖翱诔跏蓟绦蛑校x取數(shù)據(jù)庫標簽名描述文件,并將其顯示在“所有點列表”列表框中。   Private Sub UserForm_Activate()   ……   If Dir(VaribleFilePath) <> "" Then   Open VaribleFilePath For Input As 1   Do While Not EOF(1)   Input #1, int1, str1, str2   ListBox1.AddItem str1   Loop   Close   ……   End Sub   其中VaribleFilePath為數(shù)據(jù)庫標簽名描述文件所在的路徑。   ②點擊“>”按鈕,將從“所有點列表”列表框中所選的查詢變量移到右邊“已選點列表”列表框中。   Private Sub CommandButton1_Click()   Dim strtemp As Integer   If ListBox1.ListIndex <> -1 Then   ListBox2.AddItem ListBox1.Text   strtemp = ListBox1.ListIndex   ListBox1.RemoveItem strtemp   ……   End Sub  ?、埸c擊“<”按鈕, 將從“已選點列表”列表框中所選的查詢變量移到左邊“所有點列表”列表框中。代碼與②類似,不再贅述。  ?、茳c擊“確定”按鈕,將“已選點列表”列表框中的查詢變量逐一在數(shù)據(jù)庫標簽名描述文件中檢索出相應的iFIX數(shù)據(jù)庫管理器標簽名。   Private Sub CommandButton4_Click()   ……   Dim VaribleTemp() As String   Dim DecTemp() As String   ReDim Preserve VaribleTemp(ListBox2.ListCount)   ReDim Preserve DecTemp(ListBox2.ListCount)   If Dir(VaribleFilePath) <> "" Then   i1 = 0   For i = 1 To ListBox2.ListCount   Open VaribleFilePath For Input As 1   LabelTemp = ListBox2.List(i - 1)   Do While i1 = 0   Input #1, str1, str2, str3   If str2 = LabelTemp Then   DecTemp(i) = str2   VaribleTemp(i) = str3   i1 = 1   End If   Loop   i1 = 0   Close #1   Form1.ListBox1.AddItem VaribleTemp(i)   Form1.ListBox2.AddItem DecTemp(i)   Next   …   End Sub   在這段程序代碼中,定義了兩個字符串數(shù)組,字符串數(shù)組VaribleTemp()用于存放要進行歷史數(shù)據(jù)查詢的iFIX數(shù)據(jù)標簽名,并賦值給主窗口Form1的列表框ListBox1;字符串數(shù)組DecTemp()用于存放要進行歷史數(shù)據(jù)查詢的數(shù)據(jù)庫標簽名描述,并賦值給主窗口Form1的列表框ListBox2。   4)主窗體的設計   “歷史數(shù)據(jù)查詢”主窗體完成設置查詢起始時間、結(jié)束時間、查詢時間間隔和進行iFIX歷史數(shù)據(jù)庫的查詢功能。該窗口設計如圖3所示:   ① 向該窗體加入日期時間控件DTPicker和表格控件SpreadSheet。  ?、?點擊查詢按鈕,軟件將按照指定的已選擇的查詢變量進行數(shù)據(jù)查詢。在此按鈕下編寫的代碼是報表程序的核心,包括以下部分:   I.對時間日期控件轉(zhuǎn)換成格式化字符串。   ……   strStartTime = Format(Me.DTStartTime, "yyyy-MM-dd HH:mm:ss") ‘ 格式化起始時間   strEndTime = Format(Me.DTEndTime, "yyyy-MM-dd HH:mm:ss") ‘ 格式化結(jié)束時間   strInterval = Format(Me.Interval1.Value, "HH:MM:SS") ‘ 格式化時間間隔 [align=center] 圖3:歷史數(shù)據(jù)查詢窗口[/align]   II. 與iFIX歷史數(shù)據(jù)庫連接.   …..   Dim conADO As ADODB.Connection ‘定義Connection類型的變量   Set conADO = New ADODB.Connection ‘創(chuàng)建新的Connection對象賦值給該變量   conADO.ConnectionString = "Provider=Microsoft OLE DB Provider for ODBC Drivers; " + _ "DSN=FIX Dynamics Historical Data;UID=;PWD=;" ‘指定連接字符串   conADO.Open ‘使用Open 方法打開連接   ……   III. 創(chuàng)建并返回記錄集,在表格控件SpreadSheet顯示結(jié)果。   Dim TagGroup() As String ‘定義字符串數(shù)組,用于存放iFIX標簽名   ReDim Preserve TagGroup(ListBox1.ListCount)   For i1 = 1 To ListBox1.ListCount   TagGroup(i1) = Me.ListBox1.List(i1 - 1)   strQuery = "SELECT VALUE,DATETIME " + _ ‘選擇要查詢的字段   "FROM FIX " + _ ‘歷史數(shù)據(jù)庫節(jié)點名為Fix   "WHERE TAG = ‘" + TagGroup(i1) + "‘ " + _ ‘選擇要查詢的iFIX標簽   "AND INTERVAL = ‘" + strInterval + "‘" + _ ‘選擇要查詢時間間隔   "AND (DATETIME >={ts ‘" + strStartTime + "‘} AND " + _ ‘查詢時間不小于起始時間   "DATETIME <={ts ‘" + strEndTime + "‘})" ‘查詢時間不大于結(jié)束時間   Dim rsADO As Recordset ‘定義Recordset類型的變量   Set rsADO = New ADODB.Recordset ‘創(chuàng)建新的Recordset對象賦值給該變量   rsADO.CursorLocation = adUseClient   rsADO.Open strQuery, conADO, adOpenDynamic, adLockUnspecified, -1   ‘打開記錄集   If rsADO.RecordCount <= 0 Then   MsgBox "該時間范圍無數(shù)據(jù)"   Set cnADO = Nothing   Set rsADO = Nothing   Exit Sub   End If   Me.Spreadsheet2.Range(Chr(Asc("B") + (i1 - 1)) & "1") = Me.ListBox2.List(i1 - 1)   ‘在表格控件第1行,第2列開始顯示要查詢變量的iFIX標簽名描述   For i = 1 To rsADO.RecordCount   Me.Spreadsheet2.Range("A" & (i + 1)) = rsADO!DateTime & ""   ‘在表格控件第2行起,第1列顯示要查詢變量的日期時間。   If rsADO!Value & "" = "" Then   Me.Spreadsheet2.Range(Chr(Asc("B") + (i1 - 1)) & (i + 1)) = "無數(shù)據(jù)"   Else   Me.Spreadsheet2.Range(Chr(Asc("B") + (i1 - 1)) & (i + 1)) = rsADO!Value & ""   ‘在表格控件第2行起,第2列起顯示該標簽查詢出的數(shù)據(jù)。   End If   rsADO.MoveNext   Next i   Set rsADO = Nothing ‘釋放Recordset對象   Next i1   Set conADO = Nothing ‘釋放Connection對象   IV. 數(shù)據(jù)導出   點擊“導出”按鈕,將查詢到的數(shù)據(jù)導出成XML文件,可在Excel中打開。   Me.Spreadsheet2.Export   3.3 在iFIX軟件中調(diào)用該程序   將編寫好的軟件在Visual Basic 6.0中生成.EXE文件(例如iFix歷史數(shù)據(jù)查詢.exe),然后在iFIX中調(diào)用該程序。   Dim MyAppID   Dim appPath As String   appPath = System.ProjectPath & "\APP\iFix歷史數(shù)據(jù)查詢.exe"   MyAppID = Shell(appPath, 0) 4 結(jié)束語   本文探討了ADO技術(shù)在iFIX歷史報表中的應用,也可采用ADO技術(shù)設計實時報表,編程人員只需具備一定VB知識即可實現(xiàn)。采用本文介紹的方法設計程序只需經(jīng)過簡單修改,就可移植到其它工程中。該方法優(yōu)于采用SQD和SQT連接數(shù)據(jù)庫,因為采用后者連接數(shù)據(jù)庫不僅需要在SQLLIB數(shù)據(jù)表中進行預先定義SQL語言,而且還需要在SCU配置文件中配置SQL帳戶。編程效率和程序執(zhí)行效率比較低。 參考文獻:   [1] GE Intellution公司.iFIX電子書.   [2] 王棟. Visual Basic 6.0程序開發(fā)實例教程[M].清華大學出版社

標簽:

點贊

分享到:

上一篇:基于ARM9的電網(wǎng)諧波監(jiān)測系統(tǒng)設計

下一篇:微能WIN-V63矢量控制變頻器在...

中國傳動網(wǎng)版權(quán)與免責聲明:凡本網(wǎng)注明[來源:中國傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國傳動網(wǎng)(www.treenowplaneincome.com)獨家所有。如需轉(zhuǎn)載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個人轉(zhuǎn)載使用時須注明來源“中國傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責任。

本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請保留稿件來源及作者,禁止擅自篡改,違者自負版權(quán)法律責任。

網(wǎng)站簡介|會員服務|聯(lián)系方式|幫助信息|版權(quán)信息|網(wǎng)站地圖|友情鏈接|法律支持|意見反饋|sitemap

中國傳動網(wǎng)-工業(yè)自動化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務平臺

網(wǎng)站客服服務咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2024 ,All Rights Reserved 版權(quán)所有 粵ICP備 14004826號 | 營業(yè)執(zhí)照證書 | 不良信息舉報中心 | 粵公網(wǎng)安備 44030402000946號