あらゆる種類の基本型 (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;