(廣州中國科學(xué)院沈陽自動化研究所分所 智能裝備研發(fā)中心,廣州 511458)
在某電路板生產(chǎn)企業(yè)實施數(shù)字化車間改造的過程中,為其設(shè)計了一套基于西門子WinCC軟件平臺的生產(chǎn)過程數(shù)據(jù)監(jiān)控系統(tǒng)。該系統(tǒng)通過監(jiān)視、保存和查詢現(xiàn)場數(shù)據(jù),達到指導(dǎo)生產(chǎn)的功能。由于現(xiàn)場設(shè)備隸屬于不同供貨商,故底層數(shù)據(jù)的保存形式也各不相同:除小部分為PLC產(chǎn)生的實時數(shù)據(jù)外,其余的數(shù)據(jù)均保存在由供貨商提供的數(shù)據(jù)庫中。其中光致車間有4臺設(shè)備的數(shù)據(jù)保存在SQL Server數(shù)據(jù)庫中,鉆孔等車間數(shù)據(jù)保存在MySQL數(shù)據(jù)庫中,而光致車間的另外兩臺設(shè)備數(shù)據(jù)保存在Access數(shù)據(jù)庫中。故如何通過WinCC軟件訪問SQL Server、MySQL及Access等數(shù)據(jù)庫并將這些數(shù)據(jù)讀取出來即是本文的研究重點。
WinCC軟件是西門子公司研發(fā)的一款主要針對工業(yè)控制的組態(tài)軟件,具有功能強大、使用靈活方便及開放性好等優(yōu)勢[1]。
這款軟件提供了兩種腳本語言:C和VBScript[2]。這兩種語言都可以通過執(zhí)行函數(shù)的形式來實現(xiàn)特定的功能。由于VBScript具有運行速度快、調(diào)試方便等優(yōu)勢,因此系統(tǒng)選擇VBScript語言來開發(fā)訪問外部數(shù)據(jù)庫腳本。同時,WinCC還提供了兩種腳本集成方式:全局腳本和圖形編輯器腳本。為了使系統(tǒng)能自動訪問并讀取數(shù)據(jù)庫中的數(shù)據(jù),系統(tǒng)采用全局腳本以定時執(zhí)行的方式訪問外部數(shù)據(jù)。由于外部數(shù)據(jù)庫的更新頻率為1次/分鐘,故系統(tǒng)也采用該頻率來執(zhí)行腳本。系統(tǒng)整體設(shè)計方案如圖1所示。
圖1 系統(tǒng)整體設(shè)計方案
SQL是英文名稱Structured Query Language的縮寫,對應(yīng)的中文解釋為結(jié)構(gòu)化查詢語言。美國國家標準協(xié)會的規(guī)定:SQL是關(guān)系數(shù)據(jù)庫的標準語言。因此大部分關(guān)系數(shù)據(jù)庫都使用SQL作為其數(shù)據(jù)庫管理語言[3,4]。
SQL Server是微軟公司開發(fā)并且推廣的一款大型關(guān)系數(shù)據(jù)庫系統(tǒng),它為用戶提供了一個安全、可靠、易管理的數(shù)據(jù)庫平臺。這是一種高性能的關(guān)系數(shù)據(jù)庫管理系統(tǒng),設(shè)計結(jié)構(gòu)為客戶端/服務(wù)端形式,支持企業(yè)級的應(yīng)用程序和多個不同的開發(fā)平臺,可以滿足不同類型的數(shù)據(jù)庫解決方案[5]。
本系統(tǒng)用到ADO(ActiveX Data Object)即ActiveX數(shù)據(jù)對象的兩個主要獨立對象:Connection對象和Recordset對象。系統(tǒng)通過Connection對象與數(shù)據(jù)庫建立連接,而通過Recordset對象與數(shù)據(jù)庫里的具體數(shù)據(jù)表進行數(shù)據(jù)交換。
1)連接SQL Server數(shù)據(jù)庫
下面的VBS代碼用于建立WinCC與SQL Server的連接。其中conn和StrNew為全局變量,用于創(chuàng)建Connection和RecordSet的對象;Persist Security Info的值為真表示建立與數(shù)據(jù)庫連接受保存安全信息;Initial Catalog表示conn要打開的數(shù)據(jù)庫為gzsia;Data Source表示數(shù)據(jù)庫的IP地址,若要連接本地數(shù)據(jù)庫改為本地IP地址即可。另外conn.State表示數(shù)據(jù)庫連接狀態(tài),當其值等于1時,表示數(shù)據(jù)庫連接成功。
2)執(zhí)行SQL語句
下面的VBS腳本代碼用于完成執(zhí)行SQL的功能。其中sql表示要被執(zhí)行的SQL語句,該句SQL語句表示:當EquipCode等于1001時,根據(jù)First參數(shù)倒敘排列g(shù)z_EL_Jobs表格,選取表中第一行Rejected參數(shù)并將其命名為newtital。在打開數(shù)據(jù)集的過程中,游標類型選擇靜態(tài)游標來反映第一次打開游標時表中數(shù)據(jù)的狀態(tài);加鎖類型選擇缺省上鎖類型,這種方式允許多個用戶同時讀取數(shù)據(jù),但不能改變數(shù)據(jù)。
3)WinCC讀取數(shù)據(jù)庫數(shù)據(jù)
下面的VBS腳本代碼用于完成讀取SQL Server中的數(shù)據(jù)并將數(shù)據(jù)賦值到WinCC內(nèi)部變量等功能。首先將找到的newtital中的值賦給變量buffer_6_01(Rejected)。再將其值寫入WinCC的6_01_ Rejected變量中。
WinCC讀取SQL Server數(shù)據(jù)測試結(jié)果如圖2所示。其中圖2(a)為#1STR曝光機產(chǎn)生的最新一條信息中的部分數(shù)據(jù),圖2(b)為WinCC讀取SQL Server數(shù)據(jù)庫并顯示出來的數(shù)據(jù)。
MySQL是一個由瑞典MySQL AB公司開發(fā)的小型關(guān)系型數(shù)據(jù)庫管理系統(tǒng)。相比于oracle、DB2和SQL Server等大型數(shù)據(jù)庫,MySQL具有速度快、體積小、成本低和代碼開源等優(yōu)勢,而且MySQL可以工作在不同平臺上,支持C、C++、Java和PHP等多種開發(fā)語言。另外,其使用的核心線程是完全多線程,并支持多處理器。My SQL數(shù)據(jù)庫的優(yōu)勢明顯但劣勢也較為突出,相對其他大型數(shù)據(jù)庫,其安全系統(tǒng)存在非標準化、規(guī)模小及功能有限等不足。但是針對個人用戶、中小型數(shù)據(jù)系統(tǒng)或小規(guī)模網(wǎng)站來說,MySQL在保證數(shù)據(jù)庫完整功能的前提下,大大降低了開發(fā)和后期的運維成本,所以針對這類客戶來說,MySQL數(shù)據(jù)庫的使用量是相當廣泛的[6]。
ODBC(Open Database Connectivity)中文譯為開放數(shù)據(jù)庫連接,是微軟公司提出的一個數(shù)據(jù)庫訪問接口標準,也是開放服務(wù)結(jié)構(gòu)(WOSA,Windows Open Services Architecture)中有關(guān)數(shù)據(jù)庫的一個組成部分。它提供了一組標準API接口使用戶可以根據(jù)不同需求訪問數(shù)據(jù)庫文件[7]。
WinCC要想訪問MySQL數(shù)據(jù)庫,就必須通過ODBC管理器注冊一個ODBC數(shù)據(jù)源,管理器根據(jù)數(shù)據(jù)源提供的位置、類型及MySQL的ODBC驅(qū)動程序等信息,建立起ODBC與MySQL數(shù)據(jù)庫的聯(lián)系。通常來說,在建立ODBC與MySQL的連接后,可以通過SQL Server訪問MySQL數(shù)據(jù)庫,也可以通過腳本直接訪問數(shù)據(jù)庫。為了能直觀顯示測試結(jié)果,本文選擇通過SQL Server來訪問MySQL數(shù)據(jù)庫。
1)建立ODBC數(shù)據(jù)源
在控制面板的管理工具中的數(shù)據(jù)源(ODBC)選項中,選擇添加名為“MySQL ODBC 5.3 Unicode Driver”的數(shù)據(jù)源驅(qū)動程序,在填寫完成要連接數(shù)據(jù)庫的基本信息后,點擊Test,若彈出“Connection Successful”的字樣表示連接成功,如圖3所示。
圖3 MySQL建立ODBC數(shù)據(jù)源界面
2)通過SQL Server訪問MySQL數(shù)據(jù)庫
由于是通過SQL Server訪問MySQL數(shù)據(jù)庫,故VBS腳本連接的是SQL Server數(shù)據(jù)庫。所以,除SQL語句外,連接數(shù)據(jù)庫及WinCC讀取數(shù)據(jù)庫數(shù)據(jù)等部分的代碼均與WinCC訪問SQL Server數(shù)據(jù)庫相同。
通過SQL Server訪問MySQL數(shù)據(jù)庫的SQL語句如下所示。其中,OpenQuery是SQL Server用來與其他Server交互的一種技術(shù),通過OpenQuery,SQL Server可以直接訪問其他數(shù)據(jù)庫資源;ZK_MYSQL為連接的服務(wù)端名。該句SQL語句表示:數(shù)據(jù)來源為ZK_MYSQL服務(wù)端;當mt_console_nu等于1并且aw_run_hit不等于0時,根據(jù)aw_begin_dt倒敘排列Easy_work_201705表格,選取第一行aw_run_hit參數(shù)。
sql = "SELECT * FROM OPENQUERY(ZK_MYSQL,
'select aw_run_hit from Easy_work_201705
where mt_console_nu = 1 and aw_run_hit <> 0 order by aw_begin_dt desc limit 1')";
WinCC讀取MySQL數(shù)據(jù)測試結(jié)果如圖4所示。其中圖4(a)為鉆孔設(shè)備產(chǎn)生的最新一條信息中的部分數(shù)據(jù),圖4(b)為WinCC通過SQL Server讀取MySQL數(shù)據(jù)庫并顯示出來的數(shù)據(jù)。
圖4 WinCC讀取MySQL測試
Microsoft Access數(shù)據(jù)庫是包含在微軟公司Office系統(tǒng)中的一套小型關(guān)系數(shù)據(jù)庫軟件,用戶可以通過該軟件完成儲存、查詢和分析數(shù)據(jù)及連接其他大型數(shù)據(jù)庫的功能。Access數(shù)據(jù)庫的工作界面與Office的其他軟件相似,故相比于其他數(shù)據(jù)庫軟件Access數(shù)據(jù)庫具有更好的用戶體驗。同時,該數(shù)據(jù)庫不僅可以有效地組織與管理、共享與開發(fā)應(yīng)用數(shù)據(jù)庫信息,而且其提供的數(shù)據(jù)庫對象可以使大部分用戶不用編寫代碼就能設(shè)計出一個功能完善的桌面數(shù)據(jù)庫應(yīng)用系統(tǒng),這無疑成為小規(guī)模數(shù)據(jù)用戶的較好選擇[8,9]。
1)同步Access數(shù)據(jù)庫
相比于訪問局域網(wǎng)內(nèi)的Access數(shù)據(jù)庫,WinCC連接本地數(shù)據(jù)庫要容易的多,故先將兩臺設(shè)備的Access數(shù)據(jù)庫同步至本地。系統(tǒng)使用GoodSync軟件同步設(shè)備端的Access數(shù)據(jù)庫,如圖5所示,其同步周期設(shè)置為每分鐘一次。
圖5 同步Access數(shù)據(jù)庫
2)連接并讀取Access數(shù)據(jù)庫
若要連接Access數(shù)據(jù)庫同樣要通過建立ODBC數(shù)據(jù)源的方式實現(xiàn),具體實現(xiàn)方法與MySQL數(shù)據(jù)庫建立數(shù)據(jù)源的方法相同,故不再贅述。WinCC連接Access數(shù)據(jù)庫、執(zhí)行SQL語句和讀取變量的方法與SQL Server數(shù)據(jù)庫的相關(guān)操作與設(shè)置基本相同,唯一的不同是兩個數(shù)據(jù)庫的連接字符串有差異,下面的VBS腳本即為連接Access數(shù)據(jù)庫的連接字符串。
Conn.ConnectionString = “Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Production.accdb”;
WinCC讀取Access數(shù)據(jù)測試結(jié)果如圖6所示。其中圖6(a)為#1LED曝光機產(chǎn)生的最新一條信息中的部分數(shù)據(jù),圖6(b)為WinCC讀取Access數(shù)據(jù)庫并顯示出來的數(shù)據(jù)。
圖6 WinCC讀取Access測試
本文通過VBS腳本,將WinCC與SQL Server、MySQL及Access等三個數(shù)據(jù)庫進行連接,并使其讀取存儲在各數(shù)據(jù)庫中的底層設(shè)備的實時數(shù)據(jù)。通過測試顯示,這種連接數(shù)據(jù)庫并讀取數(shù)據(jù)的方法可以完全滿足現(xiàn)場對于底層數(shù)據(jù)的實時性、準確性和穩(wěn)定性的要求,為進一步設(shè)計數(shù)字化車間、構(gòu)建信息化平臺、實現(xiàn)自動化生產(chǎn)以及完善現(xiàn)代化的工廠管理體系提供了重要的數(shù)據(jù)支撐。
[1]西門子(中國)有限公司.深入淺出西門子WinCCV6[M].北京:北京航空航天大學(xué)出版社,2004.
[2]楊洋.WinCC腳本在MES系統(tǒng)中的應(yīng)用[J].制造業(yè)自動化,2016,38(6):13-14.
[3]閆旭.淺談SQL Server數(shù)據(jù)庫的特點和基本功能[J].價值工程,2012,(22):229-231.
[4]姜黎莉,姜巍巍.Access數(shù)據(jù)庫與SQL Server數(shù)據(jù)庫[J].知識經(jīng)濟,2010,(04).
[5]顏昌斌.基于和的實驗數(shù)據(jù)庫系統(tǒng)研究[D].武漢:武漢理工大學(xué),2006.
[6]王威.My SQL數(shù)據(jù)庫源代碼分析及存儲引擎的設(shè)計[D].南京:南京郵電大學(xué),2012.
[7]楊少霞.關(guān)于WinCC與Oracle連接以及數(shù)據(jù)交互的研究與應(yīng)用[J].制造業(yè)自動化,2016,38(9):146-148.
[8]喻濟兵.基于Access數(shù)據(jù)庫信息管理系統(tǒng)的設(shè)計[J].船電技術(shù),2011,(4):57-59.
[9]崔再惠.Access數(shù)據(jù)庫與SQL Server數(shù)據(jù)庫主要功能的比較[J].鞍山師范學(xué)院學(xué)報,2009,(6):51-52.