龐海亮
上海電氣集團(tuán)股份有限公司 中央研究院 上海 200070
在工業(yè)控制領(lǐng)域中,組態(tài)軟件作為開發(fā)綜合監(jiān)控系統(tǒng)常用的平臺(tái)應(yīng)用非常廣泛,常見的組態(tài)軟件包括西門子WinCC、施耐德Intouch、北京亞控KingView和上海電氣NetControl等。不同品牌的組態(tài)軟件雖然在具體開發(fā)使用方面有所不同,但在總體功能框架方面都非常類似,同時(shí)也都存在一個(gè)問題: 由于對(duì)三維畫面支持不佳,因此不能實(shí)現(xiàn)設(shè)備地理信息系統(tǒng)(GIS)監(jiān)控、設(shè)備自動(dòng)巡檢、設(shè)備仿真運(yùn)行等功能[1]。
近幾年,隨著計(jì)算機(jī)硬件及軟件技術(shù)不斷進(jìn)步,虛擬仿真技術(shù)不斷被應(yīng)用于各行各業(yè)。Unity3D作為一款性能強(qiáng)大的跨平臺(tái)開發(fā)軟件,應(yīng)用也越來越廣泛。采用Unity3D軟件開發(fā)電磁軌道交通仿真平臺(tái)三維綜合監(jiān)控系統(tǒng),通過改變?nèi)S監(jiān)控系統(tǒng)中人物模型的視角,可以實(shí)現(xiàn)對(duì)三維場(chǎng)景中的設(shè)備進(jìn)行巡檢等功能[2],同時(shí)三維監(jiān)控系統(tǒng)能夠?qū)⒎抡嫫脚_(tái)上的設(shè)備及設(shè)備狀態(tài)信息以純數(shù)字化模型進(jìn)行展示,以提供更直觀的監(jiān)控效果。
電磁軌道交通是以地面鋪設(shè)的磁釘作為車輛行駛導(dǎo)軌的一種無人駕駛交通模式,目前這一交通模式被應(yīng)用于公共交通領(lǐng)域,具有道路改造成本低、建設(shè)周期短、設(shè)備維護(hù)成本低等多種優(yōu)勢(shì)。
電磁軌道交通模擬仿真平臺(tái)是按電磁軌道交通原理制作的一個(gè)沙盤,具備與實(shí)際電磁軌道交通相同的功能,同時(shí)配備若干對(duì)外數(shù)據(jù)接口,可以實(shí)現(xiàn)與外部設(shè)備的互聯(lián)及數(shù)據(jù)交互。電磁軌道交通仿真平臺(tái)如圖1所示,對(duì)外提供的數(shù)據(jù)種類見表1。
表1 電磁軌道交通仿真平臺(tái)對(duì)外數(shù)據(jù)接口
圖1 電磁軌道交通仿真平臺(tái)
Unity3D是一款跨平臺(tái)圖形化三維軟件,能夠提供渲染、物理模擬、音樂音效、腳本及場(chǎng)景管理等基本功能,具有可視化編輯開發(fā)環(huán)境,支持包括C#、JavaScript在內(nèi)的腳本語言,默認(rèn)的腳本編輯器為Monodevelop,也可使用Visual Studio作為腳本編輯器??蓪⑼ㄟ^3Dmax、Maya建立的模型導(dǎo)入U(xiǎn)nity3D中進(jìn)行相應(yīng)的操作,通過編寫對(duì)應(yīng)的腳本可以實(shí)現(xiàn)模型的各種動(dòng)態(tài)模擬效果[3]。
NetControl是上海電氣推出的一款工業(yè)組態(tài)軟件,目前已在電力系統(tǒng)、軌道交通、泵站系統(tǒng)中應(yīng)用,具備監(jiān)控系統(tǒng)畫面組態(tài)、腳本控制、數(shù)據(jù)記錄存儲(chǔ)、控件二次開發(fā)等多種功能。通過NetControl與仿真平臺(tái)互聯(lián),可以進(jìn)行數(shù)據(jù)交互操作,并可將數(shù)據(jù)實(shí)時(shí)更新至SQL Server數(shù)據(jù)庫(kù)。
整個(gè)系統(tǒng)包括仿真平臺(tái)、NetControl監(jiān)控系統(tǒng)、SQL Server數(shù)據(jù)庫(kù)、Unity3D工程。整體框架分為四層,仿真平臺(tái)作為被控對(duì)象提供數(shù)據(jù)源,NetControl監(jiān)控系統(tǒng)作為二維監(jiān)控系統(tǒng)與仿真平臺(tái)互聯(lián),SQL Server數(shù)據(jù)庫(kù)負(fù)責(zé)存儲(chǔ)NetControl監(jiān)控系統(tǒng)中記錄的數(shù)據(jù),Unity3D工程通過連接SQL Server數(shù)據(jù)庫(kù)取得數(shù)據(jù)并通過腳本實(shí)現(xiàn)相應(yīng)的動(dòng)畫效果。系統(tǒng)整體框架如圖2所示。
圖2 系統(tǒng)整體框架
NetControl中集成了大量的預(yù)制圖標(biāo)、控件等模板,可直接用于監(jiān)控畫面組態(tài),并通過綁定變量或編寫腳本進(jìn)行監(jiān)控畫面的顯示與控制。同時(shí),NetControl中還集成了大量通信驅(qū)動(dòng)程序,可以與多種控制器進(jìn)行設(shè)備互聯(lián)。NetControl監(jiān)控系統(tǒng)的實(shí)現(xiàn)主要分為以下幾個(gè)步驟。
系統(tǒng)中,仿真平臺(tái)由其它廠家提供,支持Modbus通信協(xié)議。在NetControl中建立Modbus類型輸入與輸出設(shè)備連接,并進(jìn)行相應(yīng)的參數(shù)配置,將仿真平臺(tái)控制器掛載在NetControl建立的輸入輸出連接中,作為服務(wù)器端,NetControl監(jiān)控系統(tǒng)則作為客戶端,如圖3所示。
圖3 設(shè)備連接示意圖
在建立設(shè)備輸入輸出連接后,在連接中建立對(duì)應(yīng)的輸入輸出變量,用于NetControl與仿真平臺(tái)控制器進(jìn)行數(shù)據(jù)交換。圖4所示為截取的部分輸入輸出變量。
圖4 部分輸入輸出變量截圖
系統(tǒng)中的監(jiān)控畫面主要包括車輛運(yùn)行狀態(tài)畫面、車站設(shè)備畫面和交通燈狀態(tài)畫面,通過利用NetControl內(nèi)置的多種控件及圖標(biāo)完成所有監(jiān)控畫面的組態(tài),并將在設(shè)備連接中建立的輸入輸出變量與對(duì)應(yīng)的控件進(jìn)行綁定。由于在實(shí)現(xiàn)畫面動(dòng)態(tài)功能方面進(jìn)行簡(jiǎn)單的變量綁定是無法實(shí)現(xiàn)的,因此可以使用NetControl集成的用戶程序功能開發(fā)對(duì)應(yīng)的控制腳本。
NetControl的用戶程序功能支持C#語言,并在用戶程序功能中集成了多種類和方法,可以直接調(diào)用,并且可以編寫自定義類及方法,還可以添加外部程序集,使NetControl具備功能強(qiáng)大的自定義開發(fā)。圖5所示為截取的屏蔽門監(jiān)控畫面。
圖5 屏蔽門監(jiān)控畫面截圖
為了實(shí)現(xiàn)Unity3D與仿真平臺(tái)進(jìn)行數(shù)據(jù)交互,系統(tǒng)采用NetControl將仿真平臺(tái)數(shù)據(jù)存儲(chǔ)至SQL Server數(shù)據(jù)庫(kù)的方法,然后Unity3D通過連接SQL Server數(shù)據(jù)庫(kù)獲取仿真平臺(tái)的數(shù)據(jù),并進(jìn)行相應(yīng)的處理。
在NetControl中具備外部訪問功能,可以實(shí)現(xiàn)Unity3D訪問NetControl[4-5]。事實(shí)上,NetControl的外部訪問功能就是將需要記錄數(shù)據(jù)的變量值存儲(chǔ)至SQL Server數(shù)據(jù)庫(kù)并實(shí)時(shí)更新,外部設(shè)備通過SQL Server提供的ADO.Net數(shù)據(jù)庫(kù)接口對(duì)數(shù)據(jù)庫(kù)進(jìn)行連接、訪問,進(jìn)而間接實(shí)現(xiàn)對(duì)NetControl的訪問。
在實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)至數(shù)據(jù)庫(kù)之前,需要在SQL Server中建立相應(yīng)的數(shù)據(jù)庫(kù)及數(shù)據(jù)表,且數(shù)據(jù)表中需要具備一個(gè)主鍵,其它列也需要和NetControl中的變量一一對(duì)應(yīng)。
實(shí)現(xiàn)NetControl外部訪問的具體步驟如下。
(1) 在NetControl的外部訪問功能中新建配置項(xiàng),并選擇數(shù)據(jù)庫(kù)類型,如圖6所示。
圖6 新建外部訪問配置項(xiàng)截圖
(2) 配置數(shù)據(jù)庫(kù)、數(shù)據(jù)表的來源,并為數(shù)據(jù)表中對(duì)應(yīng)的項(xiàng)綁定NetControl中的輸入輸出變量,完成輸入輸出變量實(shí)時(shí)存儲(chǔ)至數(shù)據(jù)庫(kù)對(duì)應(yīng)的表中,如圖7、圖8所示。
圖7 選擇數(shù)據(jù)庫(kù)截圖
圖8 數(shù)據(jù)表與輸入輸出變量綁定截圖
模型導(dǎo)入U(xiǎn)nity3D軟件后,需要通過編寫腳本實(shí)現(xiàn)動(dòng)畫控制。
導(dǎo)入至Unity3D軟件中的主要模型包括車輛、車站(含閘機(jī)、屏蔽門、信息顯示屏等)、交通燈等,這些模型的數(shù)據(jù)都來自于通過NetControl外部訪問功能保存至數(shù)據(jù)庫(kù)中的數(shù)值。實(shí)現(xiàn)Unity3D動(dòng)畫控制的步驟如下。
在Unity3D中可以添加外部程序集、動(dòng)態(tài)鏈接庫(kù),同時(shí)Unity3D對(duì).Net Framework框架具有良好的支持。Unity3D中采用ADO.Net數(shù)據(jù)庫(kù)接口對(duì)SQL Server進(jìn)行連接、訪問[6-7]。
采用ADO.Net技術(shù)需要添加幾種動(dòng)態(tài)鏈接庫(kù),包含System.Data.dll、System.Data.SqlClient、I18N.Dll、I18N.CJK.Dll、I18N.West.Dll等[8-9],外部動(dòng)態(tài)鏈接庫(kù)文件需要導(dǎo)入至Unity3D資源目錄Assets中的Plugins目錄下,此目錄下的動(dòng)態(tài)鏈接庫(kù)會(huì)自動(dòng)添加至腳本程序的引用中,從而在編寫腳本程序時(shí)可以調(diào)用相應(yīng)的方法。
完成以上操作后,可以進(jìn)行腳本程序代碼的編寫。在Unity3D中對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作的主要代碼包括以下幾個(gè)部分。
(1) 獲取SQL Server數(shù)據(jù)庫(kù)主機(jī)的網(wǎng)際協(xié)議(IP)地址,如圖9所示。
圖9 獲取數(shù)據(jù)庫(kù)主機(jī)IP地址代碼
(2) 根據(jù)連接字符串連接SQL Server數(shù)據(jù)庫(kù),對(duì)數(shù)據(jù)庫(kù)的連接操作放在Start方法中進(jìn)行。這一方法在Unity3D運(yùn)行時(shí)被調(diào)用,并且只調(diào)用一次,如圖10所示。
圖10 Start方法代碼
(3) 應(yīng)用SQL語句對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢,并將對(duì)數(shù)據(jù)庫(kù)的查詢操作放在FixedUpdate方法中。這一方法在Unity3D運(yùn)行過程中周期性調(diào)用,執(zhí)行周期可進(jìn)行設(shè)置,從而實(shí)現(xiàn)實(shí)時(shí)獲取數(shù)據(jù)庫(kù)中的數(shù)據(jù)[10],如圖11所示。獲取數(shù)據(jù)后,按不同的數(shù)據(jù)信號(hào)類型放置在對(duì)應(yīng)的數(shù)組中。
圖11 FixedUpdate方法代碼
根據(jù)從數(shù)據(jù)庫(kù)獲得的數(shù)據(jù)對(duì)Unity3D中的物體進(jìn)行控制,實(shí)現(xiàn)動(dòng)畫效果。通過編寫腳本程序?qū)崿F(xiàn)車輛行駛、車門開關(guān)、閘機(jī)啟閉、屏蔽門開合、交通燈變化等,由于篇幅有限,此處不再列出詳細(xì)的實(shí)現(xiàn)代碼。實(shí)際效果如圖12所示。
圖12 電磁軌道交通虛擬效果
采用Unity3D和NetControl組態(tài)軟件實(shí)現(xiàn)了電磁軌道交通仿真平臺(tái)綜合監(jiān)控系統(tǒng)的開發(fā),系統(tǒng)不僅具有數(shù)據(jù)信息與狀態(tài)顯示功能,而且可以進(jìn)行三維動(dòng)畫監(jiān)控,對(duì)設(shè)備狀態(tài)的監(jiān)控更逼真、直觀[11]。筆者所介紹模式可應(yīng)用于多種監(jiān)控系統(tǒng)中,如地下軌道交通站點(diǎn)綜合監(jiān)控、工廠綜合監(jiān)控等。
另一方面,由于NetControl的外部訪問功能向數(shù)據(jù)庫(kù)更新數(shù)據(jù)的最短周期為1s,在一定程度上會(huì)造成數(shù)據(jù)更新滯后,因此在未來改進(jìn)中可采用在Unity3D中編寫腳本程序的方法直接與外部設(shè)備進(jìn)行輸入輸出通信[12],從而使數(shù)據(jù)更新的實(shí)時(shí)性更強(qiáng)。
[1] 楊程,劉濤,陳念年,等.3D數(shù)字工廠監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].化工自動(dòng)化及儀表,2012,39(1): 108-111.
[2] 倪萌.基于Unity3D的汽車發(fā)動(dòng)機(jī)虛擬裝配訓(xùn)練考評(píng)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].北京: 北京工業(yè)大學(xué),2014.
[3] 李益.基于Unity3d的磨礦車間虛擬仿真系統(tǒng)[D].大連: 大連理工大學(xué),2014.
[4] 張勇旭,李力雄,康盛.通用組態(tài)軟件驅(qū)動(dòng)程序的設(shè)計(jì)與開發(fā)[J].工業(yè)控制計(jì)算機(jī).2009,22(9): 1-3.
[5] 楊恒亮,朱浩翔,魯?shù)?一種基于3D視覺補(bǔ)償?shù)臋C(jī)器人整車涂膠應(yīng)用[J].裝備機(jī)械,2010(1): 19-21.
[6] 佘慎思,楊文斌,李春.風(fēng)力發(fā)電場(chǎng)SCADA系統(tǒng)的設(shè)計(jì)[J].上海電氣技術(shù),2010,3(3): 39-42.
[7] 李俊軍.基于Unity3D的室內(nèi)建筑三維建模與交互系統(tǒng)實(shí)現(xiàn)[D].徐州: 中國(guó)礦業(yè)大學(xué),2014.
[8] 李文赫,陸劍峰,劉艷嬌.基于Unity3D的三維遠(yuǎn)程監(jiān)視系統(tǒng)中的通信方法研究和實(shí)現(xiàn)[J].制造業(yè)自動(dòng)化,2015,37(24): 108-109,120.
[9] 張利利,李仁義,李曉京,等.Unity3D與數(shù)據(jù)庫(kù)通信方法的研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,2014,24(3): 229-232.
[10] 曾林森.基于Unity3D的跨平臺(tái)虛擬駕駛視景仿真研究[D].長(zhǎng)沙: 中南大學(xué),2013.
[11] 弓建華.虛擬3D變電站監(jiān)視系統(tǒng)的研究[D].保定: 華北電力大學(xué),2014.
[12] 李金永,吳寅生,鄭建峰,等.基于Unity3D的油田作業(yè)仿真考核系統(tǒng)移動(dòng)設(shè)備客戶端的設(shè)計(jì)與實(shí)現(xiàn)[J].系統(tǒng)仿真技術(shù),2016,12(1): 71-77.