OOoBaseRTCのチュートリアル

全体の手順

まず、サンプルのデータベースの登録を行います。
次にOOoBaseRTCの動作を確認するためにOOoBaseRTCのサービスポートを利用してデータベースからデータを取得して表示するRTCの作成を行います
次にRTCを起動する前にネームサービス、RTシステムエディタの起動を行います。その後RTCを起動します。最後に先ほど作成したRTCとOOoBaseRTCのサービスポートを接続して動作確認を行います。

データベースの登録

OOoBaseRTC付属のOOoBaseRTC.odbを開いてください。
インストーラでインストールした場合はスタートメニューの全てのプログラムからOOoRTCs→OOoBaseRTC.odbを選択することでも開けます。

※読み取り専用で開くと正常に動作しないことがあります。詳しくはトラブルシューティングをご覧ください。

そして、ツールのオプションを選択してください。

表示されたダイアログからOpenOffice.org Baseのデータベースを選択して新規作成ボタンを押してください。

さらに表示されたダイアログからブラウズボタンを押してOOoBaseRTC.odbを選択してOKボタンを押してください。

最後にオプションダイアログのOKボタンを押すとサンプルのデータベースが登録されます。
ちなみのこのデータベースには以下のようなテーブルTable1があります。

サンプルRTCの作成

一応OOoBaseRTCの動作を確認するためのサンプルRTCは付属させていますが、このチュートリアルでは作り方からやってみます。動作確認が目的の場合はこの章は飛ばして付属のBaseTestフォルダのBaseTest.pyを使用してください。
まず、RTC Builderを起動してください。そして、ファイルからOpen New Builder Editerを選択してください。

プロジェクト名はとりあえずBaseTestにして完了ボタンを押してください。

プロジェクトが作成できたらまずは基本項目の設定をします。
基本項目はモジュール名だけBaseTestにして他は適当でいいです。そのままでも構いません。

続いてアクティビティの設定をします。
onActivatedとonExecuteをオンにします。それぞれ選択して下のラジオボタンをONに設定してください。

次に言語・環境の設定をします。言語をPythonに設定してください。

最後にサービスポートの設定です。
まずはAdd Portボタンを押してください。
そして追加された項目を選択して適当なポート名を付けます。とりあえずDataBaseという名前にしておいてください。

次にAdd Interfaceボタンを押してください。
そして追加された項目を選択してdatabaseととりあえず名前を付けてください。

次に方向をRequiredに設定してください。

そしてIDLファイルのBrowseボタンを押してOOoBaseRTCフォルダのDataBase.idlを選択してください。インストーラでインストールした場合はC:\Program Files (x86)\OOoRTCs\IDLフォルダにあります。
インターフェース型にDataBase::mDataBaseを選択します。

最後に基本項目に戻ってコード生成ボタンを押してください。

コード生成が成功したら設定したワークスペースのフォルダのBaseTestフォルダを開いてください。
まずはBaseTestフォルダのidlcompile.bat(Ubuntuの場合は.sh)を実行してください。するとDataBaseフォルダとDataBase_POAフォルダが生成されます。
続いてBaseTest.pyの編集をします。
onActivatedでデータベースへの接続とSQLステートメントへの問い合わせをします。
とりあえず、この二つが確実に完了してほしいので完了するまでループから出ないようにします。

def onActivated(self, ec_id):
     flag = True
     t1 = OpenRTM_aist.Time()
     while flag:
        t2 = OpenRTM_aist.Time()
        if (t2 - t1).getTime().toDouble() > 5:
            return RTC.RTC_ERROR
        try:
            f1 = self._database._ptr().setConnection("OOoBaseRTC","","")
            f2 = self._database._ptr().executeQuery("RS1", "OOoBaseRTC","select * from TABLE1")
            if f1 and f2:
                  flag = False
                                
                                
        except:
                  pass
     return RTC.RTC_OK

ちなみにsetConnectionの引数はデータベース登録名とユーザー名とパスワードです。パスワードで保護されていない場合は後ろ2つは空の文字列で大丈夫です。接続に成功した、または接続済みの場合はTrueを返します。
executeQueryの引数は任意の結果セット名とデータベース登録名とSQL文です。とりあえず今回はTABLE1のデータを取得しています。取得した結果セットはRS1という名前でOOoBaseRTCの辞書オブジェクトに格納されます。

次にonExecuteの編集を行います。
sys.stdin.readline()にエンターキーを押すまで止めて置くようにします。

def onExecute(self, ec_id):
      sys.stdin.readline()
      try:
          if self._database._ptr().ResultSetNext():
                print self._database._ptr().getString("RS1",1)
                print self._database._ptr().getString("RS1",2)

      except:
                pass
      return RTC.RTC_OK

ResultSetNextは次のデータレコードに移動する関数です。
さらにgetStringでデータを取得できます。
つまり、このRTCはエンターキーを押すごとにデータベースのTable1のデータが表示されるということになります。

これでサンプルRTCの作成が完了しました。
次からRTC起動までの準備をします。

前準備

このページに従ってネームサーバー、RTシステムエディタの起動を行ってください。

OOoBaseRTCの起動

OOoBaseRTC.odbのフォームからOOoBaseControlをダブルクリックしてください。

すると以下のようなフォームが表示されるので、その中にあるRTC起動ボタンを押してください。

RTCが起動したらフォームを閉じてください。

次に作成したBaseTest.pyを起動してください。
RT System Editerからサービスポートを接続してください。

次にRT System Editorアクティブ化ボタンを押してRTCをアクティブにします。

アクティブにしたらBaseTestのRTCのコンソールからエンターキーを入力してください。
すると順番にTable1のデータが表示されます。

これでチュートリアルは終わりです。より詳細な情報は使用方法のページに載せます。