前页 | 后页 |
创建参数模型
在本主题中,我们将讨论如何开发用于仿真的 SysML模型元素(假设已有 SysML 建模知识),在配置SysML仿真窗口中配置这些元素,并观察在一些不同定义和建模方法下的仿真结果。本章提供的 SysML仿真示例中的图表和屏幕快照说明了这些要点。
创建参数模型时,您可以应用以下三种方法之一来定义约束方程:
- 在块元素上定义内联约束方程
- 创建可重用的约束块,以及
- 使用连接约束属性
- 物理交互中的流动
- 默认值和初始值
- 仿真函数
- 价值分配,以及
- 包导入
访问
功能区 |
仿真>系统行为> Modelica/Simulink >配置管理器 |
在块上定义内联约束方程
直接在块中定义约束很简单,也是定义约束方程的最简单方法。
在这个图中,约束'f = m * a'被定义在一个块元素。
提示:您可以在一个块中定义多个约束。
- 创建一个SysMLSim配置工具工件=Mass*Acceleration( 1 )'并将其指向包'FMA_Test'
- 对于“FMA_Test”,在“值”列中设置“SysMLSimModel”。
- 对于“a”、“m”和“f”部分,在“值”列中:将“a”和“m”设置为“PhSConstant”,(可选)将“f”设置为“PhSVariable”。
- 在“仿真”选项卡的“要绘制的属性”面板中,选中“f”复选框。
- 单击求解按钮运行模拟。
应A f = 98. 1 (来自 10 * 9.81)绘制图表。
连接约束属性
在 SysML 中,ConstraintBlocks 中存在的约束属性可用于在定义约束时提供更大的灵活性。
在这个图中,ConstraintBlock ' K ' 定义了参数'a'、'b'、'c'、'd'和'属性',以及三个约束'eq1'、'eq2'和'eq3',类型为'K1 '、'K2' 和 'K1MultiplyK2' 分别。
在 ConstraintBlock ' K ' 中创建一个参数图,并使用捆绑连接器将参数连接到约束属性,如图所示:
- 创建具有五个属性(零件)的模型属性
- 为属性创建一个约束属性 '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'之间划捆绑连接器,如图所示:
- 在元素中创建一个工件并对其进行配置,如图所示:
- 在“值”列中,将“FMA_Test”设置为“SysMLSimModel”
- 在“值”列中,将“x”和“y”设置为“PhSConstant”
- 在“要绘制的属性”面板中,选中“Z”复选框
- 单击求解按钮运行模拟
应A f = 98. 1 (来自 10 * 9.81)绘制图表。
物理交互中的流动
在对物理相互作用进行建模时,应将电流、力、扭矩和流速等守恒物理物质的交换建模为流,并且应将流变量设置为属性“isConserved”。
连接建立两种不同类型的耦合,取决于流属性是潜在的(默认)还是流(守恒):
- 等式耦合,用于潜在(也称为努力)属性
- 和零耦合,用于流(守恒)属性;例如,根据电学领域的基尔霍夫电流定律,电荷守恒使所有电荷流入一个和为零的点
连接器充电端口
流动电流 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;
结束极限值;
价值分配
该图显示了一个名为“力=质量*加速度”的简单模型。
- 块“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'
- 选中针对“fma1.a”、“fma1.m”和“fma1.f”的“要绘制的属性”复选框
- 单击求解按钮以模拟模型
包导入
工件选择一个包的元素(如Blocks、ConstrainBlocks和Value Types)如果模拟依赖于不属于这个包的元素,比如Reusable库, Enterprise Architect在包元素之间提供了一个导入连接器来满足这个需求。
在电气电路示例中,工件被配置为“ElectricalCircuit”包,其中包含模拟所需的几乎所有元素但是,一些属性被键入为值类型,例如“电压”、“电流”和“电阻”,这些值类型在多个 SysML 模型中常用,因此放置在单个 SysML 模型之外的一个名为“CommonlyUsedTypes”的包中。如果使用导入连接器导入此包,则导入包中的所有元素都将出现在导入配置管理器中。