张聪,林菲,王进,司华豪
(1.杭州电子科技大学计算机学院,浙江 杭州 310018;2.杭州电子科技大学人文艺术与数字媒体学院)
随着信息技术的飞速发展,推动现代信息技术与实验教学深度融合,拓展实验教学的深度与广度,已成为提升实验教学效果与水平的重要方式。在工业自动化领域,结合物联网、大数据、云计算、虚拟现实等技术,将工业基础设施和设备等数据资源以信息的流方式进行虚实交互已成为主流趋势[1-2]。推动工业虚拟仿真实验平台的研究建设,对工业自动化仿真行业的发展具有重要意义。
在工业领域内,组态仿真技术的使用已较为成熟,如组态王、FIX、力控、WinCC、威沦等软件[4],均可通过软件包内的二维平面设计工具,实现工业流程中硬件、数据、图形图像等组态仿真工作[4]。但基于二维设计的组态模式对仿真过程的表现力不是很强,存在一定局限性。为了解决这个问题,有许多基于三维的虚拟仿真系统被设计出来,如RealGame 公司使用Unity3D 实现Windows 环境下的工业自动化生产线虚拟仿真实验系统FactoryIO[5]。此类三维虚拟仿真实验平台虽能达到较好的仿真效果,但基于C/S 的系统结构,使其在跨平台使用、安装配置及升级维护上较为复杂。华南理工大学翟敬梅、郭培森等人使用WebGL构建双机器人运动仿真实验平台,实现了基于B/S 的跨平台机器人运动仿真实验系统[6]。但现有B/S 虚拟仿真系统的设计大多为单一案例场景,定制性较强。未能满足高校在PLC 工业虚拟仿真实验教学上的多样性需求,缺乏一定的通用性。
因此,本文提出了基于WebGL 的PLC 组态虚拟仿真实验系统的设计方案,结合跨平台三维仿真技术与组态软件的优势,为学生提供鲁棒、易用的PLC 虚拟仿真实验平台,对工业仿真领域的发展和PLC 软件人才的培养具有重要意义。
PLC组态虚拟仿真实验系统遵循分层的架构设计思想,基于开源跨平台框架Electron 完成组态虚拟仿真实验系统的构建,支持在多平台运行。在构建过程中,使用OpenGL ES 图形库、ThreeJs 引擎库及PLC 串口通信接口模块库来提供对图形及异构设备通讯的支持。系统层级结构自底向上分别为硬件层、服务层、业务层、展示层。系统总体架构如图1所示。
图1 系统架构图
在硬件 层,由PC 和GPU 来提供对WebGL 中ThreeJS 和PhysiJs 的引擎计算支持[7]。在服务层,使用NodeJs 作为系统数据交互服务的支撑,使用Serialport和Dgram 模块来完成与硬件层基于ModBusRtu[8]协议的数据通信。在业务层,主要分为虚拟仿真模型库构建、三维工业场景构建及虚拟仿真运行三个模块。其中,虚拟仿真模型库构建部分包括三维模型设计、模型运动库构建、模型碰撞检测方法及自定义模型添加;三维工业场景构建部分包括基础环境设计、模型组装及PLC 通讯配置;虚拟仿真运行设计则包括虚拟漫游、模拟交互控制及仿真错误检验。在展示层,采用BootStrap 框架来构建虚拟仿真实验系统的前端页面,并使用Webpack 来完成页面组件的统一模块管理。
⑴三维模型设计
虚拟仿真模型的设计方式主要有两种,代码绘制和三维建模软件Rhino 绘制。根据模型的复杂程度,选择效率最高的模型构建方法。基础模型的构建一般由代码绘制。对于结构较为复杂的工业模型选用建模软件绘制。
⑵模型运动库构建
本文基于PhysiJs 来实现运动控制。通过对虚拟设备的运动行为分析,将模型的运动分为直线匀变速运动、旋转运动及约束性复合运动,可以通过构建模型的运动方程来实现运动的仿真。而系统中的模型的运动约束关系是基于D-H[9]思想实现,根据每一个关节来建立其各自的参考坐标系,使用单变量控制相邻杆之间的转移矩阵,然后再通过建立相对状态转移矩阵来表示各关节及连杆间的关系,最终得到连杆终端相对模型基底坐标系的状态转移矩阵。本文通过模型的运动属性配置文件来封装模型运动接口,从而构建出高拓展的模型运动库。在模型加载至场景前,均通过扫描属性配置文件来加载模型运动属性,增强了模型库的可拓展性与通用性。
⑶模型碰撞检测方法
为了提升实验仿真中碰撞检测的计算效率,在每个模型加载至场景前,系统会为其设置相应包围盒。本试验系统中因不存在会发生形变的模型对象,故使用简单、高效、易于存储的AABB 包围盒作为层次包围的底层盒结构,AABB包围盒效果如图2所示。
图2 AABB包围盒效果图
图2中A、B分别为三维空间中包围盒上的最小点和最大点。AABB包围盒在三维空间中的碰撞检测是基于物体包围盒的最大点和最小点的关系,通过对两个物体的最大点和最小点在三个维度的坐标关系的比较而得到两物体的碰撞关系。为了提高碰撞检测的精度与效率,使用自顶向下的方式来构建层次包围[10]来进行精确碰撞检测。如图3 所示,层次包围盒会将三维空间递归的划分为不同层次的树状结构,并在当前分割出的单块区域再次进行多叉划分,直至划分出的每一块空间区域只包含单个元素或树的深度达到一定阈值,即停止划分,那么模型则以一棵多叉树的方式来保存下来。
图3 Top-down构造过程图
⑷自定义模型支持
系统默认模型工具库中的模型组件能够满足大部分实验场景。若实验者有特殊的自定义模型需要添加到组态场景中,则可通过自定义模型添加模块来上传本地模型。系统自定义模型导入标准如下:
①导入自定义模型数据格式应为dae;
②导入自定义模型icon 应为分辨不小于96*96且文件大小不大于1M的png;
③导入模型命名规则应符合系统模型标识方法要求;
④导入模型运动属性配置应按照系统提供格式配置。
⑸模型库构建
系统将所有的模型进行分类归库,构建出完整的仿真工具模型库。系统为每一个模型分别定义一个类别属性及其在各自类别下的专有命名,工具箱模型效果如图4所示。
图4 工具箱效果图
⑴基础环境设计
从WebGL的场景构建流程来看,一个完整的拟真三维工业环境应包含带有重力属性的物理场景、摄像机、光源、渲染器及贴图等。WebGL 场景构建流程如图5所示。
图5 WebGL场景构建流程图
⑵模型组态
在构建虚拟仿真场景部分,模型组装是实现场景快速构建的关键。系统主要通过模型间的三维一致性来实现模型的方位对齐,即通过不同模型间的面一致、点一致来实现点面对齐。
系统提供对模型对象六个纬度的操作方式,可利用光标拖拽模型至虚拟环境中的任意位置。其中,三维场景中模型对象的获取是通过DragControl 中的Raycaster 来实现[10]。在交互过程中,页面点击坐标与三维空间射线交互方向的转换方程如下:
其中,Cx为2d 坐标x,Cy为2d 坐标y,Bl为窗口左边距,Bt为窗口上边距,Bw为窗口宽度,Bh为窗口高度,Rd为射线在三维空间以camera为起点的方向向量。
⑶PLC通讯配置在PLC 通讯配置部分,使用Serialport模块扫描连接到终端上的PLC 串口,并配置波特率、数据位、校验位、停止位等参数,这样建立与PLC 硬件板的连接。在连接建立完成后,系统会扫描场景中现有模型对象,通过读取模型属性配置文件来加载对应模型属性,同时加载PLC 硬件板中的相应数据单元。进而实验者可以通过拖拽方式来完成模型属性与PLC 数据的一一对应,实现数据绑定。
⑴虚拟漫游
在仿真模拟时,系统提供了第三人称的相机观测视角,并支持旋转、平移和缩放操作。为提高整个漫游过程的渲染性能,使用单加载模式绘制纹理贴图,使用LOD[11]分层来约束渲染模式,并根据相机与模型的视距不同来调整渲染模式,即为远视距低精度渲染与近视距高精度渲染。
⑵模拟交互控制
在仿真模拟的整个过程中,将由PLC 实验板上的代码程序来控制场景中的模型运动。在场景与PLC实验板的数据交互过程中,系统通过UDP 指令帧向PLC 程序发送模型的运动状态,同时PLC 实验板通过返回应答帧来反馈控制参数,从而实现仿真过程的模拟交互控制。数据交互过程遵循ModbusRtu 协议,ModbusRtu协议对应的十六进制指令帧格式如表1所示。
表1 ModbusRtu指令帧格式
目前,本系统中已实现的场景包括IO 通讯、交通控制、机械轴、工件切割、机械臂、水位控制及组装包装流水线,并且不同场景分别由不同PLC 的控制程序来完成,场景实例效果如图6所示。
图6 场景实例
⑴系统流畅性测试
系统实际帧率性能对比如图7 所示。图7 上方折线为优化后运行帧数,下方折线为优化前帧数,可以观察到该系统在帧率优化上的提升。
图7 场景仿真过程帧率图
⑵通讯测试
本文通过记录场景仿真过程中指令传递时间来评价系统的指令传递效率,仿真指令延迟如图8所示。
图8 指令通信传输延迟
从图8 中可以看出延迟在12ms~28ms 之间,通信最小延迟约15ms,最高延迟约为28ms,可知本文虚拟仿真系统的指令效率较优。
本文针对工业控制领域PLC 软件开发人才培养时受实验设备、场地和试验投入限制等问题,设计并实现了一套基于WebGL 的PLC 组态虚拟仿真实验系统,经过一系列基准测试后验证了本系统具有较好的性能,具备在线快速搭建拟真三维实验场景并进行PLC 仿真实验的教学条件,能够提高工业控制领域人才的培养质量。目前系统内置个性化组合场景还不够多,在未来会增加模型库及工业场景搭建适配数量。