陳在平 楊雅靜
(天津理工大學(xué)自動化學(xué)院,天津 300384)
組態(tài)王是一種工業(yè)監(jiān)控軟件,目前已被廣泛應(yīng)用于工業(yè)自動化控制系統(tǒng)中。用戶通過實時分析在線數(shù)據(jù),將企業(yè)內(nèi)部的各種生產(chǎn)信息交流匯集在一起,對控制過程進(jìn)行優(yōu)化。但實際對采集到的數(shù)據(jù)進(jìn)行分析時,存在報表輸出方式不夠靈活和實時性差的問題,因此筆者利用組態(tài)王SQL 數(shù)據(jù)庫技術(shù),通過編程語言將組態(tài)王所采集到的數(shù)據(jù)寫入SQL Server數(shù)據(jù)庫中,這樣用戶可在脫離控制系統(tǒng)的情況下隨時利用數(shù)據(jù)庫來處理實時數(shù)據(jù)[1]。筆者采用組態(tài)王6.55版實現(xiàn)對SQL Server2005數(shù)據(jù)庫中數(shù)據(jù)的各種操作,并運用組態(tài)王提供的動態(tài)鏈接庫,使用Visual C++編程語言自行開發(fā)客戶端界面,實現(xiàn)對組態(tài)王采集入庫的數(shù)據(jù)進(jìn)行查看和處理功能[2]。
為實現(xiàn)組態(tài)王和外部數(shù)據(jù)庫之間的數(shù)據(jù)傳輸,組態(tài)王提供了SQL訪問功能,它包括SQL訪問管理器和SQL函數(shù)兩部分。組態(tài)王SQL訪問管理器主要有創(chuàng)建表格模板和創(chuàng)建記錄體兩部分功能:利用表格模板在數(shù)據(jù)庫中創(chuàng)建表格;利用記錄體建立SQL Server數(shù)據(jù)庫中字段與組態(tài)王之間的聯(lián)系。SQL函數(shù)是組態(tài)王標(biāo)準(zhǔn)函數(shù)的擴(kuò)充,其使組態(tài)王可與數(shù)據(jù)庫進(jìn)行信息交換,利用SQL函數(shù)可進(jìn)行創(chuàng)建表格、編輯已有表格、插入記錄、查詢已有記錄及刪除記錄等操作。
首先利用SQL Server2005創(chuàng)建一個數(shù)據(jù)庫,命名為DataBase;然后利用ODBC數(shù)據(jù)源管理器中的系統(tǒng)DSN新建一個SQL Sever驅(qū)動的數(shù)據(jù)源,命名為SQL Conn;最后對SQL Conn數(shù)據(jù)源進(jìn)行配置,使其指向DataBase數(shù)據(jù)庫。
在創(chuàng)建表格模板之前,應(yīng)先定義數(shù)據(jù)詞典,數(shù)據(jù)詞典中存放的是工程中定義的變量和一些系統(tǒng)變量。數(shù)據(jù)詞典中定義的變量如下:
DeviceID 內(nèi)存整型
氧含量2 內(nèi)存實型
氧含量3 內(nèi)存實型
一氧化碳2 內(nèi)存實型
一氧化碳3 內(nèi)存實型
排煙溫度2 內(nèi)存實型
排煙溫度3 內(nèi)存實型
熱效率2 內(nèi)存實型
熱效率3 內(nèi)存實型
酸露點2 內(nèi)存實型
這些變量可用來實現(xiàn)組態(tài)王與SQL Server數(shù)據(jù)庫的聯(lián)系。
然后在組態(tài)王的工程目錄顯示區(qū)中選擇SQL訪問管理器的表格模板新建表格模板table(圖 1)。后面在創(chuàng)建數(shù)據(jù)庫表格中會用到SQLCreatTable()函數(shù),此函數(shù)可以在DataBase數(shù)據(jù)庫中自動建立表格。
圖1 新建表格模板table
在組態(tài)王的工程目錄顯示區(qū)中選擇SQL 訪問管理器的記錄體選項以新建記錄體 Test(圖 2)。在新建的Test記錄體中,表格模板中字段對應(yīng)的數(shù)據(jù)類型和名稱必須與此字段對應(yīng)的變量數(shù)據(jù)類型保持一致,但字段的排列順序可以不一致。
圖2 新建記錄體Test
連接數(shù)據(jù)庫的命令語言為:
SQLConnect(DeviceID,"dsn=SQL_Conn;uid=sa;pwd=")
上述命令語言實現(xiàn)了組態(tài)王與SQL Conn數(shù)據(jù)源的連接,即與DataBase數(shù)據(jù)庫建立了連接。將此命令寫入組態(tài)王工程瀏覽器中應(yīng)用程序命令語言的啟動中,以實現(xiàn)系統(tǒng)開始運行時就可以連接到數(shù)據(jù)庫上。
創(chuàng)建數(shù)據(jù)庫表格的命令語言為:
SQLCreateTable(DeviceID,"KingTable","table")
上述命令語言實現(xiàn)了以表格模板table的格式在數(shù)據(jù)庫中建立名為KingTable的表格。也將此命令寫入組態(tài)王應(yīng)用程序命令語言的啟動中,以實現(xiàn)系統(tǒng)開始運行時就可以自動創(chuàng)建數(shù)據(jù)庫表格。
插入記錄的命令語言為:
SQLInsert(DeviceID,"KingTable","Test")
組態(tài)王將記錄體中相關(guān)聯(lián)的變量當(dāng)前值插入到DataBase數(shù)據(jù)庫表格中,從而生成一條新的記錄,達(dá)到將組態(tài)王中的數(shù)據(jù)寫到外部數(shù)據(jù)庫的目的。
查詢記錄的命令語言為:
SQLSelect(DeviceID," KingTable ","Test","","")
當(dāng)需要將數(shù)據(jù)庫中的數(shù)據(jù)調(diào)入組態(tài)王來顯示時,需將此命令寫入組態(tài)王應(yīng)用程序命令語言中的運行,并且添加查詢下一條記錄的命令:
SQLNext(DeviceID)
斷開連接的命令語言為:
SQLDisconnect(DeviceID)
將此命令寫入組態(tài)王應(yīng)用程序命令語言中的退出,系統(tǒng)在退出后將自動斷開與DataBase數(shù)據(jù)庫的連接。至此,通過組態(tài)王SQL數(shù)據(jù)庫技術(shù)已經(jīng)成功連接上SQL Server數(shù)據(jù)庫,并通過上述SQL命令語言實現(xiàn)了寫入及查詢數(shù)據(jù)等操作。
對動態(tài)鏈接庫的訪問分為隱式鏈接加載和動態(tài)加載兩種方式,筆者采用動態(tài)加載方式訪問組態(tài)王提供的鏈接庫KingvewCliend.dll。動態(tài)庫提供的接口函數(shù)主要有7個,在整個調(diào)用過程中有相應(yīng)的次序和功能,主程序流程如圖3所示,根據(jù)主程序流程,利用Visual C++基于對話框模式設(shè)計客戶端界面,編寫應(yīng)用程序。
圖3 主程序流程
系統(tǒng)測試主要完成對數(shù)據(jù)傳輸?shù)臏y試。圖4為應(yīng)用Visual C++基于對話框模式開發(fā)的加熱爐數(shù)據(jù)監(jiān)測界面,將組態(tài)王采集到的實時數(shù)據(jù)顯示到客戶端。
圖4 加熱爐數(shù)據(jù)監(jiān)測界面
進(jìn)入系統(tǒng)測試時,首先系統(tǒng)自動連接組態(tài)王,進(jìn)入圖4所示的監(jiān)測界面后,可選取需要查看的加熱爐運行參數(shù),圖中顯示了排煙溫度、熱效率、氧含量和一氧化碳的當(dāng)前值。圖5為組態(tài)王的信息窗口,系統(tǒng)自動連接組態(tài)王時就會彈出此信息窗口,從圖5也可以看出,系統(tǒng)顯示的是最后記錄,即顯示的是運行參數(shù)的當(dāng)前值,實現(xiàn)了數(shù)據(jù)的實時傳輸。
圖5 組態(tài)王信息窗口
系統(tǒng)測試表明:該系統(tǒng)基本實現(xiàn)了將加熱爐現(xiàn)場運行的實時數(shù)據(jù)傳輸?shù)娇蛻舳私缑?,工作人員無需到控制現(xiàn)場,在客戶端就可以實時查看加熱爐運行的狀態(tài)參數(shù)。
闡述了組態(tài)王 SQL 數(shù)據(jù)庫技術(shù)在加熱爐狀態(tài)參數(shù)監(jiān)測方面的應(yīng)用,實現(xiàn)了組態(tài)王與SQL Sever數(shù)據(jù)庫的連接,并結(jié)合組態(tài)王提供的動態(tài)鏈接庫,完成了加熱爐狀態(tài)參數(shù)客戶端界面的開發(fā),使操作人員可以實時掌握加熱爐的運行狀態(tài)信息,方便了對設(shè)備的管理和控制。
[1] 孟秀玉,曹巨江,田海濱. 組態(tài)王SQL數(shù)據(jù)庫技術(shù)在滴丸罐裝控制系統(tǒng)中的應(yīng)用[J]. 機(jī)械設(shè)計與制造,2009,14(8):84~86.
[2] 張永,李其申,李鎳嵐. 基于VC++的動態(tài)鏈接庫的創(chuàng)建與調(diào)用方法[J].南昌航空工業(yè)學(xué)院學(xué)報(自然科學(xué)版),2005,19(3):81~84.