前页 | 后页 |
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 。假设我们给了两个属性相同的名称:
验证模型... 错误:重复元素(由于继承元素)不相同:(表达式:“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 为了解决这个问题,我们可以根据实际逻辑做两件事之一:
|