几个世纪以来,人类通过研究数学和物理学,并将各种思想体系与方程应用于现实世界的问题,不断拓展对世界的认知。凭借这些知识,我们制造了汽车和飞机,将人类送上月球,实现了原子裂变,并解决了无数其他复杂难题。在古代,这些知识通过口耳相传、泥板、纸草卷轴以及后来由文士辛苦制作的书籍进行传播。随着印刷术的出现,知识以文章、期刊和书籍的形式被记录下来并广泛传播。四百年后,互联网问世,大量已有知识以文档、网页和专门网站的形式转移到线上,使全球各地的无数人得以获取。如今,一个新时代已经到来:我们可以利用这些知识构建模型,将方程以动态和具体情境的方式呈现出来,并根据特定领域及我们试图理解与解决的问题,设定相应的参数。
16.1 Modelica 和 Simulink 中的 SysML 仿真
作为领先的系统工程工具,Enterprise Architect 可使用符合行业标准的建模技术与语言来构建用于表示机电系统的模型。这些模型可作为协作工程师、咨询团队及其他人员之间的通信媒介,也可用于生成基于 OpenModelica 和 MATLAB Simulink 所采用的行业标准建模语言的高级可视化结果。
本示例展示了 Enterprise Architect 在利用现有开放标准进行解决方案可视化的强大能力。图中显示了两个相互连接的储水罐,以及一个向第一个储水罐注水的水源。通过两个连续控制器,用于调节从第一个储水罐流向第二个储水罐的水量,以及第二个储水罐的输出流量。
在 Enterprise Architect 中创建了一组图,用于建模储罐的物理结构以及描述储罐之间流量的方程(使用 Modelica/MATLAB 语言编写)。一旦完成仿真配置并选择“求解”按钮后,输出结果将类似于下图:
我们将在本主题的后续部分详细讨论约束条件和参数化建模的内容,并说明我们创建的模型实际上就是之前在指南中学习过的模块定义图和参数图。这个参数图展示了双储罐问题的建模示例,通过使用约束属性和连接器,将参数绑定成一个方程组。虽然还需要其他图来生成结果,但这是主要展示质量、流量以及传感器如何决定储罐液位的图。
SysML仿真工作原理
Enterprise Architect 基于开放标准构建,产品团队始终重视利用现有解决方案所带来的强大功能和高效性,避免重复造轮子。该工具采用以下标准来实现可视化:
在之前的主题中,我们已花费大量时间学习 SysML;事实上,我们已经掌握了创建这些可视化所需的“模块定义”和“参数化”示例的大部分内容。此外,我们还将学习如何添加 OpenModelica 所需的一些额外信息,相关内容将在下一节中讨论。
Modelica 是一种基于方程的开放、面向对象的语言,支持使用子组件对机电系统进行建模。与它的数学同类语言一样,Modelica 是一种跨领域的语言,具有广泛的应用,涵盖机械、电气、电子、液压、热力、控制、电力以及流程导向等领域。这些领域构成了 Modelica 模型可能的子组件,也是该工具可建模的系统类型。
Enterprise Architect 能够对流程图和状态机执行基本仿真,但在建模复杂的机电系统时,它会借助 OpenModelica 的强大功能,并以 Modelica 语言本身作为支撑来完成主要计算任务。Enterprise Architect 还支持将这些机电模型与多种其他系统及软件工程构件关联起来,包括任务、利益相关者需求、状态机、编程代码、决策表、架构、权衡分析等更多内容。
关于其工作原理的概述,可以通过一个简化的例子来说明。要创建牛顿第二定律的简单可视化图示——“动量的变化率与作用力成正比,并且方向与该力相同”(F = m*a),使用 Enterprise Architect 的工程师将:
1. 创建一个使用约束和值描述方程的模块定义图。
2. 配置 SysMLSim 配置文件(用于定义 OpenModelica 所需的信息)。
3. 通过选择窗口中的“求解”按钮运行仿真。
将绘制出一个图表,其中 f = 98.1(即质量(10)与加速度(9.81)的乘积,根据公式 [f = m * a] 计算得出,值为 10 × 9.81 = 98.1)。这是一个简化的示例,旨在展示创建可视化所需的基本要素;后续章节中我们将介绍更高级的示例,包括约束属性和用户自定义数据集的使用。
OpenModelica 入门
使用 OpenModelica 和 Enterprise Architect 进行参数化仿真,一个简单的方法是先查看一些现有的示例。这有助于学习 Enterprise Architect 的各种功能,尤其在掌握 OpenModelica 功能时非常实用,因为有许多新内容需要了解,而借助一些学习辅助工具能更有效地进行学习。我们将从查看一个完整的示例开始,该示例取自“示例模型”(Example model),该模型随 Enterprise Architect 安装附带,并可在“开始”功能区的“帮助”选项中找到。
我们所研究的示例是“摆锤”(Pendulum)示例。首先,我们需要打开该示例模型,方法是选择功能区中的选项:
开始 > 帮助 > 帮助 > 资源 > 打开示例模型
OpenModelica 的功能与其他仿真功能一起被集中放置在一个位置,可通过“仿真”功能区的“系统行为”面板中的 Modelica/Simulink 菜单启动。OpenModelica 与 可执行状态机、决策建模符号和 BPSim 等其他仿真工具共同提供支持。
加载模型后,我们可以在 Enterprise Architect 中使用 OpenModelica 功能来定位模型中的 Pendulum 示例。复杂系统模型通常非常庞大,且可能已建立多个现有的仿真,因此 Enterprise Architect 提供了搜索这些仿真的机制。
选择此选项将返回一组SysML仿真配置文件,这些文件中包含了OpenModelica的详细信息。从该列表中我们可以选择“摆锤”示例,这将打开一个窗口,用于配置并求解示例中编码的问题。要运行仿真,必须在运行Enterprise Architect的计算机上安装OpenModelica的某个版本。
窗口分为两个部分:
窗口中的信息会自动从浏览器窗口中可见的模型中填充,而元素的位置(包括值类型、模块和约束属性)可通过上下文菜单中的“在项目浏览器中查找”选项进行定位。此外,还有一个类似的功能,可用于查找该元素在任何包含它的图中的位置。
安装 OpenModelica
Enterprise Architect 利用 OpenModelica 平台的强大功能,因此当您从仿真窗口运行仿真时,实际上就是调用同一台机器上已安装的 OpenModelica 来完成大量计算并返回仿真结果。这确保了 Enterprise Architect 能够充分利用这一开源工具的优势,以及所有为它卓越性能做出贡献的杰出人才的智慧。OpenModelica 提供 Windows 和 Linux 版本,您需要根据自己的环境选择合适的版本进行安装。具体步骤如下:
使用数据集进行仿真
仿真是工程分析中的重要组成部分,为系统行为的分析提供了一种实用且经济高效的方法。无论系统已经建成还是正在规划开发,仿真都可以用于可视化组件或系统设计方面的考虑、性能优化、安全工程等众多方面。为了实现这一功能,必须能够使用不同的变量和常量值运行仿真。例如,在我们的摆锤示例中,我们可能希望分析系统在不同行星上的表现,比如:
Enterprise Architect 提供了可在模块级别应用的仿真数据集功能。通过 SysMLSim 配置窗口右侧面板中的“仿真”选项卡,我们可以选择预定义的数据集。
可以定义任意数量的数据集,并将其添加到仿真窗口“配置”(左侧)面板中相应的模块内。这些数据集作为每个模块下的节点提供,用户可通过数据集行中的“浏览[……]”按钮,在窗口中查看和编辑数据值。
选择后,将打开“配置仿真数据”窗口,允许查看和编辑数值,并进行导入或导出。这种机制使得仿真模型可以在多种不同情境中重复使用,工程组织可以针对特定类型的问题创建仿真库,从而在各种工程问题中广泛复用。此处所示的窗口展示了一个包含我们所研究的两个摆动问题相关数值的数据集。例如,月球重力产生的加速度被设定为约1.6 m/s²,大约是地球表面重力值的16.6%。该仿真可重新用于其他适用火星或木星的数据集,也可应用于更贴近地球的场景,如改变质量或长度的情况。
创建仿真模型
我们在本指南“工作原理”部分所举的例子是刻意简化的;在本节中,我们将更详细地探讨这些步骤,包括模型配置的各种选项。Enterprise Architect 提供了极大的灵活性,既可定义简单的一次性使用模型,也可创建基于库的复杂多用途模型,这些模型可以在多个项目和领域使用不同的数据集和上下文重复使用。在本主题中,我们将探索一些模型配置选项,以确保模型符合实际需求,并实现所需的工程成果。
创建仿真模型包
模型包可以在浏览器窗口的任意位置进行设置,但通常建议在每个项目或计划下建立一个仿真包。该仿真包可进一步包含各个仿真的子包。预计对于特定项目,可能需要多个不同的仿真。此外,如数据集部分所述,组织很可能希望在多个项目之间重复使用某些仿真。这些仿真可在项目浏览器中设置,并在跨项目层级(例如企业、组织或工程部门层级)进行定义,然后在项目层面的图中引用,以表明其适用于特定项目或问题情境。同时,工程团队也可能会希望在不同项目间复用价值类型及其相应的数量和单位库。正如本指南前文所述,这些内容最好在跨项目层级进行定义和建模。
Enterprise Architect使用SysML的包导入机制,以确保在企业级别定义的值类型可以在每个仿真包级别等级中包含和重用。该结构通常包含以下包:
接下来,我们将学习如何创建和配置 SysML 仿真工件,该工件被标记为 <<SysMLSimConfiguration>>。
创建仿真元素
准备仿真的主要工作是定义模型元素,使用 SySML 并以适当的精度进行建模,以便 OpenModelica 平台能够运行仿真。模型的定义方式有多种,本指南将重点介绍最稳健且灵活的方法,因为这是大多数实际工程人员和团队所采用的方式。
在此阶段,值得先探讨一下仿真的主题,确保我们理解其相关性以及与模型其他部分的联系,同时了解仿真元素如何与其他模型元素(如需求、测试用例等)进行关联。通常情况下,仿真可用于研究某些网络物理问题,而无需构建耗时且往往成本高昂的物理模型。仿真可以用于问题分析、权衡分析、性能分析或其他多种调查研究。在仿真中定义的模块可以分配给行为元素,最终归属于需求。
首先创建的是模块,它们是解决方案的基本结构元素。我们已在之前的示例中学习过如何实现这一点;该图展示了若干包含元素的区域,即属性。
为定义摆系统行为的方程,我们将先定义确保模型精确所需的值类型,并检查仿真参数是否正确设置。这将通过使用“模块定义”图(bdd)来完成,具体利用来自“图工具箱”的值类型元素实现。
下一步是使用ConstraintBlocks来定义约束条件。这些元素用于定义控制被建模系统行为的Modelica方程——在本例中,即摆的运动。如本指南前文所述,ConstraintBlocks定义在Block Definition图上,包含一系列参数,并通过一个用Modelica语言编写的方程来表达这些参数作为约束条件。例如,限制摆的垂直方向的方程写为:
m * der(vy) = -(y/L) * F - m * g
请注意,Modelica中的关键词如“der”表示一阶导数。其中L代表摆的长度(参数),g为重力加速度(常数),m为摆的质量(参数),x和y为二维空间中的坐标,F为作用力。需要注意的是,Modelica使用:
下一步是创建将方程连接起来的参数图。如指南中早先所述,这些图是一种特殊的内部模块图,其中包含名为ConstraintProperties的约束模块实例,它们暴露自身的参数,并通过连接器与其它ConstraintProperties上的参数进行绑定。
指定配置工件
SysML仿真工件是将模型元素与OpenModelica平台连接的元素。以模块(Blocks)、约束模块(ConstraintBlocks)及其相关约束属性(ConstraintProperties)形式表达的SysML模型元素,通过参数图(Parametric diagrams)组合在一起后,会显示在仿真窗口中,并可与其他设置进行配置以驱动仿真。
设置此功能的第一步是创建一个SysMLSim配置元素,该元素可在“工件”工具箱页面找到,如本屏幕截图所示。
Enterprise Architect负责完成配置SysML仿真窗口的大部分工作。工程师只需在仿真工件窗口的“配置”面板上使用浏览图标选择相应的包即可。
Enterprise Architect将显示包选择窗口,选定包后,“配置”面板将显示模型中的模块、约束模块和值类型。从此处可输入各种参数的值,或定义数据集。输入仿真配置参数后,仿真即可运行。
在输入仿真数据,包括起始值、终止值和输出格式后,即可通过点击“求解”按钮运行模拟,如本图所示。