(廣州中國科學院沈陽自動化研究所分所 智能裝備研發中心,廣州 511458)
在某電路板生產企業實施數字化車間改造的過程中,為其設計了一套基于西門子WinCC軟件平臺的生產過程數據監控系統。該系統通過監視、保存和查詢現場數據,達到指導生產的功能。由于現場設備隸屬于不同供貨商,故底層數據的保存形式也各不相同:除小部分為PLC產生的實時數據外,其余的數據均保存在由供貨商提供的數據庫中。其中光致車間有4臺設備的數據保存在SQL Server數據庫中,鉆孔等車間數據保存在MySQL數據庫中,而光致車間的另外兩臺設備數據保存在Access數據庫中。故如何通過WinCC軟件訪問SQL Server、MySQL及Access等數據庫并將這些數據讀取出來即是本文的研究重點。
WinCC軟件是西門子公司研發的一款主要針對工業控制的組態軟件,具有功能強大、使用靈活方便及開放性好等優勢[1]。
這款軟件提供了兩種腳本語言:C和VBScript[2]。這兩種語言都可以通過執行函數的形式來實現特定的功能。由于VBScript具有運行速度快、調試方便等優勢,因此系統選擇VBScript語言來開發訪問外部數據庫腳本。同時,WinCC還提供了兩種腳本集成方式:全局腳本和圖形編輯器腳本。為了使系統能自動訪問并讀取數據庫中的數據,系統采用全局腳本以定時執行的方式訪問外部數據。由于外部數據庫的更新頻率為1次/分鐘,故系統也采用該頻率來執行腳本。系統整體設計方案如圖1所示。

圖1 系統整體設計方案
SQL是英文名稱Structured Query Language的縮寫,對應的中文解釋為結構化查詢語言。美國國家標準協會的規定:SQL是關系數據庫的標準語言。因此大部分關系數據庫都使用SQL作為其數據庫管理語言[3,4]。
SQL Server是微軟公司開發并且推廣的一款大型關系數據庫系統,它為用戶提供了一個安全、可靠、易管理的數據庫平臺。這是一種高性能的關系數據庫管理系統,設計結構為客戶端/服務端形式,支持企業級的應用程序和多個不同的開發平臺,可以滿足不同類型的數據庫解決方案[5]。
本系統用到ADO(ActiveX Data Object)即ActiveX數據對象的兩個主要獨立對象:Connection對象和Recordset對象。系統通過Connection對象與數據庫建立連接,而通過Recordset對象與數據庫里的具體數據表進行數據交換。
1)連接SQL Server數據庫
下面的VBS代碼用于建立WinCC與SQL Server的連接。其中conn和StrNew為全局變量,用于創建Connection和RecordSet的對象;Persist Security Info的值為真表示建立與數據庫連接受保存安全信息;Initial Catalog表示conn要打開的數據庫為gzsia;Data Source表示數據庫的IP地址,若要連接本地數據庫改為本地IP地址即可。另外conn.State表示數據庫連接狀態,當其值等于1時,表示數據庫連接成功。

2)執行SQL語句
下面的VBS腳本代碼用于完成執行SQL的功能。其中sql表示要被執行的SQL語句,該句SQL語句表示:當EquipCode等于1001時,根據First參數倒敘排列gz_EL_Jobs表格,選取表中第一行Rejected參數并將其命名為newtital。在打開數據集的過程中,游標類型選擇靜態游標來反映第一次打開游標時表中數據的狀態;加鎖類型選擇缺省上鎖類型,這種方式允許多個用戶同時讀取數據,但不能改變數據。

3)WinCC讀取數據庫數據
下面的VBS腳本代碼用于完成讀取SQL Server中的數據并將數據賦值到WinCC內部變量等功能。首先將找到的newtital中的值賦給變量buffer_6_01(Rejected)。再將其值寫入WinCC的6_01_ Rejected變量中。

WinCC讀取SQL Server數據測試結果如圖2所示。其中圖2(a)為#1STR曝光機產生的最新一條信息中的部分數據,圖2(b)為WinCC讀取SQL Server數據庫并顯示出來的數據。
MySQL是一個由瑞典MySQL AB公司開發的小型關系型數據庫管理系統。相比于oracle、DB2和SQL Server等大型數據庫,MySQL具有速度快、體積小、成本低和代碼開源等優勢,而且MySQL可以工作在不同平臺上,支持C、C++、Java和PHP等多種開發語言。另外,其使用的核心線程是完全多線程,并支持多處理器。My SQL數據庫的優勢明顯但劣勢也較為突出,相對其他大型數據庫,其安全系統存在非標準化、規模小及功能有限等不足。但是針對個人用戶、中小型數據系統或小規模網站來說,MySQL在保證數據庫完整功能的前提下,大大降低了開發和后期的運維成本,所以針對這類客戶來說,MySQL數據庫的使用量是相當廣泛的[6]。
ODBC(Open Database Connectivity)中文譯為開放數據庫連接,是微軟公司提出的一個數據庫訪問接口標準,也是開放服務結構(WOSA,Windows Open Services Architecture)中有關數據庫的一個組成部分。它提供了一組標準API接口使用戶可以根據不同需求訪問數據庫文件[7]。
WinCC要想訪問MySQL數據庫,就必須通過ODBC管理器注冊一個ODBC數據源,管理器根據數據源提供的位置、類型及MySQL的ODBC驅動程序等信息,建立起ODBC與MySQL數據庫的聯系。通常來說,在建立ODBC與MySQL的連接后,可以通過SQL Server訪問MySQL數據庫,也可以通過腳本直接訪問數據庫。為了能直觀顯示測試結果,本文選擇通過SQL Server來訪問MySQL數據庫。
1)建立ODBC數據源
在控制面板的管理工具中的數據源(ODBC)選項中,選擇添加名為“MySQL ODBC 5.3 Unicode Driver”的數據源驅動程序,在填寫完成要連接數據庫的基本信息后,點擊Test,若彈出“Connection Successful”的字樣表示連接成功,如圖3所示。

圖3 MySQL建立ODBC數據源界面
2)通過SQL Server訪問MySQL數據庫
由于是通過SQL Server訪問MySQL數據庫,故VBS腳本連接的是SQL Server數據庫。所以,除SQL語句外,連接數據庫及WinCC讀取數據庫數據等部分的代碼均與WinCC訪問SQL Server數據庫相同。
通過SQL Server訪問MySQL數據庫的SQL語句如下所示。其中,OpenQuery是SQL Server用來與其他Server交互的一種技術,通過OpenQuery,SQL Server可以直接訪問其他數據庫資源;ZK_MYSQL為連接的服務端名。該句SQL語句表示:數據來源為ZK_MYSQL服務端;當mt_console_nu等于1并且aw_run_hit不等于0時,根據aw_begin_dt倒敘排列Easy_work_201705表格,選取第一行aw_run_hit參數。
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數據測試結果如圖4所示。其中圖4(a)為鉆孔設備產生的最新一條信息中的部分數據,圖4(b)為WinCC通過SQL Server讀取MySQL數據庫并顯示出來的數據。

圖4 WinCC讀取MySQL測試
Microsoft Access數據庫是包含在微軟公司Office系統中的一套小型關系數據庫軟件,用戶可以通過該軟件完成儲存、查詢和分析數據及連接其他大型數據庫的功能。Access數據庫的工作界面與Office的其他軟件相似,故相比于其他數據庫軟件Access數據庫具有更好的用戶體驗。同時,該數據庫不僅可以有效地組織與管理、共享與開發應用數據庫信息,而且其提供的數據庫對象可以使大部分用戶不用編寫代碼就能設計出一個功能完善的桌面數據庫應用系統,這無疑成為小規模數據用戶的較好選擇[8,9]。
1)同步Access數據庫
相比于訪問局域網內的Access數據庫,WinCC連接本地數據庫要容易的多,故先將兩臺設備的Access數據庫同步至本地。系統使用GoodSync軟件同步設備端的Access數據庫,如圖5所示,其同步周期設置為每分鐘一次。

圖5 同步Access數據庫
2)連接并讀取Access數據庫
若要連接Access數據庫同樣要通過建立ODBC數據源的方式實現,具體實現方法與MySQL數據庫建立數據源的方法相同,故不再贅述。WinCC連接Access數據庫、執行SQL語句和讀取變量的方法與SQL Server數據庫的相關操作與設置基本相同,唯一的不同是兩個數據庫的連接字符串有差異,下面的VBS腳本即為連接Access數據庫的連接字符串。
Conn.ConnectionString = “Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Production.accdb”;
WinCC讀取Access數據測試結果如圖6所示。其中圖6(a)為#1LED曝光機產生的最新一條信息中的部分數據,圖6(b)為WinCC讀取Access數據庫并顯示出來的數據。

圖6 WinCC讀取Access測試
本文通過VBS腳本,將WinCC與SQL Server、MySQL及Access等三個數據庫進行連接,并使其讀取存儲在各數據庫中的底層設備的實時數據。通過測試顯示,這種連接數據庫并讀取數據的方法可以完全滿足現場對于底層數據的實時性、準確性和穩定性的要求,為進一步設計數字化車間、構建信息化平臺、實現自動化生產以及完善現代化的工廠管理體系提供了重要的數據支撐。
[1]西門子(中國)有限公司.深入淺出西門子WinCCV6[M].北京:北京航空航天大學出版社,2004.
[2]楊洋.WinCC腳本在MES系統中的應用[J].制造業自動化,2016,38(6):13-14.
[3]閆旭.淺談SQL Server數據庫的特點和基本功能[J].價值工程,2012,(22):229-231.
[4]姜黎莉,姜巍巍.Access數據庫與SQL Server數據庫[J].知識經濟,2010,(04).
[5]顏昌斌.基于和的實驗數據庫系統研究[D].武漢:武漢理工大學,2006.
[6]王威.My SQL數據庫源代碼分析及存儲引擎的設計[D].南京:南京郵電大學,2012.
[7]楊少霞.關于WinCC與Oracle連接以及數據交互的研究與應用[J].制造業自動化,2016,38(9):146-148.
[8]喻濟兵.基于Access數據庫信息管理系統的設計[J].船電技術,2011,(4):57-59.
[9]崔再惠.Access數據庫與SQL Server數據庫主要功能的比較[J].鞍山師范學院學報,2009,(6):51-52.