賁道偉,吳明生,于躍
(上海振華重工(集團)股份有限公司智慧集團,上海 200125)
隨著碼頭對監(jiān)控和辦公自動化的需求的迫切提升,SCADA(數(shù)據(jù)采集與監(jiān)視控制系統(tǒng)Supervisory Control And Data Acquisition,以下簡稱“SCADA”)系統(tǒng)的功能越來越強,品質(zhì)要求越來越精,特別是在智能碼頭領域。振華重工自主開發(fā)了一套碼頭監(jiān)控系統(tǒng),其主要功能包括多種控件的支持,二次開發(fā)代碼,新型操作和皮膚的支持,在智能碼頭監(jiān)控系統(tǒng)打開了市場。近年,公司針對客戶的需求,新開發(fā)了SCADA 3D,岸橋/輪胎吊/橋吊的模塊化組件,基于RESTful的分布式監(jiān)控服務,這些功能的開發(fā)大力提升了公司的產(chǎn)品競爭力,進一步的拓展了港機市場。
SCADA 3D完整的開發(fā)了一套原生編輯器,兼容原SCADA的數(shù)據(jù)格式和2D場景,支持了常見的3D技術,如骨骼動畫,天空盒,光影效果,滿足了工業(yè)化場景對性能和效果需求;岸橋/輪胎吊/橋吊的模塊化組件,允許用戶通過配置一系列的參數(shù)配置,無需美術的參與,完成對岸橋/輪胎吊/橋吊常用組件的快速開發(fā);模塊化的分布式監(jiān)控服務允許用戶在跨操作系統(tǒng),跨開發(fā)語言,通過RESTful協(xié)議,獲取分布在網(wǎng)絡不同端口的程序的運行狀態(tài)[1]。
國內(nèi)外的最常見的做法是采用游戲引擎Unity,借助于Unity的強大3D功能開發(fā)出一套實時監(jiān)控3D應用。這種做法能快速滿足需求,沒有技術障礙,而劣勢在于,3D應用必須獨立運行。ZPMCSCADA3D為了保證3D畫面嵌入SCADA應用,另辟蹊徑,獨立開發(fā)了一套完整的3D編輯器和3D嵌入方式。
3D組態(tài)化模塊作為SCADA的子功能,用戶可以選擇是否使用。如果使用,簡單的拖拽和配置導入的場景,畫面將自動識別包含3D控件的畫面,自動將畫面轉(zhuǎn)化為3D畫面。3D組態(tài)化模塊主要分為兩部分:3D場景編輯器和3D場景嵌入原SCADA編輯器[2]。
3D場景編輯器作為一個獨立的應用程序,包括主畫面,場景節(jié)點編輯器,屬性編輯器,文件夾窗口,提示窗口等多個窗口,允許用戶編輯場景并保存為XML格式的文件。
SCADA將3D場景單個控件的形式集成到SCADA中,在掃描到SCADA中有3D控件后,自動將畫面切換到DirectX渲染模式下,攝像頭信息在3D控件中給出,和原SCADA兼容,滿足了快速開發(fā)3D場景的需求。

圖1 SCADA3D架構說明圖

圖2 3D場景編輯器的架構
3D場景編輯器是一個獨立應用程序,可以在SCADA中啟動,也可以通過EXE應用程序啟動。編輯器包含了主場景窗口,節(jié)點窗口,屬性窗口,快捷欄,文件夾窗口,提示窗口。
3D場景編輯器可以打開工程文件中3DScene目錄下的XML場景文件。啟動時,會讀取和SCADA共享的配置文件,打開默認工程。

圖3 SCADA 3D編輯器
3D場景編輯器采用了最新理念的編輯器架構,模仿了3D游戲引擎Unity的架構,包含了主場景,樹形節(jié)點,屬性窗口。采用所見即所得的設計理念,對整個場景的編輯結(jié)果都可以在主場景窗口中看見。
樹形菜單將整個場景用樹形菜單編輯,分為文件夾,和3D對象,燈光,廣告牌等多種對象。既支持了豐富的對象,也簡化了整個場景的管理。添加,刪除,拷貝,重命名,移動位置等,大大簡化了用戶的制作時間。
對場景樹的每一個節(jié)點,我們都可以在屬性窗口中支持,支持編輯位置,旋轉(zhuǎn),縮放,是否可視等屬性。這些屬性都可以動態(tài)綁定SCADA的數(shù)據(jù)點。

圖4 3D場景嵌入SCADA架構
3D場景編輯器的輸出文件包含一個XML文件,包含所有的場景信息,包括綁定點的信息,而3D模型,貼圖文件單獨分開保存。
在2DSCADA畫面中,拖入3D對象,配置3D對象的場景文件后,畫面自動識別,加載XML文件,并轉(zhuǎn)換為3D畫面。
渲染引擎是3D應用的心臟,決定了渲染速度和畫面效果。引擎的架構同樣也影響了3D編輯器的架構和嵌入方式。在研究了多個開源引擎后,我們考慮了OGRE,Irrlicht,Godot等三款游戲引擎進行重點考察。
OGRE引擎開源,但是結(jié)構復雜,不利于修改底層代碼。Godot功能強大,但是是獨立EXE應用,不利于作為子功能嵌入SCADA中。而Irrlicht代碼清晰,結(jié)構簡單,完美支持了MFC的嵌入。經(jīng)過多方面的考量,我們采用了Irrlicht引擎。
該引擎很好的支持了光影,水面特效,天空盒,骨骼動畫。底層代碼也非常友好,杰出地支持了MFC和底層對新數(shù)據(jù)格式的支持。
岸橋/輪胎吊/軌道吊本質(zhì)上是一個封裝過的圖形組合組件,我們在原有的圖形組合組件基礎上加入了參數(shù)配置,讓程序根據(jù)參數(shù)配置通過代碼修改子圖形的大小,位置,動畫等常規(guī)信息。
采用模塊化,我們拋棄了原來每個岸橋/輪胎吊/軌道吊模型美術輔助,開發(fā)人員配合的工作模式,允許開發(fā)人員自行搭建模塊,使原本繁復的工作流程變得簡單化,釋放了員工的工作量[3]。①可以方便工程人員快速開發(fā)組件;②無需美術人員的參與。
模態(tài)化組件存在基礎功能修改麻煩,上手難等缺點。由于工程不需要反復變動,整體來看利大于弊。①如有基礎功能變動,需要在代碼中修改,費時費力;②參數(shù)較多,使用需要熟悉各個參數(shù)。
網(wǎng)絡應用程序,分為前后端兩部分。當前的發(fā)展趨勢,就是前端設備層出不窮。因此,必須有一種統(tǒng)一的機制,以便不同的前端設備與后端進行通信。這導致API構架的流行。RESTful API就是目前較為成熟的互聯(lián)網(wǎng)應用程序的API設計理論。REST(Representational State Transfer)表述性狀態(tài)轉(zhuǎn)換,REST指的是一組架構約束條件和原則,支持分布式架構[4-5]。
簡單地來說REST它是一種使用URL來定位資源,使用HTTP請求描述操作的Web服務規(guī)范。基于RESTful API的分布式監(jiān)控系統(tǒng)有以下優(yōu)點:①前后端分離,和前端無關;②支持多種操作系統(tǒng),支持多種語言;③完備的軟件支持方案,支持Swagger Editor在線編輯,便于API的共享。

圖5 分布式監(jiān)控架構
3.3.1 服務器
工程設計了兩個dll(C#版和C++版)嵌入到各個子系統(tǒng)中,為客戶端提供統(tǒng)一的REST服務,以下是服務端dll的接口:
(1)Start啟動監(jiān)控程序,參數(shù)端口號。
(2)Stop關閉監(jiān)控程序。
(3)C++設置/獲取四種類型的自定義屬性:SetFloat GetFloat;SetBoolean GetBoolean;SetInt GetInt;SetString GetString。
(4)C#設置/獲取自定義屬性:GetObject SetObject
程序員可以啟動一個監(jiān)控程序,并向監(jiān)控程序?qū)戧P鍵字和對應的值。并且程序默認提供了CPU和內(nèi)存的使用情況[6-7]。
3.3.2 客戶端
我們采用SwaggerEditor編輯器,為客戶端提供如下接口:

圖6 監(jiān)控服務接口
①Read選擇性瀏覽部分參數(shù)返回數(shù)據(jù);②ReadAll瀏覽遍歷所有參數(shù)和值;③Browse瀏覽遍歷所有參數(shù),不返回值。
Swagger可以將接口保存為JSON格式文件,方便用戶提取,儲存。
在信息化、智能化的時代,用戶的需求層出不窮,只有不斷滿足客戶的需求,企業(yè)才能在競爭日益激烈的現(xiàn)在站穩(wěn)腳步。國外相同的產(chǎn)品價格一直居高不下,國內(nèi)的產(chǎn)品不能滿足碼頭客戶的需求,在這種背景下,ZPMCSCADA應用而生,ZPMCSCADA致力于解決碼頭用戶的智能監(jiān)控需求,為振華的硬件服務保駕護航。
本文描述了振華在SCADA方面的最新的成果,為振華在激烈的市場競爭中站穩(wěn)腳跟:嵌入式的SCADA3D模塊,將3D畫面和2D畫面集成在一起,做到一體化岸橋/輪胎吊/軌道吊的組件模塊化,提升了開發(fā)人員的開發(fā)效率基于RESTful的分布式監(jiān)控系統(tǒng),跨系統(tǒng),跨平臺進行軟件監(jiān)控ZPMCSCADA致力于成為國內(nèi)頂級的工業(yè)組態(tài)軟件,為企業(yè)的長期發(fā)展和布局做準備。同時也為行業(yè)內(nèi)其他的SCADA軟件提供借鑒作用,一同推動國內(nèi)組態(tài)軟件的共同進步。