《武汉工程大学学报》  2012年1期 48-52   出版日期:2012-02-28   ISSN:1674-2869   CN:42-1779/TQ
虚拟现实环境下的工控界面构件封装


 0引言以计算机为核心的工业综合自动化生产是制造业的主要生产控制方式,基于智能虚拟环境的工业监控人机交互技术,可对现有工控系统的二维图形用户界面环境进行有效“增强”,增加信息交互的维度和智能化程度,成为工业自动化软件发展的关键技术之一[1].X3D(eXtensible 3D)是新一代的网络虚拟现实技术标准,是VRML技术的继承和发展,将X3D与Internet技术相结合应用于工控界面系统,可实现工业生产的远程、三维监视与控制,并可基于成熟的标准技术,有效提高系统开放性[2-4].但在具体应用中,X3D规范采用树形嵌套式的场景描述,系统构模能力差,要在标准系统提供的基本几何节点的基础上实现较为复杂的生产环境建模,开发周期长,虚拟效果差.同时,场景单元实体的造型与行为的分离,也使得整个系统结构复杂,开发效率和执行效率低.X3D虚拟现实技术融入工业监控体系可有效增强工控界面的表现力和交互能力.界面构件的有效封装,是界面场景快速开发的基础.X3D与多Agent系统(MAS)具有很好的一致性,基于Agent建模方法,可采用划分基本行为模块的方法,对X3D环境下的界面对象进行独立描述和集成封装,并可有效提高界面系统智能化程度[5].X3D虚拟界面环境是基于界面构件组装而成,基于界面系统多Agent模型,实现X3D环境下的个体Agent封装,建立界面构件库,是界面场景快速开发的基础.可扩展性是X3D的重要特性,X3D支持多种扩展方式,为不同类型的界面构件封装提供了实现途径.针对X3D环境下的界面构件封装,本文首先分析了X3D的多种扩展机制,基于界面系统多Agent模型,探讨了X3D环境下不同类型界面构件封装的一般技术,并重点分析了具有复杂行为特征的智能构件的封装实现方法,给出了一个智能仪表构件的封装实例.1X3D的扩展分析X3D支持充分的扩展性,除了基于开放的标准体系,支持特定应用领域的专用标准集扩展,X3D在标准体系内也提供了多种扩展机制,支持诸如造型功能扩展、原型节点扩展和脚本编程扩展等[6].X3D的扩展体系如图1所示.图1X3D的扩展体系Fig.1Extension system of X3D1.1X3D规范扩展X3D规范扩展主要有两种形式,一是基于规范原型机制的原型节点扩展,简称原型节点扩展;一是规范语言级的扩展,又称为内节点扩展.原型(Prototype)是X3D规范提供的一种标准扩展机制,用户可以通过原型机制扩充X3D标准节点类型集.构造原型是通过对规范中的标准节点进行组合、变换、添加交互或使用脚本编程等实现的.通过构造原型,可以创建出功能各异的新节点,为构造个性化场景提供了极大方便.原型是X3D系统扩展的一种有效方法,可实现代码重用、节点扩展、造型与行为打包等功能.原型机制虽然可以实现用户自定义节点的有效扩展,但原型设计的基础是X3D系统的标准节点,原型使用仍然限制在原有的事件体系中,对原型节点的访问和控制也仍然限制在X3D浏览器内部,使节点扩展在实现形式和扩展功能上受到一定限制.X3D的构件化结构保证了开发者可以按照标准规范的一致性原则根据自己的需求开发自己的节点、组件并定义新的概貌(Profile),达到从“语言级”扩展X3D的目的,该种扩展称为内节点扩展.内节点扩展针对性强、使用方便、执行效率高,特别适合于一些特定领域、特定功能的应用扩展.内节点扩展除了根据特定的功能要求,按照X3D规范对节点进行语法、语义定义,还要对特定的浏览器进行相应的功能扩展,以实现对新节点的应用支持.1.2实体造型功能扩展场景单元的几何造型是虚拟现实环境实现的基础.X3D自身的造型功能不强,只提供几个基本的造型节点,但目前主流的3D造型软件,如3DMAX、Pro/E、UG等都有支持X3D的接口,一些复杂的三维造型可以利用这些第三方的造型软件进行前期制作,再基于造型软件的文件转换接口生成X3D格式的造型文件.独立的造型单元文件可利用X3D的内联(Inline)机制组装到虚拟场景主文件中,以弥补X3D本身造型功能的不足.基于X3D的内联机制,可将复杂的X3D场景文件分割成相对简单的一些独立的场景造型文件,分别设计并存储,使用时再将其组装融合在一起,以简化复杂场景的设计与调试,并方便维护与多人开发.1.3基于脚本编程的X3D行为功能扩展脚本(Script)节点实际上是一个外壳,它包含一组利用脚本描述语言,如Java、JavaScript或VrmlScript(由SGI公司开发的一种类似于Java的脚本编程语言)编写的函数或方法.脚本节点收到事件后将执行相应函数,函数则通过常规的路由机制发送事件,也可直接向脚本节点指向的任意节点发送事件.脚本还可以动态地增删路由,从而修改事件体系的拓扑结构.因此,脚本节点可看作一个智能节点,它以脚本编程的方式实现对事件的高层处理和动画的扩展控制.第1期杨红,等:虚拟现实环境下的工控界面构件封装
武汉工程大学学报第34卷
2界面构件的封装实现方法2.1X3D界面系统多Agent模型基于X3D与多Agent系统的一致性,本文建立的工控界面MAS框架体系如图2所示[5].按其功能,系统Agent可划分为界面Agent组和系统维护Agent组.界面Agent组用于构建界面交互环境,主要包括构造虚拟操作场景的各种设备Agent(Devices Agent)、实现虚拟场景与外部监控环境数据交互的DAQ Agent、实现必要的数据处理和故障诊断功能的Data Agent等.在Devices Agent组中,按功能又可分成设备实体类Agent、控制仪表类Agent、厂房等辅助构件类Agent等.图2工控界面MAS总体结构Fig.2The MAS framework of IMC systemX3D环境下的个体Agent结构包括一组事件接口、一组脚本函数和一组域值属性,并通过建立事件-脚本函数关系来实现相应的事件-任务模型,以扩展节点的形式实现个体Agent的封装.2.2基于X3D扩展的Agent实现针对X3D的多种扩展方式,考虑到几何造型以及行为封装实现的便利程度,对一些非可视Agent,如DAQ Agent等,以内节点扩展(语言级扩展)实现为主,如笔者扩展实现的网络通信节点[7].而对具有几何外观特征的可视Agent,若为单纯的几何结构类Agent,如厂房构件、结构类设备构件等,可基于内联机制,以单独的造型文件形式进行封装,如笔者开发的过程装备仿真构件库[8-9];若具有较为复杂的行为特征,如仪器、仪表、智能构件等,则以原型节点的形式进行封装,以脚本节点内嵌的脚本函数编程来实现Agent的行为功能.基于X3D扩展实现个体Agent封装的方法如图3所示.非可视Agent具有行为特征的
可视Agent单纯结构类
可视Agent内节点扩展原型节点扩展造型文件扩展X3D系统平台-MAS系统框架图3基于X3D扩展的个体Agent封装方法
Fig.3Encapsulation method to individual agent
based on X3D extension3智能设备构件封装智能仪表是工控系统中常用的参数显示控制单元,是一个典型的控制仪表类Agent.本节以某款智能显示调节仪为模型,建立一个通用的智能仪表构件.3.1构件模型规划智能仪表几何模型参照某款智能显示调节仪,仪表面板包括LED数字显示区、运行状态指示区和仪表设置区等部分.仪表功能包括测量显示、智能控制和仪表设置三部分.它接收输入的参数测量值,作LED数字显示;内置PID算法模块,以测量值、设定值、PID参数等为入口参数,进行PID运算,并输出控制值;对测量值进行上、下限越限报警指示,并实现位式控制功能;能设置仪表的相关控制参数和状态参数,以控制仪表行为.按照上述功能描述,可对智能仪表构件的内部结构和外部接口进行设计,具体包括Agent的属性集、消息接口集以及执行方法集,对应于X3D原型的节点域、事件和脚本函数,如表1所示.表1智能仪表构件原型接口定义
Tabel 1Prototype interface define to intelligent instrument component接口类型接口名称数据类型操作类型缺省值功能描述域upLimitSFFloat普通域40位式控制上限值downLimitSFFloat普通域0位式控制下限值setValueSFFloat普通域20PID调节设定值optionSFFloat普通域2调节模式选择:0——无调节;1——位式调节;2——PID调节TSFFloat普通域0.5采样周期(单位秒)outTypeSFBool普通域TRUEPID输出类型选择:TRUE——位置式,FALSE——增量式PSFFloat普通域1比例放大系数TISFFloat普通域180积分时间/sTDSFFloat普通域60微分时间/s事件dataDisplaySFFloateventIn测量值输入dataOutputSFFloateventOut控制变量输出函数initialize()初始化函数,原型加载时调用,进行状态参数初始化processEvent(Event e)事件处理函数,由dataDisplay入事件触发,完成相关控制算法3.2原型封装实现   智能仪表构件以原型形式进行封装,原型接口包括节点域和事件,还包括相关的执行函数.原型定义采用传统的VRML格式编码,基于VRML97核心库支持,构件的原型定义文件(intel_meter.wrl)节选如下:#VRML V2.0 utf8#原型接口定义PROTO intel_meter [eventIn SFFloat dataDisplay        #事件定义eventOut SFFloat outPut field SFFloat upLimit 40           #域定义 ……]#原型体定义{Transform {#造型体定义}
#脚本定义,基于SAI接口封装仪表行为
DEF path Script{
mustEvaluate TRUE
field SFFloat upLimit1 IS upLimit#域定义
……
#事件定义
eventIn SFFloat dataDisplay1 IS dataDisplay#测量值输入
eventOut SFFloat outPut1 IS outPut#控制值输出
eventOut SFColor color1#上限指示灯状态(颜色)
eventOut SFColor color2#下限指示灯状态(颜色)
eventOut MFString str#测量值显示文本
url  "danxian.class"#嵌入Java类,封装仪表行为
}
#建立路由
ROUTE path.color1 TO xiaodeng1.diffuseColor#上限指示灯显示
ROUTE path.color2 TO xiaodeng2.diffuseColor#下限指示灯显示
ROUTE path.str TO tex.string#测量值显示 本原型行为扩展基于SAI实现,相关的执行函数包含在脚本节点内嵌的Java class中,实现执行方法功能.3.3构件原型测试原型测试的主要目的是测试智能仪表的数字显示和调节控制功能,主要内容有测量数据显示、报警指示和控制输出等.为便于扩展管理,本文涉及的原型扩展设计采用外部原型调用,测试时要建立一个对此原型的引用,然后赋予不同的域值或事件,使仪表依次处于各种工作状态以检查其功能.智能仪表构件测试环境如图4所示.图4智能仪表构件原型测试
Fig.4Prototype test to an intelligent instrument component4结语X3D与多Agent系统具有很好的一致性,基于Agent建模方法,可对X3D环境下的界面构件进行独立描述和集成封装.基于X3D支持的多种扩展方式,不同类型的界面构件可采用不同的封装方法.对一些非可视构件,以内节点形式从语言级扩展为主;对单纯的几何结构类可视构件,可基于内联机制,以单独的造型文件形式进行封装;对具有复杂行为特征的智能可视构件,则以原型节点的形式进行封装,以脚本节点内嵌的脚本函数实现构件的行为功能,可实现造型和行为的集成封装.智能仪表构件的封装实例,体现了以原型节点和脚本编程扩展形式实现智能构件封装的可行性和有效性.基于上述封装方法,可进一步建立工控界面构件库,为界面场景系统的快速构建奠定基础.参考文献: