- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个应用程序,我使用 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 = 1) "input value";
Modelica.Blocks.Interfaces.RealOutput y "output value";
parameter Real p0 = 0;
parameter Real p1 = 0;
equation
y = p0 + p1*x;
annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram(
coordinateSystem(preserveAspectRatio=false)));
end partialModel;
model linearModel_NoOffset "Linear model with no offset"
extends partialModel(p0 = 0, p1 = 1);
end linearModel_NoOffset;
model linearModel_Offset "Linear model with offset"
extends partialModel(p0=1, p1=1);
end linearModel_Offset;
model TestModel "Model to test configurability"
// parameter Integer modelIndex = 2 "1 = linear_NoOffset, 2 = linear_Offset" annotation(Evaluate=false);
parameter Integer modelIndex = 2 "1 = linear_NoOffset, 2 = linear_Offset";
// Conditional instances, only one model is created based upon value of modelIndex
linearModel_NoOffset linear_NoOffset if modelIndex == 1;
linearModel_Offset linear_Offset if modelIndex == 2;
// Input and output blocks
Modelica.Blocks.Sources.Constant xMaster(k=1) annotation (Placement(transformation(extent={{-100,-10},{-80,10}})));
Modelica.Blocks.Interfaces.RealOutput yMaster annotation (Placement(transformation(extent={{100,-10},{120,10}})));
equation
// Note that only the connections for the components that exist will be used
// Connect input to each model instance
connect(xMaster.y, linear_NoOffset.x);
connect(xMaster.y, linear_Offset.x);
// Connect output to each model instance
connect(yMaster, linear_NoOffset.y);
connect(yMaster, linear_Offset.y);
annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram(
coordinateSystem(preserveAspectRatio=false)));
end TestModel;
annotation (uses(Modelica(version="3.2.1")));
end ConfigurableModel;
最佳答案
据我了解,这不可能直接使用 FMI。 Modelica 面向对象的特性,如条件实例化,在 Modelica 的符号处理期间处理,然后生成作为 FMU 一部分的 C 代码(作为 C 代码或编译形式)。通过条件实例化,可以更改导出的 FMU 的许多属性(例如,具有不同数量的状态)。因此,在 FMU 中不能有一个单独的 modeldescription.xml 文件来描述 FMU 的属性。
您可以考虑将模型拆分为多个 FMU,并通过交换其中的一些来处理子系统的可变性。但是,这可能会导致比使用原始整体 Modelica 模型更复杂的数值任务,因为无法像 Modelica 编译器对整体模型执行对整体模型的优化。您的示例中的一个优点是,您的部分模型已经具有因果接口(interface)(RealInput 和 RealOutput)
接近您预期的解决方案的解决方法可能是,您在模型中同时包含子模型 linear_NoOffset 和 linear_Offset(没有“如果 modelIndex == xy”),包括由 modelIndex 触发的开关以在信号之间切换两个子模型。可能会导致一些计算开销,因为两个子模型都存在并被评估。
关于modelica - 是否可以使用 Modelica 构建 "conditional"FMU?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42292006/
现在我已经创建了一个额外的跨度来容纳一个条件。 568 || subKey == 0" ng-repeat="links in linksWrap.links">
一些 excel IF 语句可能会变得相当长,我正在寻找一种更简单的方法来编写它们。例如,如果我要写: If($B$4+13=7,$B$4+13,FALSE) 我认为它会更容易说: If($B$4+1
我有一个包含 FromDate 、 ToDate 、 VendorName 和 GoodsName 的表单,一旦一切为真,我需要显示结果 示例: FromDate="11/20/2019"、ToDat
我经常看到使用 !!condition 而不仅仅是常规条件的代码。即: if(!!value){ doSomething(); } 对比: if(value){ doSomething
这个问题有点模棱两可,这两个在汇编代码/性能方面是否等效: public void example{ do{ //some statements; if(condition)
在我看到的使用 Any 方法的 Linq 查询示例中,大约有一半是通过将其应用于 Where() 调用的结果来实现的,另一半则直接将其应用于集合。这两种样式是否总是等效的,或者在某些情况下它们可能会返
这个问题在这里已经有了答案: What does !!(x) mean in C (esp. the Linux kernel)? (3 个答案) 关闭 9 年前。 我见过人们使用带有两个 '!'
我对部署在生产环境中的应用程序进行了线程转储,该应用程序使用 logback。我不是分析线程转储的专家,但是,我必须这样做。正在学习,网上也看了一些文章。 下面是真正的线程转储: "logback-8
在 SQL 中(特别是 Postgres): 子句 where not foo='bar' in case foo is null 评估为某种 null,导致该行不是包含在结果中。 另一方面,子句 w
是不是类似于has and condition with join和where condition after join? 例如 对于以下两个查询,它会给我相同的结果吗 1) SELECT COUNT
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
如果您调用某个函数,并且该函数在发生错误时返回 NULL(例如,想想 malloc() 或 fopen()),两个更好: FILE *fp = fopen(argv[0], "r"); if (fp
我正在使用 Azure 数据工厂 V2,我需要在父检查验证中实现两级检查。例如:如果条件一为真,那么我需要检查条件 2。并且,如果条件 2 为真,则检查条件 3。 这是一种分层检查。当我在父 IF 条
使用 Linq to Entities 有以下区别吗? db.EntityName.Where(a => a.Id == id).FirstOrDefault(); db.EntityName.Fir
我有一种情况,我已经用两种不同的方式解决了,但想知道人们对这些选项的看法,以及他们是否有其他选择...... 系统正在处理数据的“间隔”。 所有数据都分配到一个“区间” 该间隔由事实表 中的“inte
我有包含字段 Amount, Condition1, Condition2 的表格。 例子: Amount Condition1 Condition2 ---------------------
我正在尝试在 Netbeans 中制作一个简单的 MySQL、Java JDBC Web 应用程序。我希望根据当前 session 中的状态变量显示不同的内容。我尝试了以下方法: 首先,我在 .jsp
我想为 postnuke cms 设计一个主题。 并希望在模板文件中使用 css 条件。 postnuke 使用类似 smarty 的标签 .... 所以当我使用 .... 它给出了一些关于标签的错误
我想问一下asyncio.Condition .我对这个概念并不熟悉,但我从学生时代就知道并了解锁、信号量和队列。 我找不到很好的解释或典型的用例,只是 this example .我看了看来源。核心
我想知道如何在不在语句中重做相同查询两次的情况下处理 SQL 比较。这是我要找的: SELECT columnName10, IF( SELECT columnName20 FROM Othe
我是一名优秀的程序员,十分优秀!