状態遷移図のここがすごい
状態遷移図とは?・・・1
ではフローチャート、タイムチャートなどと状態遷移図がどの様に違うか
そしてメリット/デメリットが何かを説明しました。
じゃ、具体的に何がすごいの?
ちょっと、紹介しますね。
私自身がUMLを丸々マスターしているわけではなく状態遷移図が便利
という事とMATLAB/Simulinkでは状態遷移図を扱うツールとして
StateFlowが使えるってことくらいです。
ですから私の頭の中では
StateFlow=状態遷移図
です。詳細な標準があるかどうか知りません。
では状態遷移図の凄さですが
状態(State)と遷移(Transition)で表現されるからです。
フローチャートとの比較
このパターンのステートフローと比較します。
図の○印は”ジャンクション”と言って、
この場合lowとhighの状態のどちらかに行く分岐です。
そこについている[x<0]は分岐条件です。
コンピュータの内部処理としては上流からステップごとに流れるので
計算時間は要しますが、出力状態として全く関係ありません。
ですからxの値によっては出力初期値が変わります。
そして、出力状態がlowかhighに決まったら必ず1サイクルはとどまります。
・出力状態は必ずとどまる
・分岐は留まらない
この発想が状態遷移図の特徴です。
一方、フローチャートは分岐や判断と言った場所に留まるとか
留まらないという概念がありません。(多分)
ですから最初の図だと処理のクロック単位で処理が進むものです。
少し改良したのフローチャートがこれです。
違いは単純にY=1、Y=2のブロックにwait=10を追加したことです。
こうするとその状態にとどまるという事になるんでしょうか?
これでStateFlowで描く状態遷移図とほとんど同じです。
が!最大の違い
最大の違いは状態遷移図とフローチャートが同じと言いつつも
フローチャートの場合はwait=10を実行するとまた判断ブロックに
戻ってしまう事です。
ここで悲しいお知らせです。
これはヒステリシス回路ですが、フローチャートの場合はなんとなくイメージ的に
問題ありませんでした。
この場合wait分を入れてしまったので、
wait=10が終了すると処理ブロックを抜けだしてしまいます。
もしwait=10後の入力値が
0≦x≦5
この範囲だったらどうでしょうか?
出力値yは1でもない2でもないことになります。
(ハイインピーダンス状態?)
値が確定しません。
だからフローチャートを厳密にやると非常にややこしくなります。
この場合はいいんですが基本的に縦長なので使いにくくなります。
しかし状態遷移図の場合はlow状態では[x>5]
high状態では[x<0]のイベントが発生しない限り
その状態にとどまったままです。
ですからStateFlowはイベントドリブン型の処理ということになります。
一種の割り込み処理でしょうか?
それが簡単に描けます。
おまけ
StateFlowでフローチャートチックに描く方法
ちょっと試したところ、状態遷移図でフローチャート風に示すと
これが一番近いかなという感じです。
cnt++がタイマになっています。
判断ブロックが表現できないので遷移の部分に条件式を記入しややこしくなってしまいました。
これでプログラム的には等価です。
まとめ
結局、状態遷移図とは便利なツール。
この記事へのコメントはありません。