• 締切済み

SimulinkのStateflowについて

MATLAB Simulink の Stateflow について質問させていただきます。 Stateflowを使おうと思いいろいろ調べていてわかったこととして、  ・StateflowはSimulinkブロックの中の一種  ・状態分岐をフローチャートのような形で書ける ということがありました。 しかし、そこで疑問があります。条件分岐はSimulinkでもifブロックとそれに付随するActionブロックを(複雑に)組み合わせれば実現は可能です。 その複雑な部分をStateflowで置き換えると見た目がすっきりし、構造がわかりやすいというのはよいのですが、だとするとそこでifブロックを使う意味はなんなのでしょうか? 「こういう場面はifブロック、こういう場面はStateflow」のような使い方の切り分けは存在するのでしょうか? 見た目にわかりやすいモデルをStateflowもうまく利用して作っていきたいのですが、作っているうちに上記2つの使い分けがよくわからなくなってきかけたので質問させていただきました。 (ifブロックとStateflowの使い分けの定義がよくわからないモデルになりそうな気配があったため。モデルには統一性を持たせたいです) どなたか詳しい方ご教授いただけるとありがたいです。 以上、よろしくお願いします。

みんなの回答

  • rabbit_cat
  • ベストアンサー率40% (829/2062)
回答No.1

StateFlowは、有限状態機械(FSM)を記述するのに特化しています。 FSMをifブロックで書くことは可能でしょうが、あんまり適してないでしょう。 そうですね。私のイメージとしては、 ifブロックは、例えばボールが地面でバウンドする様子をシミュレーションするときなど、ボールの高さが0になった瞬間に微分方程式を切り替えるときなど、なんというかシステムの物理現象それ自体に、非連続な要素が入っている場合に使う。 一方で、StateFlowは、ある条件を満たしたら、コントローラのモードを切り替えるみたいに、人やコントローラなんかが、系の状態や系を支配する法則を、あらかじめ決められたアルゴリズムにしたがって、意志をもって能動的に切り替える、という場合に使う。 という使い分けがいいと思います。

phil_niekro
質問者

お礼

わかりやすい回答ありがとうございます。 参考にさせていただきます。