楊 洋,李鳳霞,靳寶全,王吉星
(1.太原理工大學(xué) 電氣與動力工程學(xué)院,太原 030024;2.太原理工大學(xué) 新型傳感器與智能控制教育部與山西省重點(diǎn)實(shí)驗(yàn)室,太原 030024)
工業(yè)控制系統(tǒng)中,為集中掌握現(xiàn)場設(shè)備運(yùn)行狀況,需對數(shù)據(jù)對象進(jìn)行實(shí)時(shí)存儲與查詢,因此,研究組態(tài)軟件與數(shù)據(jù)庫相結(jié)合的數(shù)據(jù)查詢技術(shù)具有重要意義[1]。早期工控系統(tǒng)中,利用程序語言將數(shù)據(jù)庫中數(shù)據(jù)從報(bào)表輸出,開發(fā)較為復(fù)雜。隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,專家、學(xué)者設(shè)計(jì)組態(tài)軟件內(nèi)嵌數(shù)據(jù)庫技術(shù)應(yīng)用到各種工程項(xiàng)目中,王普等設(shè)計(jì)組態(tài)軟件與SQL Server數(shù)據(jù)庫結(jié)合管理歷史數(shù)據(jù),完成對現(xiàn)場的實(shí)時(shí)監(jiān)控[2];耿乙文等采用iFIX組態(tài)軟件與Access數(shù)據(jù)庫實(shí)現(xiàn)信息共享、報(bào)表制作[3]。
近年來,組態(tài)軟件與數(shù)據(jù)庫的連接、數(shù)據(jù)庫的實(shí)時(shí)訪問技術(shù)已獲得較大發(fā)展[4-6],但在對數(shù)據(jù)庫內(nèi)數(shù)據(jù)對象進(jìn)行即時(shí)調(diào)用并按時(shí)間順序進(jìn)行查詢的功能,仍需要進(jìn)一步研究開發(fā)。本文利用KingView組態(tài)軟件的時(shí)間、日期控件,結(jié)合數(shù)據(jù)庫內(nèi)嵌函數(shù),設(shè)計(jì)了基于KingView的SQL Server數(shù)據(jù)庫數(shù)據(jù)查詢方案,完成了數(shù)據(jù)庫中歷史數(shù)據(jù)對象在KingView中按時(shí)間順序的查詢,實(shí)現(xiàn)了對現(xiàn)場運(yùn)行狀態(tài)數(shù)字化、有序化監(jiān)測。
根據(jù)工控系統(tǒng)上位機(jī)軟件的設(shè)計(jì)要求,上位機(jī)需對關(guān)聯(lián)數(shù)據(jù)庫內(nèi)的歷史數(shù)據(jù)進(jìn)行合理的調(diào)用、顯示,但在編寫數(shù)據(jù)查詢語言時(shí)可能會出現(xiàn)查詢出來的數(shù)據(jù)不能按順序排列,即只按日期順序排列數(shù)據(jù)但時(shí)間順序混亂,或出現(xiàn)時(shí)間順序排序正常但日期排序混亂的問題,為解決這一問題,設(shè)計(jì)了綜合KingView時(shí)間、日期控件及SQL函數(shù)的數(shù)據(jù)查詢方案,通過對時(shí)間、日期條件的判斷及表格模板的調(diào)用,使數(shù)據(jù)庫數(shù)據(jù)按日期時(shí)間順序以報(bào)表形式有序輸出。
數(shù)據(jù)庫數(shù)據(jù)查詢設(shè)計(jì)方案如圖1所示。創(chuàng)建數(shù)據(jù)庫、數(shù)據(jù)源并連接到KingView,編寫查詢條件語句并調(diào)用報(bào)表,完成數(shù)據(jù)按日期、時(shí)間順序有序查詢。
圖1 數(shù)據(jù)庫數(shù)據(jù)查詢方案示意圖Fig.1 Schematic diagram of database query program
KingView與SQL Server數(shù)據(jù)庫實(shí)現(xiàn)數(shù)據(jù)傳輸時(shí),首先將SQL Server數(shù)據(jù)庫添加到ODBC數(shù)據(jù)源中,執(zhí)行如下腳本連接到名為“項(xiàng)目數(shù)據(jù)”的數(shù)據(jù)源,即可通過變量間接訪問數(shù)據(jù)庫:
SQLConnect(數(shù)據(jù)庫變量,"dsn=項(xiàng)目數(shù)據(jù);uid=;pwd=");
KingView中的變量和ODBC數(shù)據(jù)源之間的數(shù)據(jù)傳輸通過KingView的SQL訪問管理器實(shí)現(xiàn)。SQL訪問管理器包括表格模板和記錄體2部分。
表格模板是在數(shù)據(jù)庫中創(chuàng)建存儲報(bào)表的模板,也是數(shù)據(jù)報(bào)表輸出格式,通過如下腳本函數(shù)在數(shù)據(jù)庫中創(chuàng)建一個(gè)名為“表格名”的存儲表格:
SQLCreateTable(數(shù)據(jù)庫變量,"表格名","表格模板");
記錄體可關(guān)聯(lián)KingView中的多個(gè)變量,每執(zhí)行一次如下腳本函數(shù),即將一組“記錄體1”所關(guān)聯(lián)變量組存入數(shù)據(jù)庫的表格中:
SQLInsert(數(shù)據(jù)庫變量,"表格名","記錄體 1")。
以上命令語言為數(shù)據(jù)庫按時(shí)間順序查詢奠定了基礎(chǔ),使得KingView軟件開發(fā)平臺與數(shù)據(jù)庫通信正常連接。
在工業(yè)控制領(lǐng)域,要求能在歷史數(shù)據(jù)庫查詢?nèi)我鈺r(shí)間段內(nèi)的數(shù)據(jù),以便檢查現(xiàn)場工作情況。
2.2.1 查詢數(shù)據(jù)顯示區(qū)設(shè)置
在KingView中,在數(shù)據(jù)查詢畫面中插入通用控件KVADODBGrid class,在畫面內(nèi)拉出控件,在屬性選項(xiàng)中建立與SQL Server數(shù)據(jù)庫的連接,選擇前期新建的ODBC數(shù)據(jù)源(項(xiàng)目數(shù)據(jù))、數(shù)據(jù)庫及在數(shù)據(jù)庫內(nèi)創(chuàng)建的表格(表格名),選擇數(shù)據(jù)參數(shù)顯示表頭,數(shù)據(jù)居中,查詢超時(shí)設(shè)為100,并在索引表中將地址指針按順序排列,并按順序指向每條記錄體(每條記錄體按插入順序從上到下排列),如圖2所示,實(shí)現(xiàn)數(shù)據(jù)查詢按順序排列。
圖2 按時(shí)間順序排列原理Fig.2 Principle of chronological ordering
2.2.2 日期控件程序設(shè)計(jì)
在數(shù)據(jù)查詢畫面中,插入2個(gè)時(shí)間日期通用控件MicrosoftDateand TimePickerControl6.0(sp4),查詢開始時(shí)間 2 個(gè),分別為 DATE1、TIME1,查詢結(jié)束時(shí)間2個(gè),分別為DATE2、TIME2。DATA1、DATA2作為日期條件,屬性設(shè)置為1-dtpShort-Date。雙擊控件DATE1,在事件的closeup右側(cè)關(guān)聯(lián)函數(shù)端雙擊,函數(shù)聲明為closeup1(),并設(shè)計(jì)函數(shù)。
將DATE1控件輸入的年月日整數(shù)轉(zhuǎn)化為字符串形式作為查詢開始條件,與數(shù)據(jù)庫表格中的時(shí)間比較,并從數(shù)據(jù)庫表格中與DATE1輸入時(shí)間相同的位置開始輸出,同時(shí)要把所有轉(zhuǎn)化字符串的格式進(jìn)行統(tǒng)一格式轉(zhuǎn)換,并調(diào)整上位機(jī)的時(shí)間格式與此格式保持一致,否則函數(shù)無法從數(shù)據(jù)庫內(nèi)調(diào)用數(shù)據(jù)??丶loseup1()函數(shù)設(shè)計(jì)流程框架如圖3所示。
圖3 日期控件程序設(shè)計(jì)流程圖Fig.3 Flow chart of date control procedures
DATA2控件函數(shù)聲明為closeup2(),作為日期查詢結(jié)束條件,數(shù)據(jù)庫表格輸出的數(shù)據(jù)到輸入日期結(jié)束,函數(shù)設(shè)計(jì)方法與closeup1()相同。
2.2.3 時(shí)間控件程序設(shè)計(jì)
TIME1、TIME2控件屬性設(shè)置為 2-dtptime,雙擊控件,選擇事件,點(diǎn)擊change后的關(guān)聯(lián)內(nèi)容,函數(shù)分別聲明為 change1()、change2()。
函數(shù) change1()、change2()作為查詢時(shí)間開始條件、結(jié)束條件,程序設(shè)計(jì)流程與closeup1()大致相同:定義長整形變量,將控件中的變量值賦給對應(yīng)的長整形變量,統(tǒng)一數(shù)據(jù)庫內(nèi)時(shí)間格式與上位機(jī)中的時(shí)間格式,通過控件讀出輸入時(shí)間(輸入時(shí)間格式為:時(shí):分:秒),即完成在KingView中時(shí)間賦值。
2.2.4 查詢按鈕的程序設(shè)計(jì)
查詢按鈕設(shè)計(jì)時(shí),因?yàn)榍捌跁r(shí)間格式都是字符串格式,字符串沒有比較大小的功能,想要查詢一段時(shí)間內(nèi)的數(shù)據(jù),必須把字符串格式的時(shí)間轉(zhuǎn)化為長整形。在KingView界面內(nèi),新建一個(gè)按鈕,雙擊按鈕,選擇按下時(shí)執(zhí)行程序,查詢按鈕程序設(shè)計(jì)流程如圖4所示,將時(shí)間開始條件與日期開始條件組成總開始條件,時(shí)間結(jié)束條件與日期結(jié)束條件組成總結(jié)束條件,比較結(jié)果正確后,將總開始時(shí)間與總結(jié)束時(shí)間組成綜合查詢時(shí)間作為輸出條件并按時(shí)間順序輸出數(shù)據(jù)報(bào)表。
圖4 查詢按鈕程序設(shè)計(jì)流程圖Fig.4 Flow chart of query button programming
在設(shè)計(jì)完成的控件中,開始時(shí)間設(shè)定為2014-07-18、11:21:40,結(jié)束時(shí)間設(shè)定為 2014-07-18、11:22:40,點(diǎn)擊查詢按鈕,報(bào)表輸出結(jié)果如表1所示??梢姖M足查詢條件的數(shù)據(jù)全部顯示并按時(shí)間順序從早到晚依次排列,查詢數(shù)據(jù)以3路流量(流量A1、流量B1、流量C1)為例,但由于新建數(shù)據(jù)庫中變量未連接設(shè)備寄存器,所以數(shù)據(jù)顯示均為0。
表1 數(shù)據(jù)查詢結(jié)果Tab.1 Data query results
使用KVADODBGrid控件查詢方法簡單,容易被設(shè)計(jì)人員開發(fā)使用,但不適合現(xiàn)有工業(yè)技術(shù)領(lǐng)域應(yīng)用,此種方法開發(fā)的查詢功能操作步驟繁瑣,且不易觀察歷史數(shù)據(jù),只可查詢?nèi)繑?shù)據(jù)信息,且沒有篩選數(shù)據(jù)的功能,使用靈活度差。
利用SQL函數(shù)查詢方法基本能滿足用戶的各種要求,單一使用SQL函數(shù),不易開發(fā)數(shù)據(jù)查詢功能,一般借助報(bào)表窗口控件,設(shè)計(jì)開發(fā)程序較為繁瑣,容易出現(xiàn)錯(cuò)誤,對工程技術(shù)開發(fā)人員要求極高,不易掌握,靈活度相對上一方法較好,程序過程復(fù)雜。開發(fā)的軟件對硬件要求很高,且在運(yùn)行過程中容易造成死機(jī)現(xiàn)象。
充分利用KingView內(nèi)的控件、內(nèi)嵌SQL函數(shù),開發(fā)了靈活方便、適用性強(qiáng)的數(shù)據(jù)查詢功能,滿足工控領(lǐng)域?qū)?shù)據(jù)查詢的各種要求,軟件開發(fā)難度適中,對工程開發(fā)人員要求合適,且開發(fā)技術(shù)容易掌握。開發(fā)的數(shù)據(jù)查詢軟件操作簡單靈活,容易理解。
主要利用KingView時(shí)間日期控件并結(jié)合SQL內(nèi)嵌函數(shù),設(shè)計(jì)了數(shù)據(jù)庫數(shù)據(jù)報(bào)表調(diào)用查詢方案,并完成了查詢結(jié)果按時(shí)間順序有序排列。該方案設(shè)計(jì)方法簡單,工作可靠,使用戶可以方便地訪問和管理數(shù)據(jù)庫,實(shí)時(shí)掌握系統(tǒng)運(yùn)行參數(shù),優(yōu)化了工控系統(tǒng)性能。
[1] 楊立保,許忠仁.組態(tài)軟件實(shí)時(shí)數(shù)據(jù)庫的研究與設(shè)計(jì)[J].自動化儀表,2009,30(8):19-21.
[2] 王普,郭繼業(yè),孫崇正,等.基于SQL Server 2000的組態(tài)軟件實(shí)時(shí)數(shù)據(jù)庫[J].北京工業(yè)大學(xué)學(xué)報(bào),2006,32(3):197-201.
[3] 耿乙文,伍小杰.基于ODBC技術(shù)實(shí)現(xiàn)iFIX組態(tài)軟件與關(guān)系數(shù)據(jù)庫 Access的通信[J].工礦自動化,2006(4):30-32.
[4] 趙秀梅.基于WINCC工控組態(tài)軟件的關(guān)系數(shù)據(jù)庫的研究[J].微型機(jī)與應(yīng)用,2010(6):1-2,6.
[5] 陳慧,王中慶.基于ADO的組態(tài)軟件與關(guān)系數(shù)據(jù)庫通信研究[J].工業(yè)控制計(jì)算機(jī),2012,25(4):74-75.
[6] 孫淳.基于OPC技術(shù)的組態(tài)軟件與SQL Server數(shù)據(jù)庫的通信研究[J].實(shí)驗(yàn)技術(shù)與管理,2012,29(5):143-146. ■