预订演示
前页 后页

创建参数模型

在本主题中,我们将讨论如何开发用于仿真的 SysML模型元素(假设已有 SysML 建模知识),在配置SysML仿真窗口中配置这些元素,并观察在一些不同定义和建模方法下的仿真结果。本章提供的 SysML仿真示例中的图表和屏幕快照说明了这些要点。

创建参数模型时,您可以应用以下三种方法之一来定义约束方程:

  • 在块元素上定义内联约束方程
  • 创建可重用的约束块,以及
  • 使用连接约束属性
您还将考虑:
  • 物理交互中的流动
  • 默认值和初始值
  • 仿真函数
  • 价值分配,以及
  • 包导入

访问

功能区

仿真>系统行为> Modelica/Simulink >配置管理器

在块上定义内联约束方程

直接在块中定义约束很简单,也是定义约束方程的最简单方法。

在这个图中,约束'f = m * a'被定义在一个块元素。

Block Constraint in Modelica SysML System Simulation in Sparx Systems Enterprise Architect

提示:您可以在一个块中定义多个约束。

  1. 创建一个SysMLSim配置工具工件=Mass*Acceleration( 1 )'并将其指向包'FMA_Test'
  2. 对于“FMA_Test”,在“值”列中设置“SysMLSimModel”。
  3. 对于“a”、“m”和“f”部分,在“值”列中:将“a”和“m”设置为“PhSConstant”,(可选)将“f”设置为“PhSVariable”。
  4. 在“仿真”选项卡的“要绘制的属性”面板中,选中“f”复选框。
  5. 单击求解按钮运行模拟。

应A f = 98. 1 (来自 10 * 9.81)绘制图表。

连接约束属性

在 SysML 中,ConstraintBlocks 中存在的约束属性可用于在定义约束时提供更大的灵活性。

在这个图中,ConstraintBlock ' K ' 定义了参数'a'、'b'、'c'、'd'和'属性',以及三个约束'eq1'、'eq2'和'eq3',类型为'K1 '、'K2' 和 'K1MultiplyK2' 分别。

Constraint Properties in Business Process Simulation in Sparx Systems Enterprise Architect

在 ConstraintBlock ' K ' 中创建一个参数图,并使用捆绑连接器将参数连接到约束属性,如图所示:

Constraint Block in Business Process Simulation in Sparx Systems Enterprise Architect

  • 创建具有五个属性(零件)的模型属性
  • 为属性创建一个约束属性 'eq' 并显示参数
  • 将属性绑定到参数

  • 在数据集中提供值 (arg_a = 2, arg_b = 3, arg_c = 4, arg_d = 5)
  • 在“配置SysML仿真”对话框中,将“模型”设置为“MyBlock”,将“数据集”设置为“DataSet_1”
  • 在“propertyto Plot”面板中,选中“属性”复选框
  • 点击 Solve 按钮运行模拟

将计算并绘制结果 120(计算为 2 * 3 * 4 * 5)。这与我们用笔和纸进行扩展时相同: K = K1 * K2 = (x*y) * (p*q),然后绑定值 (2 * 3) * (4 * 5);我们得到 120。

有趣的是,我们有意将 K2 的方程定义为“p = K2 / q”,这个例子仍然有效。

在这个例子中,我们可以很容易地将 K2 求解为 p * q,但在一些复杂的例子中,从方程中求解变量是非常困难的;但是, Enterprise Architect SysMLSim 仍然可以做到这一点。

总之,该示例向您展示了如何通过构造约束属性来定义具有更大灵活性的 ConstraintBlock。虽然我们只在 ConstraintBlock 中演示了一层,但这种机制将适用于任意级别的复杂模型。

创建可重用的约束块

如果一个方程在许多块中通用,则可以创建一个 ConstraintBlock 用作每个块中的约束属性。这些是我们根据前面的示例所做的更改:

  • 创建一个 ConstraintBlock元素'F_Formula' 具有三个参数 'a'、'm' 和 'f',以及一个约束 'f = m * a'

    提示:如果属性类型为空,将应用原始类型 'Real'
  • 用'x'、'y'和'z'三个属性创建一个块'属性',并分别赋予'x'和'y'默认值'10'和'9.81'
  • 在“FMA_Test”中创建一个参数图,显示属性“x”、“y”和“z”
  • 创建一个 ConstraintProperty 'e1' 类型为 'F_Formula' 并显示参数
  • 在'x-m'、'y-a'和'f-z'之间划捆绑连接器,如图所示:

    Constraint Block in Modelica SysML System Simulation in Sparx Systems Enterprise Architect
  • 在元素中创建一个工件并对其进行配置,如图所示:
    - 在“值”列中,将“FMA_Test”设置为“SysMLSimModel”
    - 在“值”列中,将“x”和“y”设置为“PhSConstant”
    - 在“要绘制的属性”面板中,选中“Z”复选框
    - 单击求解按钮运行模拟

应A f = 98. 1 (来自 10 * 9.81)绘制图表。

物理交互中的流动

在对物理相互作用进行建模时,应将电流、力、扭矩和流速等守恒物理物质的交换建模为流,并且应将流变量设置为属性“isConserved”。

连接建立两种不同类型的耦合,取决于流属性是潜在的(默认)还是流(守恒):

  • 等式耦合,用于潜在(也称为努力)属性
  • 和零耦合,用于流(守恒)属性;例如,根据电学领域的基尔霍夫电流定律,电荷守恒使所有电荷流入一个和为零的点
在“ElectricalCircuit”示例的生成 OpenModelica 代码中:

连接器充电端口

流动电流 i; // 如果 'isConserved' = true 将生成流关键字

电压v;

结束充电端口;

电路模型

源;

电阻电阻器;

接地;

方程

连接(源.p,电阻器.n);

连接(接地.p,源.n);

连接(电阻器.p,源.n);

结束电路;

每个连接方程实际上扩展为两个方程(ChargePort 中定义了两个属性),一个用于等式耦合,另一个用于和零耦合:

源.pv = 电阻器.nv;

源.pi + 电阻.ni = 0;

默认值和初始值

如果在 SysML属性元素(“属性”对话框 >“属性”页面 >“初始”字段)中定义了初始值,则它们可以作为 PhSConstant 的默认值或 PhSVariable 的初始值加载。

在这个 Pendulum 示例中,我们为属性“g”、“ L ”、“m”、“PI”、“x”和“y”提供了初始值,如图左侧所示。由于“PI”(数学常数)、“m”(摆锤的质量)、“g”(重力因子)和“ L ”(摆锤的长度)在模拟过程中不会发生变化,因此将它们设置为“PhSConstant”。

生成的 Modelica 代码如下所示:

类摆

参数 Real PI = 3.141;

                    参数 Real m = 1 ;

参数 Real g = 9.81 ;

参数 Real L = 0.5 ;

实F;

实数 x (start=0.5) ;

实 y (start=0) ;

真正的vx;

真正的 vy;

……

方程

……

结束摆;

  • 属性'PI'、'm'、'g'和' L '是常数,并作为声明方程生成
  • 属性“x”和“y”是可变的;它们的起始值分别为 0.5 和 0,初始值作为修改生成

仿真函数

仿真函数是编写复杂逻辑A有用工具,并且易于用于约束。本节介绍 TankPI 示例中的一个函数。

在 ConstraintBlock 'Q_OutFlow' 中,函数'LimitValue' 被定义并在约束中使用。

  • 在块或约束块上,创建一个操作(本例中为“LimitValue”)并打开特征窗口的“操作”选项卡
  • 给操作定型“SimFunction”
  • 定义参数并将方向设置为“输入/输出”

提示:多个参数可以定义为'out',调用者取值的格式为:

(out1, out2, out3) = function_name(in1, in2, in3, in4, ...); //方程形式

(out1, out2, out3) := function_name(in1, in2, in3, in4, ...); //报表形式

  • 在属性窗口的“代码”选项卡的文本字段中定义函数体,如图:

    pLim :=
    如果 p > pMax 那么
    最大
    else如果 p < pMin 那么
    pMin
    else
    p;

生成代码时, Enterprise Architect将收集所有在 ConstraintBlocks 和 Blocks 中定义为“SimFunction”的操作,然后生成类似于以下内容的代码:

函数极限值

输入Real pMin;

输入真实 pMax;

输入实数 p;

输出实 pLim;

算法

pLim :=

如果 p > pMax 那么

最大

else如果 p < pMin 那么

pMin

else

p;

结束极限值;

价值分配

该图显示了一个名为“力=质量*加速度”的简单模型。

Block Definition diagram, SysML System Simulation in Sparx Systems Enterprise Architect

  • 块“FMA” A属性“a”、“f”和“m”以及约束属性“e1”建模,输入约束块“F_Formula”
  • 块'FMA'的属性没有设置任何初始值,并且属性'a'、'f'和'm'都是可变的,所以它们的值变化取决于它们被模拟的环境
  • 创建一个块'FMA_Test'作为SysMLSimModel并添加属性'fma1'来测试块'FMA'的行为
  • 约束'a_value' 为' sin (time)'
  • 约束'm_value'为' cos (time)'
  • 划分配连接器将值从环境分配到模型'FMA'
Internal Block diagram in SysML System Simulation in Sparx Systems Enterprise Architect

  • 选中针对“fma1.a”、“fma1.m”和“fma1.f”的“要绘制的属性”复选框
  • 单击求解按钮以模拟模型

包导入

工件选择一个包的元素(如Blocks、ConstrainBlocks和Value Types)如果模拟依赖于不属于这个包的元素,比如Reusable库, Enterprise Architect在包元素之间提供了一个导入连接器来满足这个需求。

在电气电路示例中,工件被配置为“ElectricalCircuit”包,其中包含模拟所需的几乎所有元素但是,一些属性被键入为值类型,例如“电压”、“电流”和“电阻”,这些值类型在多个 SysML 模型中常用,因此放置在单个 SysML 模型之外的一个名为“CommonlyUsedTypes”的包中。如果使用导入连接器导入此包,则导入包中的所有元素都将出现在导入配置管理器中。

了解更多