[openrtm-users 00199] Re: onActivated でのerror

Sakamoto Takeshi tsakamoto @ tech-arts.co.jp
2007年 9月 7日 (金) 20:13:43 JST


清水様


いつもお世話になっております.
テクノロジックアートの坂本です.

> > OMGのRTC Specificationのステートマシン図でも、
> > ACTIVE状態からERROR状態への遷移のガード条件が、
> > [ReturnCode_t==ERROR]となっているので、
> > on_activated が ERROR のとき、直ちに遷移のトリガーがかかり
> > on_deactivated、on_abortingの順で実行されるものと思います。
> 
> この説明によると,ACTIVE状態からERROR状態に遷移するときは,
> ERROR状態のentry関数の前にACTIVE状態のexit関数が呼ばれ
> なければいけないということでしょうか?
> それならば,onDeactivatedでエラーが起こった場合でも,
> onDeactivatedがまた呼ばれなければいけないということに
> なってしまい,なんかおかしな感じがします.

まず,Stateのexitアクションが呼ばれる条件に関してなのですが,
こちらは,
「状態からどのような遷移が行われるかに関わらず,
 この状態から出た時に必ず実行」となります.
従いまして,ACTIVE状態から抜ける時には
(INACTIVE状態に遷移する場合でも,ERROR状態に遷移する場合でも)
必ずon_deactivatedが呼ばれます.

また,安藤様からもご説明がございましたが,
ガード条件は遷移が発生する前に評価されます.
このため,厳密にはon_deactivatedの返値は
Error状態へ遷移するかどうかの評価対象外となります.

よろしくお願いいたします.

----------------------------------
株式会社テクノロジックアート
坂本 武志
E-Mail:tsakamoto @ tech-arts.co.jp




openrtm-users メーリングリストの案内