modelica - 在 Modelica 中动态切换连接

标签 modelica openmodelica

假设我有一个涉及各种基本类型(Real、Integer、String、Boolean)的大型连接器。如何根据状态事件切换连接? 我想做这样的事情:

model switch
 input ComplicatedConnector icon[2];
 output ComplicatedConnector ocon;
 input Real x;
 equation
   if x >= 0 then
     connect(ocon, icon[1]);
   else
     connect(ocon, icon[2]);
   end if;
end switch;

这是行不通的。如何在Modelica中正确表达?

答案基于 Adrian Pop 的评论。

model switch
 input ComplicatedConnector icon[2];
 output ComplicatedConnector ocon;
 input Real x;
 ComplicatedConnector con;
 initial equation
   con = icon[1];
 equation
   connect(ocon, con);
   when x >= 0 then
     con := icon[1];
   end when;
   when x < 0 then
     con := icon[2];
   end when;
end switch;

更新:上面的模型是错误的,因为如果没有事件发生,则 ocon 会永远输出 icon[1] 的初始值,这不是您对开关的期望。请注意,这不是由于错误的答案,而是由于我对答案的错误解释。以下模型基于 Michael Tiller 的回答。

model switch
 input ComplicatedConnector icon[2];
 output ComplicatedConnector ocon;
 input Real x;
 Integer k;
 initial equation
   k = 1;
 equation
   ocon = icon[k];
   when x >= 0 then
     k := 1;
   elsewhen x < 0 then
     k := 2;
   end when;
end switch;

最佳答案

不可能。您只能根据编译时已知的参数(也称为结构参数)切换它们。包含connects的if等式中的condition需要是参数表达式。

关于modelica - 在 Modelica 中动态切换连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29189519/

相关文章:

modelica - 如何在 Modelica 模型中使用单位属性?

record - Modelica 通过记录设置多个参数

Modelica integerChange block 未按预期工作?

modelica - 替换 Modelica 中已弃用的函数基数(c)

modelica - 小于或等于不等于模型中的小于或等于?

modelica - Modelica 方程式中 while 循环的语法?

modelica - modelica 中参数的固定值

interpolation - 使用 openmodelica 进行插值的函数

modelica - 用于处理 FMU 的 C/C++ 库

simulink - Modelica 与 Simscape