1 引言
可靠性框图(RBD)是可靠性评估的关键功能之一,它反映了各组成部分的故障或它们的组合如何导致产品(系统)故障的逻辑关系,它利用互相连接的方框来显示系统的失效逻辑,分析系统中每一个成分的失效率对系统的影响,以帮助评估系统的整体可靠性。现阶段只考虑逻辑关系为串联、并联、判决等或这几种混联。
2 系统需求
本系统中RBD主要用来让用户进行产品可靠性框图的编辑以及进行对应产品可靠性评估参考。可靠性框图和产品相关,每个产品可能会有多个可靠性框图。框图由用户和系统交互产生,对框图的结构化描述信息永久保存在系统中,再次使用时可直接生成。框图中的元件来自所选产品的下一级产品列表,因此,可靠性框图中的结点可以向上或向下进行收缩和扩展,以形成框图的层次结构。
系统允许用户在B/S结构下绘制产品的结构图,包括产品结构项、开始点、结束点、并联关系、判决关系等,提供图形放大、缩小,图像重置,元件添加、移动、删除,元件间连线,路径查找,拓扑调整等功能,并且能够将绘制完的结构图与具体产品相关联,提供上传保存,载入重新绘制等功能。
3 关键技术
本可靠性框图管理系统采用的关键技术有:
1. SVG标准实现图形化显示 SVG(Scalable Vector Graphics,可缩放矢量图形)是一种基于XML标准,用来描述二维矢量图形和矢量/点阵混合图形的标记语言。SVG规范定义了SVG的特征、语法和显示效果,包括模块化的XML命名空间(namespace)和SVG文档对象模型(DOM),实现了图形、图像和文字的有机统一。
2. XML文件装载 SVG文件符合DHTML DOM规范,XML文件客户端装载采用微软控件XMLDOM,服务端XML文件装载采用W3C标准DOM以及Java所提供的标准解析接口。
3. 事件响应 描述图形的SVGDocument以及描述拓扑关系的XML文件装载成功后,通过JavaScript注册事件响应用户在SVG界面上的操作过程,并处理DOM文件的内容。
4. B/S通信 文件的上传保存与下载的过程,采用XMLHTTP为载体,XMLString格式内容为传输对象。服务端处理过程由Servlet处理。
5.图形拓扑描述数据结构 本系统采用邻接表结构存储图形信息,所需的基本数据结构,如Hash,linklist,stack等,由Javascript原形扩展。
4 系统设计
4.1 前台交互子系统设计
前台交互子系统主要涉及根据用户指定的产品,绘制产品的可靠性框图,同时设置可靠性框图节点之间的逻辑关系和相关的可靠性指标以及评定方法等。此外,对于创建的RBD图形用户在交互过程中对图形节点可以无极缩放,前台交互子系统在设计时采用矢量图形进行存储,本系统采用内嵌SVG技术实现RBD图形的交互。其前台交互逻辑如图1所示。
图1 RBD前台交互过程
在SVG中,允许矢量图像、点阵图像和文本三种图像对象存在。SVG定义了包括直线、圆形、椭圆形、矩形、多边形和折线在内的六种常用的基本矢量形状,在此基础上,利用坐标变换、路径、动画、滤镜等功能扩展,通过多层次组合矢量、点阵以及文本图,并配以各种属性,进行矢量绘图。SVG的XML语法使开发人员能够使用现有技术并利用现有的基于XML的基础结构和开发工具。可与现有的的Web技术集成,并可嵌入到现有基于浏览器的应用程序中,从而提供更加丰富的视觉效果。同时提供了丰富的消息触发及事件相应函数,实现与用户的交互。前台设计界面如图2所示。
图2 RBD前台交互页面
在本系统中,对于实际产品节点采用实节点描述;对于多个节点并联的方式,系统采用并联虚节点进行描述,所有并联节点被此并联虚节点包含;对于先串联再并联的情况,将串联部分采用串联虚节点的方式进行描述,所有串联部分包含在此虚节点中。
图3 虚框与子节点之间的组合
4.2 后台逻辑设计
4.2.1 设计思想
本RBD模块需上层模块进入,在用户选中欲查看产品项以后,可选择是否查看其相应的RBD图形,确认查看后,若有该项所对应的RBD图,则装载界面,然后等候用户的交互操作。若无,提示用户该项RBD图不存在,是否新建。其运行流程如下图4所示。
图4 系统运行流程
后台逻辑类主要用于提供业务逻辑供评估系统以及界面层调用。在对RBD框图分析之后,根据其特点,设计用实结点与虚结点来表示其中的元件。实结点包括开始节点、结束结点、判决节点、普通结点,是基础的元件。虚结点包括并联虚结点和串联虚结点,用于对混联等复杂结构进行建模。虚结点中可以包含各种类型的结点,也包括虚结点,所以是一个递归的概念。对于递归的虚结点设计,正好可以使用Composite设计模式,可以保持各个层次上的结点信息,并且使其他业务模块的使用逻辑简化。
在设计中可以看出,并行虚结点和串行虚结点中还可以包含其他类型的结点,所有的结点都派生于结点组件类,所以虚结点中可以包含实结点也可以包含虚结点,形成递归的结构。在虚结点中可以得到子结点的Iterator遍历接口,非常方便地遍历其子结点,并且可以通过子结点的Iterator遍历更下层的子结点,从而遍历所有的产品。利用开始结点和结束结点,可以很容易的获得图形的入口和结束点,方便地构造出图形拓扑。在结点中可以得到该结点产品对应的下一级图形,可以分层设计可靠性框图。
一个结点可能对应一个产品或者没有对应产品,如开始结点就不会对应产品,一个产品则在很多图上可能有多个结点与之对应。结点中并没有包含图形信息,只是管理了串并联等逻辑信息,因为图形的显示以及处理等是在前台界面中实现的,后台逻辑类只关心逻辑内容的更改,以简化设计。
在RBD图类中的一个重要属性是“SVG图”,对应了数据库中的一个CLOB字段,保存了框图的SVG文件,该文件描述了SVG框图的图形以及逻辑性质,下一节中会对其设计进行详细描述。这代表了可靠性框图子系统设计的一个重要方面,即前台负责交互,生成SVG文件,传递给后台逻辑,保存在数据库中,后台从SVG文件中恢复出RBD图对象结构供评估等模块调用。这种划分简化了客户端与服务器端之间的通讯,使2者达到松耦合,同时使框图本身也可以独立使用。这种设计思想的描述如图5所示。
图5 RBD设计逻辑
4.2.2 系统实现
本系统所有关键操作都建立在以下5个主要的文件对象上:SVG文件对象:包含图形信息,从页面embed元素获取,符合DHTML DOM规范;NodeTopoDoc对象、LineTopoDoc对象、ParallelTopoDoc对象、NodeAttDoc对象,后面四个拓扑对象分别用来保存结点拓扑关系、线拓扑关系、并联单元拓扑和结点属性关系,均由客户端生成或从服务端装载,符合XMLDOM规范;以下对系统实现的主要js文件进行说明:
rbdXmlDataManage.js文件中包含SVGDoc文件对象和以上提到的四个拓扑文件对象,其方法包括得到SVGDoc和各个拓扑文件对象、创建4个空的拓扑文件对象、根据用户要求从服务端装载4个拓扑文件对象和响应用户要求保存SVGDoc和4个拓扑文件对象至服务器端。当用户要对一个产品创建可靠性框图或对已有的框图进行编辑时,rbdXmlDataManage.js中的getSvgObj()方法根据用户所选择的模式(新建还是加载已有SVGDoc)返回相应的SVGDoc文件对象。如果是新建SVGDoc,createXmlDocuments()方法将创建4个空的拓扑文件对象;否则,loadXmlDocuments()方法从服务端装载4个拓扑文件对象。saveXmlDocuments()方法保存SVGDoc和拓扑文件对象至服务器端。
rbdTopology.js 是拓扑文件操作函数集,功能包括根据id类型不同选择不同的获取、设置、删除拓扑函数,获取、设置、添加、删除各种类型的拓扑结构等。rbdBasicStructs.js对应于4个XMLDOM 文件,实现了拓扑项的数据结构。rbdToolsBasic.js用于设置工作模式。rbdNavigate.js实现了SVG图象的基本操作功能,包括画布4个方向的移动函数、画布放大函数zoomInTool(evt,evtType)、画布缩小函数zoomOut_2x(evt, evtType)、图元移动函数panTool(evt, evtType)和线上加图元函数addNodeOnLine(evt, evtType)。
rbdMouseEntry.js实现了监听SVG上注册的事件,包括鼠标按下事件mouseDown(evt)、鼠标移动事件mouseMove(evt)和鼠标抬起事件mouseUp(evt)。可以想象,一般用户的一次操作过程由以上3个过程合并完成。
作者简介:刘文姣,华中师范大学计算机科学系2006级研究生,研究方向:可靠性框图