Simulinkのバーチャルとアトミックサブシステムとは?

今回はバーチャルサブシステムの説明です。

先日の打合せで、「普通のサブシステムはバーチャルなんです!」と説明したのですが、
お客様が「???」という顔をされていたので、
意外と知られてないのかと思い、記事にしてみました。

以下の簡単な例で説明します
(もし仕様が変わっていたらすみません)

例えば、以下のようなモデル①があったとします。

これを以下のように左側と右側のGainでサブシステム化したとします
これをモデル②とします(↓)

上のモデル②だと左側と右側が分かれたように見えますが、
実際には視覚的にサブシステムに入っているだけです

Simulink®からしたら、①と②は同じに見えます
つまり、モデル①と②は同じ実行順序で動作します。


例えば、モデル②では、
先に左側のサブシステムから計算されていると思いがちですが、
Simulinkはモデル①と同じように上段の計算を実行して、
その後下段の計算を実行しています。

もし左側のサブシステムから動作させたい場合、
サブシステムのプロパティにある「Atomicサブシステムとして扱う」にチェックを入れます

チェックを入れた後にサブシステムの枠が太枠になります。
この状態だと、サブシステム内の演算が一つに括られるので、
先に左側のサブシステム内が計算され、その後、右側のサブシステムが計算されます。

SimulinkでECUの制御ロジックを作っている人は、上記を理解しておく必要があります。

パソコンのSimulinkではモデル①のような動作になりますが
ソースコード化した際に、サブシステムを関数化するとモデル②に近い動作になります。

これにより、結果に微妙な差異がでるかもしれませんので
上記の点を意識しながら、気を付けて開発してください。

ーーーーーーーーーーーーー
※MATLAB, Simulinkは、MathWorks社の登録商標です。
※記事内のサンプル等の流用にて損害等が発生したとしても、保証は一切致しません。