王紀(jì)森,黎 雯,楊洪音
(西北工業(yè)大學(xué)自動(dòng)化學(xué)院,西安710072)
隨著自動(dòng)化在過程控制系統(tǒng)中的逐步發(fā)展應(yīng)用,組態(tài)軟件為多種本地信息機(jī)提供了非常多的開放性接口。WinCC是目前世界上最常用的三大SCADA(數(shù)據(jù)采集與監(jiān)視控制)系統(tǒng)之一。它是以計(jì)算機(jī)為基礎(chǔ)的生產(chǎn)過程與調(diào)度自動(dòng)化系統(tǒng),可以對(duì)現(xiàn)場(chǎng)的運(yùn)行設(shè)備進(jìn)行監(jiān)視和控制,以實(shí)現(xiàn)數(shù)據(jù)采集、設(shè)備控制、測(cè)量、參數(shù)調(diào)節(jié)以及各類信號(hào)報(bào)警等。為實(shí)現(xiàn)將數(shù)據(jù)存儲(chǔ)至外部數(shù)據(jù)庫,本文主要討論利用VB語言及VB腳本語言完成數(shù)據(jù)的傳輸及管理工作。
ADO是Microsoft為OLEDB設(shè)計(jì)的應(yīng)用層接口,它為一致的數(shù)據(jù)訪問接口提供了良好的擴(kuò)展性而不局限于單一的數(shù)據(jù)源。OLEDB是基于COM及DCOM技術(shù)設(shè)計(jì)的,可對(duì)關(guān)聯(lián)數(shù)據(jù)庫及非關(guān)聯(lián)數(shù)據(jù)庫進(jìn)行操作。ADO可以完成數(shù)據(jù)存儲(chǔ)及通過OLE DB操作數(shù)據(jù)庫等功能。ADO的核心內(nèi)容在使可用簡(jiǎn)單的COM指令即可對(duì)ODBC數(shù)據(jù)源、微軟表格等進(jìn)行快速的ActiveX操作。OLE DB同樣還擁有快速、內(nèi)存少、硬盤痕跡少等優(yōu)點(diǎn)。
Access是一種基于微軟技術(shù)的關(guān)聯(lián)數(shù)據(jù)庫管理系統(tǒng)。Access能夠存取 Access/Jet、Microsoft、SQL Sever、Oracle,或者任何 ODBC兼容數(shù)據(jù)庫內(nèi)的資料。Access在使用性、兼容性、可操縱性及可編程性上都有其他數(shù)據(jù)庫無可比擬的優(yōu)勢(shì)。
WinCC是由西門子公司開發(fā)的具有很強(qiáng)操作性及開放性的組態(tài)軟件。WinCC本身自帶實(shí)時(shí)數(shù)據(jù)庫及歷史數(shù)據(jù)庫,為本地存儲(chǔ)提供方便。同時(shí)也提供外部數(shù)據(jù)庫的存儲(chǔ)途徑。利用VB腳本語言可對(duì)ActiveX空間或其他對(duì)象進(jìn)行控制寫入。因此,它可以控制對(duì)象的動(dòng)態(tài)行為并建立與其他對(duì)象如Access的連接。
根據(jù)需要設(shè)計(jì)可以檢測(cè)多種液壓元件的綜合試驗(yàn)臺(tái)。整個(gè)液壓試驗(yàn)系統(tǒng)由7個(gè)試驗(yàn)回路組成。整個(gè)液壓綜合試驗(yàn)臺(tái)的試驗(yàn)回路多,控制層由PLC組成,主要負(fù)責(zé)試驗(yàn)過程控制及數(shù)據(jù)采集任務(wù),如圖1所示。主要完成的試驗(yàn)科目有往復(fù)試驗(yàn)、保壓試驗(yàn)以及流量試驗(yàn)。圖1為上位機(jī)所需完成的主要功能,圖形運(yùn)行系統(tǒng)及數(shù)據(jù)歸檔系統(tǒng)。
圖1 上位機(jī)功能結(jié)構(gòu)圖
特別地,在往復(fù)試驗(yàn)中,往復(fù)周期小于10s,試件進(jìn)口壓力升率大、變化快,為了對(duì)進(jìn)口壓力進(jìn)行完整記錄,要求數(shù)據(jù)的記錄和歸檔周期達(dá)到100ms。這樣一來,在試驗(yàn)過程中需要對(duì)大量數(shù)據(jù)進(jìn)行實(shí)時(shí)記錄和歸檔。而WinCC自帶數(shù)據(jù)庫的數(shù)據(jù)傳輸慢,無法達(dá)到快速歸檔的要求。此外,還要求對(duì)數(shù)據(jù)進(jìn)行靈活的查詢及報(bào)表設(shè)計(jì)。
為實(shí)現(xiàn)對(duì)大量數(shù)據(jù)進(jìn)行查詢等操作,筆者希望借由VB6.0與WinCC的接口以及VB本身強(qiáng)大的面向?qū)ο缶幊陶Z言,將在WinCC中得到的試驗(yàn)數(shù)據(jù)以記事本的方式存儲(chǔ);試驗(yàn)信息與試驗(yàn)數(shù)據(jù)文本存儲(chǔ)路徑存入Access數(shù)據(jù)庫;利用Excel完成試驗(yàn)的報(bào)表制作及打印工作。圖2表示整個(gè)數(shù)據(jù)管理系統(tǒng)結(jié)構(gòu)圖。PLC每秒傳遞給WinCC的數(shù)據(jù)傳遞給記事本進(jìn)行保存,而WinCC通過OLE DB將試驗(yàn)主要信息及數(shù)據(jù)記事本路徑寫入外部數(shù)據(jù)庫中。
圖2 數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)框圖
ADO數(shù)據(jù)連接原理圖,如圖3所示。
圖3 ADO數(shù)據(jù)連接原理圖
1)Access部分:Access數(shù)據(jù)庫為WinCC建立了一個(gè)用戶名及密碼為“example”的數(shù)據(jù)連接允許方位數(shù)據(jù)庫。為建立彼此連接,須在Windows下通過管理工具設(shè)置ODBC數(shù)據(jù)源。
2)WinCC部分:首先,需要建立傳輸用變量R1,R2,R3分別代表單元、產(chǎn)品及批架次。其次,VBScript用來編寫標(biāo)準(zhǔn)的數(shù)據(jù)存儲(chǔ)模塊。通過ADO控件,將試驗(yàn)信息在試驗(yàn)開始時(shí)存入外部數(shù)據(jù)庫Access中。
ADO中最重要的參數(shù)是ConnectionString,用于建立與數(shù)據(jù)庫的連接。這個(gè)參數(shù)中包含了所用存儲(chǔ)數(shù)據(jù)時(shí)所需要的信息。基本設(shè)置代碼語句如下:
ADO連 接 主 要 包 含 Connection、Command、Recordset以及Parameter等,完成了傳輸模塊中的主要部分。Connection用來指向特定的數(shù)據(jù)庫;Command用以對(duì)數(shù)據(jù)源完成插入、刪除、修改或查詢等操作;Recordset用以返回查詢結(jié)果。程序代碼如下:
通過改變WinCC中VB_Trigger的值,來完成觸發(fā)以上代碼的啟動(dòng)。
將大量的試驗(yàn)數(shù)據(jù)存儲(chǔ)在記事本中,記事本本身為純文本文件,操作簡(jiǎn)單方便,無操作平臺(tái)限制。由于試驗(yàn)開始時(shí)間是不可重復(fù)且唯一的,記事本保存在以試驗(yàn)開始時(shí)間命名的文件夾中。如圖4所示,在以試驗(yàn)時(shí)間命名的文件夾中保存了試驗(yàn)數(shù)據(jù)文件及試驗(yàn)信息文件。
圖4 數(shù)據(jù)文件存儲(chǔ)示意圖
試驗(yàn)數(shù)據(jù)的存儲(chǔ)采用C語言編寫,在試驗(yàn)開始時(shí),通過調(diào)用Windows API函數(shù)來得到系統(tǒng)時(shí)間完成文件夾的命名。以下為程序代碼。
將試驗(yàn)信息與試驗(yàn)數(shù)據(jù)分開存放的目的即為縮短查詢時(shí)間。為實(shí)現(xiàn)導(dǎo)入功能,要在excel中利用VBA構(gòu)建操作界面。在VB中引用Excel Application 12.0控件,使VB6.0可以對(duì)Excel內(nèi)部控件進(jìn)行調(diào)用和編輯。Visual Basic是微軟公司開發(fā)的面向?qū)ο笮偷目梢暬幊誊浖?。由于易于使用、擁有良好的GUI系統(tǒng)及可在Windows下完成大部分的編程工作,使得VB成為使用人數(shù)最多的編程軟件。在數(shù)據(jù)檢索方面,利用VB6.0編寫一個(gè)查詢模塊作為WinCC的擴(kuò)展功能模塊,緊密嵌入WinCC運(yùn)行環(huán)境。在WinCC內(nèi)部對(duì)該模塊進(jìn)行調(diào)用。在此,借用VB6.0與Windows良好的接口,完成數(shù)據(jù)檢索功能。
由VB6.0設(shè)計(jì)的查詢界面如圖5,查詢方法主要分為試驗(yàn)信息查詢及試驗(yàn)日期查詢。為使界面簡(jiǎn)潔,采用控件SSTab完成兩個(gè)查詢界面的轉(zhuǎn)換。數(shù)據(jù)檢索語句代碼如下:
圖5 查詢程序界面
查詢完成后,最終目的需要得到記事本中存儲(chǔ)的試驗(yàn)數(shù)據(jù),以完成查看及生成報(bào)表的功能。完成打開試驗(yàn)數(shù)據(jù)的程序代碼如下:
工控組態(tài)軟件WinCC有著較強(qiáng)的檢測(cè)與控制功能,但在歷史數(shù)據(jù)處理方面,只是提供了一些比較簡(jiǎn)單的查詢、顯示、打印函數(shù)供編程使用,如果要對(duì)歷史數(shù)據(jù)進(jìn)行復(fù)雜的處理就顯得力不從心。如果能將組態(tài)軟件的歷史數(shù)據(jù)導(dǎo)入Excel,利用Excel在數(shù)據(jù)處理方面的優(yōu)勢(shì)就可以彌補(bǔ)組態(tài)軟件的不足。
使用VBA可以在Excel中導(dǎo)入歷史數(shù)據(jù)。VBA是Visual Basic for Application的簡(jiǎn)稱,是Office辦公軟件的內(nèi)置編程語言,它采用事件驅(qū)動(dòng)機(jī)制。利用VBA可以在Excel中自定義工具欄、菜單、界面,并能通過腳本語言對(duì)數(shù)據(jù)進(jìn)行復(fù)雜分析和操作。
程序代碼如下:
本文討論了將WinCC中的歷史數(shù)據(jù)導(dǎo)入到外部進(jìn)行存儲(chǔ)的方法與細(xì)節(jié)。結(jié)合VB與VC,按照實(shí)際工程需要通過關(guān)聯(lián)試驗(yàn)信息與試驗(yàn)數(shù)據(jù)達(dá)到對(duì)試驗(yàn)數(shù)據(jù)的快速歸檔、查詢及報(bào)表生成等功能。該方法已在實(shí)際工程中應(yīng)用,并獲得較好的性能。
[1] Guangbo Zhou,Zhencai Zhu,Guangzhu Chen,Aijun Zhang.Technique of WinCC Long-distance Accessing Exterior SQL Server Database[J].Education Technology and Computer Science,2009.
[2] Weng Yifang,Duan Zhengang,Lian Xiaoqin,et al.Application of configuration software WinCC in logistics automatic control system[C].Sixth International Symposium on Instrumentation and Control Technology:Sensors,Automatics Measurement,Control,and Computer Simulation.2006.
[3] 明日科技,高春艷,李艷,谷偉東.數(shù)據(jù)庫開發(fā)關(guān)鍵技術(shù)與實(shí)例應(yīng)用[M].北京:人民郵電出版社,2004.