ロボット、千葉ロッテマリーンズについていいかげんなことを書きます。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
この作品のコメントでrtcdで起動したRTCの通信よりも共有メモリの通信の方が速いとか書いてましたけど、どうやらもう一度実験しても共有メモリの方が速いみたいな事を書いてありますね。どんなプログラムで実験をしたのかは知りませんけど、結果としてそうなったのならそうなのかもしれません。ただ同一プロセス上で起動したRTCの場合は単なる関数呼び出しでデータを受け渡せるはずなので、共有メモリより遅い理由を説明してほしいです。わかっているならもったいぶらずに教えてくれてもいいと思いますけどね。
それはさておき今回はステートマシン図の話をします。
astah* communityを起動して図→ステートマシン図を選択してください。
とりあえず使いそうな要素を並べてみました。
簡単に図を作ってみました。
この図の場合は開始後、状態0に遷移してact0を実行→状態0に留まっている間はact1を実行→状態から出るときにact2を実行して終了状態に遷移するとかしないとからしいです。
entry、do、exitは状態を選択して左下の設定ウィジェットから設定できます。
上の図の場合はトリガー、ガード条件、エフェクトを設定していないため、entry、doアクティビティが終了すると状態が遷移するとからしいです。
以下のようにトリガー、ガード条件、エフェクトを表現できます。
矢印を選択して左下の設定ウィジェットから設定できます。
状態0でトリガーで設定したイベントが発生すると遷移します。
ただし、ガードが設定してある場合はトリガーが発生してもガード条件が成立していないと遷移しないらしいです。
さらにアクションを設定している場合は遷移発生時に設定したアクションを実行します。
さらに状態の中に開始状態等を入れることで内部に状態遷移を持つコンポジット状態を表現できます。
通常は内部の開始状態から始まり、終了状態に遷移すると次の状態に遷移するらしいです。
トリガを設定している場合は、終了状態に遷移してなくても次の状態に遷移するという解釈で合っているのでしょうかね?
入場点、退場点を追加することで任意の状態からの開始、任意の状態に遷移出来るらしいですが、astah* communityで追加する方法がわかりません。詳しい人は教えてください。何だか最近こればっかり言っているような気がします。
複数処理を並行して実行したい場合は以下のようにを表現できます。
これを直交状態と呼ぶらしいです。
この場合、全ての直交状態が終了後に遷移します。
状態0を右クリックして領域の追加→横領域の追加を選択後、追加した領域に状態を設定することで直交状態を作成できます。
フォーク、ジョインを使用することでも上の図と同じことを表現できるとかできないとからしいです。
以下のように浅い履歴擬似状態ボタンを押すことで浅い履歴擬似状態を追加できます。
この場合、状態6の時にトリガー1を満たすと状態10に遷移しますが、再び状態6に遷移しようとすると通常は状態6の開始状態に遷移するはずですが、浅い履歴擬似状態に遷移した場合は状態6から抜けるときに記憶した状態に遷移するらしいです。例えば、状態7の時に状態10に遷移した場合、浅い履歴擬似状態に遷移したときに状態7に遷移するとかそうではないとかということでしょうかね?
深い履歴擬似状態という要素を追加してみます。
状態9の状態11の時に状態6から遷移した場合、浅い履歴擬似状態の場合は状態9の開始状態に遷移しますが、深い履歴擬似状態の場合は状態11から開始するとからしいです。
ジャンクション擬似状態ボタンを選択すると、ジャンクション擬似状態を追加できます。
選択擬似状態ボタンを選択すると、選択擬似状態を追加できます。
正直違いがわからなかったので、このサイトを読みながらどういう遷移をするのかを考えてみます。むしろリンク先のサイトが分かりやすかったのでそちらを読んだ方が良いと思います。
どちらも遷移後にガード14とガード15の条件を満たす状態に遷移すると言う事は変わらないのですが、ジャンクション擬似状態の場合は遷移する前後のガード条件を同時に評価するらしいです。
つまりジャンクション擬似状態の場合、ガード13とガード14、ガード15を同時に評価するため、ガード14、ガード15をどちらも満たさない場合は状態13に留まることになります。
さらにアクション13が実行されるのもガード13とガード14、ガード15の評価後と言う事になります。
選択擬似状態の場合はガード13を評価後、アクション13を実行して選択擬似状態に遷移、その後ガード14とガード15を評価します。この時ガード14とガード15のどちらも満たさない場合は状態が不確定になります。
そのため以下のようにどの条件も満たさない場合の遷移も設定しておく必要があります。
今日はこのぐらいにしておきます。
明日はコミュニケーション図をやります。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
それはさておき今回はステートマシン図の話をします。
astah* communityを起動して図→ステートマシン図を選択してください。
とりあえず使いそうな要素を並べてみました。
簡単に図を作ってみました。
この図の場合は開始後、状態0に遷移してact0を実行→状態0に留まっている間はact1を実行→状態から出るときにact2を実行して終了状態に遷移するとかしないとからしいです。
entry、do、exitは状態を選択して左下の設定ウィジェットから設定できます。
上の図の場合はトリガー、ガード条件、エフェクトを設定していないため、entry、doアクティビティが終了すると状態が遷移するとからしいです。
以下のようにトリガー、ガード条件、エフェクトを表現できます。
矢印を選択して左下の設定ウィジェットから設定できます。
状態0でトリガーで設定したイベントが発生すると遷移します。
ただし、ガードが設定してある場合はトリガーが発生してもガード条件が成立していないと遷移しないらしいです。
さらにアクションを設定している場合は遷移発生時に設定したアクションを実行します。
さらに状態の中に開始状態等を入れることで内部に状態遷移を持つコンポジット状態を表現できます。
通常は内部の開始状態から始まり、終了状態に遷移すると次の状態に遷移するらしいです。
トリガを設定している場合は、終了状態に遷移してなくても次の状態に遷移するという解釈で合っているのでしょうかね?
入場点、退場点を追加することで任意の状態からの開始、任意の状態に遷移出来るらしいですが、astah* communityで追加する方法がわかりません。詳しい人は教えてください。何だか最近こればっかり言っているような気がします。
複数処理を並行して実行したい場合は以下のようにを表現できます。
これを直交状態と呼ぶらしいです。
この場合、全ての直交状態が終了後に遷移します。
状態0を右クリックして領域の追加→横領域の追加を選択後、追加した領域に状態を設定することで直交状態を作成できます。
フォーク、ジョインを使用することでも上の図と同じことを表現できるとかできないとからしいです。
以下のように浅い履歴擬似状態ボタンを押すことで浅い履歴擬似状態を追加できます。
この場合、状態6の時にトリガー1を満たすと状態10に遷移しますが、再び状態6に遷移しようとすると通常は状態6の開始状態に遷移するはずですが、浅い履歴擬似状態に遷移した場合は状態6から抜けるときに記憶した状態に遷移するらしいです。例えば、状態7の時に状態10に遷移した場合、浅い履歴擬似状態に遷移したときに状態7に遷移するとかそうではないとかということでしょうかね?
深い履歴擬似状態という要素を追加してみます。
状態9の状態11の時に状態6から遷移した場合、浅い履歴擬似状態の場合は状態9の開始状態に遷移しますが、深い履歴擬似状態の場合は状態11から開始するとからしいです。
ジャンクション擬似状態ボタンを選択すると、ジャンクション擬似状態を追加できます。
選択擬似状態ボタンを選択すると、選択擬似状態を追加できます。
正直違いがわからなかったので、このサイトを読みながらどういう遷移をするのかを考えてみます。むしろリンク先のサイトが分かりやすかったのでそちらを読んだ方が良いと思います。
どちらも遷移後にガード14とガード15の条件を満たす状態に遷移すると言う事は変わらないのですが、ジャンクション擬似状態の場合は遷移する前後のガード条件を同時に評価するらしいです。
つまりジャンクション擬似状態の場合、ガード13とガード14、ガード15を同時に評価するため、ガード14、ガード15をどちらも満たさない場合は状態13に留まることになります。
さらにアクション13が実行されるのもガード13とガード14、ガード15の評価後と言う事になります。
選択擬似状態の場合はガード13を評価後、アクション13を実行して選択擬似状態に遷移、その後ガード14とガード15を評価します。この時ガード14とガード15のどちらも満たさない場合は状態が不確定になります。
そのため以下のようにどの条件も満たさない場合の遷移も設定しておく必要があります。
今日はこのぐらいにしておきます。
明日はコミュニケーション図をやります。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
PR
この記事にコメントする