前页 | 后页 |
创建参数模型
在本主题中,我们讨论如何开发用于仿真的SysML模型元素(假设有SysML建模的现有知识),如何在“配置SysML仿真”窗口中配置这些元素,以及在某些不同的定义和建模方法下观察仿真的结果。这些点由本章提供的SysML Simulation示例中的图表和屏幕快照来说明。
创建参数模型时,可以应用以下三种方法之一来定义约束方程:
- 在块元素上定义内联约束方程
- 创建可重复使用的约束块,以及
- 使用连接的约束属性
- 物理互动中的流程
- 默认值和初始值
- 模拟功能
- 价值分配,以及
- 包装和进口
访问
色带 |
模拟>系统行为> Modelica / Simulink> SysMLSim配置管理器 |
在块上定义内联约束方程
直接在块中定义约束非常简单,并且是定义约束方程式的最简单方法。
在此图中,在块元素中定义了约束'f = m * a'。
提示:您可以在一个块中定义多个约束。
- 创建SysMLSim配置工件'Force = Mass * Acceleration(1)并将其指向软件包'FMA_Test'。
- 对于“ FMA_Test”,在“值”列中设置“ SysMLSimModel”。
- 对于零件“ a”,“ m”和“ f”,在“值”列中:将“ a”和“ m”设置为“ PhSConstant”,(可选)将“ f”设置为“ PhSVariable”。
- 在“模拟”选项卡上的“绘图属性”面板中,选中“ f”复选框。
- 单击求解按钮运行模拟。
图表应绘制为f = 98.1(来自10 * 9.81)。
关联约束属性
在SysML中,约束块中存在的约束属性可用于在定义约束时提供更大的灵活性。
在此图中,约束块“ K”定义了参数“ a”,“ b”,“ c”,“ d”和“ KVal”,以及三个约束属性“ eq1”,“ eq2”和“ eq3”,键入为“ K1”,“ K2”和“ K1MultiplyK2”。
在约束块“ K”中创建一个参数图,并使用绑定连接器将参数连接到约束属性,如下所示:
- 创建具有五个属性(零件)的模型MyBlock
- 为MyBlock创建约束属性'eq'并显示参数
- 将属性绑定到参数
- 在数据集中提供值(arg_a = 2,arg_b = 3,arg_c = 4,arg_d = 5)
- 在“配置SysML仿真”对话框中,将“模型”设置为“ MyBlock”,将“数据集”设置为“ DataSet_1”
- 在“要绘制的属性”面板中,选中“ arg_K”复选框
- 单击求解按钮以运行模拟
将计算并绘制结果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仍然可以正确解决。
总之,该示例向您展示了如何通过构造约束属性来更灵活地定义约束块。尽管我们仅演示了约束块中的一层,但此机制可以在任意使用级别的复杂模型上运行。
创建可重用约束块
如果一个方程式通常在许多块中使用,则可以创建一个约束块以用作每个块中的约束属性。这些是我们根据之前的示例进行的更改:
- 创建具有三个参数“ a”,“ m”和“ f”以及约束“ f = m * a”的约束块元素“ F_Formula”
提示:如果属性类型为空,则将应用基本类型“ Real”
- 创建具有三个属性“ x”,“ y”和“ z”的块“ FMA_Test”,并将“ x”和“ y”的默认值分别设置为“ 10”和“ 9.81”
- 在“ FMA_Test”中创建一个参数图,显示属性“ x”,“ y”和“ z”
- 创建一个约束属性“ e1”,键入“ F_Formula”并显示参数
- 如图所示,在“ x-m”,“ y-a”和“ f-z”之间绘制绑定连接器:
- 创建一个SysMLSimConfiguration Artifact元素并按照对话框插图中所示进行配置:
-在“值”列中,将“ FMA_Test”设置为“ SysMLSimModel”
-在“值”列中,将“ x”和“ y”设置为“ PhSConstant”
-在“要绘制的属性”面板中,选中“ Z”复选框
-单击求解按钮以运行模拟
图表应绘制为f = 98.1(来自10 * 9.81)。
身体互动中的流程
在为物理相互作用建模时,应将诸如电流,力,扭矩和流速之类的守恒物理物质的交换建模为流量,并且应将流量变量设置为“ isConserved”属性。
通过连接建立两种不同类型的耦合,具体取决于流量属性是电位(默认)还是流量(守恒):
- 相等耦合,用于潜在(也称为努力)属性
- 总和零耦合,用于流动(守恒)特性;例如,根据电子领域的基尔霍夫电流定律,电荷守恒使得所有电荷流到一个总和为零的点上
连接器ChargePort
流电流i; //如果'isConserved'= true,将生成流关键字
电压v;
结束ChargePort;
模型电路
来源来源;
电阻电阻;
接地;
方程
连接(source.p,电阻器.n);
connect(ground.p,source.n);
connect(resistor.p,source.n);
终端电路;
每个连接方程实际上都扩展为两个方程(在ChargePort中定义了两个属性),一个方程用于等式耦合,另一个方程用于零和耦合:
source.pv =电阻器.nv;
source.pi +电阻.ni = 0;
默认值和初始值
如果在SysML属性元素中定义了初始值(“属性”对话框>“属性”页面>“初始”字段),则可以将其作为PhSConstant的默认值或PhSVariable的初始值加载。
在该摆锤示例中,我们提供了属性“ g”,“ L”,“ m”,“ PI”,“ x”和“ y”的初始值,如图的左侧所示。由于“ PI”(数学常数),“ m”(摆锤的质量),“ g”(重力系数)和“ L”(摆锤的长度)在仿真过程中没有变化,因此请将它们设置为“ PhSConstant”。
生成的modelica代码类似于以下代码:
摆类
参数Real PI = 3.141;
参数Real m = 1 ;
参数实g = 9.81 ;
参数Real L = 0.5 ;
实数F;
实数x (开始= 0.5) ;
实数y (start = 0) ;
真实vx;
真正的vy;
......
方程
......
结束摆;
- 属性“ PI”,“ m”,“ g”和“ L”是常量,并作为声明方程生成
- 属性“ x”和“ y”是可变的;它们的起始值分别为0.5和0,并且初始值作为修改生成
模拟功能
仿真功能是用于编写复杂逻辑的强大工具,并且易于用于约束。本节描述了TankPI示例中的函数。
在约束块“ Q_OutFlow”中,定义了函数“ LimitValue”,并将其用于约束中。
- 在块或约束块上,创建一个操作(在本示例中为“ LimitValue”),然后打开“功能”窗口的“操作”选项卡
- 给操作定型“ SimFunction”
- 定义参数并将方向设置为“输入/输出”
提示:可以将多个参数定义为“输出”,并且调用方以以下格式检索值:
(out1,out2,out3)= function_name(in1,in2,in3,in4,...); //方程式
(out1,out2,out3):= function_name(in1,in2,in3,in4,...); //声明形式
- 在“属性”窗口的“代码”选项卡的文本字段中定义函数主体,如下所示:
pLim:=
如果p> pMax,则
最大值
否则,如果p <pMin,则
最小
其他
;
生成代码时, Enterprise Architect将收集在约束块和块中定义为“ SimFunction”的所有构造型操作,然后生成类似于以下代码:
函数LimitValue
输入实数pMin;
输入实数pMax;
输入实数p;
输出Real pLim;
算法
pLim:=
如果p> pMax,则
最大值
否则,如果p <pMin,则
最小
其他
;
结束LimitValue;
价值分配
该图显示了一个称为“力=质量*加速度”的简单模型。
- 使用属性“ a”,“ f”和“ m”以及一个约束属性“ e1”(其类型为约束块“ F_Formula”)对“ FMA”块进行建模
- 块“ FMA”的属性没有设置任何初始值,并且属性“ a”,“ f”和“ m”都是可变的,因此它们的值更改取决于模拟它们的环境
- 创建一个块“ FMA_Test”作为SysMLSimModel并添加属性“ fma1”以测试块“ FMA”的行为
- 将'a_value'约束为'sin(time)'
- 将'm_value'约束为'cos(time)'
- 绘制分配连接器以将环境中的值分配给模型“ FMA”
- 选中“ fma1.a”,“ fma1.m”和“ fma1.f”的“绘图属性”复选框
- 单击求解按钮以模拟模型
包装和进口
SysMLSimConfiguration工件收集包的元素(例如,块,约束块和值类型)。如果模拟依赖于此Package不拥有的元素(例如可重用库),则Enterprise Architect在Package元素之间提供一个Import连接器来满足此要求。
在电路示例中,工件被配置为“电气电路”包,其中包含几乎所有仿真所需的元素。但是,某些属性被键入值类型,例如“电压”,“电流”和“电阻”,它们在多个SysML模型中通常使用,因此被放置在各个SysML模型外部的名为“ CommonlyUsedTypes”的程序包中。如果使用导入连接器导入此程序包,则导入的程序包中的所有元素将显示在SysMLSim配置管理器中。