欧美久久久三级黄片,亚洲最新av网站大全,99精品免费视频网站6,久久99久久这里只有精品 ,免费无码国产精品i,中文字幕无码日韩专区免费

新聞詳情

基于ADO技術(shù)的iFix歷史報表的設(shè)計

日期:2025-04-17 23:53
瀏覽次數(shù):5172
摘要:
康為水泥閥
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)復(fù)雜工程對軟件的要求。但是,因不同項目對歷史數(shù)據(jù)報表要求不盡相同,而iFIX軟件又沒有提供針對歷史數(shù)據(jù)報表的通用組件,通常實現(xiàn)報表的方法是使用第三方提供的組件(如:水晶報表),因其封裝功能較多,編程不夠靈活,對于比較復(fù)雜的報表功能實現(xiàn)起來比較麻煩,而且需要在進行報表組態(tài)時單獨購買。ADO組件集成在Visual Basic 6.0中,對于復(fù)雜的報表功能,采用ADO技術(shù)訪問iFIX歷史數(shù)據(jù)庫實現(xiàn)報表非常靈活。
        2ADO技術(shù)與iFIX歷史數(shù)據(jù)庫
        2.1ADO 技術(shù)
        ADO (ActiveX DataObjects) 是一個用于存取數(shù)據(jù)源的COM組件。它是Microsoft新數(shù)據(jù)庫訪問技術(shù),是建立在OLEDB之上的高層數(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ù)源“FIXDynamics Historical Data”和“FIX Dynamics Real Time Data”。 “FIXDynamics Real Time Data”數(shù)據(jù)源連接的是iFIX實時數(shù)據(jù)庫;“FIX Dynamics HistoricalData” 數(shù)據(jù)源連接的是iFIX歷史數(shù)據(jù)庫。
        實時數(shù)據(jù)庫和歷史數(shù)據(jù)庫都可通過ODBC進行訪問。
        在進行iFIX工程組態(tài)時,可以在iFIX工作臺系統(tǒng)樹下的“歷史定義”定義要查詢的歷史數(shù)據(jù)。當(dāng)iFIX運行時,iFIX會按照組態(tài)好的要進行記錄歷史數(shù)據(jù)的標(biāo)簽的實時值以歷史文件的形式保存。例如:工程節(jié)點名為“FIX”,并且組態(tài)生成24小時的歷史文件,則這些歷史文件以xxxx.H24(其中xxxx為記錄時間)保存到工程目錄下的“…\HTRDATA\FIX\”。iFIX歷史數(shù)據(jù)庫主要有以下字段:
        NODE為工程的邏輯節(jié)點名;TAG為數(shù)據(jù)庫標(biāo)簽名;FIELD為數(shù)據(jù)庫標(biāo)簽的域名;VALUE為數(shù)據(jù)庫標(biāo)簽數(shù)值;DATETIME為記錄日期和時間;INTERVAL為查詢時間間隔。
        3 歷史報表軟件的設(shè)計與實現(xiàn)
        3.1功能介紹
        本軟件可實現(xiàn)與iFIX工程應(yīng)用軟件的無縫連接,滿足查詢iFIX歷史數(shù)據(jù)并以報表形式顯示。
        1)可以任意選擇要查詢的變量,變量在報表中的顯示順序只跟選擇要查詢變量的順序有關(guān)。
        2)查詢變量時,按照日期查詢,用戶只需設(shè)置要查詢的變量,輸入“起始時間”、“結(jié)束時間”、“時間間隔”即可進行查詢。
        3)查詢結(jié)果可導(dǎo)出。
        3.2設(shè)計與實現(xiàn)
        軟件設(shè)計主要包括利用ADO組件對象通過“FIXDynamics Historical Data”數(shù)據(jù)源查詢iFIX歷史數(shù)據(jù)庫和將查詢的結(jié)果顯示出來。
        1)建立數(shù)據(jù)庫標(biāo)簽名描述文件
        因iFIX歷史數(shù)據(jù)庫是按照TAG(數(shù)據(jù)庫標(biāo)簽名)進行數(shù)據(jù)存儲的,而標(biāo)簽名通常為字母以及編號組成,不便記憶,為了使報表更能直觀顯示,我們建立數(shù)據(jù)庫標(biāo)簽名描述文件。該文件是一個文本文件,將每個標(biāo)簽名(與iFIX數(shù)據(jù)庫管理器標(biāo)簽名相同)與該標(biāo)簽的描述對應(yīng)起來,如圖1所示:

數(shù)據(jù)庫標(biāo)簽描述文件

        圖1:數(shù)據(jù)庫標(biāo)簽描述文件

        2)配置軟件開發(fā)環(huán)境,添加ActiveX控件及引用ADO對象庫
        本軟件開發(fā)環(huán)境需要安裝VisualBasic 6.0和MicrosoftOffice組件。進行報表查詢需要在VB工程中插入時間控件(DTPicker)。進行報表顯示需要顯示控件(SpreadSheet)。要在VB工程中添加ActiveX控件,步驟如下:打開工程→在“工程”菜單→選擇“部件”→在“部件”對話框找到“Microsoft Office XP Web Components”和“Microsoft WindowsCommon Controls-2.6.0”,選中選中相應(yīng)復(fù)選框→點擊確定。這樣就把ActiveX控件添加到了VB工具箱了。
        在使用ADO對象之前,必須先將對象庫引入當(dāng)前工程中。使用VB集成開發(fā)環(huán)境“工程”菜單中的“引用”對話框,將其中的“MicrosoftActiveX Data Objects 2.6 Library”選中即可。
        3)“添加查詢變量”窗口設(shè)計
        該窗口設(shè)計如圖2所示:
 

“添加查詢變量”窗口
        圖2:“添加查詢變量”窗口

        通過該窗口可以任意添加要查詢的變量,設(shè)計思路如下:
        ①在窗口初始化程序中,讀取數(shù)據(jù)庫標(biāo)簽名描述文件,并將其顯示在“所有點列表”列表框中。
        Private SubUserForm_Activate()
        ……
        IfDir(VaribleFilePath) <> "" Then
        OpenVaribleFilePath For Input As 1
        Do While NotEOF(1)
        Input #1, int1,str1, str2
        ListBox1.AddItemstr1
        Loop
        Close
        ……
        End Sub
        其中VaribleFilePath為數(shù)據(jù)庫標(biāo)簽名描述文件所在的路徑。
        ②點擊“>”按鈕,將從“所有點列表”列表框中所選的查詢變量移到右邊“已選點列表”列表框中。
        Private SubCommandButton1_Click()
        Dim strtemp AsInteger
        IfListBox1.ListIndex <> -1 Then
        ListBox2.AddItemListBox1.Text
        strtemp =ListBox1.ListIndex
        ListBox1.RemoveItemstrtemp
        ……
        End Sub
        ③點擊“<”按鈕,將從“已選點列表”列表框中所選的查詢變量移到左邊“所有點列表”列表框中。代碼與②類似,不再贅述。
        ④點擊“確定”按鈕,將“已選點列表”列表框中的查詢變量逐一在數(shù)據(jù)庫標(biāo)簽名描述文件中檢索出相應(yīng)的iFIX數(shù)據(jù)庫管理器標(biāo)簽名。
        Private SubCommandButton4_Click()
        ……
        Dim VaribleTemp()As String
        Dim DecTemp() AsString
        ReDim PreserveVaribleTemp(ListBox2.ListCount)
        ReDim PreserveDecTemp(ListBox2.ListCount)
        IfDir(VaribleFilePath) <> "" Then
        i1 = 0
        For i = 1 ToListBox2.ListCount
        OpenVaribleFilePath For Input As 1
        LabelTemp =ListBox2.List(i - 1)
        Do While i1 = 0
        Input #1, str1,str2, str3
        If str2 = LabelTempThen
        DecTemp(i) =str2
        VaribleTemp(i) =str3
        i1 = 1
        End If
        Loop
        i1 = 0
        Close #1
        Form1.ListBox1.AddItemVaribleTemp(i)
        Form1.ListBox2.AddItemDecTemp(i)
        Next
        …
        End Sub
        在這段程序代碼中,定義了兩個字符串?dāng)?shù)組,字符串?dāng)?shù)組VaribleTemp()用于存放要進行歷史數(shù)據(jù)查詢的iFIX數(shù)據(jù)標(biāo)簽名,并賦值給主窗口Form1的列表框ListBox1;字符串?dāng)?shù)組DecTemp()用于存放要進行歷史數(shù)據(jù)查詢的數(shù)據(jù)庫標(biāo)簽名描述,并賦值給主窗口Form1的列表框ListBox2。
        4)主窗體的設(shè)計
        “歷史數(shù)據(jù)查詢”主窗體完成設(shè)置查詢起始時間、結(jié)束時間、查詢時間間隔和進行iFIX歷史數(shù)據(jù)庫的查詢功能。該窗口設(shè)計如圖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") ‘ 格式化時間間隔
 

圖3
        圖3:歷史數(shù)據(jù)查詢窗口

        II.與iFIX歷史數(shù)據(jù)庫連接.
        …..
        Dim conADO AsADODB.Connection ‘定義Connection類型的變量
        Set conADO = NewADODB.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() AsString ‘定義字符串?dāng)?shù)組,用于存放iFIX標(biāo)簽名
        ReDim PreserveTagGroup(ListBox1.ListCount)
        For i1 = 1 ToListBox1.ListCount
        TagGroup(i1) =Me.ListBox1.List(i1 - 1)
        strQuery = "SELECTVALUE,DATETIME " + _ ‘選擇要查詢的字段
        "FROM FIX " + _‘歷史數(shù)據(jù)庫節(jié)點名為Fix
        "WHERE TAG = ‘" +TagGroup(i1) + "‘ " + _ ‘選擇要查詢的iFIX標(biāo)簽
        "AND INTERVAL = ‘"+ strInterval + "‘" + _ ‘選擇要查詢時間間隔
        "AND (DATETIME>={ts ‘" + strStartTime + "‘} AND " + _ ‘查詢時間不小于起始時間
        "DATETIME <={ts‘" + strEndTime + "‘})" ‘查詢時間不大于結(jié)束時間
        Dim rsADO AsRecordset ‘定義Recordset類型的變量
        Set rsADO = NewADODB.Recordset ‘創(chuàng)建新的Recordset對象賦值給該變量
        rsADO.CursorLocation= adUseClient
        rsADO.OpenstrQuery, conADO, adOpenDynamic, adLockUnspecified, -1
        ‘打開記錄集
        IfrsADO.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標(biāo)簽名描述
        For i = 1 TorsADO.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列起顯示該標(biāo)簽查詢出的數(shù)據(jù)。
        End If
        rsADO.MoveNext
        Next i
        Set rsADO = Nothing‘釋放Recordset對象
        Next i1
        Set conADO =Nothing ‘釋放Connection對象
        IV. 數(shù)據(jù)導(dǎo)出
        點擊“導(dǎo)出”按鈕,將查詢到的數(shù)據(jù)導(dǎo)出成XML文件,可在Excel中打開。
        Me.Spreadsheet2.Export
        3.3在iFIX軟件中調(diào)用該程序
        將編寫好的軟件在VisualBasic 6.0中生成.EXE文件(例如iFix歷史數(shù)據(jù)查詢.exe),然后在iFIX中調(diào)用該程序。
        Dim MyAppID
        Dim appPath AsString
        appPath =System.ProjectPath & "\APP\iFix歷史數(shù)據(jù)查詢.exe"
        MyAppID =Shell(appPath, 0)
        4結(jié)束語
        本文探討了ADO技術(shù)在iFIX歷史報表中的應(yīng)用,也可采用ADO技術(shù)設(shè)計實時報表,編程人員只需具備一定VB知識即可實現(xiàn)。采用本文介紹的方法設(shè)計程序只需經(jīng)過簡單修改,就可移植到其它工程中。該方法優(yōu)于采用SQD和SQT連接數(shù)據(jù)庫,因為采用后者連接數(shù)據(jù)庫不僅需要在SQLLIB數(shù)據(jù)表中進行預(yù)先定義SQL語言,而且還需要在SCU配置文件中配置SQL帳戶。編程效率和程序執(zhí)行效率比較低。康為水泥閥
 

富源县| 西乌珠穆沁旗| 平和县| 察雅县| 泗阳县| 饶阳县| 遂溪县| 驻马店市| 广汉市| 武邑县| 杭锦后旗| 丰城市| 昌黎县| 措美县| 遵化市| 安西县|