PF-Core用スケルトンコード生成ツール(以下、PFCoreBuilder)の動作に必要な環境は以下のとおりです。
No. |
環境 |
備考 |
1 |
注意:Java1.5(5.0)では動作しません。 |
|
2 |
Eclipse本体 |
|
3 |
RTCBuilder 1.0.0 以上 |
PFCoreBuilderが依存するEclipseプラグイン |
4 |
Eclipse EMF 2.4以上(SDO,XSD含む) |
RTCBuilderが依存するEclipseプラグイン ※ご使用になられるEclipseのバージョンに合ったものをご使用ください。 |
5 |
Eclipse GEF 3.4以上(Draw2D含む) |
RTCBuilderが依存するEclipseプラグイン ※ご使用になられるEclipseのバージョンに合ったものをご使用ください。 |
6 |
|
コード生成に使用するモデルを作成するツール |
7 |
コード生成に使用するモデルを作成するツール |
|
8 |
SDSI-Cubicプラグイン |
SDSI-Cubicと同時に使用する場合に必要です。 |
9 |
T-Kernel向けコード生成用プラグイン |
OPF-M用のコード生成を実行する場合に必要です。 |
10 |
Android向けコード生成用プラグイン |
Android版RTミドルウェア用のコード生成を実行する場合に必要です。 |
11 |
RTMSafety向けコード生成用プラグイン |
RTMSafety用のコード生成を実行する場合に必要です。 |
PFCoreBuilderは、PF-CoreおよびOpenRTM-aistを対象に開発されたものです。その他のRTCプラットフォームに対する動作は想定しておりません。
ここでは、PFCoreBuilderのインストールおよび起動方法について説明します。
PFCoreBuilderはEclipseプラグインであるため、Eclipse本体および依存している他のEclipseプラグインをまずインストールする必要があります。動作環境を参照の上、これらをダウンロードします。
Eclipseのインストールは解凍するだけです。また、Eclipseのプラグインは解凍後、Eclipseフォルダ内に上書きするだけです。
PFCoreBuilderのインストールは以下のプラグインをeclipse/pluginsフォルダに配置するだけで完了です。
・PFCoreBuilderプラグイン(jp.ac.osaka_u.casi.SysMLBuilder_X.X.X.jar)
PFCoreBuilderではベースとなるSysMLモデルの情報を取得するために、モデリングツールEnterprise Architectが提供しているライブラリを使用しています。
Enterprise Architectのインストールディレクトリ配下の”Java API”ディレクトリ内に存在する「SSJavaCOM.dll」ファイルをWindowsのパスが通っている位置にコピーしてください。
更にEnterprise Architectのインストールディレクトリ配下の”Java API”ディレクトリ内に存在する「eaapi.jar」ファイルをJavaのCLASSPATHが設定されている位置にコピーしてください。
※上記ファイルを取得するためには、Enterprise Architectのインストールおよび有効なEnterprise Architectのライセンスが必要となります。
PFCoreBuilderは、「SDSI-Cubicプラグインの一部として使用」「RTCBuilderの一部として使用」「単独使用」の3種類の方法で使用することが可能です。
SDSI-Cubicプラグインを起動します。
※SDSI-Cubicプラグインのインストール方法および起動方法につきましては、SDSI-Cubicプラグインのマニュアルを参照してください。
図3‑1 SDSI-Cubicプラグインの起動画面
必要な処理を行った後「RTCコード生成」ボタンをクリックすると、指定したモデルファイルを使用してスケルトンコードの生成を開始します。
※SDSI-Cubicプラグイン起動画面で「RTCコード生成」ボタンが活性化されていない場合は、PFCoreBuilderが正常にインストールされていません。再度、インストール方法をご確認ください。
RTCBuilderを起動し、プロジェクトを作成します。
※RTCBuilderの起動方法およびプロジェクトの作成方法につきましては、RTCBuilderのマニュアルを参照してください。
図3‑2 RTCBuilderの起動画面
PFCoreBuilderが正常にインストールされている場合、RTCプロファイルエディタ内に「Enterprise Architect」というタブが追加されいます。
※RTCプロファイルエディタ内に「Enterprise Architect」タブが存在しない場合は、PFCoreBuilderが正常にインストールされていません。再度、インストール方法をご確認ください。
図3‑3 PFCoreBuilderの画面
エディタ内の「Brouse」ボタンで、コード生成対象のモデルを選択し、「Generate」ボタンをクリックするとスケルトンコードの生成処理が開始されます。
上部メニューから「ウインドウ」-「パースペクティブのカスタマイズ」を選択します。
表示された【パースペクティブのカスタマイズ】画面の中で「コマンド」タブを選択し、画面左側の「使用可能なコマンド・グループ」の中から「RtcBuilder4EA Actions」のチェックボックスを選択し、「OK」ボタンをクリックします。
※「使用可能なコマンド・グループ」内に「RtcBuilder4EA Actions」の項目が存在しない場合は、PFCoreBuilderが正常にインストールされていません。再度、インストール方法をご確認ください。
図3‑4 単独で使用する場合の設定
Eclipse本体に戻ると、ツールバー上に「Convert EA to RTC」というボタンが追加されますので、このボタンをクリックします。
表示されたダイアログの「Browse」ボタンで、コード生成対象のモデルを選択し、「Generate」ボタンをクリックするとスケルトンコードの生成処理が開始されます。
図3‑5単独で使用する場合の起動方法
スケルトンコードの生成を実行してからしばらく経過すると、以下のようなダイアログが表示されます。
図3‑6 生成対象RTC選択画面
PFCoreBuilderでは、RTコンポーネントの仕様を記述したRtcProfile、各RTCのスケルトンコードおよびシステム構成を記述したRtsProfileの生成を行います。RTコンポーネント仕様であるRtcProfileは対象となる全てのRTコンポーネントについて作成を行いますが、スケルトンコードについては、生成する対象を選択する事が可能です。
※PFCoreBuilderで生成したRtcProfileは、OpenRTM-aistが提供しているコード生成ツールRtcBuilderで読み込む事が可能です。RtcBuilderでのRtcProfileの読み込み方法、コード生成方法については、RtcBuilderのマニュアルを参照してください。
本ダイアログでは、スケルトンコードの生成を行う対象を選択する事が可能です。コード生成を行う対象については、最左列のチェックボックスをONとしてください。
PFCoreBuilderは、既存コードの内容を生成したスケルトンコードに埋め込む機能があります。ダイアログの「Source」列で、埋め込み対象のソースが存在するディレクトリを指定してください。
図3‑7 既存コードの埋め込み
生成されたスケルトンコードに既存のコードを埋め込む場合には、埋め込み元の既存コードにて対象箇所をXML形式のタグ(rtc-source)を用いて指定しておく必要があります。
// <rtc-source block="XXXXX"> 既存コード群 // </rtc-source>
【既存コードの例】 【生成されたコードの例】
private void init() { // <rtc-source block="initialize"> if (m_DefaultToggleSwitch.value
!= 0) { m_ToggleSwitch = true; } else { m_ToggleSwitch = false; } // </rtc-source> } private void execute()
{ // <rtc-source block="execute"> ByteHolder toggle = new ByteHolder(); if (getSwitchStatus(toggle))
{ m_On.v.Status = DMS.dms_status.AVAILABLE; m_On.v.Datum = toggle.value != 0 ? true : false; m_OnOut.write(); } // </rtc-source> } @Override protected ReturnCode_t onInitialize() { addOutPort("On",
m_OnOut); bindParameter("Caption",
m_Caption, ""); bindParameter("DefaultToggleSwitch", m_DefaultToggleSwitch,
"0"); // <rtc-source block="initialize"> if (m_DefaultToggleSwitch.value
!= 0) { m_ToggleSwitch = true; } else { m_ToggleSwitch = false; } // </rtc-source> return super.onInitialize(); } @Override protected ReturnCode_t onExecute(int ec_id) { // <rtc-source block="execute"> ByteHolder toggle = new ByteHolder(); if (getSwitchStatus(toggle))
{ m_On.v.Status = DMS.dms_status.AVAILABLE; m_On.v.Datum = toggle.value != 0 ? true : false; m_OnOut.write(); } // </rtc-source> return super.onExecute(ec_id); }
タグ中の「XXXXX」は、生成コード内の埋め込み位置を表します。埋め込み位置の指定には以下の文字列が指定可能です。
表3‑1 既存コード埋め込み用タグ
PFCoreBuilderにて使用するモデルの記述方法について説明します。
PFCoreBuilderでは、SysMLのブロック定義図(Block Definition Diagram:BDD)と内部ブロック図(Internal Block Diagram:IBD)を使用します。
※コード生成基モデルに、BDD、IBD以外のダイアグラムが含まれていても問題はありませんが、コード生成時にはそれらのダイアグラムの情報は使用しません。
コード生成を行うRTコンポーネントは、ブロック定義図の「ブロック」を用いて定義します。
図4‑1 生成対象RTCの定義
PFCoreBuilderでは、ステレオタイプ<<RTC>>が付加されたブロックがコード生成対象となります。
ステレオタイプの追加は、対象ブロックのプロパティ設定画面中の「ステレオタイプ」欄で指定します。ステレオタイプの設定は、ドロップダウンリストもしくは、詳細設定画面で行います。なお、初めてステレオタイプを追加する場合は、一覧画面に<<RTC>>が表示されませんので、「新規」ボタンにてステレオタイプを追加する必要があります。
図4‑2 ステレオタイプの設定
各RTCの詳細情報は、対象ブロックのプロパティ画面で設定します。
図4‑3 RTC詳細情報の設定
各詳細情報の設定方法は以下の通りです。
表4‑1 RTコンポーネント詳細情報の設定方法
設定項目 |
設定方法 |
必須 |
モジュール名 |
「別名」欄で設定します。「別名」が空白の場合、「名前」の値を使用します。 |
○ |
モジュール概要 |
「ノート」欄を用いて設定します。 |
− |
バージョン番号 |
「バージョン」欄を用いて設定します。原則x.y.zのような形式でバージョン番号を入力します。 |
○ |
ベンダ名 |
「作者」欄を用いて設定します。 |
○ |
生成対象言語 |
「言語」欄を用いて設定します。 |
○ |
※各設定項目の詳細情報については、RTCBuilderのマニュアルを参照してください。
※OPF-M用スケルトンコード生成ツールがインストールされている場合、以下の条件を満たすブロックについては、OPF-M向けRTコンポーネントのコードが生成されます。
・言語が「C++」に設定されている
・ステレオタイプに「RTC」および「T-Kernel」が設定されている
※Android用スケルトンコード生成ツールがインストールされている場合、以下の条件を満たすブロックについては、Android版RTコンポーネントのコードが生成されます。
・言語が「Java」に設定されている
・ステレオタイプに「RTC」および「Android」が設定されている
※RTMSafety用スケルトンコード生成ツールがインストールされている場合、以下の条件を満たすブロックについては、RTMSafety版RTコンポーネントのコードが生成されます。
・言語が「C++」に設定されている
・ステレオタイプに「RTC」および「RTOS」が設定されている
RTコンポーネントのConfigurationSetの指定は、生成対象ブロックの「属性」を用いて定義します。
各ConfigurationSetの情報は、属性のプロパティ画面で設定します。
図4‑4 ConfigurationSet情報の設定
ConfigurationSetの対象となる属性は、ステレオタイプ<<ConfigurationSet>>を付加して指定します。対象RTコンポーネントを指定する場合と同じ方法でステレオタイプを設定してください。(<<ConfigurationSet>>が付加されていない属性については、コード生成対象外となります。)
各詳細情報の設定方法は以下の通りです。
表4‑2 ConfigurationSet詳細情報の設定方法
設定項目 |
設定方法 |
必須 |
Configuration名称 |
「別名」欄で設定します。「別名」が空白の場合、「名前」の値を使用します。 |
○ |
データ型 |
「型」欄を用いて設定します。 |
○ |
デフォルト値 |
「初期値」欄を用いて設定します。 |
○ |
※各設定項目の詳細情報については、RTCBuilderのマニュアルを参照してください。
RTコンポーネントに附属するDataPortの指定は、内部ブロック図の「フローポート」を用いて定義します。
図4‑5 DataPortの定義
DataPortを定義するためには、まずIBD内に配置したプロパティに型情報(ブロック)を割り当てます。
対象プロパティを右クリックして表示されるコンテキストメニューの中から「追加設定」-「プロパティの種類の設定」を選択します。
図4‑6 型情報(ブロック)の割り当て
表示された【プロパティの種類の設定】画面内で、対象となるブロックを選択し、「OK」ボタンをクリックします。この際、対象ブロックは生成対象RTCとして指定されている要素(ステレオタイプ<<RTC>>が付加されている要素)を選択してください。
図4‑7 型情報(ブロック)の割り当て
DataPortの詳細情報は、対象フローポートのSysMLプロパティ画面を用いて設定します。
DataPortの名称は、「名前」を使用して設定します。また,型は「型」、タイプ(DataInPortもしくはDataOutPort)は「向き」を使用してそれぞれ設定します。
図4‑8 DataPort詳細情報の設定
生成対象RTCが割り当てられたプロパティに定義されているフローポートは、基本的には全てコード生成対象のDataPortとして扱われます。しかし、何らかの事情により、コード生成対象から除外したい場合には、「状態」を「保留」に設定してください。
また、「別名」欄に値が設定されている場合、RTコンポーネントなどの場合と同様に、こちらの内容がDataPortの名称として設定されます。(「別名」が空白の場合、「名称」で指定されている内容が使用されます。)
図4‑9 DataPort詳細情報の設定
RTコンポーネントに附属するServicePortおよびServiceInterfaceの指定は、内部ブロック図の「ポート」「インターフェース」を用いて定義します。
図4‑10 ServicePort,ServiceInterfaceの定義
ServicePortを定義するためには、DataPortを定義する場合と同様、まずIBD内に配置したプロパティに生成対象RTCとして指定されている要素が割り当てられている必要があります。
ServicePortの詳細情報は、対象ポートのプロパティ画面を用いて設定します。
ServicePortの名称は、RTコンポーネントなどの場合と同様に「別名」欄もしくは、「名前」欄を用いて指定します。 (「別名」が空白の場合、「名称」で指定されている内容が使用されます。)
DataPortの場合と同様に、生成対象RTCが割り当てられたプロパティに定義されているポートは、基本的には全てコード生成対象のServicePortとして扱われます。このため、コード生成対象から除外したい場合には、「状態」を「保留」に設定してください。
図4‑10 ServicePort詳細情報の設定
対象ServicePortにServiceInterfaceを追加する場合は、対象ポートを右クリックして表示されるコンテキストメニュー内の「付属要素」以下のメニューを使用してください。
図4‑11 ServiceInterfaceの追加
ServiceInterfaceの型を定義するためには、まず対象となる型を定義する必要があります。BDD内で「インターフェース」を用いて定義してください。
次に「付属要素」メニューで追加したインターフェースのプロパティ画面にて、SeriveInterfaceの型を指定します。なお、このプロパティ画面にて、ServiceInterfaceの方向(ProvidedもしくはRequired)を設定・変更することも可能です。
図4‑12 ServiceInterfaceの詳細情報定義
また、ServiceInterfaceで使用するIDLファイルは、BDD内で定義したインターフェースのプロパティ画面を用いて設定してください。
図4‑13 IDLファイルの設定
DataPort間のコネクション情報は、対象コネクタのプロパティ画面で設定する事が可能です。
図4‑14 接続情報の設定
接続情報の詳細は、プロパティ画面内の「ノート」欄で定義します。定義方法は、各プロパティの内容を
<プロパティ名>=<設定値>
という書式で記述し、プロパティ間は「:」で区切って設定します。<プロパティ名>として使用できる要素は以下のとおりです。
表4‑3 接続詳細情報で使用可能なプロパティ名
プロパティ名 |
内容 |
dataflowType |
DataPort間でのデータの送信方式を指定します。「push」もしくは「pull」が指定可能です。 |
subscriptionType |
データ送信タイミングを指定します。dataflowTypeが「push」の場合のみ有効です。「new」「periodic」「flush」が指定可能です。 |
pushInterval |
データ送信周期を指定します。subscriptionTypeが「periodic」の場合のみ有効です。送信周期を実数(単位:Hz)で設定します。 |
push_policy |
データ送信ポリシーを指定します。subscriptionTypeが「new」「periodic」の場合のみ有効です。「all」「fifo」「skip」「new」が指定可能です。 |
skip_count |
送信データのスキップ数が指定します。push_policyが「skip」の場合のみ有効です。データのスキップ数を整数で指定します。 |
PFCoreBuilderでは、各RTコンポーネント間の接続関係をシステム情報(RtsProfile)として生成します。
RtsProfileは生成対象RTコンポーネントが含まれているIBD単位で生成されるため、システムの詳細情報はIBDのプロパティ画面で設定することが可能です。
プロパティ画面中の「名前」はシステム名に、「作者」はベンダ名に、「バージョン」はバージョン番号にそれぞれ設定されます。
図4‑15 システム情報の設定
また、各IBD内における対象要素の位置が、システム内の配置位置として使用されます。
生成されたシステム情報(RtsProfile)は、RTSystemEditorのオフラインエディタで読み込む事が可能です。
図4‑16 システム情報の読み込み