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