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