假设我有一个涉及所有基本类型(实数,整数,字符串,布尔值)的大型连接器。如何根据状态事件切换连接?
我想做这样的事情:

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;

最佳答案

不可能。您只能基于编译时已知的参数(也称为结构参数)来切换它们。 if方程中包含连接的条件必须是一个参数表达式。

10-07 15:56
查看更多