我有一个应用程序,我使用 Dymola 作为开发环境,但将以 FMU 形式导出模型以在另一个应用程序中使用。我正在建模的系统具有可互换的组件,这使得它们非常适合在 Modelica 中进行建模。但是,当我想以 FMU 形式导出模型时,我不确定是否可以利用该功能。
考虑下面非常简单的包。该包的目标是定义两个非常简单的模型,并允许用户在执行模型时在可能的模型之间进行选择。虽然这在 Modelica IDE 中很容易做到,但我需要 FMU 中的类似功能。
部分模型定义了一个模型,其中 y = p0 + p1*x。两个扩展模型只是为参数 p0 和 p1 分配不同的值。最后,TestModel 添加一个名为 modelIndex 的参数,该参数在定义两种可能的模型类型的条件表达式中使用。在 Dymola 中,这非常有效,因为用户可以轻松设置参数 modelIndex 的值。我试图弄清楚是否可以通过将 modelIndex 作为 FMU 的输入来通过 FMU 来完成此任务。但是,如果我为 modelIndex 变量设置注释 Evaluate=false,编译就会失败。所指出的错误是:“当前版本的 Modelica 转换器只能处理具有固定条件的条件组件......条件声明的条件中使用的所有变量必须声明为常量或参数。”
如果有人可以帮助提供有关如何创建有条件 FMU 的指导,我们将不胜感激。这个简单的例子只是用来演示这个问题。正在建模的真实系统有 4-5 个主要组件,每个组件都有 5 种以上可能的不同模型,从而产生大量可能的排列。简单地批量导出所有配置可能是不可行的。
谢谢!贾斯汀
package ConfigurableModel
"Package to test whether or not models can be configured by external inputs"
partial model partialModel
"Partial model used to control selectable options in Dymola"
Modelica.Blocks.Interfaces.RealInput x(start …Run Code Online (Sandbox Code Playgroud) 我有一个XElement(myParent)包含我希望从中提取数据的多个级别的子级.感兴趣的元素位于父母的已知位置.
我明白我能够通过以下方式获得子元素:
myParent.Element(childName);
Run Code Online (Sandbox Code Playgroud)
要么
myParent.Element(level1).Element(childName);
Run Code Online (Sandbox Code Playgroud)
如果我想循环遍历不同级别的元素列表的数组,并循环遍历列表,我无法弄清楚如何执行此操作.例如,我有兴趣获得以下元素:
myParent.Element("FieldOutputs").Element("Capacity");
myParent.Element("EngOutputs").Element("Performance")
myParent.Element("EngOutputs").Element("Unit").Element("Efficiency")
Run Code Online (Sandbox Code Playgroud)
如何在数组中定义这些位置,以便我可以简单地遍历数组?
即
string[] myStringArray = {"FieldOutputs.Capacity", "EngOutputs.Performance", "EngOutputs.Unit.Efficiency"};
for (int i=0; i< myArray.Count(); i++)
{
XElement myElement = myParent.Element(myStringArray);
}
Run Code Online (Sandbox Code Playgroud)
我知道上面的方法不起作用,但只是想有效地展示我想要实现的目标.
任何反馈都表示赞赏.
谢谢你,贾斯汀