張聰,林菲,王進(jìn),司華豪
(1.杭州電子科技大學(xué)計算機(jī)學(xué)院,浙江 杭州 310018;2.杭州電子科技大學(xué)人文藝術(shù)與數(shù)字媒體學(xué)院)
隨著信息技術(shù)的飛速發(fā)展,推動現(xiàn)代信息技術(shù)與實驗教學(xué)深度融合,拓展實驗教學(xué)的深度與廣度,已成為提升實驗教學(xué)效果與水平的重要方式。在工業(yè)自動化領(lǐng)域,結(jié)合物聯(lián)網(wǎng)、大數(shù)據(jù)、云計算、虛擬現(xiàn)實等技術(shù),將工業(yè)基礎(chǔ)設(shè)施和設(shè)備等數(shù)據(jù)資源以信息的流方式進(jìn)行虛實交互已成為主流趨勢[1-2]。推動工業(yè)虛擬仿真實驗平臺的研究建設(shè),對工業(yè)自動化仿真行業(yè)的發(fā)展具有重要意義。
在工業(yè)領(lǐng)域內(nèi),組態(tài)仿真技術(shù)的使用已較為成熟,如組態(tài)王、FIX、力控、WinCC、威淪等軟件[4],均可通過軟件包內(nèi)的二維平面設(shè)計工具,實現(xiàn)工業(yè)流程中硬件、數(shù)據(jù)、圖形圖像等組態(tài)仿真工作[4]。但基于二維設(shè)計的組態(tài)模式對仿真過程的表現(xiàn)力不是很強(qiáng),存在一定局限性。為了解決這個問題,有許多基于三維的虛擬仿真系統(tǒng)被設(shè)計出來,如RealGame 公司使用Unity3D 實現(xiàn)Windows 環(huán)境下的工業(yè)自動化生產(chǎn)線虛擬仿真實驗系統(tǒng)FactoryIO[5]。此類三維虛擬仿真實驗平臺雖能達(dá)到較好的仿真效果,但基于C/S 的系統(tǒng)結(jié)構(gòu),使其在跨平臺使用、安裝配置及升級維護(hù)上較為復(fù)雜。華南理工大學(xué)翟敬梅、郭培森等人使用WebGL構(gòu)建雙機(jī)器人運(yùn)動仿真實驗平臺,實現(xiàn)了基于B/S 的跨平臺機(jī)器人運(yùn)動仿真實驗系統(tǒng)[6]。但現(xiàn)有B/S 虛擬仿真系統(tǒng)的設(shè)計大多為單一案例場景,定制性較強(qiáng)。未能滿足高校在PLC 工業(yè)虛擬仿真實驗教學(xué)上的多樣性需求,缺乏一定的通用性。
因此,本文提出了基于WebGL 的PLC 組態(tài)虛擬仿真實驗系統(tǒng)的設(shè)計方案,結(jié)合跨平臺三維仿真技術(shù)與組態(tài)軟件的優(yōu)勢,為學(xué)生提供魯棒、易用的PLC 虛擬仿真實驗平臺,對工業(yè)仿真領(lǐng)域的發(fā)展和PLC 軟件人才的培養(yǎng)具有重要意義。
PLC組態(tài)虛擬仿真實驗系統(tǒng)遵循分層的架構(gòu)設(shè)計思想,基于開源跨平臺框架Electron 完成組態(tài)虛擬仿真實驗系統(tǒng)的構(gòu)建,支持在多平臺運(yùn)行。在構(gòu)建過程中,使用OpenGL ES 圖形庫、ThreeJs 引擎庫及PLC 串口通信接口模塊庫來提供對圖形及異構(gòu)設(shè)備通訊的支持。系統(tǒng)層級結(jié)構(gòu)自底向上分別為硬件層、服務(wù)層、業(yè)務(wù)層、展示層。系統(tǒng)總體架構(gòu)如圖1所示。
圖1 系統(tǒng)架構(gòu)圖
在硬件 層,由PC 和GPU 來提供對WebGL 中ThreeJS 和PhysiJs 的引擎計算支持[7]。在服務(wù)層,使用NodeJs 作為系統(tǒng)數(shù)據(jù)交互服務(wù)的支撐,使用Serialport和Dgram 模塊來完成與硬件層基于ModBusRtu[8]協(xié)議的數(shù)據(jù)通信。在業(yè)務(wù)層,主要分為虛擬仿真模型庫構(gòu)建、三維工業(yè)場景構(gòu)建及虛擬仿真運(yùn)行三個模塊。其中,虛擬仿真模型庫構(gòu)建部分包括三維模型設(shè)計、模型運(yùn)動庫構(gòu)建、模型碰撞檢測方法及自定義模型添加;三維工業(yè)場景構(gòu)建部分包括基礎(chǔ)環(huán)境設(shè)計、模型組裝及PLC 通訊配置;虛擬仿真運(yùn)行設(shè)計則包括虛擬漫游、模擬交互控制及仿真錯誤檢驗。在展示層,采用BootStrap 框架來構(gòu)建虛擬仿真實驗系統(tǒng)的前端頁面,并使用Webpack 來完成頁面組件的統(tǒng)一模塊管理。
⑴三維模型設(shè)計
虛擬仿真模型的設(shè)計方式主要有兩種,代碼繪制和三維建模軟件Rhino 繪制。根據(jù)模型的復(fù)雜程度,選擇效率最高的模型構(gòu)建方法?;A(chǔ)模型的構(gòu)建一般由代碼繪制。對于結(jié)構(gòu)較為復(fù)雜的工業(yè)模型選用建模軟件繪制。
⑵模型運(yùn)動庫構(gòu)建
本文基于PhysiJs 來實現(xiàn)運(yùn)動控制。通過對虛擬設(shè)備的運(yùn)動行為分析,將模型的運(yùn)動分為直線勻變速運(yùn)動、旋轉(zhuǎn)運(yùn)動及約束性復(fù)合運(yùn)動,可以通過構(gòu)建模型的運(yùn)動方程來實現(xiàn)運(yùn)動的仿真。而系統(tǒng)中的模型的運(yùn)動約束關(guān)系是基于D-H[9]思想實現(xiàn),根據(jù)每一個關(guān)節(jié)來建立其各自的參考坐標(biāo)系,使用單變量控制相鄰桿之間的轉(zhuǎn)移矩陣,然后再通過建立相對狀態(tài)轉(zhuǎn)移矩陣來表示各關(guān)節(jié)及連桿間的關(guān)系,最終得到連桿終端相對模型基底坐標(biāo)系的狀態(tài)轉(zhuǎn)移矩陣。本文通過模型的運(yùn)動屬性配置文件來封裝模型運(yùn)動接口,從而構(gòu)建出高拓展的模型運(yùn)動庫。在模型加載至場景前,均通過掃描屬性配置文件來加載模型運(yùn)動屬性,增強(qiáng)了模型庫的可拓展性與通用性。
⑶模型碰撞檢測方法
為了提升實驗仿真中碰撞檢測的計算效率,在每個模型加載至場景前,系統(tǒng)會為其設(shè)置相應(yīng)包圍盒。本試驗系統(tǒng)中因不存在會發(fā)生形變的模型對象,故使用簡單、高效、易于存儲的AABB 包圍盒作為層次包圍的底層盒結(jié)構(gòu),AABB包圍盒效果如圖2所示。
圖2 AABB包圍盒效果圖
圖2中A、B分別為三維空間中包圍盒上的最小點(diǎn)和最大點(diǎn)。AABB包圍盒在三維空間中的碰撞檢測是基于物體包圍盒的最大點(diǎn)和最小點(diǎn)的關(guān)系,通過對兩個物體的最大點(diǎn)和最小點(diǎn)在三個維度的坐標(biāo)關(guān)系的比較而得到兩物體的碰撞關(guān)系。為了提高碰撞檢測的精度與效率,使用自頂向下的方式來構(gòu)建層次包圍[10]來進(jìn)行精確碰撞檢測。如圖3 所示,層次包圍盒會將三維空間遞歸的劃分為不同層次的樹狀結(jié)構(gòu),并在當(dāng)前分割出的單塊區(qū)域再次進(jìn)行多叉劃分,直至劃分出的每一塊空間區(qū)域只包含單個元素或樹的深度達(dá)到一定閾值,即停止劃分,那么模型則以一棵多叉樹的方式來保存下來。
圖3 Top-down構(gòu)造過程圖
⑷自定義模型支持
系統(tǒng)默認(rèn)模型工具庫中的模型組件能夠滿足大部分實驗場景。若實驗者有特殊的自定義模型需要添加到組態(tài)場景中,則可通過自定義模型添加模塊來上傳本地模型。系統(tǒng)自定義模型導(dǎo)入標(biāo)準(zhǔn)如下:
①導(dǎo)入自定義模型數(shù)據(jù)格式應(yīng)為dae;
②導(dǎo)入自定義模型icon 應(yīng)為分辨不小于96*96且文件大小不大于1M的png;
③導(dǎo)入模型命名規(guī)則應(yīng)符合系統(tǒng)模型標(biāo)識方法要求;
④導(dǎo)入模型運(yùn)動屬性配置應(yīng)按照系統(tǒng)提供格式配置。
⑸模型庫構(gòu)建
系統(tǒng)將所有的模型進(jìn)行分類歸庫,構(gòu)建出完整的仿真工具模型庫。系統(tǒng)為每一個模型分別定義一個類別屬性及其在各自類別下的專有命名,工具箱模型效果如圖4所示。
圖4 工具箱效果圖
⑴基礎(chǔ)環(huán)境設(shè)計
從WebGL的場景構(gòu)建流程來看,一個完整的擬真三維工業(yè)環(huán)境應(yīng)包含帶有重力屬性的物理場景、攝像機(jī)、光源、渲染器及貼圖等。WebGL 場景構(gòu)建流程如圖5所示。
圖5 WebGL場景構(gòu)建流程圖
⑵模型組態(tài)
在構(gòu)建虛擬仿真場景部分,模型組裝是實現(xiàn)場景快速構(gòu)建的關(guān)鍵。系統(tǒng)主要通過模型間的三維一致性來實現(xiàn)模型的方位對齊,即通過不同模型間的面一致、點(diǎn)一致來實現(xiàn)點(diǎn)面對齊。
系統(tǒng)提供對模型對象六個緯度的操作方式,可利用光標(biāo)拖拽模型至虛擬環(huán)境中的任意位置。其中,三維場景中模型對象的獲取是通過DragControl 中的Raycaster 來實現(xiàn)[10]。在交互過程中,頁面點(diǎn)擊坐標(biāo)與三維空間射線交互方向的轉(zhuǎn)換方程如下:
其中,Cx為2d 坐標(biāo)x,Cy為2d 坐標(biāo)y,Bl為窗口左邊距,Bt為窗口上邊距,Bw為窗口寬度,Bh為窗口高度,Rd為射線在三維空間以camera為起點(diǎn)的方向向量。
⑶PLC通訊配置在PLC 通訊配置部分,使用Serialport模塊掃描連接到終端上的PLC 串口,并配置波特率、數(shù)據(jù)位、校驗位、停止位等參數(shù),這樣建立與PLC 硬件板的連接。在連接建立完成后,系統(tǒng)會掃描場景中現(xiàn)有模型對象,通過讀取模型屬性配置文件來加載對應(yīng)模型屬性,同時加載PLC 硬件板中的相應(yīng)數(shù)據(jù)單元。進(jìn)而實驗者可以通過拖拽方式來完成模型屬性與PLC 數(shù)據(jù)的一一對應(yīng),實現(xiàn)數(shù)據(jù)綁定。
⑴虛擬漫游
在仿真模擬時,系統(tǒng)提供了第三人稱的相機(jī)觀測視角,并支持旋轉(zhuǎn)、平移和縮放操作。為提高整個漫游過程的渲染性能,使用單加載模式繪制紋理貼圖,使用LOD[11]分層來約束渲染模式,并根據(jù)相機(jī)與模型的視距不同來調(diào)整渲染模式,即為遠(yuǎn)視距低精度渲染與近視距高精度渲染。
⑵模擬交互控制
在仿真模擬的整個過程中,將由PLC 實驗板上的代碼程序來控制場景中的模型運(yùn)動。在場景與PLC實驗板的數(shù)據(jù)交互過程中,系統(tǒng)通過UDP 指令幀向PLC 程序發(fā)送模型的運(yùn)動狀態(tài),同時PLC 實驗板通過返回應(yīng)答幀來反饋控制參數(shù),從而實現(xiàn)仿真過程的模擬交互控制。數(shù)據(jù)交互過程遵循ModbusRtu 協(xié)議,ModbusRtu協(xié)議對應(yīng)的十六進(jìn)制指令幀格式如表1所示。
表1 ModbusRtu指令幀格式
目前,本系統(tǒng)中已實現(xiàn)的場景包括IO 通訊、交通控制、機(jī)械軸、工件切割、機(jī)械臂、水位控制及組裝包裝流水線,并且不同場景分別由不同PLC 的控制程序來完成,場景實例效果如圖6所示。
圖6 場景實例
⑴系統(tǒng)流暢性測試
系統(tǒng)實際幀率性能對比如圖7 所示。圖7 上方折線為優(yōu)化后運(yùn)行幀數(shù),下方折線為優(yōu)化前幀數(shù),可以觀察到該系統(tǒng)在幀率優(yōu)化上的提升。
圖7 場景仿真過程幀率圖
⑵通訊測試
本文通過記錄場景仿真過程中指令傳遞時間來評價系統(tǒng)的指令傳遞效率,仿真指令延遲如圖8所示。
圖8 指令通信傳輸延遲
從圖8 中可以看出延遲在12ms~28ms 之間,通信最小延遲約15ms,最高延遲約為28ms,可知本文虛擬仿真系統(tǒng)的指令效率較優(yōu)。
本文針對工業(yè)控制領(lǐng)域PLC 軟件開發(fā)人才培養(yǎng)時受實驗設(shè)備、場地和試驗投入限制等問題,設(shè)計并實現(xiàn)了一套基于WebGL 的PLC 組態(tài)虛擬仿真實驗系統(tǒng),經(jīng)過一系列基準(zhǔn)測試后驗證了本系統(tǒng)具有較好的性能,具備在線快速搭建擬真三維實驗場景并進(jìn)行PLC 仿真實驗的教學(xué)條件,能夠提高工業(yè)控制領(lǐng)域人才的培養(yǎng)質(zhì)量。目前系統(tǒng)內(nèi)置個性化組合場景還不夠多,在未來會增加模型庫及工業(yè)場景搭建適配數(shù)量。