12

02

[状態マシン図] さまざまなタイムアウト

2013.12.02(07:57)

組込みシステムでは、タイマーを使ったタイムアウト処理も重要な設計要素である。特に以下の点に注意が必要である。
  1. 状態マシン図では、タイムアウトはイベントであり、特定の状態で発生し、他のイベントと同じく状態遷移のきっかけとなる。
  2. タイムアウトが設定されている状態があれば、その状態に入ったところからタイマーはスタートし、その状態から出たところでタイマーは自動的に停止する。
  3. どの状態に入ったところからタイマーをスタートさせるべきかしっかり考える。
  4. エラーイベントと同様、タイムアウトはいつ発生するかはわからない。設計者が意図していないタイミングで発生する。
  5. タイムアウトと他のイベントがほぼ同時に発生することも考慮に入れる必要がある。タイムアウトが他のイベントより一瞬早く届いたときに、他のイベントを無視することにならないだろうか。
  6. タイムアウトが発生すると当該状態を脱出するので、退場時アクションが呼ばれる。同じ状態に戻るなら入場時アクションも呼ばれるし、すべての直交状態は初期状態に戻る。

さまざまなタイムアウトの例を見てゆく。

  1. timer11.png

  2. timer12.png

  3. timer21.png

  4. timer22.png

  5. timer23.png

  6. timer24.png

  7. timer30.png

  8. timer35.png

  9. timer36.png

タイムアウトの厳密な実行順序について
timer40.png
動作中に入ってから5分たってタイムアウトしたときに、
以下の順番で処理が実行される。

(1)タイマーを停止する
(2)退場時アクションを実行する
(3)遷移のアクションを実行する
(4)入場時アクションを実行する
(5)5分タイマーを開始する

なので、タイマーは(2)(3)(4)の実行時間がたったあとに、再スタートすることになる。

退場時アクションを実行してからタイマーを停止するのではないことに注意。

タイマーを開始してから入場時アクションを実行するのでもないことに注意。

タイムアウトの遷移では、アクションはタイマーが止まっているときに実行されると覚えておけばOK。

タイムアウトの遷移に限っていうと、(2)(3)(4)は連続して実行されるので、やりたいアクションを(2)に書いても(3)に書いても(4)に書いても、まったく同じように動く。



プロフィール

島敏博

Shima Toshihiro 島敏博
信州アルプスハイランド在住。HaskellとElixirが好き。組み込みソフトウェアアーキテクト、C++プログラマ、山歩き、美術館巡り、和食食べ歩き、日本赤十字社救急法指導員、インデックス投資、クラシック音楽、SESSAME会員、状態マシン設計、モデル駆動開発、ソフトウェアプロダクトライン、Rubyist、実践ビジネス英語

■ ツイッター
http://twitter.com/saltheads
■ Facebook
http://www.facebook.com/saltheads
■ Qiita
http://qiita.com/saltheads

印刷する場合は、ブラウザの印刷メニューではなく、このページの上から3cmくらいの青いところにある、「印刷」を押してみてください。少しうまく印刷できます。まだ完全ではないのですが、これで勘弁してください。


カテゴリ
最新記事
月別アーカイブ
最新コメント
検索フォーム
リンク
sessame
RSSリンクの表示