庞海亮
上海电气集团股份有限公司 中央研究院 上海 200070
在工业控制领域中,组态软件作为开发综合监控系统常用的平台应用非常广泛,常见的组态软件包括西门子WinCC、施耐德Intouch、北京亚控KingView和上海电气NetControl等。不同品牌的组态软件虽然在具体开发使用方面有所不同,但在总体功能框架方面都非常类似,同时也都存在一个问题: 由于对三维画面支持不佳,因此不能实现设备地理信息系统(GIS)监控、设备自动巡检、设备仿真运行等功能[1]。
近几年,随着计算机硬件及软件技术不断进步,虚拟仿真技术不断被应用于各行各业。Unity3D作为一款性能强大的跨平台开发软件,应用也越来越广泛。采用Unity3D软件开发电磁轨道交通仿真平台三维综合监控系统,通过改变三维监控系统中人物模型的视角,可以实现对三维场景中的设备进行巡检等功能[2],同时三维监控系统能够将仿真平台上的设备及设备状态信息以纯数字化模型进行展示,以提供更直观的监控效果。
电磁轨道交通是以地面铺设的磁钉作为车辆行驶导轨的一种无人驾驶交通模式,目前这一交通模式被应用于公共交通领域,具有道路改造成本低、建设周期短、设备维护成本低等多种优势。
电磁轨道交通模拟仿真平台是按电磁轨道交通原理制作的一个沙盘,具备与实际电磁轨道交通相同的功能,同时配备若干对外数据接口,可以实现与外部设备的互联及数据交互。电磁轨道交通仿真平台如图1所示,对外提供的数据种类见表1。
表1 电磁轨道交通仿真平台对外数据接口
图1 电磁轨道交通仿真平台
Unity3D是一款跨平台图形化三维软件,能够提供渲染、物理模拟、音乐音效、脚本及场景管理等基本功能,具有可视化编辑开发环境,支持包括C#、JavaScript在内的脚本语言,默认的脚本编辑器为Monodevelop,也可使用Visual Studio作为脚本编辑器。可将通过3Dmax、Maya建立的模型导入Unity3D中进行相应的操作,通过编写对应的脚本可以实现模型的各种动态模拟效果[3]。
NetControl是上海电气推出的一款工业组态软件,目前已在电力系统、轨道交通、泵站系统中应用,具备监控系统画面组态、脚本控制、数据记录存储、控件二次开发等多种功能。通过NetControl与仿真平台互联,可以进行数据交互操作,并可将数据实时更新至SQL Server数据库。
整个系统包括仿真平台、NetControl监控系统、SQL Server数据库、Unity3D工程。整体框架分为四层,仿真平台作为被控对象提供数据源,NetControl监控系统作为二维监控系统与仿真平台互联,SQL Server数据库负责存储NetControl监控系统中记录的数据,Unity3D工程通过连接SQL Server数据库取得数据并通过脚本实现相应的动画效果。系统整体框架如图2所示。
图2 系统整体框架
NetControl中集成了大量的预制图标、控件等模板,可直接用于监控画面组态,并通过绑定变量或编写脚本进行监控画面的显示与控制。同时,NetControl中还集成了大量通信驱动程序,可以与多种控制器进行设备互联。NetControl监控系统的实现主要分为以下几个步骤。
系统中,仿真平台由其它厂家提供,支持Modbus通信协议。在NetControl中建立Modbus类型输入与输出设备连接,并进行相应的参数配置,将仿真平台控制器挂载在NetControl建立的输入输出连接中,作为服务器端,NetControl监控系统则作为客户端,如图3所示。
图3 设备连接示意图
在建立设备输入输出连接后,在连接中建立对应的输入输出变量,用于NetControl与仿真平台控制器进行数据交换。图4所示为截取的部分输入输出变量。
图4 部分输入输出变量截图
系统中的监控画面主要包括车辆运行状态画面、车站设备画面和交通灯状态画面,通过利用NetControl内置的多种控件及图标完成所有监控画面的组态,并将在设备连接中建立的输入输出变量与对应的控件进行绑定。由于在实现画面动态功能方面进行简单的变量绑定是无法实现的,因此可以使用NetControl集成的用户程序功能开发对应的控制脚本。
NetControl的用户程序功能支持C#语言,并在用户程序功能中集成了多种类和方法,可以直接调用,并且可以编写自定义类及方法,还可以添加外部程序集,使NetControl具备功能强大的自定义开发。图5所示为截取的屏蔽门监控画面。
图5 屏蔽门监控画面截图
为了实现Unity3D与仿真平台进行数据交互,系统采用NetControl将仿真平台数据存储至SQL Server数据库的方法,然后Unity3D通过连接SQL Server数据库获取仿真平台的数据,并进行相应的处理。
在NetControl中具备外部访问功能,可以实现Unity3D访问NetControl[4-5]。事实上,NetControl的外部访问功能就是将需要记录数据的变量值存储至SQL Server数据库并实时更新,外部设备通过SQL Server提供的ADO.Net数据库接口对数据库进行连接、访问,进而间接实现对NetControl的访问。
在实现数据存储至数据库之前,需要在SQL Server中建立相应的数据库及数据表,且数据表中需要具备一个主键,其它列也需要和NetControl中的变量一一对应。
实现NetControl外部访问的具体步骤如下。
(1) 在NetControl的外部访问功能中新建配置项,并选择数据库类型,如图6所示。
图6 新建外部访问配置项截图
(2) 配置数据库、数据表的来源,并为数据表中对应的项绑定NetControl中的输入输出变量,完成输入输出变量实时存储至数据库对应的表中,如图7、图8所示。
图7 选择数据库截图
图8 数据表与输入输出变量绑定截图
模型导入Unity3D软件后,需要通过编写脚本实现动画控制。
导入至Unity3D软件中的主要模型包括车辆、车站(含闸机、屏蔽门、信息显示屏等)、交通灯等,这些模型的数据都来自于通过NetControl外部访问功能保存至数据库中的数值。实现Unity3D动画控制的步骤如下。
在Unity3D中可以添加外部程序集、动态链接库,同时Unity3D对.Net Framework框架具有良好的支持。Unity3D中采用ADO.Net数据库接口对SQL Server进行连接、访问[6-7]。
采用ADO.Net技术需要添加几种动态链接库,包含System.Data.dll、System.Data.SqlClient、I18N.Dll、I18N.CJK.Dll、I18N.West.Dll等[8-9],外部动态链接库文件需要导入至Unity3D资源目录Assets中的Plugins目录下,此目录下的动态链接库会自动添加至脚本程序的引用中,从而在编写脚本程序时可以调用相应的方法。
完成以上操作后,可以进行脚本程序代码的编写。在Unity3D中对数据库进行操作的主要代码包括以下几个部分。
(1) 获取SQL Server数据库主机的网际协议(IP)地址,如图9所示。
图9 获取数据库主机IP地址代码
(2) 根据连接字符串连接SQL Server数据库,对数据库的连接操作放在Start方法中进行。这一方法在Unity3D运行时被调用,并且只调用一次,如图10所示。
图10 Start方法代码
(3) 应用SQL语句对数据库进行查询,并将对数据库的查询操作放在FixedUpdate方法中。这一方法在Unity3D运行过程中周期性调用,执行周期可进行设置,从而实现实时获取数据库中的数据[10],如图11所示。获取数据后,按不同的数据信号类型放置在对应的数组中。
图11 FixedUpdate方法代码
根据从数据库获得的数据对Unity3D中的物体进行控制,实现动画效果。通过编写脚本程序实现车辆行驶、车门开关、闸机启闭、屏蔽门开合、交通灯变化等,由于篇幅有限,此处不再列出详细的实现代码。实际效果如图12所示。
图12 电磁轨道交通虚拟效果
采用Unity3D和NetControl组态软件实现了电磁轨道交通仿真平台综合监控系统的开发,系统不仅具有数据信息与状态显示功能,而且可以进行三维动画监控,对设备状态的监控更逼真、直观[11]。笔者所介绍模式可应用于多种监控系统中,如地下轨道交通站点综合监控、工厂综合监控等。
另一方面,由于NetControl的外部访问功能向数据库更新数据的最短周期为1s,在一定程度上会造成数据更新滞后,因此在未来改进中可采用在Unity3D中编写脚本程序的方法直接与外部设备进行输入输出通信[12],从而使数据更新的实时性更强。
[1] 杨程,刘涛,陈念年,等.3D数字工厂监控系统的设计与实现[J].化工自动化及仪表,2012,39(1): 108-111.
[2] 倪萌.基于Unity3D的汽车发动机虚拟装配训练考评系统的设计与实现[D].北京: 北京工业大学,2014.
[3] 李益.基于Unity3d的磨矿车间虚拟仿真系统[D].大连: 大连理工大学,2014.
[4] 张勇旭,李力雄,康盛.通用组态软件驱动程序的设计与开发[J].工业控制计算机.2009,22(9): 1-3.
[5] 杨恒亮,朱浩翔,鲁迪.一种基于3D视觉补偿的机器人整车涂胶应用[J].装备机械,2010(1): 19-21.
[6] 佘慎思,杨文斌,李春.风力发电场SCADA系统的设计[J].上海电气技术,2010,3(3): 39-42.
[7] 李俊军.基于Unity3D的室内建筑三维建模与交互系统实现[D].徐州: 中国矿业大学,2014.
[8] 李文赫,陆剑峰,刘艳娇.基于Unity3D的三维远程监视系统中的通信方法研究和实现[J].制造业自动化,2015,37(24): 108-109,120.
[9] 张利利,李仁义,李晓京,等.Unity3D与数据库通信方法的研究[J].计算机技术与发展,2014,24(3): 229-232.
[10] 曾林森.基于Unity3D的跨平台虚拟驾驶视景仿真研究[D].长沙: 中南大学,2013.
[11] 弓建华.虚拟3D变电站监视系统的研究[D].保定: 华北电力大学,2014.
[12] 李金永,吴寅生,郑建峰,等.基于Unity3D的油田作业仿真考核系统移动设备客户端的设计与实现[J].系统仿真技术,2016,12(1): 71-77.