预订演示

请注意 : 本帮助页面不适用于最新版本的Enterprise Architect. 最新的帮助文档在这里.

前页 后页

OpenModelica仿真疑难解答

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

公共仿真问题

此输出表描述了在使用 OpenModelica 时可能会阻止模型被模拟的一些常见问题。在系统输出窗口的“编译”选项卡中选择输出。这些消息是从 OpenModelica 编译器 (omc.exe) 转储的,它通常会将您指向 OpenModelica源代码的行。这将帮助您找到大部分错误。

问题

描述

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

正在键入到端口的 Blocks 不包含保存的属性。例如,一个块“ChargePort”包含两个部分——“v:电压”和“i:电流”。属性“i : Current”应定义为 PhSVariable,属性“isConserved”设置为“ True ”。

PhSConstants 可能没有默认值——它们应该被提供。

PhSVariable A开始可能没有初始值——应该提供一个。

属性可能由配置包外部的元素(块或值类型)键入;使用包导入连接器来解决这个问题。

SysML仿真配置Filters

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

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

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

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

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

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

模型验证示例

信息

讨论

约束中未定义的变量

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

所以,而不是:

a=b*(c+d)

我们输入:

a=v*(c+d)

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

验证模型...

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

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

发现的错误和警告数:2

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

将“v”更改回“b”并再次单击“验证”按钮。应该不会发现任何错误并且问题已得到解决。

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

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

重复的变量名称

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

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

验证模型...

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

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

发现的错误和警告数:2

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

更改其中一个的名称从e2回到e1并再次单击“验证”按钮;应该不会发现任何错误并且问题已得到解决。

属性定义在 ConstraintBlocks Not Used

在 TwoTanks 示例中,在浏览器窗口中,我们浏览到元素'示例模型.系统工程.ModelicaExamples.TwoTanks.constraints.OutFlow'。

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

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

验证模型...

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

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

发现的错误和警告数:2

双击错误行;配置列表显示,其中 ConstraintProperty 突出显示。将 ConstraintProperty 键入到outFlow并且缺少新参数“ c ”。

右键单击配置列表中的 ConstraintProperty,选择“Find in all图表”,然后右键单击图表上的“约束”属性并选择“特征|” Parts/属性”并选择“Show Owned / Inherited”复选框,然后单击“c”。

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

验证模型...

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

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

发现的错误和警告数:2

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

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

学到更多