ExtTrigExecutionContext.py
Go to the documentation of this file.
00001 #!/usr/bin/env python
00002 # -*- coding: euc-jp -*-
00003 
00004 ##
00005 # @file ExtTrigExecutionContext.py
00006 # @brief ExtTrigExecutionContext class
00007 # @date $Date: 2007/09/06$
00008 # @author Noriaki Ando <n-ando@aist.go.jp> and Shinji Kurihara
00009 #
00010 # Copyright (C) 2007-2008
00011 #    Task-intelligence Research Group,
00012 #    Intelligent Systems Research Institute,
00013 #    National Institute of
00014 #        Advanced Industrial Science and Technology (AIST), Japan
00015 #    All rights reserved.
00016 
00017 
00018 
00019 import threading
00020 import time
00021 
00022 import OpenRTM_aist
00023 
00024 
00025 
00026 ##
00027 # @if jp
00028 # @class ExtTrigExecutionContext
00029 # @brief ステップ実行が可能な ExecutionContext クラス
00030 #
00031 # 1周期毎の実行が可能なPeriodic Sampled Data Processing(周期実行用)
00032 # ExecutionContextクラス。
00033 # 外部からのメソッド呼びだしによって時間を1周期づつ進めることができる。
00034 #
00035 # @since 0.4.0
00036 #
00037 # @else
00038 # @class ExtTrigExecutionContext
00039 # @endif
00040 class ExtTrigExecutionContext(OpenRTM_aist.PeriodicExecutionContext):
00041   """
00042   """
00043 
00044 
00045   ##
00046   # @if jp
00047   # @brief コンストラクタ
00048   #
00049   # コンストラクタ
00050   #
00051   # @param self
00052   #
00053   # @else
00054   # @brief Constructor
00055   # @endif
00056   def __init__(self):
00057     OpenRTM_aist.PeriodicExecutionContext.__init__(self)
00058     self._worker = self.Worker()
00059     self._rtcout = OpenRTM_aist.Manager.instance().getLogbuf("rtobject.exttrig_ec")
00060 
00061   ##
00062   # @if jp
00063   # @brief 処理を1ステップ進める
00064   #
00065   # ExecutionContextの処理を1周期分進める。
00066   #
00067   # @param self
00068   #
00069   # @else
00070   #
00071   # @endif
00072   def tick(self):
00073     self._rtcout.RTC_TRACE("tick()")
00074     if not self._worker._cond.acquire():
00075       return
00076     self._worker._called = True
00077     self._worker._cond.notify()
00078     self._worker._cond.release()
00079     return
00080 
00081   ##
00082   # @if jp
00083   # @brief 各 Component の処理を呼び出す。
00084   # 
00085   # ExecutionContext に attach されている各 Component の処理を呼び出す。
00086   # 全 Component の処理を呼び出した後、次の呼出が発生するまで休止する。
00087   # 
00088   # @param self
00089   # 
00090   # @else
00091   # 
00092   # @endif
00093   # 
00094   def svc(self):
00095     self._rtcout.RTC_TRACE("svc()")
00096     flag = True
00097 
00098     while flag:
00099       sec_ = float(self._period.usec())/1000000.0
00100       self._worker._cond.acquire()
00101       while not self._worker._called and self._running:
00102         self._worker._cond.wait()
00103       if self._worker._called:
00104         self._worker._called = False
00105         for comp in self._comps:
00106           comp._sm.worker()
00107 
00108       self._worker._cond.release()
00109       flag = self._running
00110 
00111   ##
00112   # @if jp
00113   # @class Worker
00114   # @brief ExecutionContext 駆動クラス
00115   #
00116   # 実行処理に関する排他制御など、実際の処理を監視・制御するためのクラス。
00117   #
00118   # @since 0.4.0
00119   #
00120   # @else
00121   #
00122   # @endif
00123   class Worker:
00124     """
00125     """
00126     
00127     ##
00128     # @if jp
00129     # @brief コンストラクタ
00130     #
00131     # コンストラクタ
00132     #
00133     # @param self
00134     #
00135     # @else
00136     # @brief Constructor
00137     # @endif
00138     def __init__(self):
00139       self._mutex = threading.RLock()
00140       self._cond = threading.Condition(self._mutex)
00141       self._called = False
00142 
00143 
00144 
00145 ##
00146 # @if jp
00147 # @brief 当該 ExecutionContext 用Factoryクラスの登録。
00148 #
00149 # このExecutionContextを生成するFactoryクラスを
00150 # ExecutionContext管理用ObjectManagerに登録する。
00151 #
00152 # @else
00153 #
00154 # @endif
00155 def ExtTrigExecutionContextInit(manager):
00156   manager.registerECFactory("ExtTrigExecutionContext",
00157                             OpenRTM_aist.ExtTrigExecutionContext,
00158                             OpenRTM_aist.ECDelete)


openrtm_aist_python
Author(s): Shinji Kurihara
autogenerated on Thu Aug 27 2015 14:17:28