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のデータが表示されます。
これでチュートリアルは終わりです。より詳細な情報は使用方法のページに載せます。