賁道偉,吳明生,于躍
(上海振華重工(集團(tuán))股份有限公司智慧集團(tuán),上海 200125)
隨著碼頭對(duì)監(jiān)控和辦公自動(dòng)化的需求的迫切提升,SCADA(數(shù)據(jù)采集與監(jiān)視控制系統(tǒng)Supervisory Control And Data Acquisition,以下簡(jiǎn)稱“SCADA”)系統(tǒng)的功能越來(lái)越強(qiáng),品質(zhì)要求越來(lái)越精,特別是在智能碼頭領(lǐng)域。振華重工自主開(kāi)發(fā)了一套碼頭監(jiān)控系統(tǒng),其主要功能包括多種控件的支持,二次開(kāi)發(fā)代碼,新型操作和皮膚的支持,在智能碼頭監(jiān)控系統(tǒng)打開(kāi)了市場(chǎng)。近年,公司針對(duì)客戶的需求,新開(kāi)發(fā)了SCADA 3D,岸橋/輪胎吊/橋吊的模塊化組件,基于RESTful的分布式監(jiān)控服務(wù),這些功能的開(kāi)發(fā)大力提升了公司的產(chǎn)品競(jìng)爭(zhēng)力,進(jìn)一步的拓展了港機(jī)市場(chǎng)。
SCADA 3D完整的開(kāi)發(fā)了一套原生編輯器,兼容原SCADA的數(shù)據(jù)格式和2D場(chǎng)景,支持了常見(jiàn)的3D技術(shù),如骨骼動(dòng)畫,天空盒,光影效果,滿足了工業(yè)化場(chǎng)景對(duì)性能和效果需求;岸橋/輪胎吊/橋吊的模塊化組件,允許用戶通過(guò)配置一系列的參數(shù)配置,無(wú)需美術(shù)的參與,完成對(duì)岸橋/輪胎吊/橋吊常用組件的快速開(kāi)發(fā);模塊化的分布式監(jiān)控服務(wù)允許用戶在跨操作系統(tǒng),跨開(kāi)發(fā)語(yǔ)言,通過(guò)RESTful協(xié)議,獲取分布在網(wǎng)絡(luò)不同端口的程序的運(yùn)行狀態(tài)[1]。
國(guó)內(nèi)外的最常見(jiàn)的做法是采用游戲引擎Unity,借助于Unity的強(qiáng)大3D功能開(kāi)發(fā)出一套實(shí)時(shí)監(jiān)控3D應(yīng)用。這種做法能快速滿足需求,沒(méi)有技術(shù)障礙,而劣勢(shì)在于,3D應(yīng)用必須獨(dú)立運(yùn)行。ZPMCSCADA3D為了保證3D畫面嵌入SCADA應(yīng)用,另辟蹊徑,獨(dú)立開(kāi)發(fā)了一套完整的3D編輯器和3D嵌入方式。
3D組態(tài)化模塊作為SCADA的子功能,用戶可以選擇是否使用。如果使用,簡(jiǎn)單的拖拽和配置導(dǎo)入的場(chǎng)景,畫面將自動(dòng)識(shí)別包含3D控件的畫面,自動(dòng)將畫面轉(zhuǎn)化為3D畫面。3D組態(tài)化模塊主要分為兩部分:3D場(chǎng)景編輯器和3D場(chǎng)景嵌入原SCADA編輯器[2]。
3D場(chǎng)景編輯器作為一個(gè)獨(dú)立的應(yīng)用程序,包括主畫面,場(chǎng)景節(jié)點(diǎn)編輯器,屬性編輯器,文件夾窗口,提示窗口等多個(gè)窗口,允許用戶編輯場(chǎng)景并保存為XML格式的文件。
SCADA將3D場(chǎng)景單個(gè)控件的形式集成到SCADA中,在掃描到SCADA中有3D控件后,自動(dòng)將畫面切換到DirectX渲染模式下,攝像頭信息在3D控件中給出,和原SCADA兼容,滿足了快速開(kāi)發(fā)3D場(chǎng)景的需求。
圖1 SCADA3D架構(gòu)說(shuō)明圖
圖2 3D場(chǎng)景編輯器的架構(gòu)
3D場(chǎng)景編輯器是一個(gè)獨(dú)立應(yīng)用程序,可以在SCADA中啟動(dòng),也可以通過(guò)EXE應(yīng)用程序啟動(dòng)。編輯器包含了主場(chǎng)景窗口,節(jié)點(diǎn)窗口,屬性窗口,快捷欄,文件夾窗口,提示窗口。
3D場(chǎng)景編輯器可以打開(kāi)工程文件中3DScene目錄下的XML場(chǎng)景文件。啟動(dòng)時(shí),會(huì)讀取和SCADA共享的配置文件,打開(kāi)默認(rèn)工程。
圖3 SCADA 3D編輯器
3D場(chǎng)景編輯器采用了最新理念的編輯器架構(gòu),模仿了3D游戲引擎Unity的架構(gòu),包含了主場(chǎng)景,樹(shù)形節(jié)點(diǎn),屬性窗口。采用所見(jiàn)即所得的設(shè)計(jì)理念,對(duì)整個(gè)場(chǎng)景的編輯結(jié)果都可以在主場(chǎng)景窗口中看見(jiàn)。
樹(shù)形菜單將整個(gè)場(chǎng)景用樹(shù)形菜單編輯,分為文件夾,和3D對(duì)象,燈光,廣告牌等多種對(duì)象。既支持了豐富的對(duì)象,也簡(jiǎn)化了整個(gè)場(chǎng)景的管理。添加,刪除,拷貝,重命名,移動(dòng)位置等,大大簡(jiǎn)化了用戶的制作時(shí)間。
對(duì)場(chǎng)景樹(shù)的每一個(gè)節(jié)點(diǎn),我們都可以在屬性窗口中支持,支持編輯位置,旋轉(zhuǎn),縮放,是否可視等屬性。這些屬性都可以動(dòng)態(tài)綁定SCADA的數(shù)據(jù)點(diǎn)。
圖4 3D場(chǎng)景嵌入SCADA架構(gòu)
3D場(chǎng)景編輯器的輸出文件包含一個(gè)XML文件,包含所有的場(chǎng)景信息,包括綁定點(diǎn)的信息,而3D模型,貼圖文件單獨(dú)分開(kāi)保存。
在2DSCADA畫面中,拖入3D對(duì)象,配置3D對(duì)象的場(chǎng)景文件后,畫面自動(dòng)識(shí)別,加載XML文件,并轉(zhuǎn)換為3D畫面。
渲染引擎是3D應(yīng)用的心臟,決定了渲染速度和畫面效果。引擎的架構(gòu)同樣也影響了3D編輯器的架構(gòu)和嵌入方式。在研究了多個(gè)開(kāi)源引擎后,我們考慮了OGRE,Irrlicht,Godot等三款游戲引擎進(jìn)行重點(diǎn)考察。
OGRE引擎開(kāi)源,但是結(jié)構(gòu)復(fù)雜,不利于修改底層代碼。Godot功能強(qiáng)大,但是是獨(dú)立EXE應(yīng)用,不利于作為子功能嵌入SCADA中。而Irrlicht代碼清晰,結(jié)構(gòu)簡(jiǎn)單,完美支持了MFC的嵌入。經(jīng)過(guò)多方面的考量,我們采用了Irrlicht引擎。
該引擎很好的支持了光影,水面特效,天空盒,骨骼動(dòng)畫。底層代碼也非常友好,杰出地支持了MFC和底層對(duì)新數(shù)據(jù)格式的支持。
岸橋/輪胎吊/軌道吊本質(zhì)上是一個(gè)封裝過(guò)的圖形組合組件,我們?cè)谠械膱D形組合組件基礎(chǔ)上加入了參數(shù)配置,讓程序根據(jù)參數(shù)配置通過(guò)代碼修改子圖形的大小,位置,動(dòng)畫等常規(guī)信息。
采用模塊化,我們拋棄了原來(lái)每個(gè)岸橋/輪胎吊/軌道吊模型美術(shù)輔助,開(kāi)發(fā)人員配合的工作模式,允許開(kāi)發(fā)人員自行搭建模塊,使原本繁復(fù)的工作流程變得簡(jiǎn)單化,釋放了員工的工作量[3]。①可以方便工程人員快速開(kāi)發(fā)組件;②無(wú)需美術(shù)人員的參與。
模態(tài)化組件存在基礎(chǔ)功能修改麻煩,上手難等缺點(diǎn)。由于工程不需要反復(fù)變動(dòng),整體來(lái)看利大于弊。①如有基礎(chǔ)功能變動(dòng),需要在代碼中修改,費(fèi)時(shí)費(fèi)力;②參數(shù)較多,使用需要熟悉各個(gè)參數(shù)。
網(wǎng)絡(luò)應(yīng)用程序,分為前后端兩部分。當(dāng)前的發(fā)展趨勢(shì),就是前端設(shè)備層出不窮。因此,必須有一種統(tǒng)一的機(jī)制,以便不同的前端設(shè)備與后端進(jìn)行通信。這導(dǎo)致API構(gòu)架的流行。RESTful API就是目前較為成熟的互聯(lián)網(wǎng)應(yīng)用程序的API設(shè)計(jì)理論。REST(Representational State Transfer)表述性狀態(tài)轉(zhuǎn)換,REST指的是一組架構(gòu)約束條件和原則,支持分布式架構(gòu)[4-5]。
簡(jiǎn)單地來(lái)說(shuō)REST它是一種使用URL來(lái)定位資源,使用HTTP請(qǐng)求描述操作的Web服務(wù)規(guī)范?;赗ESTful API的分布式監(jiān)控系統(tǒng)有以下優(yōu)點(diǎn):①前后端分離,和前端無(wú)關(guān);②支持多種操作系統(tǒng),支持多種語(yǔ)言;③完備的軟件支持方案,支持Swagger Editor在線編輯,便于API的共享。
圖5 分布式監(jiān)控架構(gòu)
3.3.1 服務(wù)器
工程設(shè)計(jì)了兩個(gè)dll(C#版和C++版)嵌入到各個(gè)子系統(tǒng)中,為客戶端提供統(tǒng)一的REST服務(wù),以下是服務(wù)端dll的接口:
(1)Start啟動(dòng)監(jiān)控程序,參數(shù)端口號(hào)。
(2)Stop關(guān)閉監(jiān)控程序。
(3)C++設(shè)置/獲取四種類型的自定義屬性:SetFloat GetFloat;SetBoolean GetBoolean;SetInt GetInt;SetString GetString。
(4)C#設(shè)置/獲取自定義屬性:GetObject SetObject
程序員可以啟動(dòng)一個(gè)監(jiān)控程序,并向監(jiān)控程序?qū)戧P(guān)鍵字和對(duì)應(yīng)的值。并且程序默認(rèn)提供了CPU和內(nèi)存的使用情況[6-7]。
3.3.2 客戶端
我們采用SwaggerEditor編輯器,為客戶端提供如下接口:
圖6 監(jiān)控服務(wù)接口
①Read選擇性瀏覽部分參數(shù)返回?cái)?shù)據(jù);②ReadAll瀏覽遍歷所有參數(shù)和值;③Browse瀏覽遍歷所有參數(shù),不返回值。
Swagger可以將接口保存為JSON格式文件,方便用戶提取,儲(chǔ)存。
在信息化、智能化的時(shí)代,用戶的需求層出不窮,只有不斷滿足客戶的需求,企業(yè)才能在競(jìng)爭(zhēng)日益激烈的現(xiàn)在站穩(wěn)腳步。國(guó)外相同的產(chǎn)品價(jià)格一直居高不下,國(guó)內(nèi)的產(chǎn)品不能滿足碼頭客戶的需求,在這種背景下,ZPMCSCADA應(yīng)用而生,ZPMCSCADA致力于解決碼頭用戶的智能監(jiān)控需求,為振華的硬件服務(wù)保駕護(hù)航。
本文描述了振華在SCADA方面的最新的成果,為振華在激烈的市場(chǎng)競(jìng)爭(zhēng)中站穩(wěn)腳跟:嵌入式的SCADA3D模塊,將3D畫面和2D畫面集成在一起,做到一體化岸橋/輪胎吊/軌道吊的組件模塊化,提升了開(kāi)發(fā)人員的開(kāi)發(fā)效率基于RESTful的分布式監(jiān)控系統(tǒng),跨系統(tǒng),跨平臺(tái)進(jìn)行軟件監(jiān)控ZPMCSCADA致力于成為國(guó)內(nèi)頂級(jí)的工業(yè)組態(tài)軟件,為企業(yè)的長(zhǎng)期發(fā)展和布局做準(zhǔn)備。同時(shí)也為行業(yè)內(nèi)其他的SCADA軟件提供借鑒作用,一同推動(dòng)國(guó)內(nèi)組態(tài)軟件的共同進(jìn)步。