前页 | 后页 |
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);”) Error: Error occurred while flattening模型TanksConnectedPI 发现的错误和警告数:2 双击错误行;配置列表显示并突出显示约束。 更改'v' 改回 'b' 并再次单击 Validate 按钮。未发现任何错误,问题已解决。 提示:使用 SysML仿真配置视图是更改块或约束块约束的快捷方式。你可以:
|
重复的变量名称 |
在 TwoTanks 示例中,浏览到block.tank.constraintProperty.e1 。假设我们给两个属性取了相同的名字:
正在验证模型... 错误:重复元素(由于继承的元素)不相同:(表达式:“SensorValue e2;”) Error: Error occurred while flattening模型TanksConnectedPI 发现的错误和警告数:2 双击错误行;配置列表显示并突出显示约束属性。 更改其中一个的名称从e2改回e1并再次单击 Validate 按钮;没有发现错误,问题已解决。 |
属性定义在 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,选择“在所有图表中查找”选项,然后右键单击图表上的“约束”属性;选择'特征|部件/属性”并选中“显示拥有/继承”复选框,然后单击“c”。 在“SysML仿真配置”对话框中重新加载模型,然后单击“验证”按钮。这些错误消息将出现在“Modelica”选项卡中: 正在验证模型... 错误:ConstraintProperty“e4”没有参数“c”的任何传入或传出绑定连接器。 错误:方程式太少,系统未定。模型有 11 个方程和 12 个变量。 发现的错误和警告数:2 为了解决这个问题,我们可以根据实际逻辑做两件事之一:
|