技術(shù)頻道

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

基于ADO技術(shù)的iFix歷史報(bào)表的設(shè)計(jì)與實(shí)現(xiàn)

時(shí)間:2009-07-07 12:00:00來(lái)源:ronggang

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

標(biāo)簽:

點(diǎn)贊

分享到:

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

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

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

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

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

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

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

Chuandong.com Copyright ?2005 - 2024 ,All Rights Reserved 深圳市奧美大唐廣告有限公司 版權(quán)所有
粵ICP備 14004826號(hào) | 營(yíng)業(yè)執(zhí)照證書(shū) | 不良信息舉報(bào)中心 | 粵公網(wǎng)安備 44030402000946號(hào)