クラス StateMachine

状態マシンクラス [詳細]


Public メソッド

def __init__
 コンストラクタ
def setNOP
 NOP関数を登録する
def setListener
 Listener オブジェクトを登録する
def setEntryAction
 Entry action 関数を登録する
def setPreDoAction
 PreDo action 関数を登録する
def setDoAction
 Do action 関数を登録する
def setPostDoAction
 PostDo action 関数を登録する
def setExitAction
 Exit action 関数を登録する
def setTransitionAction
 State transition action 関数を登録する
def setStartState
 初期状態をセットする
def getStates
 状態を取得する
def getState
 現在の状態を取得する
def isIn
 現在状態を確認
def goTo
 状態を遷移
def worker
 駆動関数
def setNullFunc
 NOP関数を設定
def sync
 状態の同期処理
def need_trans
 遷移の必要性チェック
def update_curr
 現在状態の更新


説明

状態マシンクラス

StateMachine クラスは状態マシンを実現するクラスである。

例: ActiveObjectは状態マシンを持つアクティブオブジェクトであるとする。 状態は3状態 INACTIVE, ACTIVE, ERROR があり、各状態でのEntryやExit動作を 定義したいとすると、以下のように実現される。

 class ActiveObject:
   class MyState:
     INACTIVE, ACTIVE, ERROR = range(3)

   def __init__(self):
     m_sm = StateMachine(3)
     m_sm.setNOP(nullAction)
     m_sm.setListener(self)

     m_sm.setExitAction(MyState.INACTIVE, self.inactiveExit)
       : 
     m_sm.setPostDoAction(MyState.ERROR, self.errorPostDo)
     m_sm.setTransitionAction(self.transition);

   def nullAction(myStates):
     pass
   def inactiveExit(myStates):
     pass
     : 
   def errorPostDo(myStates):
     pass
   def transition(myStates:
     pass
 
状態を持たせたいクラスは以下の条件を満たすように実装しなければならない。
  1. 内部クラスで状態を定義
  2. StateMachine のコンストラクタ引数は状態の数
  3. 以下のアクション関数を(Return _function_name_(States)) の関数として設定
    1. 何もしない関数を必ず定義し、setNOP で与えなければならない
    2. 各状態毎に, set(Entry|PreDo|Do|PostDo|Exit)Action でアクションを設定
    3. 状態遷移時のアクションを setTransitionAction() で設定。
  4. 遷移時のアクションは、与えられた現在状態、次状態、前状態を元に、 ユーザが実装しなければならない。
  5. 状態の変更は goTo() で、状態のチェックは isIn(state) で行う。
  6. goTo()は次状態を強制的にセットする関数であり、遷移の可否は、 ユーザが現在状態を取得し判断するロジックを実装しなければならない。

このクラスは、一つの状態に対して、

5つのアクションが定義することができる。 Transition action はあらゆる状態間遷移で呼び出されるアクションで、 その振る舞いはユーザが定義しなければならない。

このクラスは以下のようなタイミングで各アクションが実行される。

から:
0.4.0

StateMachine.py156 行で定義されています。


関数

def __init__ (   self,
  num_of_state 
)

コンストラクタ

コンストラクタ

引数:
self 
num_of_state ステートマシン中の状態数

StateMachine.py176 行で定義されています。

def setNOP (   self,
  call_back 
)

NOP関数を登録する

NOP関数(何もしない関数)を登録する。

引数:
self 
call_back コールバック関数

StateMachine.py205 行で定義されています。

def setListener (   self,
  listener 
)

Listener オブジェクトを登録する

各種アクション実行時に呼び出される Listener オブジェクトを登録する。

引数:
self 
listener Listener オブジェクト

StateMachine.py226 行で定義されています。

def setEntryAction (   self,
  state,
  call_back 
)

Entry action 関数を登録する

各状態に入った際に実行される Entry action 用コールバック関数を登録する。

引数:
self 
state 登録対象状態
call_back Entry action 用コールバック関数
戻り値:
アクション実行結果

StateMachine.py245 行で定義されています。

def setPreDoAction (   self,
  state,
  call_back 
)

PreDo action 関数を登録する

各状態内で実行される PreDo action 用コールバック関数を登録する。

引数:
self 
state 登録対象状態
call_back PreDo action 用コールバック関数
戻り値:
アクション実行結果

StateMachine.py268 行で定義されています。

def setDoAction (   self,
  state,
  call_back 
)

Do action 関数を登録する

各状態内で実行される Do action 用コールバック関数を登録する。

引数:
self 
state 登録対象状態
call_back Do action 用コールバック関数
戻り値:
アクション実行結果

StateMachine.py291 行で定義されています。

def setPostDoAction (   self,
  state,
  call_back 
)

PostDo action 関数を登録する

各状態内で実行される PostDo action 用コールバック関数を登録する。

引数:
self 
state 登録対象状態
call_back PostDo action 用コールバック関数
戻り値:
アクション実行結果

StateMachine.py314 行で定義されています。

def setExitAction (   self,
  state,
  call_back 
)

Exit action 関数を登録する

各状態内で実行される Exit action 用コールバック関数を登録する。

引数:
self 
state 登録対象状態
call_back Exit action 用コールバック関数
戻り値:
アクション実行結果

StateMachine.py337 行で定義されています。

def setTransitionAction (   self,
  call_back 
)

State transition action 関数を登録する

状態遷移時に実行される State transition action 用コールバック関数を 登録する。

引数:
self 
call_back State transition 用コールバック関数
戻り値:
アクション実行結果

StateMachine.py360 行で定義されています。

def setStartState (   self,
  states 
)

初期状態をセットする

ステートマシンの初期状態を設定する。

引数:
self 
states 初期状態

StateMachine.py377 行で定義されています。

def getStates (   self  ) 

状態を取得する

状態情報を取得する。 現在の状態、1つ前の状態、遷移予定の状態を取得することができる。

引数:
self 
戻り値:
状態情報

StateMachine.py398 行で定義されています。

def getState (   self  ) 

現在の状態を取得する

現在の状態を取得する。

引数:
self 
戻り値:
現在の状態

StateMachine.py416 行で定義されています。

def isIn (   self,
  state 
)

現在状態を確認

現在の状態が、引数で指定した状態と一致するか確認する。

引数:
self 
state 確認対象状態
戻り値:
状態確認結果

StateMachine.py435 行で定義されています。

def goTo (   self,
  state 
)

状態を遷移

指定した状態に状態を遷移する。 本関数は次状態を強制的にセットする関数である。 このため、遷移の可否は、ユーザが現在状態を取得し判断するロジックを 実装しなければならない。 遷移先が現在の状態と同じ場合には、自己遷移フラグをセットする。

引数:
self 
state 遷移先状態

StateMachine.py459 行で定義されています。

def worker (   self  ) 

駆動関数

ステートマシンの駆動関数。 実際の状態遷移および状態遷移発生時の各アクションの呼びだしを実行する。

引数:
self 

StateMachine.py476 行で定義されています。

def setNullFunc (   self,
  s,
  nullfunc 
)

NOP関数を設定

NOP関数(何もしない関数)を登録する。

引数:
self 
s コールバック関数設定先
nullfunc コールバック関数(NOP関数)

StateMachine.py524 行で定義されています。

def sync (   self,
  states 
)

状態の同期処理

引数:
self 
states OpenRTM.StateHolder<RTC.LifeCycleState>

StateMachine.py541 行で定義されています。

def need_trans (   self  ) 

遷移の必要性チェック

引数:
self 
戻り値:
遷移必要性確認結果

StateMachine.py559 行で定義されています。

def update_curr (   self,
  curr 
)

現在状態の更新

引数:
self 
curr RTC.LifeCycleState

StateMachine.py573 行で定義されています。


OpenRTMに対してMon Mar 17 15:11:08 2008に生成されました。  doxygen 1.5.4