前页 后页

对OpenModelica Simulation进行故障排除

尽管本主题描述了使用OpenModelica时可能出现的问题,但是许多要点同样适用于使用MATLAB Simulink执行仿真。

常见的模拟问题

下表介绍了一些常见问题,这些问题可能会导致在使用OpenModelica时无法模拟模型。在“系统输出”窗口的“构建”选项卡中检查输出。这些消息是从OpenModelica编译器(omc.exe)中转储的,该编译器通常将您带到Modelica源代码的各行。这将帮助您找到大多数错误。

问题

描述

方程的数量小于变量的数量。您可能忘记了将某些属性设置为“ PhSConstant”,这意味着该值在仿真过程中不会更改。在开始模拟之前,您可能必须提供“ PhSConstant”属性值。 (通过“模拟数据集”设置值。)

键入端口的块可能不包含保守的属性。例如,块“ ChargePort”包含两个部分-“ v:电压”和“ i:电流”。应将属性“ i:当前”定义为PhSVariable,并将属性“ isConserved”设置为“真”。

PhSConstants可能没有默认值-应该随其提供。

PhSVariable可能没有开始的初始值,应提供一个初始值。

这些属性可以由已配置包外部的元素(块或值类型)来输入;使用程序包导入连接器来解决此问题。

SysML仿真配置过滤器

“ SysML Simulation配置”对话框默认显示包中的所有元素,包括值类型,块,约束块,零件和端口,约束属性,连接器,约束和数据集。对于中型模型,完整列表可能会很长,您可能很难找到潜在的建模错误。

在TwoTanks示例中,如果我们清除Tank.area属性'PhSConstant',然后进行验证,则会发现此错误:

错误:方程式太少,系统欠定。该模型有11个方程式和13个变量。

该错误表明我们可能忘记了为“ PhSConstant”设置某些属性。

现在我们可以做的是单击工具栏右侧的第二个按钮(用于配置的过滤器),然后打开此处显示的对话框。单击全部按钮,然后取消选择“抑制块”和“抑制可变零件”复选框,然后单击“确定”按钮。

现在我们将有一个更短的变量列表,从中我们可以发现在仿真过程中“区域”没有变化。然后,将其定义为“ PhSConstant”,并提供一个初始值来解决此问题。

模型验证示例

信息

讨论区

约束中未定义的变量

在TwoTanks示例中,当我们浏览到'constraintBlock.Outcontrol.Constraint'时,假设我们发现了键入错误:我们在约束中键入了'v'而不是'b'。

因此,代替:

a = b *(c + d)

我们输入:

a = v *(c + d)

单击工具栏上的验证按钮。这些错误消息将出现在“ Modelica”标签中:

验证模型...

错误:在范围OutControl中找不到变量v。 (表达式:“ a = v *(c + d);”)

错误:展平模型TanksConnectedPI时发生错误

发现的错误和警告数量:2

双击错误行;将显示配置列表,并突出显示约束。

将“ v”更改回“ b”,然后再次单击“验证”按钮。找不到错误,此问题已得到解决。

提示:使用SysML Simulation配置视图是更改块或约束块的约束的快捷方式。您可以:

  • 更改约束到位
  • 使用约束的上下文菜单删除
  • 使用块或约束块的上下文菜单添加新约束

变量名称重复

在TwoTanks示例中,浏览至block.tank.constraintProperty.e1 。假设我们给两个属性命名相同:

  • 右键单击e1 ,选择“在项目浏览器中查找”,然后将名称更改为e2;重新加载“ SysML仿真配置”对话框
单击工具栏上的“验证”按钮;这些错误消息出现在“ Modelica”标签中:

验证模型...

错误:重复的元素(由于继承的元素)不相同:(表达式:“ SensorValue e2;”)

错误:展平模型TanksConnectedPI时发生错误

发现的错误和警告数量:2

双击错误行;将显示配置列表,其中突出显示了约束属性。

将其中之一的名称从e2更改回e1 ,然后再次单击Validate按钮;找不到错误,此问题已得到解决。

未使用约束块中定义的属性

在TwoTanks示例中,在“浏览器”窗口中,浏览到元素“ Example Model.Systems Engineering.ModelicaExamples.TwoTanks.constraints.OutFlow”。

假设我们添加了一个属性“ c ”并可能添加了一个新的约束,但是我们忘记了为实例同步约束属性。如果我们不运行验证这将导致方程太少,无法确定的系统错误。

在“ SysML Simulation配置”对话框中重新加载软件包,然后单击工具栏上的“验证”按钮。这些错误消息将出现在“ Modelica”标签中:

验证模型...

错误:ConstraintProperty'e4'缺少在键入ConstraintBlock'OutFlow'中定义的参数。 (遗失:c)

错误:方程式太少,系统欠定。该模型有11个方程式和12个变量。

发现的错误和警告数量:2

双击错误行;配置列表显示为高亮显示约束属性。约束属性的类型为outFlow,并且缺少新参数' c '。

右键单击配置列表中的约束属性,选择“在所有图表中查找”,然后右键单击图表中的“约束”属性,然后选择“功能|零件/属性”并选中“显示拥有/继承的”复选框,然后单击“ c”。

在“ SysML Simulation配置”对话框中重新加载模型,然后单击“验证”按钮。这些错误消息将出现在“ Modelica”标签中:

验证模型...

      错误:ConstraintProperty'e4'对于参数'c'没有任何传入或传出的绑定连接器。

错误:方程式太少,系统欠定。该模型有11个方程式和12个变量。

发现的错误和警告数量:2

为了解决此问题,我们可以根据实际逻辑做两件事之一:

  1. 如果在约束块中必须使用属性“ c”,并且使用“ c”定义了约束,那么我们需要在约束属性的上下文中添加一个属性并绑定到参数“ c”。
  2. 如果不需要属性“ c”,那么我们可以在“约束块”中单击该属性,然后按Ctrl + D。 (相应的约束属性将自动删除“ c”。)