小编Jus*_*man的帖子

是否可以使用 Modelica 构建“有条件”的 FMU?

我有一个应用程序,我使用 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)

modelica dymola

5
推荐指数
1
解决办法
369
查看次数

按名称提取XElement子孙

我有一个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)

我知道上面的方法不起作用,但只是想有效地展示我想要实现的目标.

任何反馈都表示赞赏.

谢谢你,贾斯汀

c# xml xelement

0
推荐指数
1
解决办法
6499
查看次数

标签 统计

c# ×1

dymola ×1

modelica ×1

xelement ×1

xml ×1