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のデータが表示されます。

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