首页 文章

在Modelica中动态切换连接

提问于
浏览
2

假设我有一个涉及各种基类型(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;

2 回答

  • 1

    不可能 . 您只能根据编译时已知的参数(也称为结构参数)切换它们 . 包含连接的if方程中的条件需要是参数表达式 .

  • 2

    请注意 connect 语句是方程式 . 你可以自己扩展它们 . 它们的存在主要是为了避免产生样板方程的误差 . 所以我建议你做的只是采用你的 switch 模型并将每个 connect 扩展为方程式 . 它应该工作 .

相关问题