, ,
(武汉理工大学 仿真中心,武汉 430063)
随着仿真系统日益复杂,提高仿真软件开发效率、缩短研发周期,同时保证软件系统的可靠性和重用性成为仿真研究的焦点。图形化建模是一种提高软件开发效率的有效途径。20世纪80年代中期以来,国内外许多公司和研究机构相继开发出图形化建模软件。
本文在分析前人研究成果的基础上,开发了一套图形化建模软件,该软件致力于为包括船舶热力系统在内的仿真系统的开发提供开发环境。
模块化建模是将大系统分解成由若干个基本单元构成的子系统(模块),然后用数学、物理分析方法建立这些基本单元的数学模型,形成算法库,算法与基本单元一一对应,最后再根据实际系统的物理过程用这些算法构造出模型[1]。图形化建模是建立在模块化建模的基础上的一种建模方法。
图形化建模通常采用两种方式定义拓扑结构:节点支路方式和设备接口方式[2]。本文对设备接口方式进行了修改,其定义方式为:采用一种特殊的有向图来描述具体的仿真系统中各个设备、设备之间的联系以及设备之间数据的传递关系,有向图由模块节点、弧和端口组成,其中,模块节点代表一个模拟相应模块功能的模型程序;端口代表一系列变量,端口具有方向性,即是输出端口还是输入端口;弧代表数据流动的方向以及模块之间的联系。用户必须遵循以下约定:
1) 在弧的两端,输出端口的数据类型必须是输入端口数据类型的子集。
2) 与弧头相关联的必须是输入端口,与弧尾相关联的必须是输出端口。
在图形化建模中,用户通过组态的方式方便快捷地构建仿真模型,然后进行拓扑识别,根据拓扑识别的结果生成模型程序,见图1。
图3 图元库类结构图
图1 图形化建模基本原理
图形化建模软件的体系结构设计采用层次结构,共分为3层:组态层、模型层以及运行支撑层。
组态层位于体系结构的最上层,直接与用户交互,提供一系列图元以及用实现组态功能的接口,存储并分析仿真系统的拓扑结构,向模型层传递拓扑分析的结果以及数据流动的方向;模型层维护一个模型程序库,根据组态层传递下来的信息从模型程序库中提取相应的模型程序合成能够模拟仿真系统的模型程序;运行支撑层提供一系列服务以实现模型程序的扫描入库、监视、运行、控制等。
组态层包括图元库、图元操作接口以及拓扑分析3大部分。图元是图形的几何元素,如点、线、矩形等。复合图元由基本图元组合而成,如调整框。可操作图元是一种在图形编辑界面中,用户可以进行创建、修改、删除等操作的图元。模块又称为元件,是一种可操作图元,在组态层中,其代表仿真对象中的某个设备或某个系统;在模型层中,其代表模拟某个设备或系统的模型程序。组态层中的图元库由基本图元和复合图元组成,其结构如图2所示。
图2 图元关系示意
其中,模块、连接线、调整框为复合图元。模块是唯一作为网络节点参与拓扑分析的图元。模块图标为一种特殊的基本图元由一幅位图构成,位图图像信息中的关键色在显示时取背景色。图元类库是根据图元之间的关系建立起来的,图元类之间的结构关系见图3。
如图3所示,所有可操作图元以及部分基本图元均派生自图元类。图元类是一个虚基类,它的公共接口由所有派生类的公共接口的并集和图元组合操作接口构成,软件通过图元类提供的接口实现仿真系统的图形组态。
软件根据用户组态描述的仿真系统提取其中的模块以及模块之间的关系生成一个有向图,对有向图的拓扑结构进行分析排序,识别模块的执行先后次序,生成一个拓扑序列。无论是电网还是热力系统,工质流的流动往往形成一个回路,即用于描述仿真对象的有向图中往往存在环路。传统的拓扑排序算法无法有效解决这种环路问题。文献[3-4]中提出了2种不同的拓扑分析的方法,分别应用于流体网络和热力系统,但是这两种方法都基于一个前提条件:网络中至少存在一个边界点。因此,需要在传统的拓扑算法上进行改进。有向图中环路有两种情况:
1) 整个系统是一个环路。
2) 系统中存在环路。
针对这两种情况,重新设计的拓扑序列生成算法如下:
1) 创建一个空的拓扑序列队列,链表中的元素是节点。
2) 采用深度优先算法搜索有向图,看图中是否存在未标记移出(以下简称标记)的源点。
3) 若没有未标记的源点,进入步骤7);否则,判断源点是否是环路中的一个节点。
4) 若源点是环路中的一个节点,则将环路中该源点和其前驱节点间的弧打上标记。
5) 将源点送入拓扑序列队列,将源点和源点的输出弧打上标记。
6) 返回步骤2)。
7) 若有向图中所有节点均打上标记,则结束算法;否则,提示用户在环路中选择一个节点或选择环路中入度最小的节点,将节点的输入弧打上标记,返回步骤2)。
模型层包括模型程序管理以及模型程序合成两个部分。软件采用文件系统和关系数据库系统来管理模型程序:用文件系统来管理模型程序的源文件,用关系数据库来存储模型程序的源文件的路径、模块与模型程序的映射关系以及端口与变量的映射关系。模型程序管理模块是一个具有可扩展性的模块,提供模块增加、编辑以及删除功能。
模型程序的合成是根据拓扑排序的结果调用相应的模型程序,生成能够模拟用户在组态界面上描述的仿真系统的模型程序。
合成后的模型程序依次循环调用各模块所对应的模型程序,在调用前将参数输入,在调用后将结果输出,参数的输入和输出是根据与模块相连的弧的方向以及端口来决定。在每次调用模型程序时,均需计算仿真精度,直到达到一定的仿真精度时才调用下一个模型程序。
支撑运行层是一个支撑运行环境,提供模型程序扫描、变量数据管理、工况控制等功能。支撑运行层将C语言编写的模型程序以字符流的形式送入扫描模块中,扫描模块将字符流分解成各种有意义的语法单元(如预编译指令、变量定义等),获取变量定义单元,根据C语言的词法规则对变量定义单元进行解析,生成单词串进行语法分析,最终获取变量、函数头等信息。
扫描模块在扫描的同时还对模型程序进行了两个方面的处理:
1) 修改模型程序中的变量定义语句,通过引用和指针的方式使得模型程序和变量数据库能共享同一块空间,从而建立一种映射关系。
2) 生成主控函数,创建一个工作线程循环调用合成后的模型程序,实现模型程序和图形化建模软件间的通信。
变量数据管理是通过一个变量数据库来完成的。变量数据库是一个采用内存文件映射机制实现的内存数据库,数据库分为2个存储区:变量属性存储区和变量值存储区。前者用于存放诸如:变量名、变量类型等变量属性信息,后者用于存放变量值。变量数据库支撑数据在模型程序和图形化建模软件间共享。
图形化建模的采用,简化了用户的操作,降低了用户对计算机编程等知识的使用要求。本文研究和分析的结果被成功运用于仿真中心船舶轮机系统的图形化建模软件开发中,经过检验测试证明本文提出的相关理论和算法是可行的,尤其是它解决了仿真系统中存在回路时的拓扑分析问题。
[1] 胡建宏.Star-90模块式图形化建模技术的实现[J].电力情报,2000(3): 52-54.
[2] 蔡瑞忠.图形建模中流体网络拓扑结构的定义与识别[J].清华大学学报(自然科学版),1999,39(6):63-66.
[3] 谢茂清,朱 文,任挺进.流体网络拓扑分析的研究[J].系统仿真学报, 1998,10(5):43-47.
[4] 谈 理,唐胜利.热力系统图形化建模软件的开发[J].计算机仿真, 2004,21(11):239-241.