振华重工新型监控系统的研究与开发

2021-09-08 02:52:28贲道伟吴明生于跃
新型工业化 2021年6期
关键词:编辑器控件引擎

贲道伟,吴明生,于跃

(上海振华重工(集团)股份有限公司智慧集团,上海 200125)

0 引言

随着码头对监控和办公自动化的需求的迫切提升,SCADA(数据采集与监视控制系统Supervisory Control And Data Acquisition,以下简称“SCADA”)系统的功能越来越强,品质要求越来越精,特别是在智能码头领域。振华重工自主开发了一套码头监控系统,其主要功能包括多种控件的支持,二次开发代码,新型操作和皮肤的支持,在智能码头监控系统打开了市场。近年,公司针对客户的需求,新开发了SCADA 3D,岸桥/轮胎吊/桥吊的模块化组件,基于RESTful的分布式监控服务,这些功能的开发大力提升了公司的产品竞争力,进一步的拓展了港机市场。

SCADA 3D完整的开发了一套原生编辑器,兼容原SCADA的数据格式和2D场景,支持了常见的3D技术,如骨骼动画,天空盒,光影效果,满足了工业化场景对性能和效果需求;岸桥/轮胎吊/桥吊的模块化组件,允许用户通过配置一系列的参数配置,无需美术的参与,完成对岸桥/轮胎吊/桥吊常用组件的快速开发;模块化的分布式监控服务允许用户在跨操作系统,跨开发语言,通过RESTful协议,获取分布在网络不同端口的程序的运行状态[1]。

1 SCADA 3D模块

1.1 概述

国内外的最常见的做法是采用游戏引擎Unity,借助于Unity的强大3D功能开发出一套实时监控3D应用。这种做法能快速满足需求,没有技术障碍,而劣势在于,3D应用必须独立运行。ZPMCSCADA3D为了保证3D画面嵌入SCADA应用,另辟蹊径,独立开发了一套完整的3D编辑器和3D嵌入方式。

3D组态化模块作为SCADA的子功能,用户可以选择是否使用。如果使用,简单的拖拽和配置导入的场景,画面将自动识别包含3D控件的画面,自动将画面转化为3D画面。3D组态化模块主要分为两部分:3D场景编辑器和3D场景嵌入原SCADA编辑器[2]。

3D场景编辑器作为一个独立的应用程序,包括主画面,场景节点编辑器,属性编辑器,文件夹窗口,提示窗口等多个窗口,允许用户编辑场景并保存为XML格式的文件。

SCADA将3D场景单个控件的形式集成到SCADA中,在扫描到SCADA中有3D控件后,自动将画面切换到DirectX渲染模式下,摄像头信息在3D控件中给出,和原SCADA兼容,满足了快速开发3D场景的需求。

图1 SCADA3D架构说明图

1.2 3D场景编辑器详细设计

图2 3D场景编辑器的架构

3D场景编辑器是一个独立应用程序,可以在SCADA中启动,也可以通过EXE应用程序启动。编辑器包含了主场景窗口,节点窗口,属性窗口,快捷栏,文件夹窗口,提示窗口。

3D场景编辑器可以打开工程文件中3DScene目录下的XML场景文件。启动时,会读取和SCADA共享的配置文件,打开默认工程。

图3 SCADA 3D编辑器

3D场景编辑器采用了最新理念的编辑器架构,模仿了3D游戏引擎Unity的架构,包含了主场景,树形节点,属性窗口。采用所见即所得的设计理念,对整个场景的编辑结果都可以在主场景窗口中看见。

树形菜单将整个场景用树形菜单编辑,分为文件夹,和3D对象,灯光,广告牌等多种对象。既支持了丰富的对象,也简化了整个场景的管理。添加,删除,拷贝,重命名,移动位置等,大大简化了用户的制作时间。

对场景树的每一个节点,我们都可以在属性窗口中支持,支持编辑位置,旋转,缩放,是否可视等属性。这些属性都可以动态绑定SCADA的数据点。

1.3 3D场景如何嵌入SCADA

图4 3D场景嵌入SCADA架构

3D场景编辑器的输出文件包含一个XML文件,包含所有的场景信息,包括绑定点的信息,而3D模型,贴图文件单独分开保存。

在2DSCADA画面中,拖入3D对象,配置3D对象的场景文件后,画面自动识别,加载XML文件,并转换为3D画面。

1.4 渲染引擎

渲染引擎是3D应用的心脏,决定了渲染速度和画面效果。引擎的架构同样也影响了3D编辑器的架构和嵌入方式。在研究了多个开源引擎后,我们考虑了OGRE,Irrlicht,Godot等三款游戏引擎进行重点考察。

OGRE引擎开源,但是结构复杂,不利于修改底层代码。Godot功能强大,但是是独立EXE应用,不利于作为子功能嵌入SCADA中。而Irrlicht代码清晰,结构简单,完美支持了MFC的嵌入。经过多方面的考量,我们采用了Irrlicht引擎。

该引擎很好的支持了光影,水面特效,天空盒,骨骼动画。底层代码也非常友好,杰出地支持了MFC和底层对新数据格式的支持。

2 岸桥/轮胎吊/轨道吊的模块化组件

2.1 基本设计原理

岸桥/轮胎吊/轨道吊本质上是一个封装过的图形组合组件,我们在原有的图形组合组件基础上加入了参数配置,让程序根据参数配置通过代码修改子图形的大小,位置,动画等常规信息。

2.2 模态化的优点

采用模块化,我们抛弃了原来每个岸桥/轮胎吊/轨道吊模型美术辅助,开发人员配合的工作模式,允许开发人员自行搭建模块,使原本繁复的工作流程变得简单化,释放了员工的工作量[3]。①可以方便工程人员快速开发组件;②无需美术人员的参与。

2.3 模态化的缺点

模态化组件存在基础功能修改麻烦,上手难等缺点。由于工程不需要反复变动,整体来看利大于弊。①如有基础功能变动,需要在代码中修改,费时费力;②参数较多,使用需要熟悉各个参数。

3 基于RESTful API的分布式监控服务

3.1 RESTful API概述

网络应用程序,分为前后端两部分。当前的发展趋势,就是前端设备层出不穷。因此,必须有一种统一的机制,以便不同的前端设备与后端进行通信。这导致API构架的流行。RESTful API就是目前较为成熟的互联网应用程序的API设计理论。REST(Representational State Transfer)表述性状态转换,REST指的是一组架构约束条件和原则,支持分布式架构[4-5]。

3.2 RESTful API的优点

简单地来说REST它是一种使用URL来定位资源,使用HTTP请求描述操作的Web服务规范。基于RESTful API的分布式监控系统有以下优点:①前后端分离,和前端无关;②支持多种操作系统,支持多种语言;③完备的软件支持方案,支持Swagger Editor在线编辑,便于API的共享。

3.3 分布式监控的具体实现

图5 分布式监控架构

3.3.1 服务器

工程设计了两个dll(C#版和C++版)嵌入到各个子系统中,为客户端提供统一的REST服务,以下是服务端dll的接口:

(1)Start启动监控程序,参数端口号。

(2)Stop关闭监控程序。

(3)C++设置/获取四种类型的自定义属性:SetFloat GetFloat;SetBoolean GetBoolean;SetInt GetInt;SetString GetString。

(4)C#设置/获取自定义属性:GetObject SetObject

程序员可以启动一个监控程序,并向监控程序写关键字和对应的值。并且程序默认提供了CPU和内存的使用情况[6-7]。

3.3.2 客户端

我们采用SwaggerEditor编辑器,为客户端提供如下接口:

图6 监控服务接口

①Read选择性浏览部分参数返回数据;②ReadAll浏览遍历所有参数和值;③Browse浏览遍历所有参数,不返回值。

Swagger可以将接口保存为JSON格式文件,方便用户提取,储存。

4 结语

在信息化、智能化的时代,用户的需求层出不穷,只有不断满足客户的需求,企业才能在竞争日益激烈的现在站稳脚步。国外相同的产品价格一直居高不下,国内的产品不能满足码头客户的需求,在这种背景下,ZPMCSCADA应用而生,ZPMCSCADA致力于解决码头用户的智能监控需求,为振华的硬件服务保驾护航。

本文描述了振华在SCADA方面的最新的成果,为振华在激烈的市场竞争中站稳脚跟:嵌入式的SCADA3D模块,将3D画面和2D画面集成在一起,做到一体化岸桥/轮胎吊/轨道吊的组件模块化,提升了开发人员的开发效率基于RESTful的分布式监控系统,跨系统,跨平台进行软件监控ZPMCSCADA致力于成为国内顶级的工业组态软件,为企业的长期发展和布局做准备。同时也为行业内其他的SCADA软件提供借鉴作用,一同推动国内组态软件的共同进步。

猜你喜欢
编辑器控件引擎
你距离微信创作达人还有多远?
车辆段收发车运行图编辑器的设计与实现
关于.net控件数组的探讨
软件(2018年7期)2018-08-13 09:44:42
蓝谷: “涉蓝”新引擎
商周刊(2017年22期)2017-11-09 05:08:31
无形的引擎
河南电力(2015年5期)2015-06-08 06:01:46
基于Cocos2d引擎的PuzzleGame开发
基于VLIW目标机的ELF二进制编辑器设计与实现
就这样玩会VBA中常见的自定义控件
电脑迷(2012年24期)2012-04-29 00:44:03
One Engine Left只剩下一个引擎
在PowerBuUder中利用WinSock控件制作简单的Web服务器