bricrobo v1.5 マニュアル

74
BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3 BricRobo V1.5 マニュアル 株式会社 富士通コンピュータテクノロジーズ

Upload: vanbao

Post on 08-Feb-2017

241 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

BricRobo V1.5 マニュアル

株式会社 富士通コンピュータテクノロジーズ

Page 2: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

i

目次

1 はじめに ............................................................... 1

1.1 本書の目的 ....................................................... 1

1.2 関連文書 .......................................................... 1

1.2.1 上位文書 .................................................... 1

1.2.2 参考文書 .................................................... 1

1.2.3 記号 ........................................................... 1

1.3 問い合わせ先 .................................................... 1

2 制限事項 .............................................................. 2

3 BricRobo とは ....................................................... 3

3.1 BricRoboを利用した開発プロセス ..................... 3

4 準備 ..................................................................... 6

4.1 インストール ....................................................... 6

4.2 動作環境 .......................................................... 6

4.3 Enterprise Architectの入手 ............................ 6

5 アーキテクチャー ................................................... 7

6 機能 ..................................................................... 9

6.1 モデリング ....................................................... 10

6.2 通信 ................................................................ 10

6.3 駆動 ................................................................ 11

6.4 コード生成 ....................................................... 11

6.5 機能における注意事項 .................................... 11

7 モデリング ........................................................... 12

7.1 モデリング表記 ................................................ 12

7.1.1 CompositionType .................................... 12 7.1.2 Port .......................................................... 14 7.1.3 Interface .................................................. 16 7.1.4 Package.................................................... 16 7.1.5 Task ......................................................... 16 7.1.6 RunnableEntity....................................... 20 7.1.7 ClassDataType [C++].............................. 20 7.1.8 StructDataType ...................................... 23 7.1.9 EnumDataType ....................................... 24

7.2 多重度の指定方法 .......................................... 24

7.3 ステレオタイプ ................................................. 24

7.4 モデリング時の注意事項 .................................. 25

7.4.1 BricRobo部品の汎化 ............................... 25

7.4.2 利用しないポートの扱い ............................ 25

7.4.3 ConfigParamに指定できない文字 ............ 26

7.4.4 ConfigParamの型 ................................... 26

7.4.5 BricRobo部品の名前の重複 ..................... 26

8 コード生成 .......................................................... 27

8.1 BricRobo コードジェネレータのコマンドライン.... 28

8.2 BricRobo コードジェネレータの戻り値 ............... 28

8.3 BricRoboプロジェクトファイル .......................... 28

8.4 利用部品一覧生成 .......................................... 31

8.4.1 Makefileで利用する ................................. 31

8.4.2 Visual Studio 2010で利用する ................ 32

8.5 環境ファイル .................................................... 36

8.6 解析範囲とコード生成範囲 ............................... 38

8.7 コード生成の言語切替 ..................................... 38

8.8 コード生成位置 ................................................ 38

8.9 コード生成時の注意事項 ................................. 39

8.9.1 コード生成中の EAPファイルへの書き込み禁

止 ....................................................................... 39

8.9.2 コード生成したファイルへ著作権表示を挿入

する .................................................................... 39

8.9.3 BricRobo コンフィグコードの生成 ............... 39

8.9.4 constキーワードがないコンパイラーへの対応

........................................................................... 39

9 エラー番号 .......................................................... 40

10 BricRobo 部品実装 ........................................... 53

10.1 RTE_Write ................................................... 54 10.2 RTE_Read .................................................... 55 10.3 RTE_Send .................................................... 56 10.4 RTE_Receive ................................................ 57 10.5 RTE_ProcedureCall ..................................... 58 10.6 RTE_Procedure ........................................... 59 10.7 注意 .............................................................. 59

10.7.1 RTE APIのパラメーターパラメーター[C] .. 59

10.7.2 C言語コード生成時の.local.hの使い方 ... 60

11 コンパイル ......................................................... 61

11.1 フォルダー構成 ............................................. 61

11.2 プリコンパイルヘッダーの利用 ........................ 62

11.3 プラットフォームに応じたカスタマイズ .............. 63

11.3.1 main.cc [C++]、main_.c[C] 解説 .......... 63

11.3.2 osekMain.cc [C++]、osekMain_.c[C] 解説

........................................................................... 64

12 使用上の注意 ................................................... 66

12.1 メモリ消費量 .................................................. 66

12.2 入れ子構造部品の設計 ................................. 67

12.3 通信が高速化されるポート接続の条件について

[C++] .................................................................... 68

13 QA .................................................................... 70

13.1 BricRobo部品のコードが生成されない .......... 70

13.2 Port関数がNULLになる ............................. 70

13.3 最小の CompositionType ............................ 71

Page 3: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

ii

図一覧

図 3-1 BricRoboを利用した開発プロセス .................. 4

図 5-1 アーキテクチャー概念 ..................................... 7

図 7-1 CompositionTypeの表記例 ........................ 13

図 7-2 Taskの配置と呼び出し可能な RunnableEntity

の位置 ............................................................... 17

図 7-3 Taskによる RunnableEntity呼び出しの前提

モデル ............................................................... 17

図 7-4 RunnableEntity呼び出し例1 ..................... 18

図 7-5 RunnableEntity呼び出し例2 ..................... 18

図 7-6 RunnableEntity呼び出し例3 ..................... 19

図 7-7 RunnableEntityの呼び出しシーケンス ....... 20

図 7-8 ClassDataType表記例 ............................... 21

図 7-9 StructDataType表記例 ............................. 23

図 7-10 EnumDataType表記例 ............................ 24

図 7-11 接続しないポート ........................................ 25

図 7-12 接続しないポートの削除 .............................. 26

図 8-1 BricRoboプロジェクトと環境ファイルの関係 .. 27

図 10-1 C言語コード生成時のインクルード関係 ........ 60

図 12-1 入れ子構造の部品設計時の注意点 ............ 67

図 12-2 通信高速化の原理 ..................................... 68

図 12-3 通信が高速化されないポート接続例 ............ 69

図 13-1 BricRobo部品定義 .................................... 70

図 13-2 BricRobo部品の正しい利用 ...................... 70

図 13-3 BricRobo部品の間違った利用 ................... 71

表一覧

表 3-1 BricRoboを利用した開発プロセス詳細........... 5

表 4-1 BricRobo動作環境 ....................................... 6

表 4-2 Enterprise Architect製品情報 .................... 6

表 5-1 アーキテクチャー概念の説明 .......................... 8

表 6-1 BricRobo機能一覧 ....................................... 9

表 6-2 サポート通信方式 ......................................... 10

表 6-3 QueueLength ............................................. 10

表 6-4 通信形態...................................................... 11

表 6-5 駆動方式...................................................... 11

表 7-1 BricRobo部品一覧 ..................................... 12

表 7-2 CompositionType部品一覧 ....................... 14

表 7-3 Port構成 ..................................................... 15

表 7-4 Port表記 ..................................................... 15

表 7-5 Interface構成 ............................................. 16

表 7-6 パッケージ構成............................................. 16

表 7-7 線による属性の指定方法 .............................. 22

表 7-8 線による属性の指定方法 .............................. 23

表 7-9 多重度の指定方法 ....................................... 24

表 7-10 BricRoboで使用するステレオタイプ一覧 .... 25

表 7-11 派生 BricRobo部品の要素 ........................ 25

表 8-1 コマンドライン引数 ........................................ 28

表 8-2 BricRobo コードジェネレータの戻り値 ........... 28

表 8-3 Generalテーブル ........................................ 28

表 8-4 Packageテーブル ........................................ 29

表 8-5 環境ファイル XslFilesテーブル .................... 36

表 8-6 言語と拡張子の対応 ..................................... 38

表 9-1 エラー番号一覧 ............................................ 40

表 10-1 RTE API一覧 ........................................... 53

表 11-1 コンパイル時のフォルダー構成 .................... 61

表 11-2 BricRobo RTE API解説 ......................... 63

表 11-3 main.cc解説 ............................................. 63

表 11-4 main_.c解説 ............................................. 63

表 11-5 osekMain.cc解説 ...................................... 64

表 11-6 osekMain_.c解説 ..................................... 65

表 12-1 消費量に関係する要因 ................................ 66

表 12-2 通信が高速化されない要因 ........................ 68

表 12-3 高速化コード生成のメモリ消費量傾向.......... 69

表 13-1 BricRobo部品コード生成条件 ................... 70

リスト一覧

リスト 8-1 BricRoboプロジェクトファイル記述例 ...................................................................................................... 30

リスト 8-2 XSLテンプレート(Makefile.UsedBlockList.txt.xsl)............................................................................. 31

リスト 8-3 XSLテンプレート(Makefile.UsedBlockList.vcxproj.xsl) ..................................................................... 32

リスト 8-4 Makefile.UsedBlockList.vcxproj.の出力例 .......................................................................................... 33

リスト 8-5 Visual Studio 2010 プロジェクトへのインポート例 ................................................................................. 33

リスト 8-6 環境ファイル記述例 ................................................................................................................................ 36

リスト 8-7 著作権表示等の挿入位置 ....................................................................................................................... 39

リスト 10-1 C言語コード生成時の BricRobo部品(Block.c)の実装例 .................................................................... 60

Page 4: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

1

1 はじめに

1.1 本書の目的

本書は、組込みシステム向け開発環境「BricRobo」が提供する機能を解説しています。

BricRoboを用いたモデリング、コード生成、部品実装など、具体的な開発手順を進めていく上で必要な情報は、

「BricRoboモデリングガイド」に記載しています。

1.2 関連文書

以下に本書に関連する文書について示します。

1.2.1 上位文書

ありません。

1.2.2 参考文書

BricRobo V1.5 インストールマニュアル bricrobo_istman_001_005_001R1

BricRobo V1.5 モデリングガイド bricrobo_mdlguide_001_005_001R1

1.2.3 記号

対象となる言語が限定される場合に、その言語名を示します。サポート言語については、2節を参照してください。

特に記載がない場合は、制限はありません。

1.3 問い合わせ先

本書に関するお問い合わせは、以下にお願いします。

〒211-8588 神奈川県川崎市中原区上小田中 4-1-1

株式会社 富士通コンピュータテクノロジーズ

Copyright 2012 FUJITSU COMPUTER TECHNOLOGIES LIMITED

Page 5: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

2

2 制限事項

本バージョンに既知の制限事項はありません。

Page 6: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

3

3 BricRobo とは

BricRoboは組み込み製品開発に特化した DSM(Domain Specific Modeling)ツールです。

BricRoboに特有の表現により、開発対象の部品や製品の構成要素とそれらのつながりをモデリングすることができます。

BricRoboを利用した開発では、まず小規模な BricRobo部品(BricRoboで表現されたシステムの構成要素)を設計し、

次いで幾つもの BricRobo部品を組み合わせて製品を構成していきます。逆に、製品の骨格をなすような大きな部品を設

計してから、部分を構成する小さな部品を設計していくことも可能です。

BricRoboでは、UMLモデリングツール Enterprise Architect(EA)をモデルエディタとして利用します。

EAを利用することで、BricRoboモデルとともに、UMLをはじめ、データフロー図(DFD)・構造図(SD)・SysMLなど、

様々なモデルを用いて、部品・製品設計を自在に表現することが可能となります。

そして BricRoboジェネレータは、様々なモデルで表現された EAファイルの中から、BricRoboモデルのみを抽出してソ

ースコードを生成します。

3.1 BricRobo を利用した開発プロセス

BricRoboを利用した開発プロセスの概要を図 3-1に示します。それぞれの要素についての説明は表 3-1を参照してくだ

さい。

Page 7: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

4

BricRoboランタイム

EA利用

BricRoboメタモデル

<<tool>>BricRoboモデルエディタ

<<tool>>BricRoboコードジェネレータ

BricRobo RTE

BricRobo COM

BricRobo TASK

<<tool>>コンパイラ

部品・製品設計

コード生成

BricRoboモデル

BricRobo部品ヘッダ

コンパイル

実行コード

Ent erpris e Archit ect ure

EAファイル

部品コーディング

ハンドコード

BricRoboコンフィグコード

再利用可能

再利用

利用

利用

参照

実体

利用

図 3-1 BricRoboを利用した開発プロセス

Page 8: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

5

表 3-1 BricRoboを利用した開発プロセス詳細

No. 要素 説明

1.

部品・製品設計

BricRoboモデルで表現された部品や製品の構成要素を BricRobo部品と呼びます。製品

は複数の BricRobo部品から成り立ちます。

BricRobo部品を設計し、BricRobo部品を組み合わせて製品をモデリングしていきます。

2. BricRobo

モデルエディタ 製品・BricRobo部品をモデリングするエディタとして、Enterprise Architectを利用します。

3. BricRobo

モデル

製品・BricRobo部品のモデリング情報です。Enterprise Architectで作成し、EAPファイル

として保存します。BricRobo部品は再利用が可能です。

4. BricRobo

メタモデル

BricRoboの製品・BricRobo部品を書くときに参照する言語ルールとして、あらかじめ用意

されているものです。BricRobo メタモデルは BricRoboモデルを保管する際に、参照関係

を含むモデルデータとして一緒に保管されます。

5. コード生成

BricRoboモデルを解釈してソースコードを生成します。BricRobo コードジェネレータが実

際には担当します。

6. BricRobo

コードジェネレータ

BricRoboモデルを BricRobo メタモデルに照らし合わせながら解析し、製品・BricRobo部

品のソースコードを生成します。

7. BricRobo部品ヘッ

ダー

BricRobo部品のヘッダーソースコードです。

C/C++言語を基本としますが、インストールパッケージにより別の言語がサポートされる場合

があります。

8. BricRobo コンフィグ

コード

BricRoboが動作するランタイム環境をコンフィグレーションするソースコードです。

C/C++言語を基本としますが、インストールパッケージにより別の言語がサポートされる場合

があります。

9. 部品コーディング

BricRobo部品の内部動作をハンドコーディングします。自動生成コードに合わせた言語を

利用します。

10. ハンドコード

部品コーディングで作成したソースコードです。部品が変更されない限り、一度作成したハ

ンドコードは修正する必要がないため再利用できます。

11. コンパイル ソースコードをコンパイルし実行コードを生成します。

12. コンパイラー コンパイルは製品が動く環境に合わせたコンパイラーを使います。

13. BricRobo RTE BricRoboの RTEです。部品の接続を管理します。

14. BricRobo COM BricRoboの通信層です。部品間の通信の実行は COMが管理します。

15. BricRobo TASK BricRoboの RTEを駆動するタスクを管理します。

16. 実行コード 動作するロードモジュールです。

Page 9: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

6

4 準備

4.1 インストール

BricRoboはMicrosoft インストーラ形式(msi)で提供されます。msiファイルをインストールする PC上で実行するとインス

トールが始まります。アンインストールは、Windowsの「コントロールパネル」-「プログラムの追加と削除」から行います。

インストール方法の詳しい説明は、参考文書「BricRobo V1.5 インストールマニュアル」を参照してください。

4.2 動作環境

BricRoboの動作環境を表 4-1に示します。

表 4-1 BricRobo動作環境

No. 項目 説明

1. パソコン Intelアーキテクチャー、Windowsが動作するパソコン

2. OS Windows XP 32bit、Windows Vista 32bit、Windows 7 32/64bit

3. ミドルウェア

Microsoft .NET Framework 3.5

(OSに含まれない場合、BricRobo インストール時に警告が表示されます)

4. アプリケーション Enterprise Architect 9.x以上 (モデリングツールとして必要)

4.3 Enterprise Architect の入手

Enterprise Architectは BricRoboのモデル設計をするために必要です。表 4-2の情報を参考にしてください。

表 4-2 Enterprise Architect製品情報

No. 項目 説明

1. 販売元 スパークスシステムズジャパン株式会社

2. アプリケーション名 Enterprise Architect

3. エディション 制限なし

4. バージョン 9.3以上

Page 10: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

7

5 アーキテクチャー

BricRobo のアーキテクチャー概念を図 5-1エラー! 参照元が見つかりません。に示します。基本思想は部品の実装から、

「いつ・だれと」の依存性を排除することです。これにより部品の再利用性が高まり、生産性と品質が向上することを狙いと

しています。

アーキテクチャーは自動車業界の AUTOSARをヒントとしました。各種 OS用の RTE(ランタイム実行環境)を用意するこ

とにより、BricRobo RTEの実行環境依存を排除しています。BricRobo COMの通信能力を拡張することにより、プロセス

内の通信のみならず、ネットワーク越しのシステムもサポートすることが可能となります。

また、BricRoboのアーキテクチャー概念の説明を表 3-1に示します。

BricRobo RTE

BricRobo メタモデル

BricRobo COM

Cont rol lerTask

- elapse :int- initTimer :int

RunnableEnt it y

ComponentType Port Int erface Dat aE lement

Rt e_API

SharedMemoryCom_API

この呼び出し関

係は自動的に生

成する

ref

0..*

マッピング

0..*

call

0..* {ordered}

ポート名

0..*

call

コンポーネント名

call

インタフェース名0..*

+component

Read/Write

図 5-1 アーキテクチャー概念

Page 11: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

8

表 5-1 アーキテクチャー概念の説明

No. 要素 説明

1. ComponentType

BricRoboモデルの構成要素を定義するためのメタモデルです。ComponentTypeの実装単

位である CompositionTypeは、複数の ComponentTypeで構成することが可能です。

2. Port ComponentType同士の論理的な通信の接続点です。

3. Interface ComponentType同士の通信のインターフェースです。

4. DataElement

単純(整数値、浮動小数点、文字列など)または複雑(構造体、配列など)なデータを扱うこと

が可能です。

5. RunnableEntity

ComponentTypeを構成する特殊なメソッドであり、Taskから ComponentTypeを実行する際

の呼び出し手段となります。

6. RTE API

BricRobo RTEがアプリケーションコンポーネントに提供する API関数です。

本 APIを使用して ComponentTypeはその他の ComponentType と通信します。

7. Task

1つまたは複数の RunnableEntityを順次実行する単位です。

Task同士の実行順序は保障されません。

8.

Controller

1つまたは複数の Taskを実行するプロセスです。

Controllerを使用せずに Taskを OSのプロセスやタスクにマッピングすることも可能です。

その際は、BricRobo COMの Com APIに排他的なデータアクセス能力が必要です。

9. SharedMemory COM層におけるデータ交換用のメモリ領域です。

10. Com API RTE層の通信の実体として利用可能な APIです。

Page 12: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

9

6 機能

BricRoboの機能一覧を表 6-1に示します。現在、サポート欄に○印が付いた機能のみサポートしています(-印はサポ

ート外)。

表 6-1 BricRobo機能一覧

No. 分野 機能分類 項目 説明

サポー

1.

モデリ

ング

機能拡張

入れ子 BricRobo部品は 1つ以上の BricRobo部品を内蔵することによ

り機能拡張が可能。 ○

2. 汎化

一部の BricRobo部品(C++言語のクラス型、構造体型に相当)

は汎化による機能拡張が可能[C++]。 ○

3.

調整 ConfigParam

BricRobo部品に調整可能なパラメーターを指定可能。

部品利用時にパラメーターを指定。

#isNoConfigParamを部品利用時に定義すると ConfigParamに

よるパラメーター初期化を呼ばないことも可能。

4.

UML

協調 BricRobo部品の設計情報に加えて一般的な UML図を混在さ

せたモデリングを許容する。 ○

5.

生成

コード生成時に BricRobo部品として意味のある情報のみを自

動抽出する。クラス型[C++]・列挙型・構造体をサポートし、

BricRobo コードジェネレータでスケルトンコードを生成可能。

6.

通信

通信方式

データ型 受信データを常時読み取ることができる。 ○

7. イベント型 一回のデータ受信につき一回だけ読み取れる。 ○

8. 関数呼出型 引数を伴い手続きを呼び出す。 ○

9.

通信距離

同一

プロセス内 同一プロセス内の部品同士が通信可能。 ○

10. 同一 ECU*内

プロセス間

同一 ECU(CPU,OS)内の異なるプロセスに配置した部品と通信

可能。 -

11. ECU間 他 ECUのプロセスに配置した部品と通信可能。 -

12. Queue

データを受信した場合、データを読み取る前にさらにデータを受

信したとき、上書きするかキューイングするか指定可能。 ○

13.

マルチキャ

スト

1:N 1つの送信ポートから複数の受信ポートに一括してデータ送信

可能。 ○

14. N:1

複数の送信ポートから送信したデータを1つの受信ポートで受信

可能。 ○

15.

タイミング

同期通信 ProcedureCall(関数呼び出し型)にて同期通信可能。 ○

16. 非同期通信

SenderReceiver(データ型、イベント型)にて非同期通信可能。

送信先の受信有無に関係なく送信手続きから復帰。 ○

17. データ保護 複数の通信が同時に発生した場合、データを保護する。 -

18.

駆動

タスク 入れ子

タスクは BricRobo部品の入れ子構造のどの位置に配置すること

も可能。

ただし、タスクを含む部品は、それ自身で動作するため、その他

の部品との同期を調整することが難しいことに注意。

19. データ

保護 通信

タスク以外の(RTE層の制御下にない)方法により、1つのポート

に対して同時に複数の送信が行われた場合、それぞれのデータ

を保護することが可能。

20. コード

生成 言語

C BricRobo コードジェネレータで C言語のコード生成が可能。

一部機能制限あり。 ○

21. C++ BricRobo コードジェネレータで C++言語のコード生成が可能。 ○

*)ECU: Engine Control Unitの略。ここでは ECUなどの制御用コントローラー一般を意味する。

Page 13: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

10

6.1 モデリング

BricRoboは市販 UMLツール(Enterprise Architect)を用いてビジュアルにモデリングが可能です。モデルエディタが

UMLツールであるがゆえに、オブジェクト指向設計の UML図とも親和性が高く、BricRoboのモデリングと UML図を共

存することが可能です。BricRoboの部品の内部設計に UML図を使って設計するといった使い方ができます。

BricRoboでは部品だけでなく、UMLのクラス図に相当する設計からクラス型・列挙型のコード自動生成が可能です。

6.2 通信

BricRobo部品間の通信でサポートする通信方式を表 6-2に示します。現在、サポート欄に○印が付いた機能のみサポ

ートしています(-印はサポート外)。

表 6-2 サポート通信方式

No. 通信方式 説明 サポート

1. プロセス内

同一プロセス内で実行されるソフトウェアコンポーネント(SWC)間の通信。

実体として共有メモリでデータ交換を行う。 ○

2. プロセス間

異なるプロセスに属し非同期に実行される SWC間の通信。

OS等の機能により提供される共有メモリやプロセス間通信により実現する。 -

3. ECU間

異なるコンピュータに属し、非同期に実行される SWC間の通信。

OS等の機能により提供されるネットワーク通信により実現する。 -

受信ポートに Queueをつけることができます。Queueの長さ(QueueLength)による動作を表 6-3に示します。

表 6-3 QueueLength

No. QueueLength 説明 サポート

1.

0

データを受信すると、受信データを Queueに格納し読み取られるまで保持す

る。

更にデータを受信すると、以前のデータは破棄され新しいデータで上書きす

る。

【注意】0を指定時は Queue機構がない最適化された動作を行う。

2.

1

データを受信すると、受信データを Queueに格納し読み取られるまで保持す

る。

更にデータを受信すると、以前の Queue内のデータを新しいデータで上書き

する。

【注意】キューイングを行わないという意味では QueueLength=0 と同等だが、

Queue機構がある分動作は低速となる。Queueが不要な場合は

QueueLength=0を指定すること。

イベント通信の

みサポート

3.

N(>1)

データを受信すると、受信データは読み取られるまで Queueに保持する。

更にデータを受信すると、N個までのデータは Queue内に保持する。

Queue内に既に N個のデータがある場合、一番古い受信データを破棄し受信

データを Queueに格納する。

イベント通信の

みサポート

ポート間を結んで通信が成立しますが、送信側と受信側の数の関係により 1:N、または N:1に分かれます。通信形態を表

6-4に示します。

Page 14: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

11

表 6-4 通信形態

No. 通信形態 説明 サポート

1.

1:N 送信側が1つに対し、受信側が複数接続された通信方式。

送信側が送信した値を、すべての受信側が同じ値を受信する。

データ通信・イ

ベント通信のみ

サポート

2.

N:1

送信側が複数に対し、受信側が1つ接続された通信方式。

Queueがない場合には最後に受信したデータが残る。Queueがある場合、Queue

に溜まるが、QueueLength以上のデータを受信すると古いデータから捨てられ

る。

6.3 駆動

部品の駆動はタスクによって行われます。ECUなどの制御用マイクロコントローラーが採用する OSからの駆動割り込み、

もしくはプロセスの駆動を BricRoboの内部スケジューラ(コントローラーと呼ぶ)に入力すると、コントローラーは最小周期

をカウントし、適切なタイミングでタスクを駆動します。タスクはあらかじめモデリングされた部品を順次駆動します。駆動方

式の特性を表 6-5に示します。現在、サポート欄に○印が付いた機能のみサポートしています(-印はサポート外)。

表 6-5 駆動方式

No. 特性 説明 サポート

1.

リアルタイム

タスクは指定周期で実行される。駆動周期、最初の周期カウンタの値を指定可能であ

る。

※BricRoboを駆動する OS もしくはプロセスに周期的に駆動する仕組み、もしくは実時

間を計測する仕組みが必要

2. 複数タスク

複数のタスクを作成可能。部品の駆動周期を調整することで、各タスクのリアルタイム性

を変更可能である。 ○

3. プリエンプト

タスクの実行中に他のタスクが割り込んで実行されることはない。1つのタスクが終了す

るまで他のタスクは待たされる。 -

6.4 コード生成

BricRoboではコード生成に XSLを使ったをテンプレートを使用します。現在は、C言語と C++言語の標準テンプレートを

用意しています。この標準テンプレートから派生させた独自のテンプレートを用いれば特別仕様のコード生成をすることが

できます。

なお、標準テンプレートでは C++言語の namespaceをサポートしていません。

6.5 機能における注意事項

EAでは EAPファイルにモデル情報を保管する方法の他に、データベースに保管する方法があります。BricRoboでは

EAP ファイルに保管する方法だけサポートしています。

Page 15: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

12

7 モデリング

7.1 モデリング表記

BricRobo メタモデルに基づいた BricRoboモデルを EAで作成するときに利用できる表記を示します。

モデルで表記する部品の一覧を表 7-1に示します。

表 7-1 BricRobo部品一覧

No. 部品名称 説明

1. CompositionType

BricRoboで最も基本となる部品です。BricRobo RTEにより駆動され、Portを介して他の

CompositionType と通信をします。

2. ComponentPrototype

CompositionTypeを利用する場合にはインスタンス化して ComponentPrototypeを使いま

す。クラスとインスタンスの関係と同じです。

3.

Port

CompositionTypeに付属しデータを送受信する接続点です。

送信・受信の 2種類があります。

それぞれについて、常時データを送るデータ型、ワンショットでデータを送るイベント型、関

数呼び出しのように振る舞うプロシージャ型があります。

以上、合計 6種類のポートがあります。

送受信するデータの型は Interfaceで指定します。

4. Interface Portを介して送受信するデータの型を表します。

5. AssemblyConnector CompositionType同士を繋ぐときに使用するコネクターです。

6.

DelegateConnector

CompositionTypeが内部に ComponentPrototypeを含んでいる場合、Portを介して、内側

の ComponentPrototypeの Portを引き出して、外側の CompositionTypeの Portに接続す

るときに使用するコネクターです。

7.

ClassDataType

CompositionTypeを実装する際に利用する Class型です。UML図のクラス定義と同じで

ヘッダーファイルをコード生成することができます。

ClassDataTypeは C++言語コード生成のみ対応しています。

8. EnumDataType

CompositionTypeを実装する際に利用する列挙型です。UML図のクラス定義と同じでヘ

ッダーファイルをコード生成することが出来ます。

9. StructDataType

CompositionTypeを実装する際に利用する構造体型です。UML図のクラス定義と同じで

ヘッダーファイルをコード生成することが出来ます。

7.1.1 CompositionType

CompositionTypeは0個以上の Portを持ち、他の CompositionType と通信可能な駆動できる部品です。内部に更に

CompositionTypeを含めることができるため、複数の CompositionTypeをまとめた大きな CompositionTypeを作成するこ

とが可能です。内部に CompositionTypeを指定する場合は、インスタンスの ComponentPrototypeを指定します。

Page 16: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

13

▲ Port1ΛPort2

▲ Port3ΛPort4[5]

○inPc

Block1

- _privateMember :int

<<ConfigParam>>+ param1 :int+ param2 :int

<<RunnableEntity>>+ Run() :void

▲ Port1ΛPort2

▲ Port3ΛPort4[5]

○inPc

ComponentTypeMet amodel : :

Compos it ionType

SrIF

+ someDataElement :int+ someDataElement2 :SomeClass

InterfaceMet amodel : :

SenderRecieverInt erface

SuperBlock

Λ

Port5SubBlock

<<RunnableEntit...+ Run() :void

Λ

Port5

Model

▲Port1

ΛPort2

▲ Port3

Λ Port4[6]

○ inPc

B1 :Block1

▲Port1

ΛPort2

▲ Port3

Λ Port4[6]

○ inPc

Λ Port5

SB :SubBlock

Λ Port5

▲Port6

BB :BigBlock

▲Port6

Port6

BigBlock

<<RunnableEntity>>+ Run() :void

Port6

▲ Port1

Λ Port2

▲Port3

ΛPort4

B1 :Block1

▲ Port1

Λ Port2

▲Port3

ΛPort4

T1 :Task

● outPc

Block2

<<RunnableEntit...+ Run() :void

● outPc

PcIF

+ arg :int+ ret :int

InterfaceMet amodel : :

ProcedureCa l l Int erface

●outPc

PC :Block2

●outPc

CompositionTypeを汎化し

て新しいBricRobo部品を

作ることはできません

エラーです

図 7-1 CompositionTypeの表記例

Page 17: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

14

CompositionTypeの構成を表 7-2 CompositionType部品一覧に示します。CompositionTypeは BricRobo メタモデルの

CompositionTypeから汎化することで定義します。CompositionTypeを汎化して別の CompositionTypeを作ることはでき

ません(図 7-1の SuperBlock と SubBlockの関係はエラーです)。

表 7-2 CompositionType部品一覧

No. 部位 説明

1. 名称 CompositionTypeを区別するための名称。図 7-1の「Block1」などに相当。

2. 属性

複数の属性を持つことができる。

可視性、型、属性名、多重度を指定可能。

3.

Port

他の CompositionType とデータを送受信する接続点である。

Portが送受信するデータの型(インターフェース)は、Interface(別のBricRobo 部品)と

依存線で結ぶことで定義する。

Portのより詳しい表記は表 7-4を参照のこと。

4. メソッド

複数のメソッドを持つことができる。

可視性、復帰値型、メソッド名、引数を指定可能。

5.

ConfigParam

CompositionTypeをインスタンス化して ComponentPrototype として使用する際に決定す

るコンフィグレーションパラメーター。

属性のステレオタイプに「ConfigParam」を設定して定義する。

複数の ConfigParamは定義順(上から下)に ConfigParam関数の引数となる。

6.

RunnableEntity

CompositionTypeを駆動する関数。

メソッドのステレオタイプに「RunnableEntity」を設定して定義する。

関数名は自由。C言語で利用可能な名称とすること。

複数の駆動関数を定義できる。

7.

製品モデル

複数の部品で構成された 1つの製品パッケージの最上位概念を表すモデル。

CompositionType と似ているが、ステレオタイプに「TopLevel」を設定して定義する。

図 7-1の例では「Model」が製品モデルに相当する。

8.

ComponentPrototype

CompositionTypeをインスタンス化して定義する。属する CompositionType内でユニーク

な名称を指定する。CompositionTypeをインスタンス化すると、CompositionTypeに付属

するすべての Portが同時にインスタンス化される。

9. AssemblyConnector

ComponentPrototypeの Portをコネクターで接続して定義する。結合する Portのインタ

ーフェースは同じでなくてはならない。

10.

DelegateConnector

ComponentPrototypeを含んだ CompositionTypeにおいて、内部の Port と外部の Port

を接続して定義する。

内部の ComponentPrototypeの Portを外部へ引き出すことが可能。

図 7-1において BigBlockは内部に「BB」を持ち、「Port3」を外部の「Port6」Portに

DelegateConnectorで接続して引き出している。さらに「BigBlock」は「Model」内で「B3」

ComponentPrototype としてインスタンス化され、「Port6」は「B1」ComponentPrototypeの

「Port4」と通信する。

7.1.2 Port

Portは Composition Typeが他の CompositionType とデータを送受信するための接続点です。

Portの構成を表 7-3エラー! 参照元が見つかりません。に示します。

Page 18: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

15

表 7-3 Port構成

No. 部位 説明

1. 名称

Portを区別するための名称。名前で区別するため、同じ CompositionType内で同じ名称の Portを指

定してはいけない。

2. 送受信 データを送信するのか受信するのかを定義する。

3.

挙動

データの送信方法を定義する。

SenderReceiverInterfaceの場合

・「データ」は常時データの送受信であり、一度、受信したデータは、受信 Portからいつでもデータを

取り出し可能である。

・「イベント」はワンショットの送受信であり、1回のデータ送信につき、1回のデータ受信しか行えない。

データ受信後のステータスは「データなし」となる。

ProcedureCallInterfaceの場合

・関数呼び出しのような挙動をし、送信 Portから送信したデータは引数となり受信 Portに関連するプ

ロシージャを呼び出す。引数の属性を変更してプロシージャから復帰すると、引数は送信 Portに返

る。

4. Queue 多重度の上限値、下限値に同じ値を指定する。指定がない場合は Queueを持たない。

Portの送受信と挙動の違いはステレオタイプで区別します。表 7-4に表記を示します。ステレオタイプによりポート表記が

変化します。

表 7-4 Port表記

No. ポート表記

ステレオ

タイプ 送受信 挙動 説明

1.

PPort

送信 データ

Interfaceで定義したデータを定期送信する。

ステレオタイプに「PPort」を設定することで、このポートとして認

識される。

2.

RPort

受信 データ

Interfaceで定義したデータを受信する。1回のデータ受信で

も複数回読み取ることができる。

ステレオタイプに「RPort」を設定することで、このポートとして認

識される。

3.

PPortEv

送信 イベント

Interfaceで定義したデータをイベント送信する。

ステレオタイプに「PPortEv」を設定することで、このポートとして

認識される。

4.

RPortEv

受信 イベント

Interfaceで定義したデータをイベント受信する。

QueueLength=0の場合、1回の受信で読み取れるのは 1回で

あり、2回目以降の読み取りはデータなしとなる。

QueueLength>1の場合、1回の受信で最古の受信データ 1個

を読み出す。Queueが空になるとデータなしとなる。

ステレオタイプに「RPortEv」を設定することで、このポートとして

認識される。

5.

PPortPc

送信 プロシー

ジャ

Interfaceで定義したデータを引数としてプロシージャを呼び出

す。プロシージャで変更された引数を受け取る。

ステレオタイプに「PPortPc」を設定することで、このポートとして

認識される。

6.

RPortPc

受信 プロシー

ジャ

Interfaceで定義したデータを引数として受け取りプロシージャ

が呼び出される。プロシージャで引数の属性を変更すると、呼

び出し元に返る。

ステレオタイプに「RPortPc」を設定することで、このポートとして

認識される。

Page 19: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

16

7.1.3 Interface

Interfaceは Portが送受信するデータの型を定義します。図 7-1では「SrIF」「PcIF」が Interfaceです。

Interfaceの構成を表 7-5エラー! 参照元が見つかりません。に示します。Interfaceの種類は 2つあります。

SenderReceiverInterfaceは送信 Portから受信 Portに向かって一方通行のデータの流れを表します。

ProcedureCallInterfaceは送信 Portから受信 Portを呼び出し、受信 Portに関連するプロシージャを実行して、結果を送

信 Portに返します。

表 7-5 Interface構成

No. 部位 説明

1. 名称 Interfaceを区別するための名称。図 7-1の「SrIF」「PcIF」に相当。

2.

属性

複数の属性を持つことができる。

可視性、型、属性名、多重度を指定可能。

BricRobo メタモデルの DataElementに相当。

3. メソッド

複数のメソッドを持つことができる。

可視性、復帰値型、メソッド名、引数を指定可能。

7.1.4 Package

パッケージ(Package)は表記には現れませんが、CompositionType・Interface などを格納するフォルダーのようなものです。

パッケージを適切に活用し、意味による BricRobo部品の分類や、部品と製品の分別に活用できます。表 7-6エラー! 参

照元が見つかりません。にパッケージの構成を示します。

表 7-6 パッケージ構成

No. 部位 説明

1.

名称

パッケージを区別するための名称。

パッケージは階層構造を取る。同じパッケージに同じ名前のパッケージ(サブパッケージ

と呼ぶ)を含むことが可能だが、階層内では異なることが望ましい。

2. パッケージ階層

BricRobo部品、Interface等の部位はパッケージ内に配置する。パッケージの階層は自

由である。パッケージ名とその階層はコード生成時にフォルダー階層として採用される。

3. ステレオタイプ

BricRobo コードジェネレータは、ステレオタイプに「BricRoboRTE」を指定したパッケージ

位置に、RTE コードを生成します。

7.1.5 Task

Taskは ComponentPrototypeの RunnableEntityを駆動します。図 7-2の①のように、Taskは CompositionTypeの直下に

配置します。また呼び出せる RunnableEntityは、④のように Taskを含む CompositionTypeの RunnableEntity と、⑤のよう

に同じ CompositionTypeの配下にある ComponentPrototypeの RunnableEntityです。

⑥のように Task とは無関係に CompositionTypeの RunnableEntityは、ComponentPrototypeの RunnableEntityを呼び出

すことが可能です。

Page 20: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

17

Task

Compos it ionType

ComponentProt ot ype

RunnableEnt it y

RunnableEnt it y

Taskが呼び出せる

RunnableEntityの位置

RunnableEntityが呼び出せる

RunnableEntityの位置

0..*②

0..*

0..*

図 7-2 Taskの配置と呼び出し可能な RunnableEntityの位置

Taskによる RunnableEntity呼び出しの定義は UMLのシーケンス図で行います。図 7-3のモデルをもとに説明します。

CompositionType

<<TopLevel>>BigBlock

<<RunnableEntity>>+ Run() :void

<<BricRoboKeyEl...T1 :Tas k

CompositionType配下に

ないTaskは無視する。

<<BricRoboKeyEl...T2 :Tas k

CompositionTypeBlock1

<<RunnableEntity>>+ Run1() :void

<<BricRoboKeyEl...T3 :Tas k

B1 :Block1 B11 :Block1

CompositionTypeBlock2

<<RunnableEntity>>+ Run2() :void

B2 :Block2

CompositionTypeにTask

が入る

それぞれにTaskが生成さ

れる

図 7-3 Taskによる RunnableEntity呼び出しの前提モデル

Taskによる RunnableEntity呼び出しに関わる条件として、以下の 4点を前提としています。

Page 21: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

18

BigBlockはタスク T2を含む

T2は B1、B11の RunnableEntityを駆動する

Block1は T3を含む

T3は Block1、B2の RunnableEntityを駆動する

図 7-4に一般的な Taskが RunnableEntityを呼び出す例を示します。これは Taskが直接、RunnableEntityを呼び出す場

合です。

図 7-5ではタスク T2が BigBlockの RunnableEntityである Runを呼び出します。また、Runは B1 と B11の

RunnableEntityである Run1を呼び出します。

図 7-6では、B2の Run2 と、Block1の Run1を呼び出しています。

<<BricRoboKey...

T2 :Task

B1 :Block1 B11 :Block1

Run1()

Run1()

図 7-4 RunnableEntity呼び出し例1

<<BricRoboKey...

T2 :Task

<<TopLevel>>

BigBlock

B1 :Block1 B11 :Block1

T2がBigBlockの

RunnableEntityを駆動

BigBlockのRunnableEntityは

B1、B11のRunnableEntityを駆動

Run()

Run1()

Run1()

図 7-5 RunnableEntity呼び出し例2

Page 22: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

19

<<BricRoboKey...

T3 :Task

B2 :Block2Block1

Run2()

Run1()

図 7-6 RunnableEntity呼び出し例3

Page 23: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

20

7.1.6 RunnableEntity

Task と CompositionTypeから呼び出す RunnableEntityのモデリング表記を図 7-7に示します。赤で示した線はコード生

成の対象となります。

Taskから CompositionType と ComponentPrototypeの RunnableEntity呼び出しを定義します。

CompositionTypeの RunnableEntityが、自身の RunnableEntityや ComponentPrototypeの RunnableEntity呼び出しを定

義するときは、メッセージ終了点を用いて定義します。

CT1 B1 :CT2<<BricRoboKey...

T1 :Task

Run2が自身のRun2を再帰呼び出しする定義、

エラーとはしないのでユーザの自己責任となる。

呼び出し開始が不明なのでワーニング

2段目(Run2)からの呼び

出しは無視

T1がCT1のRun1、Run2、

B1のRun11を順に呼び出すことを定義。

RunnableEntityの呼び出し定義はメッセージ

終了点で開始する。

Taskから呼び出した

RunnableEntityの定義は有効。

Run1()

Run11()

Run1()

Run11()

Run2()

Run2()

Run11()

Run2()

Run2()

Run11()

Run1()

Run2()

Run11()

Run2()

Run3()

図 7-7 RunnableEntityの呼び出しシーケンス

7.1.7 ClassDataType [C++]

ClassDataTypeは C++言語のクラスに相当します。

Enterprise Architectでは Class定義を行い、Enterprise Architectの機能を使ってクラスヘッダーを生成することができます。

同様に、BricRoboでは ClassDataTypeで定義すれば BricRoboのコード生成でヘッダーが出力できます。さらに、

ClassDataTypeを CompositionTypeの属性に指定することで、コード生成時のインクルードファイルの解決も可能となりま

す。これにより部品の関係性を含めたコード生成が可能となるため、部品の変更・削除・追加の容易性が向上します。

Page 24: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

21

DataType

<<BricRoboKey...Da t aType: :

C las sDat aType

SomeC las s

- _privateAttr :int# _protectAttr :int+ _publicAttr :int

- privateMethod() :void# protectedMethod() :void+ publicMethodMethod() :void+ RetClassMethod() :ReturnClass

MemberC las s

- fineAttr :int

Ret urnC las s

+ answer :int

RetClassMethodの返り値型がReturnClassの

ため、依存線を引いておくことで、C++言語で

は#includeが出力されます。

デフォルトでは集約は保

持方法が値になります。

デフォルトでは関連は保持方

法が参照になります。

C++言語ではポインタ*がつき

ます。

+memberArray2

+memberRef

図 7-8 ClassDataType表記例

BricRobo メタモデルの ClassDataTypeから派生することにより、クラスを表現できます。クラスの属性・メソッドは一般的な

UMLのクラス図の表記に準じます。

No. 部位 説明

1. 名称 ClassDataTypeを区別するための名称。

2.

属性

複数の属性を持つことができる。

可視性、型、属性名、初期値、多重度を指定可能。

【注意】

初期値を指定した場合、そのままコード生成する。生成したコードがコンパイルできるか

どうかは、言語の種類とコンパイラーの仕様準拠に依存する。

3. メソッド

複数のメソッドを持つことができる。

可視性、復帰値型、メソッド名、引数を指定可能。

Page 25: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

22

属性はクラスに直接記述するか、ClassDataType と集約・関連の接続により表現することができます。図 7-8では

SomeClassの属性としてMemberClassを集約と矢印つき関連で 2つ定義しています。

memberRef・memberArrayは属性の名称、「+」記号は可視性を表します。指定方法の詳細を図 7-12に示します。

表 7-7 線による属性の指定方法

No. 表記 説明

1. 端の名称 属性の名称となる。

2.

+,-,#,~記号

可視性を指定する。記号の意味は以下のとおり。

+:public

-:private

#:protected

【注意】

~:package を指定した場合、そのまま「package」とコード生成する。

3.

多重度

端に多重度を指定できる。指定しないときの多重度なしとみなす。

指定方法は7.2項を参照のこと。

多重度を指定すると、C++言語でコード生成すると配列となる。

4.

保持方法

端に保持方法をを指定できる。指定可能な値は次のとおり。

未指定:接続線の種類により参照か値かが決定される。

参照:参照として保持する。C++言語でコード生成するとポインタ扱いとなる。

値:値として保持する。C++言語でコード生成すると値(インスタンス)扱いとなる。

5.

接続線

ClassDataType と接続する線の種類は 2種類ある。種類により、保持方法の未指定時の

解釈に影響を与える。指定可能な線は次のとおり。

集約:値として保持する。

関連:参照として保持する。

Page 26: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

23

7.1.8 StructDataType

StructDataTypeは C/C++言語の構造体に相当します。

Enterprise Architectでは、構造体定義を行い、Enterprise Architectの機能を使って構造体ヘッダーを生成することができ

ます。同様に、BricRoboでは StructDataTypeで定義すれば BricRoboのコード生成でヘッダーが出力できます。さらに、

StructDataType を StructDataType の属性に指定することで、コード生成時のインクルードファイルの解決も可能となります。

これにより部品の関係性を含めたコード生成が可能となるため、部品の変更・削除・追加の容易性が向上します。

SomeSt ruct

- privateAttr :int+ publicAttr :int

RefSt ruct

+ attr1 :int

MemberSt ruct

+ attr1 :int+ attr2 :int

SomeStructがRefStructを参照する場

合、依存線で関係を表すと、SomeStruct

にRefStructが#includeを出力します。

デフォルトでは関連は保持方法が参照

になります。

C/C++言語ではポインタ*がつきます。

デフォルトでは集約は保

持方法が値になります。

DataType

<<BricRoboKeyElement>>Met amodel : :St ructDat aType

+ref

+member

図 7-9 StructDataType表記例

No. 部位 説明

1. 名称 StructDataTypeを区別するための名称。

2.

属性

複数の属性を持つことができる。

型、属性名、多重度を指定可能。

可視性は指定にかかわらず全て public扱いとなる(構造体が publicであるため)

初期値を指定することは出来ない。

属性は構造体に直接記述するか、StructDataType と集約・関連の接続により表現することができます。指定方法の詳細を

図 7-12に示します。

表 7-8 線による属性の指定方法

No. 表記 説明

1. 端の名称 属性の名称となる。

2. +,-,#,~記号 可視性は指定にかかわらず全て public扱いとなる。

3.

多重度

端に多重度を指定できる。指定しないときの多重度なしとみなす。

指定方法は7.2項を参照のこと。

多重度を指定すると、C/C++言語でコード生成すると配列となる。

4.

保持方法

端に保持方法をを指定できる。指定可能な値は次のとおり。

未指定:接続線の種類により参照か値かが決定される。

参照:参照として保持する。C/C++言語でコード生成するとポインタ扱いとなる。

値:値として保持する。C/C++言語でコード生成すると値(インスタンス)扱いとなる。

Page 27: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

24

5.

接続線

StructDataType と接続する線の種類は 2種類ある。種類により、保持方法の未指定時の

解釈に影響を与える。指定可能な線は次のとおり。

集約:値として保持する。

関連:参照として保持する。

7.1.9 EnumDataType

EnumDataTypeは C/C++言語の列挙体に相当します。

Enterprise Architectでは列挙体定義を行い、Enterprise Architectの機能を使って列挙体ヘッダーを生成することができま

す。同様に、BricRoboでは EnumDataTypeで定義すれば BricRoboのコード生成でヘッダーが出力できます。

また、初期値でメンバーの割り当て値を指定することが可能です。

DataType

<<BricRoboKeyElement>>Dat aType: :EnumDat aType

SomeEnum

- Sunday :int = 1+ Monday

図 7-10 EnumDataType表記例

No. 部位 説明

1. 名称 EnumDataTypeを区別するための名称。

2.

属性

複数の属性を持つことができる。

属性名を指定可能。

型・可視性は指定にかかわらず全て無視される。

7.2 多重度の指定方法

属性に多重度を指定する方法を表 7-9に示します。

表 7-9 多重度の指定方法

No. 指定方法 説明

1. 属性プロパティ

上限値と下限値を同じにしてください。異なる場合には多重度とみなしません。

属性はコレクションとしてださい。

2.

集約プロパティ

関連プロパティ

次の形式で指定してください。これ以外の形式では多重度とみなしません。

n : nは数値または文字定数

n..n : nは数値または文字定数

7.3 ステレオタイプ

BricRoboで使用するステレオタイプの一覧を表 7-8に示します。

Page 28: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

25

表 7-10 BricRoboで使用するステレオタイプ一覧

No. ステレオタイプ 説明

1. BricRoboKeyElement BricRobo メタモデルを定義する。BricRoboユーザーは使用しないでください。

2. BricRoboRTE BricRoboRTEを生成する場所を指定するためにパッケージに付ける

3. PPort データ型を送信するポートを示すためにポートに付ける

4. RPort データ型を受信するポートを示すためにポートに付ける

5. PPortEv イベント型を送信するポートを示すためにポートに付ける

6. RPortEv イベント型を受信するポートを示すためにポートに付ける

7. PPortPc プロシージャコール型を送信するポートを示すためにポートに付ける

8. RPortPc プロシージャコール型を受信するポートを示すためにポートに付ける

9. ConfigParam ConfigParamを示すために属性に付ける

10. RunnableEntity RunnableEntityを示すために関数に付ける

11. TopLevel トップレベルの部品(すなわち製品)を示すためにクラスに付ける

7.4 モデリング時の注意事項

7.4.1 BricRobo 部品の汎化

BricRoboでは BricRobo部品の汎化による開発をサポートしています[C++]。ClassDataType、StructDataType、

SenderReceiverInterface、ProcedureCallInterfaceでは、既存の部品から汎化させて新しい機能を持つ部品を作成できま

す。汎化は派生元 BricRobo部品と派生先 BricRobo部品を EAの汎化線で結線して指定します。

汎化される BricRobo部品の要素の継承について表 7-11示します。

表 7-11 派生 BricRobo部品の要素

No. 要素 説明

1. Attribute Public、Protected属性は継承する

2. Method Public、Protected属性は継承する

7.4.2 利用しないポートの扱い

BricRobo部品に定義してある Portをすべて接続する必要はなく、利用しないものは接続せずに残すことができます。更

に作業がしにくい場合には表示から削除することが可能でです。

例:

図 7-11に示すように接続しない setLabelポートは、その存在を示すために残すことが望ましいですが、図 7-12に示すよ

うに表示から削除してもモデルの意味は変わりません。ただし、ポートの存在をオブジェクトブラウザから削除してはなりま

せん(BricRobo部品定義とポート定義が異なるため)。

図 7-11 接続しないポート

Page 29: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

26

図 7-12 接続しないポートの削除

7.4.3 ConfigParam に指定できない文字

ConfigParamには数値、文字列など任意の値を指定できますが、次の文字・文字列を含めることはできません。これは EA

の制限によるものです。

; (セミコロン)

@VAR

@ENDVAR

例えば <ConfigParam> char* text で ConfigParamを作成し、実行状態の指定で 変数に test、値に”abc;@VER” とは

指定できません。「”abc」までしか記録されず、「;@VAR”」は消えます。

7.4.4 ConfigParam の型

ConfigParamの型はプリミティブ型(int、charなど単純な型)です。構造体やクラスを指定しても、ComponentPrototypeの

実行状態で値を指定するのが困難なためです。

7.4.5 BricRobo 部品の名前の重複

BricRoboでは BricRobo部品(CompositionType、ClassDataTyppe、StructDataType、EnumDataType、

SenderRecieverInterface、ProcedureCallInterface)の名前はユニークにしてください。これはコード生成で指定した名前が

そのまま使われ、コンパイル時にリンクで重複が発生するためです。

Page 30: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

27

8 コード生成

コード生成には BricRoboプロジェクトが必要です。BricRoboプロジェクトは環境ファイルを使い、生成言語に対応したコ

ードテンプレートのありかを決定します。BricRoboプロジェクトと環境ファイルの関係を図 8-1に示します。

<<tool>>BricRoboコードジェネレータ

<<BRP>>BricRoboプロジェクト

<<XML>>環境ファイル

<<XSL>>コード生成テンプレート

言語により参照先が切り替わる

明示的に環境ファイルを指定しない場合は、インストールさ

れたデフォルトの環境ファイルを使用する。

参照

参照

図 8-1 BricRoboプロジェクトと環境ファイルの関係

Page 31: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

28

8.1 BricRobo コードジェネレータのコマンドライン

BricRobo コードジェネレータの起動は、コマンドラインから実行するか、BricRoboプロジェクトファイルのダブルクリックで

行います。コマンドラインの指定形式を表 8-1に示します。

BricRroboGen.exe [-pause_on_error] [-lint] [-print_license] [-print_ana] [<BricRoboプロジェクトファイル>]

表 8-1 コマンドライン引数

No. 引数 省略 説明

1. pause_on_error

可 エラーが発生するとキー入力受付状態で停止し、キーを入力すると終了

する

2. lint

可 BricRoboモデルの検査を行うが、エラーが発生しなくてもコード生成は

行わない。BricRoboモデルの検査に利用する。

3. print_license 可 ライセンス情報を表示する。

4. print_ana 可 BricRoboモデルの解析結果を表示する。

5. BricRoboプロジェクトファイル 可 BricRobo コードジェネレータに指示を与える。

8.2 BricRobo コードジェネレータの戻り値

BricRobo コードジェネレータは終了時に値を返します。返す値を表 8-2に示します。

表 8-2 BricRobo コードジェネレータの戻り値

No. 終了値 説明

1. 0 エラーなし。正常に処理が終了した。ワーニングはエラーではない。

2. 1 エラーあり。エラー数が 0でない。

8.3 BricRobo プロジェクトファイル

BricRoboプロジェクトファイルは BricRobo コードジェネレータに指示を与えます。サンプルは BricRoboSampleデスクト

ップ Vx.x¥BrWorkspace.brp にあるのでコピーして使用してください。

BricRoboプロジェクトファイルは XMLファイルです。テーブルの詳細を表 8-3、表 8-4に示します。データ型の()は指定

できる値を示しています。

表 8-3 Generalテーブル

No. タグ データ型 説明

1. eaFilepath

string 解析対象とする Enterprise Architectファイル位置

BricRoboプロジェクトファイルからの相対パス/絶対パス

2.

generateBaseFolder

string コード生成のルートフォルダー位置

BricRoboプロジェクトファイルからの相対パス/絶対パス

タグが存在しない場合のデフォルト値は「.¥」です

3.

bricRoboModelXmlPath

string BricRoboモデルファイル生成位置

BricRoboプロジェクトファイルからの相対パス/絶対パス

タグが存在しない場合のデフォルト値は「@bricRoboModel.xml」です。

4. isOutputBricRoboModel

bool

(true/false)

BricRoboモデルファイルの生成有無

タグが存在しない場合のデフォルト値は「false」です。

5.

eaModelFilepath

string EAモデルファイル位置

BricRoboプロジェクトファイルからの相対パス/絶対パス

タグが存在しない場合のデフォルト値は「@eaModel.xml」です。

Page 32: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

29

6. isOutputEaModel

bool

(true/false)

EAモデルファイルの生成有無

タグが存在しない場合のデフォルト値は「false」です。

7.

generateLanguage

string

(C/C++)

テンプレート種類。インストールパッケージにより追加の言語がサポートさ

れる場合があります。

タグが存在しない場合のデフォルト値は「C++」です。

8.

languageType

string

(C,C++)

コード生成言語種類。インストールパッケージにより追加の言語がサポー

トされる場合があります。

特別に用意したテンプレートを使用する以外は generateLanguage と同じ

指定にしてください。

タグが存在しない場合のデフォルト値は「C++」です。

9.

environFilepath

string 環境ファイル位置、空の場合はインストールしてあるデフォルト環境ファイ

ルを使用

BricRoboプロジェクトファイルからの相対パス/絶対パス

10.

interimXmlFilepath

string 中間ファイル生成位置

BricRoboプロジェクトファイルからの相対パス/絶対パス

タグが存在しない場合のデフォルト値は「@interimXml.cash」です。

11. isOutputInterimXml

bool

(true/false)

中間ファイルの生成有無

タグが存在しない場合のデフォルト値は「false」です。

12. fileSystemSeparator

string コード生成時のファイルパスに使用するセパレータ。

指定しない場合「¥」とする。

13.

usedBlockListXslPath

string 製品が使用した BricRobo部品のリストファイルを生成する際に使用する

XSLファイルパス。BricRoboプロジェクトファイルからの相対パス/絶対パ

14. enableUsedBlockList

bool

(true/false) BricRobo部品のリストファイルの生成有無

15. cashInterimXml

bool

(true/false) 中間ファイルをキャッシュとしてコード生成を高速化するかどうか

16. preCompileHeader

string コード生成時に埋め込むプリコンパイルヘッダーファイルの名前

指定がない場合には「stdafx.h」

17. waningAsError

bool

(true/false) ワーニングをエラーとして扱う

表 8-4 Packageテーブル

No. タグ データ型 説明

1. name string 解析対象とする EAPファイル内のプロジェクトルート名

2.

isGenerate

bool

(true/false)

解析した結果を元にコード生成を行うか

EAPファイルのパッケージ階層構造にしたがって Generalテーブルの

generateBaseFolderで指定したフォルダー位置をルートにコード生成する。

Page 33: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

30

リスト 8-1 BricRoboプロジェクトファイル記述例

<?xml version="1.0" standalone="yes"?>

<bricRoboGenProjectDs xmlns="http://fct.fujitsu.com/bricRoboGenProjectDs.xsd">

<General>

<eaFilepath>@Test.EAP</eaFilepath><!—BRPファイルからの相対パス|絶対パスで EAPファイルを指定-->

<generateBaseFolder>.¥DEMO¥</generateBaseFolder><!—BRPファイルからの相対パス|絶対パスでコード生成のル

ートフォルダー位置を指定-->

<bricRoboModelXmlPath>@BricRoboModel.xml</bricRoboModelXmlPath><!—BRPファイルからの相対パス|絶対

パスで BricRoboモデルファイル生成位置を指定-->

<isOutputBricRoboModel>false</isOutputBricRoboModel><!--BricRoboモデルファイルを生成するか?-->

<generateLanguage>C++</generateLanguage><!--コード生成言語種類 C++,C しかまだありません-->

<languageType>C++</languageType><!-- 言語タイプ C,C++ -->

<environFilepath></environFilepath><!—BRPファイルからの相対パス|絶対パスで環境ファイルを指定、空の場合は

インストールしてあるデフォルト使用-->

<interimXmlFilepath>@InterimXml.xml</interimXmlFilepath><!—BRPファイルからの相対パス|絶対パスで中間フ

ァイル生成位置を指定-->

<isOutputInterimXml>true</isOutputInterimXml><!--中間ファイルを生成するか?-->

<fileSystemSeparator>¥</fileSystemSeparator><!--ファイルシステムの区切り文字を変更、指定しないと¥-->

<usedBlockListXslPath>Makefile.UsedBlockList.txt.xsl</usedBlockListXslPath><!--利用部品リスト生成 XSL-->

<enableUsedBlockList>true</enableUsedBlockList><!--利用部品リストを生成するか?-->

<cashInterimXml>true</cashInterimXml>

</General>

<!--以下、解析対象とするパッケージ-->

<Package>

<name>BricRobo</name><!--パッケージ名-->

<isGenerate>false</isGenerate><!--コード生成するか?-->

</Package>

<Package>

<name>製品開発</name>

<isGenerate>true</isGenerate>

</Package>

<Package>

<name>ライブラリ</name>

<isGenerate>false</isGenerate>

</Package>

</BricRoboGenProjectDs>

Page 34: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

31

8.4 利用部品一覧生成

ステレオタイプ<TopLevel>をつけた BricRobo部品からコード生成を開始しますが、途中で出現した BricRobo部品の一

覧をファイル(利用部品一覧ファイル)で出力することができます。利用部品一覧ファイルは XSLテンプレートを使ってフ

ォーマット変更が可能です。XSLテンプレートの指定と生成有無は BricRoboプロジェクトで指定します。詳しくは8.1節を

参照してください。

利用部品一覧ファイル用の XSLテンプレートとして、以下の二種類が用意されています。インストール先のフォルダーに

ありますので、コピーして使用してください。

1. Makefile.UsedBlockList.txt.xsl Makefile等で利用するのに適しています

2. Makefile.UsedBlockList.vcxproj.xsl Visual Studio 2010のプロジェクトファイルにインクルードして利用する

のに適しています。

8.4.1 Makefile で利用する

Makefileで利用するのに適したMakefile.UsedBlockList.txt.xslをリスト 8-2に示します。

リスト 8-2 XSLテンプレート(Makefile.UsedBlockList.txt.xsl)

<?xml version="1.0" encoding="shift-jis"?>

<!--

このファイルは製品(TopLevel)が利用した部品の一覧ファイルを出力するためのものです。

Makefileに include して利用した部品のみコンパイル対象にするときに利用します。

一覧ファイル名は、このテンプレートファイルの拡張子を削除した名前になります。

カスタマイズは下記★☆の部分を読んで変更してください。

-->

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="text" />

<xsl:param name="ID"/>

<xsl:param name="GeneratorName"/>

<xsl:param name="GeneratorVersion"/>

<xsl:param name="CopyrightDate"/>

<xsl:param name="Trademark"/>

<xsl:param name="fileSystemSeparator"/>

<!-- Root Template -->

<xsl:template match="/">

<!-- Header File / Top Comment -->

<xsl:apply-templates select="InterimDs/GenerateFiles[ID=$ID]" mode="GenerateMain"/>

</xsl:template>

<!-- ファイル生成/ルートエレメント(GenerateFiles) -->

<xsl:template match="GenerateFiles" mode="GenerateMain">

<xsl:message>Generating UseBlock : <xsl:value-of select="Classes/name"/></xsl:message>

<!-- 利用した部品リストを出力-->

<xsl:apply-templates select="UsedBlocks" mode="UsedBlocks"/>

</xsl:template>

<!--

★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆

利用した部品リストを出力します

<xsl:value-of select="translate(path, の行を編集してください

2つ目の'/'を変更するとパスセパレータを変更できます。

-->

<xsl:template match="UsedBlocks" mode="UsedBlocks">.<xsl:value-of select="translate(path,'/','/')"/>.cc ¥

</xsl:template>

</xsl:stylesheet>

Page 35: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

32

赤で塗った部分がカスタマイズ可能な部分です。UsedBlocksテーブルには次の形式のリストが格納されています。

/<フォルダー名>/.../<部品名>

フォルダーと部品名の間のセパレータはスラッシュ「/」なので、OS環境に合わせて変更することが可能です。その際は

translate(path,'/','/')の 3番目の文字を「/」以外に変更してください。

上記の例では次のようなファイルリストが生成されます。

./System/Console/Keyboard.cc \

./OJT_ProgramTest4/UMMachine.cc \

./OJT_ProgramTest4/Parts/Basic/EmployeeDB.cc \

./OJT_ProgramTest4/Parts/Module/MasterModule.cc \

./OJT_ProgramTest4/Parts/Module/SearchModule.cc \

./OJT_ProgramTest4/Parts/Basic/BaseModule.cc \

./System/Console/Display.cc \

./OJT_ProgramTest4/Parts/Module/RegistModule.cc \

./OJT_ProgramTest4/Parts/Module/EditModule.cc \

./OJT_ProgramTest4/Parts/Module/DelModule.cc \

8.4.2 Visual Studio 2010 で利用する

Visual Studio 2010で利用するのに適したMakefile.UsedBlockList.vcxproj.xslをリスト 8-3に示します。このテンプレート

を使用すると、Visual Studio 2010のプロジェクトファイルを生成します(リスト 8-4)。 このプロジェクトファイルを Visual

Studio 2010のプロジェクトファイルにインポートすると、利用した BricRobo部品の一覧を取り込むことができます(リスト

8-5の赤の部分)

リスト 8-5の黄色の部分は BricRoboRTEのファイルをコンパイルする指定になっています。

リスト 8-3 XSLテンプレート(Makefile.UsedBlockList.vcxproj.xsl)

<?xml version="1.0" encoding="shift-jis"?>

<!--

このファイルは製品(TopLevel)が利用した部品の一覧ファイルを生成する際の出力フォーマットを定義します。

Makefileに include して利用した部品のみコンパイル対象にするときに利用します。

一覧ファイル名は、このテンプレートファイルの拡張子を削除した名前になります。

カスタマイズは下記★☆の部分を読んで変更してください。

-->

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="text" />

<xsl:param name="ID"/>

<xsl:param name="GeneratorName"/>

<xsl:param name="GeneratorVersion"/>

<xsl:param name="CopyrightDate"/>

<xsl:param name="Trademark"/>

<xsl:param name="fileSystemSeparator"/>

<!-- 先頭行の 1文字目から出力するように注意 -->

<xsl:template match="/">&lt;?xml version="1.0" encoding="utf-8"?&gt;

&lt;Project DefaultTargets="Build" ToolsVersion="4.0"

xmlns="http://schemas.microsoft.com/developer/msbuild/2003"&gt;

&lt;ItemGroup&gt;

<!-- Header File / Top Comment -->

<xsl:apply-templates select="InterimDs/GenerateFiles[ID=$ID]" mode="GenerateMain"/>

Page 36: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

33

</xsl:template>

<!-- ファイル生成/ルートエレメント(GenerateFiles) -->

<xsl:template match="GenerateFiles" mode="GenerateMain">

<xsl:message>Generating UseBlock</xsl:message>

<!-- 利用した部品リストを出力 -->

<xsl:apply-templates select="UsedBlocks" mode="UsedBlocks"/>

<!-- プロジェクトの終了ブロック -->

&lt;/ItemGroup&gt;

&lt;/Project&gt;

</xsl:template>

<!--

★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆

利用した部品リストを出力します

<xsl:value-of select="translate(path, の行を編集してください

2つ目の'/'を変更するとパスセパレータを変更できます。

-->

<xsl:template match="UsedBlocks" mode="UsedBlocks">

<xsl:text> &lt;ClCompile Include="..</xsl:text>

<xsl:value-of select="translate(path,'/','¥')"/>

<xsl:text>.cc" /&gt;

</xsl:text>

</xsl:template>

</xsl:stylesheet>

リスト 8-4 Makefile.UsedBlockList.vcxproj.の出力例

<?xml version="1.0" encoding="utf-8"?>

<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

<ItemGroup>

<ClCompile Include="..¥SampleRobot¥Controller¥PID.cc" />

<ClCompile Include="..¥SampleRobot¥Device¥MotorBric.cc" />

<ClCompile Include="..¥SampleRobot¥Controller¥Zigzag.cc" />

<ClCompile Include="..¥SampleRobot¥Device¥LightSensorBric.cc" />

</ItemGroup>

</Project>

リスト 8-5 Visual Studio 2010 プロジェクトへのインポート例

<?xml version="1.0" encoding="utf-8"?>

<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

<ItemGroup Label="ProjectConfigurations">

<ProjectConfiguration Include="Debug|Win32">

<Configuration>Debug</Configuration>

<Platform>Win32</Platform>

</ProjectConfiguration>

<ProjectConfiguration Include="Release|Win32">

<Configuration>Release</Configuration>

<Platform>Win32</Platform>

</ProjectConfiguration>

</ItemGroup>

Page 37: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

34

<PropertyGroup Label="Globals">

<ProjectGuid>{18CD076A-EE8F-40DB-8AE3-71486AFDD337}</ProjectGuid>

<Keyword>Win32Proj</Keyword>

<RootNamespace>SampleRobot</RootNamespace>

</PropertyGroup>

<Import Project="$(VCTargetsPath)¥Microsoft.Cpp.Default.props" />

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">

<ConfigurationType>Application</ConfigurationType>

<UseDebugLibraries>true</UseDebugLibraries>

<CharacterSet>Unicode</CharacterSet>

</PropertyGroup>

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">

<ConfigurationType>Application</ConfigurationType>

<UseDebugLibraries>false</UseDebugLibraries>

<WholeProgramOptimization>true</WholeProgramOptimization>

<CharacterSet>Unicode</CharacterSet>

</PropertyGroup>

<Import Project="$(VCTargetsPath)¥Microsoft.Cpp.props" />

<ImportGroup Label="ExtensionSettings">

</ImportGroup>

<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">

<Import Project="$(UserRootDir)¥Microsoft.Cpp.$(Platform).user.props"

Condition="exists('$(UserRootDir)¥Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

</ImportGroup>

<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">

<Import Project="$(UserRootDir)¥Microsoft.Cpp.$(Platform).user.props"

Condition="exists('$(UserRootDir)¥Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

</ImportGroup>

<PropertyGroup Label="UserMacros" />

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">

<LinkIncremental>true</LinkIncremental>

</PropertyGroup>

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">

<LinkIncremental>false</LinkIncremental>

</PropertyGroup>

<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">

<ClCompile>

<PrecompiledHeader>Use</PrecompiledHeader>

<WarningLevel>Level3</WarningLevel>

<Optimization>Disabled</Optimization>

<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>

<AdditionalIncludeDirectories>..¥BricRobo¥BricRoboCOM;..¥BricRobo¥BricRoboRTE</AdditionalIncludeDirectories>

</ClCompile>

<Link>

<SubSystem>Console</SubSystem>

<GenerateDebugInformation>true</GenerateDebugInformation>

</Link>

</ItemDefinitionGroup>

<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">

<ClCompile>

<WarningLevel>Level3</WarningLevel>

<PrecompiledHeader>Use</PrecompiledHeader>

<Optimization>MaxSpeed</Optimization>

<FunctionLevelLinking>true</FunctionLevelLinking>

<IntrinsicFunctions>true</IntrinsicFunctions>

<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>

Page 38: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

35

</ClCompile>

<Link>

<SubSystem>Console</SubSystem>

<GenerateDebugInformation>true</GenerateDebugInformation>

<EnableCOMDATFolding>true</EnableCOMDATFolding>

<OptimizeReferences>true</OptimizeReferences>

</Link>

</ItemDefinitionGroup>

<ItemGroup>

<ClInclude Include="stdafx.h" />

<ClInclude Include="targetver.h" />

</ItemGroup>

<ItemGroup>

<ClCompile Include="..¥BricRobo¥BricRoboRTE¥BricRoboController.cc" />

<ClCompile Include="..¥BricRobo¥BricRoboRTE¥BricRoboTask.cc" />

<ClCompile Include="..¥BricRobo¥BricRoboRTE¥main.cc" />

<ClCompile Include="RTE¥BricRoboCOM_API.cc" />

<ClCompile Include="RTE¥BricRoboRTE_API.cc" />

<ClCompile Include="RTE¥BricRoboRTE_Model.cc" />

<ClCompile Include="RTE¥BricRoboRTE_Task.cc" />

<ClCompile Include="stdafx.cpp">

<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>

<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>

</ClCompile>

</ItemGroup>

<ItemGroup>

<None Include="RTE¥BricRoboCOM_API.hh" />

<None Include="RTE¥BricRoboRTE_API.hh" />

<None Include="RTE¥BricRoboRTE_Model.hh" />

</ItemGroup>

<Import Project="$(VCTargetsPath)¥Microsoft.Cpp.targets" />

<ImportGroup Label="ExtensionTargets">

</ImportGroup>

<Import Project="Makefile.UsedBlockList.vcxproj" />

</Project>

Page 39: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

36

8.5 環境ファイル

通常、環境ファイルはインストールされたものを使用します。コード生成テンプレートをカスタマイズしてオリジナルの言語

に対応するには、環境ファイルを書き換えて対応します。環境ファイル内のテーブルを表 8-5に、例をリスト 8-6に示しま

す。

新しい言語を追加する場合、languageに新言語の名前を、fileTypeに指定可能な一式を含んだ行セットを環境ファイル

に追加します。

表 8-5 環境ファイル XslFilesテーブル

No. タグ データ型 説明

1.

language

string コード生成言語を指定します。

BricRoboプロジェクト(languageType)でコード生成言語を指定すると、この

フィールドが一致する行が選択されます。

2.

fileType

string BricRobo コードジェネレータが生成するファイル種類を指定します。指定

する文字列は以下のとおりです。

C++の場合 [C++]

CompositionType:コンポジション

EnumDataType:Enum型

StructDataType:構造体型

ClassDataType:クラス型

SenderReceiverInterface:SenderReceiver インターフェース型

ProcedureCallInterface:ProcedureCall インターフェース型

BricRoboRTE_Task.cc:RTE層タスク

BricRoboCOM_API.h:COM層 APIのヘッダー

BricRoboCOM_API.cc:COM層 APIのボディ

BricRoboRTE_API.h:RTE層 APIのヘッダー

BricRoboRTE_API.cc:RTE層 APIのボディ

BricRoboRTE_Model.h:RTE層モデルのヘッダー

BricRoboRTE_Model.cc:RTE層モデルのボディ

Cの場合 [C]

CompositionType:コンポジションのヘッダー

CompositionType.local:コンポジションのグルーコードヘッダー

EnumDataType:Enum型

StructDataType:構造体型

ClassDataType:クラス型

SenderReceiverInterface:S/R インターフェース型

ProcedureCallInterface:ProcedureCall インターフェース型

BricRoboRTE_Task.cc:RTE層タスク

BricRoboCOM_API.h:COM層 APIのヘッダー

BricRoboCOM_API.cc:COM層 APIのボディ

BricRoboRTE_API.h:RTE層 APIのヘッダー

BricRoboRTE_API.cc:RTE層 APIのボディ

BricRoboRTE_Model.h:RTE層モデルのヘッダー

BricRoboRTE_Model.cc:RTE層モデルのボディ

3. xslFilePath

string language と fileTypeで選択されたとき、使用するコード生成テンプレートへ

のパスを指定します。コード生成テンプレートは XSLファイルです。

4. filenameFormat

string 生成ファイルのファイル名パターンを指定します。{0}にファイル名の拡張

子を除いたものが入ります。

リスト 8-6 環境ファイル記述例

Page 40: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

37

<?xml version="1.0" standalone="yes"?>

<EnvironDs xmlns="http://fct.fujitsu.com/BricRoboGen/EnvironDs.xsd">

<XslFiles>

<language>C++</language>

<fileType>CompositionType</fileType>

<xslFilePath>CodeTemplate\C++\C++,CompositionType.h.xsl</xslFilePath>

<filenameFormat>{0}.h</filenameFormat>

</XslFiles>

<XslFiles>

<language>C++</language>

<fileType>EnumDataType</fileType>

<xslFilePath>CodeTemplate\C++\C++,EnumDataType.h.xsl</xslFilePath>

<filenameFormat>{0}.h</filenameFormat>

</XslFiles>

<XslFiles>

<language>C++</language>

<fileType>StructDataType</fileType>

<xslFilePath>CodeTemplate\C++\C++,StructDataType.h.xsl</xslFilePath>

<filenameFormat>{0}.h</filenameFormat>

</XslFiles>

<XslFiles>

<language>C++</language>

<fileType>ClassDataType</fileType>

<xslFilePath>CodeTemplate\C++\C++,ClassDataType.h.xsl</xslFilePath>

<filenameFormat>{0}.h</filenameFormat>

</XslFiles>

<XslFiles>

<language>C++</language>

<fileType>SenderReceiverInterface</fileType>

<xslFilePath>CodeTemplate\C++\C++,SenderReceiverInterface.h.xsl</xslFilePath>

<filenameFormat>{0}.h</filenameFormat>

</XslFiles>

<XslFiles>

<language>C++</language>

<fileType>BricRoboRTE_Task.cc</fileType>

<xslFilePath>CodeTemplate\C++\C++,BricRoboRTE_Task.cc.xsl</xslFilePath>

<filenameFormat>BricRoboRTE_Task.cc</filenameFormat>

</XslFiles>

<XslFiles>

<language>C++</language>

<fileType>BricRoboCOM_API.h</fileType>

<xslFilePath>CodeTemplate\C++\C++,BricRoboCOM_API.h.xsl</xslFilePath>

<filenameFormat>BricRoboCOM_API.h</filenameFormat>

</XslFiles>

<XslFiles>

<language>C++</language>

<fileType>BricRoboCOM_API.cc</fileType>

<xslFilePath>CodeTemplate\C++\C++,BricRoboCOM_API.cc.xsl</xslFilePath>

<filenameFormat>BricRoboCOM_API.cc</filenameFormat>

</XslFiles>

<XslFiles>

<language>C++</language>

<fileType>BricRoboRTE_API.h</fileType>

Page 41: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

38

<xslFilePath>CodeTemplate\C++\C++,BricRoboRTE_API.h.xsl</xslFilePath>

<filenameFormat>BricRoboRTE_API.h</filenameFormat>

</XslFiles>

<XslFiles>

<language>C++</language>

<fileType>BricRoboRTE_API.cc</fileType>

<xslFilePath>CodeTemplate\C++\C++,BricRoboRTE_API.cc.xsl</xslFilePath>

<filenameFormat>BricRoboRTE_API.cc</filenameFormat>

</XslFiles>

<XslFiles>

<language>C++</language>

<fileType>BricRoboRTE_Model.h</fileType>

<xslFilePath>CodeTemplate\C++\C++,BricRoboRTE_Model.h.xsl</xslFilePath>

<filenameFormat>BricRoboRTE_Model.h</filenameFormat>

</XslFiles>

</EnvironDs>

8.6 解析範囲とコード生成範囲

EAモデルに記載した情報のうち、特定の範囲を解析対象にします。範囲は EAモデルのルートパッケージ単位で指定し

ます。指定するには、BricRoboプロジェクトファイルの Packageテーブルの nameにルートパッケージ名を指定します。記

載しない範囲は解析の対象となりません。

解析対象のうち、BricRobo部品や RTE コードのコード生成する範囲を指定します。BricRoboプロジェクトファイルの

Packageテーブルの isGenerateでコード生成有無を指定します。

詳しくは表 8-4を参照してください。

8.7 コード生成の言語切替

コード生成時の言語は BricRoboプロジェクトファイルで切り替えます。詳しくは表 8-3の generateLanguage、

languageTypeを参照してください。言語と拡張子の対応関係を表 8-6に示します。

表 8-6 言語と拡張子の対応

No. 言語 拡張子 説明

1. C

.c

.h 一般的な C言語ソースファイルの拡張子です。

2.

C++

.cc

.hh

C++では文化により.cpp(Microsoft) .cc(その他)がありますが、.cc としています。なお、Visual

Studioでも.ccは C++言語ソースファイルとして認識されます。

ヘッダーファイルは.hh としています。これは BricRoboでは1つの部品から複数言語のコード

生成が可能なため、C言語の.h と明確に区別するためです。

8.8 コード生成位置

コード生成位置は次のルールにより決まります。

No. 項目 説明

1. ルートフォルダー BricRoboプロジェクトファイルの Generalテーブルの generateBaseFolderにより決定

2. サブフォルダー EAモデル上のルートパッケージをルートフォルダーとし Package階層と同じ位置

3. RTE EAモデル上で<BricRoboRTE>ステレオタイプを付けた Packageに相当する位置

Page 42: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

39

8.9 コード生成時の注意事項

8.9.1 コード生成中の EAP ファイルへの書き込み禁止

コード生成中は BricRoboプロジェクトファイルで指定した EAP ファイルへの書き込みはしないでください。タイミングによ

り情報の不整合が起こり、正しくコード生成できない可能性があります。

8.9.2 コード生成したファイルへ著作権表示を挿入する

コード生成したファイルには著作権表示が含まれていません。

XSLテンプレートに任意の文字列を記載すると、コード生成時に含めることができます。

各 XSLテンプレートにはリスト 8-7のような【注意】文字列が記載されているので、続けて著作権表示などを記載してくだ

さい。

なお、コード生成時に XSLテンプレートはコンパイルされます。間違った場所に書き込むとコンパイルエラーが発生する

ことがありますので注意してください。

リスト 8-7 著作権表示等の挿入位置

【 注意】 このファ イルは自動生成されます。 ハンド コーディ ングしないでく ださい。

Copyright(c) 2012 著作権表示

8.9.3 BricRobo コンフィグコードの生成

BricRobo コンフィグコードには、BricRobo部品の接続情報や、ConfigParamなどの初期化コードが含まれます。

BricRobo部品の内容変更に関わらず、毎回必ずコード生成します。

8.9.4 const キーワードがないコンパイラーへの対応

古い C言語規約にしか対応していないコンパイラーでは、constキーワードが無効である場合があります。コード生成時に

は ROM領域への配置を期待して、constキーワードをつけています。

constキーワードをつけないようにするには XSLテンプレートを修正してください。また、XSLテンプレートの修正が困難

な場合には開発元へご相談ください。

Page 43: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

40

9 エラー番号

BricRoboGenが出力するエラー番号を表 9-1 エラー番号一覧に示します。

なお、エラー番号は次の形式です。

エラー番号形式: エラー種別 nnnn

エラー種別: GF、GE、GW もしくは GIで始まる。GF=フォルト、GE=エラー、GW=ワーニング、GI=イン

フォメーション

nnnn: 番号

エラー種別が「フォルト」または「エラー」の場合、処理を中断します。「ワーニング」と「インフォメーション」の場合には続行

します。

表示されるメッセージの文中にパスが表示される場合があります。パスはパッケージルートを除いたパッケージや

CompositionTypeやポートの名前を「/」で連結したものです。位置を特定するために参照してください。

表 9-1 エラー番号一覧

エラー番号

表示されるメッセージ

メッセージが表示された原因

対処方法

メッセージに含まれるパラメーター

GE0001

AssemblyConnector で接続した Port[{0}]と Port[{1}]の Interfaceが一致しません。

2つの Port を AssemblyConnector で接続しましたが、Port に設定している

Interfaceの型が一致しません。

2つの Portの Interfaceの型が同じか確認してください。

{0}:Portパス {1}:Portパス

GE0004

ComponentPrototype[{0}]に Port[{1}]が見つかりません。

CompositionType にある Port が、ComponentPrototypeから削除されています。

Port を復元してください。

{0}:ComponentPrototypeパス {1}:Port名

GE0005

Port[{0}]に 2つ以上の DelegateConnector が接続されています。

1つの Portには DelegateConnector を 1本しか接続できません。

接続を見直してください。もし 2つ以上の Port を1つの Port に DelegateConnector

で接続したい場合には、中間に HUB機能を持つ ComponentPrototype を配置して

集約してください。

{0}:内側 Portパス

GE0006

CompositionType[{0}]に同じ名前の ComponentPrototype[{1}]があります。

CompositionTypeに同じ名前の ComponentPrototypeが複数存在します。コード生

成時に名前が重複するため、すべての ComponentPrototype名は違う必要がありま

す。

ComponentPrototype名を見直してください。

{0}:CompositionTypeパス {1}:ComponentPrototypeパス

GE0007

CompositionType[{0}]に同じ名前の Port[{1}]があります。

CompositionTypeに同じ名前の Portが複数存在します。コード生成時に名前が重

複するため、すべての Port名は違う必要があります。

Page 44: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

41

Port名を見直してください。

0}:CompositionTypeパス{ {1}:Portパス

GE0008

コード生成 Template[{0}]でエラーが発生しました。

[{1}]

コード生成には XSLテンプレートを使いますが、XSLテンプレート中に間違いあり

エラーが発生しました。エラー内容を 2行目に表示します。

XSLテンプレートを修正していないならば、XSLテンプレートファイルが壊れた可

能性があるので BricRoboをインストールし直してください。

XSLテンプレートを修正したならば、間違いがないか 2行目の情報を元に確認し

てください。

{0}:XSLテンプレートパス {1}:エラー詳細

GE0009

指定した言語[{0}]のコード生成 Template[{1}]が見つかりません。

コード生成に使用するテンプレートファイルが見つかりません。BricRoboプロジェク

トで指定した言語<generateLanguage>が間違っているか、テンプレートファイルが存

在しないためです。

BricRoboプロジェクトで指定している<generateLanguage>の値を確認してください。

テンプレートファイルの復元が必要な場合は、BricRoboをインストールし直してくだ

さい。

{0}:言語名 {1}:XSLテンプレートパス

GF0010

BricRobo メタモデル[CompositionType]が見つかりません。

BricRobo メタモデル[SenderRecieverInterface]が見つかりません。

BricRobo メタモデル[ProcedureCallInterface]が見つかりません。

BricRobo メタモデル[EnumDataType]が見つかりません。

BricRobo メタモデル[StructDataType]が見つかりません。

BricRobo メタモデル[ClassDataType]が見つかりません。

BricRobo メタモデル[Task]が見つかりません。

BricRobo メタモデルのうち、[]の項目が見つかりません。

BricRobo メタモデルが BricRoboモデルに含まれているか確認してください。

BricRobo メタモデルが解析対象に含まれているか BricRoboプロジェクトを確認し

てください。

GF0011

BricRoboプロジェクトで指定した EAPファイル[{0}]が読めません。

[{1}]

BricRoboプロジェクトで指定した EAPファイルを読み込む際にエラーが発生しまし

た。

EAPファイルが存在するかパスを確認してください。相対パスの場合、BricRoboプ

ロジェクトファイルがある位置をカレントとした相対になります。

{0}:EAPパス {1}:エラー詳細

GE0012

BricRoboプロジェクトで指定した Package[{0}]が見つかりません。

BricRoboプロジェクトの< Package> <name>で指定したプロジェクトルートが見つか

りません。

BricRoboモデルのプロジェクトルート名を確認してください。

{0}:パッケージ名

GE0013

Package[{0}]でエラーが発生しました。

[{1}]

Package解析中にエラーが発生しました。詳しい原因は 2行目に表示されます。

詳しい原因を参考に原因を取り除いてください。

Page 45: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

42

{0}:パッケージ名 {1}:エラー詳細

GE0014

Port[{0}]に Interfaceが指定されていません。

Port に Interfaceを定義していません。いくつか原因があります。

単に定義していない

定義しているが Interfaceが解析対象に含まれない

Portから引いた依存線が Interfaceでない Elementを指している

Port から依存線で Interfaceを定義しているか確認してください。

定義してある場合には、その Interfaceが解析対象に含まれるか確認してください。

{0}:Portパス

GE0015

ファイル[{0}]を生成できません。

[{1}]

ファイルシステムにファイルを生成しようとしてエラーが発生しました。

ファイルが生成されるフォルダーが存在するか、アクセス可能か確認してください。

ファイルが生成されるフォルダーが書き込み可能か確認してください。

同じ名前のファイルが存在し、書き込み禁止になっていないか確認してください。

{0}:ファイルパス {1}:エラー詳細

GE0017

Task[{0}]の解析でエラーが発生しました。周期と初期カウンタが 0以上の整数か

確認してください。

Taskに指定してある周期と初期カウンタの値を解析するときエラーが発生しまし

た。整数値しか指定できません。

指定値が整数値がどうか確認してください。

{0}:Taskパス

GE0019

ProcedureCallPort[{0}]は 1:N接続できません。

ProcedureCallInterface を指定した Portは 1:N接続ができません。これはコード生

成時に関数呼び出しに展開されるため、1:Nでは問題が発生するからです。

1:1の関係になるよう接続を見直してください。

1:N接続が必要な場合は HUB機能をもつ BricRobo部品を間に挿入してくださ

い。

{0}:Portパス

GE0020

DelegateConnector で接続した Port[{0}]と Port[{1}]の Interfaceが異なります。

DelegateConnector は同じ Interface を指定した Port同士を接続できます。

接続先が正しいか確認してください。

違う Interfaceの Port を接続するには Interfaceを変換する BricRobo部品を間に

挿入します。

{0}:Portパス {1}:Portパス

GW0021

BricRoboRTE ステレオタイプがついた Packageが見つからないので、BricRobo コ

ンフィグコードを生成できません。

BricRoboRTE ステレオタイプを付けた Packageに対応する位置に BricRobo コン

フィグコードを生成します。しかし、BricRobo RTEが見つからない場合には生成で

きません。

デフォルトではワーニングとして扱います。

BricRoboRTE ステレオタイプが付いているかどうかを確認してください。

BricRoboRTE ステレオタイプが付いている場合には、その Packageが解析対象に

含まれるか確認してください。

GE0026 指定言語のコード生成 Template [{0}]が環境ファイルに登録されていないか、複数

登録されています。

Page 46: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

43

環境ファイルには指定言語ごと指定言語毎にコード生成 Templateが登録されてい

ます。

環境ファイルの間違いがあります。

コード生成 Template名が言語毎に1つ登録されているか確認してください。

環境ファイルの説明は8.5 環境ファイルを参照してください。

{0}:テンプレート名

GF0028

BricRoboプロジェクト[{0}]が読めません。

[{1}]

BricRoboGenのコマンドラインで指定した BricRoboプロジェクトが読めません。詳

細は 2行目に表示します。

BricRoboプロジェクトの存在を確認してください。

{0}:BricRoboプロジェクトパス {1}:エラー詳細

GF0029

環境ファイル[{0}]が読めません。

環境ファイルの位置は BricRoboプロジェクトで指定します。指定しない場合は

BricRoboGen と同じフォルダにあるものとみなされます。

どちらの位置指定方法を使っているか確認してください。

位置を指定している場合は環境ファイルを置いているパスと指定パスが一致してい

ることを確認してください。

位置を指定していない場合には、BricRoboGenが壊れている可能性がありますの

で、再インストールをしてください。

{0}:環境ファイルパス

GE0031

TopLevel の Compositionが CompositionTypeから派生していない可能性がありま

す。

TopLevel ステレオタイプが付けられるのは CompositionTypeだけです。

TopLevel ステレオタイプを見直すか、CompositionTypeから汎化してください。

GE0032

[{0}]には 2つ以上親クラスが指定されています。

CompositionType、ClassDataType、StructDataTypeで2つ以上の親から汎化してい

ます。

BricRoboは多重継承を許していません。

設計を見直して、1つから汎化するようにしてください。

{0}:Element名

GE0034

同じ名前&引数のMethod[{0}]があります。

CompositionType、ClassDataTypeで区別が付かないMethodが 2つ以上ありま

す。

C++言語でコード生成するならば引数が異なれば別Method とみなします。

C言語でコード生成するならMethod名はユニークである必要があります。

Method名、引数を見直してください。

{0}:Methodパス

GE0035

同じ名前の ConfigParam[{0}]があります。

CompositionTypeに同じ名前の ConfigParamがあります。名前はユニークである必

要があります。

名前を見直してください。

{0}:ConfigParamパス

GE0035 同じ名前の Attribute[{0}]があります。

CompositionType、ClassDataType、StructDataType、EnumDataTypeで同じ名前の

Page 47: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

44

Attributeがあります。名前はユニークである必要があります。

名前を見直してください

{0}:Attributeパス

GE0035

同じ名前の RunnableEntity[{0}]があります。

CompositionTypeで同じ名前の RunnableEntityがあります。名前はユニークである

必要があります。

名前を見直してください。

{0}:RunnableEntityパス

GE0036

CompositionType[{0}]から Taskに依存線は引けません。

CompositionTypeから依存線を引くと、コード生成時にそのヘッダーを include しま

す。includeできるのは CompositionType、ClassDataType、StructDataType、

EnumDataTypeです。

依存線を削除してください。

{0}:CompositionTypeパス

GE0037

AssemblyConnector が正しくありません。

ComponentPrototype[{0}]と ComponentPrototype[{1}]が同じ CompositionType内

にありません。

AssemblyConnector の使い方が間違っています。Port を結線して通信できるのは、

同じ CompositionType内にある 2つの ComponentPrototypeです。

ComponentPrototypeがどの CompositionType内にあるか確認してください。

{0}:ComponentPrototypeパス {1}:ComponentPrototypeパス

GE0039

AssemblyConnector で接続した Port[{0}]と Port[{1}]の送受信方向が同じです。

AssemblyConnector は送信 Port と受信 Port を接続します。送受信が同じではいけ

ません。

接続先が正しいか確認してください。

{0}:Portパス {1}:Portパス

GE0040

DelegateConnector で接続した Port[{0}]と Port[{1}]の向きが異なります。

DelegateConnector は ComponentPrototype と CompositionTypeの2つのポートを

接続しますが、内から外(ComponentPrototype→CompositionType)、外から内

(CompositionType→ComponentPrototype)への接続であるため、Portの送受信方

向は同じです。

接続している Portの向きを確認してください。

{0}:Portパス {1}:Portパス

GE0041

RunnableEntity[{0}]にパラメーターが指定されています。

RunnableEntityにパラメーターは指定できません。

パラメーターを削除してください。

{0}:RunnableEntityパス

GE0042

{0}[{1}]の名前が CNAMEでありません。

C言語の関数、変数名に使えない文字が混じっています。CNAME(C言語の関

数、変数名として許容されている英数字や一部の記号など)でなくてはなりません。

名前を見直してください。

{0}:タイプ名 {1}:パス

GE0043

{0}[{1}]の{2}に名前がありません。

名前が必要なのについていません。

名前を付けてください。

{0}:親タイプ名 {1}:親パス {2}:タイプ名

Page 48: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

45

GE0044

{0}[{1}]の名前の前後に空白があります。

名前の前後に空白が入っています。CNAMEでなくてはなりません。

名前を見直してください。

{0}:タイプ名 {1}:パス

GE0045

{0}[{1}]を汎化で作成することはできません。

汎化して作成できないのに、汎化しています。

設計を見直してください。

{0}:タイプ名 {1}:パス

GE0046

RunnableEntity[{0}]から駆動する ComponentPrototype[{1}]へのコネクターに名前

がありません。

シーケンス図の RunnableEntityから ComponentPrototypeの RunnableEntityへ線

を引いていますが、呼び出す RunnableEntityの名前がありません。

RunnableEntityの名前を指定してください。

{0}:RunnableEntityパス {1}:ComponentPrototypeパス

GE0047

RunnableEntity[{0}]から駆動する ComponentPrototype[{1}]は

CompositionType[{2}]に属していません。

RunnableEntityから呼び出す ComponentPrototypeの RunnableEntityが呼び出せ

る位置関係にありません。親 ComponentPrototypeの RunnableEntityから呼び出せ

るのは、子 ComponentPrototypeの RunnableEntityだけです。

呼び出し先を見直してください。

{0}:RunnableEntityパス {1}:ComponentPrototypeパス

{2}:CompositionTypeパス

GE0048

Task[{0}]から呼び出す RunnableEntity[{1}]がありません。

Taskから呼び出した RunnableEntityが見つかりません。

RunnableEntity名を見直してください。

{0}:Taskパス {1}:RunnableEntity名

GE0049

Task[{0}]から呼び出す[{1}]は ComponentPrototypeでも TopLevelの

CompositionTypeでもありません。

Taskが呼び出せる RunnableEntityの位置が間違っています。Taskが呼び出せる

のは、同一レベルの ComponentPrototypeの RunnableEntityです。Taskが

TopLevel の CompositionTypeに属している場合のみ、その RunnableEntityを呼

び出すこともできます。

呼び出し先を見直してください。

{0}:Taskパス {1}:パス

GE0050

Port[{0}]に複数の Interfaceが指定されています。

Port に指定できる Interfaceは1つです。

呼び出す Interfaceを見直してください。

{0}:Portパス

GE0051

指定した言語[{0}]のコード生成 Template[{1}]が見つかりません。

環境ファイルのコード生成テンプレートに不備があります。

テンプレートの指定を見直し、不足している場合は追加してください。

{0}:言語 {1}:テンプレート名

GE0052

[{0}]のノートにコメント開始終了文字列が含まれています。

C言語、C++言語のコメント開始終了文字列に相当する/* または */ がノートに含

まれています。コード生成時にコメントが分断される可能性があります。

/* */ を使わないでください。

Page 49: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

46

{0}:ノートの位置

GE0053

[{0}]の作者にコメント開始終了文字列が含まれています。

C言語、C++言語のコメント開始終了文字列に相当する/* または */ が作者に含

まれています。コード生成時にコメントが分断される可能性があります。

/* */ を使わないでください。

{0}:作者の位置

GE0054

[{0}]のバージョンにコメント開始終了文字列が含まれています。

C言語、C++言語のコメント開始終了文字列に相当する/* または */ がバージョン

に含まれています。コード生成時にコメントが分断される可能性があります。

/* */ を使わないでください。

{0}:バージョンの位置

GE0055

Port[{0}]の多重度の下限値・上限値が一致しません。

Port の多重度の上限値と下限値に違う値が設定されています。

同じ値を設定してください。

{0}:Port パス

GE0056

Port[{0}]の多重度が数値でありません。

Port の多重度に数値以外が設定されています。

1以上の数値を設定してください。

{0}:Port パス

GE0057

Port[{0}]の多重度が 1未満です。

Port の多重度に設定した数値が1未満です。

1以上の数値を設定してください。

{0}:Port パス

GW0058

同じ名前のプロジェクトルート[{0}]が複数見つかりました。

プロジェクトファイルで指定した解析範囲で、同じ名前のプロジェクトルートが複数

みつかりました。

プロジェクトルートは全て違う名前になるように訂正してください。

{0}:プロジェクトルート名

GE0060

複数の Packageに BricRoboRTE ステレオタイプが指定されています。

最初に見つかったのは[{0}]、次に見つかったのは[{1}]です。

複数の Packageに BricRoboRTE ステレオタイプが指定されています。

BricRoboRTE ステレオタイプを指定できるのは、解析範囲内で1つだけです。1つ

だけになるように訂正してください。

{0}:Packageパス {1}: Packageパス

GE0061

複数の CompositionTypeに TopLevel ステレオタイプが指定されています。

最初に見つかったのは[{0}]、次に見つかったのは[{1}]です。

複数の CompositionTypeに TopLevel ステレオタイプが指定されています。

TopLevel ステレオタイプを指定できるのは、解析範囲内で1つだけです。1つだけ

になるように訂正してください。

{0}:CompositionTypeパス {1}:CompositionTypeパス

GE0062

Port[{0}]の Interfaceが分かりません。

ComponentPrototypeの Portの Interface指定を CompositionTypeから探しました

が、見つかりませんでした。

CompositionTypeの Port を確認してください。

Port は ComponentPrototypeだけに存在する可能性があります。または、

CompositionTypeの Portに Interfaceが指定されていない可能性があります。

Page 50: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

47

{0}:Port パス

GW0063

送信側 Port[{0}]に多重度は指定できません。

送信側 Portに多重度が指定されています。多重度を指定できるのは受信側 Port

です。

多重度の指定を削除してください。

{0}:Portパス

GE0064

EnumDataType[{0}]はMethodを持つことはできません。

EnumDataTypeにMethodが指定されています。EnumDataTypeは列挙子しか指

定できません。

Methodの指定を削除してください。

{0}:EnumDataTypeパス

GW0065

Task[{0}]は CompositionType配下にありません。

Taskは Composition配下以外に置くことはできません。

Taskの配置位置を見直してください。

{0}:Taskパス

GE0066

Task[{0}]が呼び出す RunnableEntity[{1}]が同じ CompositionTypeに属していま

せん。

Taskが RunnableEntityを呼び出しています。しかし、Taskが属する

CompositionType と RunnableEntityが属する CompositionTypeが同じではありま

せん。呼び出し関係が間違っています。

呼び出し関係を見直してください。詳しくは7.1.5項を参照してください。

{0}:Taskパス {1}:RunnableEntity名

GE0067

Task[{0}]が呼び出す RunnableEntityを含む ComponentPrototype[{1}]が同じ

CompositionTypeに属していません。

Taskが RunnableEntityを呼び出しています。しかし、Taskが属する

CompositionType と RunnableEntityが属する ComponentPrototypeが属する

CompositionTypeが同じではありません。呼び出し関係が間違っています。

呼び出し関係を見直してください。詳しくは7.1.5項を参照してください。

{0}:Taskパス {1}:CompositionTypeパス

GE0068

RunnableEntityが異なる CompositionType[{0}]と[{1}]に属しています。

ある CompositionTypeの RunnableEntityが別の CompositionTypeの

RunnableEntityを呼び出しています。同一の CompositionType内の

RunnableEntity同士しか呼び出せません。

呼び出し関係を見直してください。詳しくは7.1.5項を参照してください。

{0}:CompositionTypeパス {1}:CompositionTypeパス

GW0070

同じ名前の BricRobo部品[{0}]があります。[{1}]が最初に見つかりました。

同じ名前の BricRobo部品が複数見つかりました。

名前を変更して重ならないようにしてください。詳しくは7.4.4項を参照してください。

{0}:パス {1}:パス

GE0071

CompositionType[{0}]の RunnableEntity[{1}]の呼び出しシーケンスは定義済みで

す。

複数の RunnableEntity呼び出しシーケンス定義が見つかりました。

複数の RunnableEntityの呼び出しシーケンス定義があるので、1つにまとめてくだ

さい。

{0}:CompositionTypeパス {1}:RunnableEntity名

GW0072 CompositionType[{0}]から呼び出す RunnableEntity[{1}]は呼び出しシーケンス定

Page 51: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

48

義中でないので無視します。

RunnableEntity呼び出しシーケンス定義中でない位置に呼び出しがあります。

無視してよい呼び出しか確認してください。大抵の場合、Taskからの呼び出しやメ

ッセージ終了点からの呼び出しが不足しています。

{0}:CompositionTypeパス {1}:RunnableEntity名

GE0073

CompositionType[{0}]に RunnableEntity[{1}]は見つかりません。

RunnableEntity呼び出しシーケンス定義中で、呼び出し先に指定の

RunnableEntityがありません。

RunnableEntity名が正しいか確認してください。タイプ入力した場合、タイプミスし

た可能性があります。

{0}:CompositionTypeパス {1}:RunnableEntity名

GE0074

CompositionType[{0}]の RunnableEntity[{1}]から呼び出した RunnableEntity[{2}]

が見つかりません。

RunnableEntity呼び出しシーケンス定義中に、呼び出した RunnableEntityがありま

せん。

RunnableEntity名が正しいか確認してください。タイプ入力した場合、タイプミスし

た可能性があります。

{0}:CompositionTypeパス {1}:RunnableEntity名 {2}:RunnableEntity名

GE0075

Task[{0}]の周期が指定されていません。

Taskの周期が指定されていません。

Taskの周期を指定してください。

{0}:Taskパス

GE0076

Task[{0}]の初期カウンタが指定されていません。

Taskの初期カウンタが指定されていません。

Taskの初期カウンタを指定してください。

{0}:Taskパス

GE0077

Task[{0}]の周期が 0未満です。

Taskの周期が 0未満です。

Taskの周期に 0以上の値を指定してください。

{0}:Taskパス

GE0078

Task[{0}]の初期カウンタが 0未満です。

Taskの初期カウンタが 0未満です。

Taskの初期カウンタに 0以上の値を指定してください。

{0}:Taskパス

GW0079

TopLevel ステレオタイプがついた CompositionTypeが見つからないので、

BricRobo コンフィグコードを生成できません。

TopLevel ステレオタイプがついた CompositionTypeは最上位の BricRobo部品で

す。この部品をインスタンス化する際に必要な BricRobo コンフィグコードを生成しま

す。

しかし、この部品を見つけることができなかったので、BricRobo コンフィグコードは

生成できません。

最上位とする BricRobo部品に TopLevel ステレオタイプがついているか確認してく

ださい。

GW0080 同じ名前の ConfigParamが見つかりました。最初に見つかったのは[{0}]です。

同じ名前の ConfigParamが CompositionTypeにあります。1つの CompositionType

Page 52: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

49

には同じ名前の ConfigParamを複数含むことはできません。

このワーニングは、CompositionTypeが汎化して作成したとき、派生元

CompositionTypeに同じ名前の ConfigParamが存在するときに発生しますが、現

在、CompositionTypeを汎化して作成することを禁止しているので発生しません。

{0}:ConfigParamパス

GI0082

Method[{0}]の可視性が正しくありません。publicに修正しました。

コード生成の言語に対し、Methodの可視性がサポートされていない値になってい

ます。

C++言語のMethodに指定できるのは public|private|protected です。

{0}:Methodパス

GE0083

ConfigParam[{0}]の可視性が正しくありません。

ConfigParamの可視性が間違っています。publicでなければなりません。

可視性を修正してください。

{0}:ConfigParamパス

GE0084

ConfigParam[{0}]の Staticが正しくありません。

ConfigParamの Staticが間違っています。OFFでなければなりません。

Staticを OFFに修正してください。

{0}:ConfigParamパス

GE0085

ConfigParam[{0}]の定数が正しくありません。

ConfigParamの定数が間違っています。OFFでなければなりません。

定数を OFFに修正してください。

{0}:ConfigParamパス

GE0086

RunnableEntity[{0}]の戻り値の型が正しくありません。

RunnableEntityの戻り値の型が間違っています。voidでなければなりません。

戻り値の型を voidに修正してください。

{0}:RunnableEntityパス

GE0087

RunnableEntity[{0}]の可視性が正しくありません。

RunnableEntityの可視性が間違っています。publicでなければなりません。

可視性を publicに修正してください。

{0}:RunnableEntityパス

GE0088

RunnableEntity[{0}]の抽象が正しくありません。

RunnableEntityの抽象が間違っています。OFFでなければなりません。

抽象を OFFに修正してください。

{0}:RunnableEntityパス

GE0089

RunnableEntity[{0}]の Staticが正しくありません。

RunnableEntityの Staticが間違っています。OFFでなければなりません。

Staticを OFFに修正してください。

{0}:RunnableEntityパス

GE0090

RunnableEntity[{0}]の Pureが正しくありません。

RunnableEntityの Pureが間違っています。OFFでなければなりません。

Pure を OFFに修正してください。

{0}:RunnableEntityパス

GE0091

コマンドラインに無効なオプション指定[{0}]があります。

コマンドラインに指定できないオプションがあります。

オプションを見直してください。

Page 53: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

50

{0}:オプション名

GE0092

ComponentPrototype[{0}]に同じ名前の Port[{1}]があります。

CompositionTypeに同じ名前の Portが 2つ以上あります。

CompositionType内で Portの名前はユニークでなければなりません。Port名を見

直してください。

{0}:ComponentPrototypeパス {1}:Port名

GE0093

[{0}]から[{1}]への接続[{2}]はできません。

接続できない関係があり、コード生成ができません。

接続を見直してください。

{0}:パス {1}:パス {2}:接続線種別

GW0094

[{0}]から[{1}]への接続[{2}]は無視されます。

接続を無視して、コード生成ができます。

ワーニングを止めるには、接続を見直してください。

{0}:パス {1}:パス {2}:接続線種別

GE0095

[{0}]の中に[{1}]を定義することはできません。

定義できない階層関係があり、コード生成ができません。

階層を見直してください。

{0}:パス {1}:パス

GW0096

[{0}]の中の[{1}]は無視します。

階層を無視して、コード生成ができます。

ワーニングを止めるには、階層を見直してください。

{0}:パス {1}:パス

GW0097

[{0}]から[{1}]への接続[{2}]は方向が単一でないので無視します。

関連線で Attributeを定義する場合、矢印の向きを一方向ではありません。

方向を「ソース→ターゲット」または「ターゲット→ソース」としてください。

{0}:パス パス

GE0098

ComponentPrototype[{0}]に対する CompositionTypeが見つかりません。

ComponentPrototypeの元になる CompositionTypeが見つかりません。

CompositionTypeが解析範囲に入っているか確認してください。

{0}:ComponentPrototypeパス

GE0099

DelegateConnector で接続した Port[{0}]と Port[{1}]の階層が合いません。

DelegateConnector で接続した 2つの Portが Delegateの関係でありません。

CompositionTypeの Port と ComponentPrototypeの Port の関係を見直してくださ

い。

{0}:Portパス {1}:Portパス

GE0100

Port[{0}]と指定した Interface[{1}]の組合せが正しくありません。

Port の種類と Interfaceの種類の組合せが正しくありません。

SenderReceiverInterface と組合せられるのは、PPort、PPortEv、RPort、RPortEvで

す。

ProcedureCallInterface と組み合わせられるのは、PPortPc、RPortPcです。

組合せを見直してください。

{0}:Portパス {1}:Interfaceパス

GE0101

BricRoboプロジェクトで指定した EAモデルファイル[{0}]に書けません。

[{1}]

EAモデルファイルが開けません。

EAモデルファイルのパスが作成可能で、書き込み可能か確認してください。

Page 54: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

51

{0}EAモデルパス {1}エラー詳細

GE0102

BricRoboプロジェクトで指定した中間ファイル[{0}]に書けません。

[{1}]

中間ファイルが書けません。

中間ファイルのパスが作成可能で、書き込み可能か確認してください。

{0}:中間ファイルパス {1}:エラー詳細

GE0103

AssemblyConnector で接続した Port[{0}]と Port[{1}]の通信方式の組合せが正しく

ありません。

Port の通信方式の組合せは PPort→RPort、PPortEv→RPortEv、PPortPc→

RPortPcのいずれかでなければなりません。

組合せを見直してください。

{0}:Portパス {1}:Portパス

GE0104

DelegateConnectorで接続した Port[{0}]と Port[{1}]の通信方式の組合せが正しく

ありません。

Port の通信方式の組合せは PPort→PPort、RPort→RPort、PPortEv→PPortEv、

RPortEv→RPortEv、PPortPc→PPortPc、RPortPc→RPortPcのいずれかでなければ

なりません。

組合せを見直してください。

{0}:Portパス {1}:Portパス

GE0105

BricRoboプロジェクトで指定した BricRoboモデルファイル[{0}]に書けません。

[{1}]

BricRoboモデルファイルが書けません。

BricRoboモデルファイルのパスが作成可能で、書き込み可能か確認してください。

{0}: BricRoboモデルファイルパス {1}:エラー詳細

GE0106

Task[{0}]から呼び出す CompositionType[{1}]へのコネクターに名前がありませ

ん。

Taskから CompositionTypeへ引いたシーケンスに名前がありません。

RunnableEntity名を指定してください。

{0}:Taskパス {1}:CompositionTypeパス

GE0107

Task[{0}]から呼び出す ComponentPrototype[{1}]へのコネクターに名前がありませ

ん。

Taskから ComponentPrototypeへ引いたシーケンスに名前がありません。

RunnableEntity名を指定してください。

{0}:Taskパス {1}:ComponentPrototypeパス

GE0108

フォルダ[{0}]を生成できません。

[{1}]

フォルダの作成に失敗しました。

フォルダパスが正しいか、アクセス権があるか確認してください。

{0}:フォルダパス {1}:エラー詳細

GE0109

同じ名前のTask[{0}]があります。

1つの CompositionTypeに同じ名前の Taskが存在します。

Task名は CompositionType内でユニークである必要があります。

名前を見直してください。

{0}:Taskパス

GE0110 Attribute[{0}]の多重度の上下限値に違いがあります。

Attributeの上限値と下限値に違いがあり、多重度の指定が間違っています。

Page 55: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

52

上限値と下限値を同じにしてください。

{0}:Attributeパス

GF9996

ライセンスの機能制限に達したため処理を中断しました。

機能制限のあるライセンスで実行中に、機能制限に達したため処理を中断しまし

た。

機能制限が掛かったライセンスがあります。機能制限の内容はライセンスやプログラ

ムにより異なります。詳しくはライセンス・プログラムの説明を参照してください。

GF9997

ライセンスの有効期限が切れました。新しいライセンスの入手は

http://jp.fujitsu.com/group/fct/services/bricrobo/ にアクセスしてください。

ライセンスの有効期限が切れたので、プログラムは動作しません。

新しいライセンスを入手してください。

GF9998

プログラムの有効期限が切れました。新しいプログラムの入手は

http://jp.fujitsu.com/group/fct/services/bricrobo/ にアクセスしてください。

プログラムの有効期限が切れたので、プログラムは動作しません。暫定プログラムに

は動作の有効期限が設定されている場合があります。

新しいプログラムを入手してください。

GF9999

<メッセージは固定ではありません>

本エラーは予期しない障害が発生した場合に表示されます。

開発元までご連絡をお願いします。

Page 56: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

53

10 BricRobo 部品実装

BricRobo部品から利用可能な RTE APIを表 10-1に示します。

表 10-1 RTE API一覧

No. 分類 API名 機能 同期/非同期 サポート

1.

S/R通信

(Send Receive)

RTE_Write データ送信 同期 ○

2. RTE_Read データ受信 同期 ○

3. RTE_Send イベント送信 同期 ○

4. RTE_Receive イベント受信 同期 ○

5. RTE_Feedback イベント受信確認 同期 -

6. P/C通信

(Procedure Call)

RTE_ProcedureCal

l プロシージャ呼び出し 同期 ○

7. RTE_Procedure 呼び出されるプロシージャ 同期 ○

8. C/S通信

(Client Server)

RTE_Call サーバ呼び出し 同期/非同期 -

9. RTE_Result サーバ呼び出し結果取得 同期/非同期 -

10. 排他制御

RTE_Enter 排他 同期 -

11. RTE_Exit 排他復帰 同期 -

12. ライフサイクル

RTE_Bootup システムスタート 同期 -

13. RTE_Shutdown システム停止 同期 -

個々の APIについて解説します。<p>はポート名を示します。

各 APIの復帰値において、グレーに塗りつぶされている値は返しません。

Page 57: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

54

10.1 RTE_Write

文法 Std_ReturnType RTE_Write_<p>(data )

入力パラメータ

ー Data 送信するデータ

出力パラメータ

ー - -

説明 データを送信する。イベント送信ではない。

復帰値

RTE_E_OK 送信成功

RTE_E_INVALID -

RTE_E_MAX_AGE_EXCEEDED 鮮度が古い(未サポート)

RTE_E_NO_DATA -

RTE_E_TIMEOUT -

RTE_E_LOST_DATA -

RTE_E_LIMIT -

RTE_E_NOT_CONNECTED ポートが接続されていない

Page 58: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

55

10.2 RTE_Read

文法 Std_ReturnType RTE_Read_<p>(data )

入力パラメータ

ー - -

出力パラメータ

ー Data 受信するデータ

説明 データを受信する。イベント受信ではない。データ受信回数が 1回でも複数回読み取ることが可能。

復帰値

RTE_E_OK 受信成功

RTE_E_INVALID -

RTE_E_MAX_AGE_EXCEEDED 鮮度が古い(未サポート)

RTE_E_NO_DATA データを受信していない

RTE_E_TIMEOUT 指定時間内にデータを受信したかった(未サポート)

RTE_E_LOST_DATA 受信したが Queueから溢れたデータがある(未サポート)

RTE_E_LIMIT -

RTE_E_NOT_CONNECTED ポートが接続されていない

Page 59: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

56

10.3 RTE_Send

文法 Std_ReturnType RTE_Send_<p> (data )

入力パラメータ

ー Data 送信するデータ

出力パラメータ

ー - -

説明 データを送信する。送信はイベント送信であり 1回だけ送信される。

復帰値

RTE_E_OK 送信成功

RTE_E_INVALID -

RTE_E_MAX_AGE_EXCEEDED 鮮度が古い(未サポート)

RTE_E_NO_DATA -

RTE_E_TIMEOUT -

RTE_E_LOST_DATA -

RTE_E_LIMIT 送信成功。ただし、Queueから一番古いデータを削除した。

RTE_E_NOT_CONNECTED ポートが接続されていない

Page 60: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

57

10.4 RTE_Receive

文法 Std_ReturnType RTE_Receive_<p> (data )

入力パラメータ

ー - -

出力パラメータ

ー Data 受信するデータ

説明 データを受信する。イベント受信であり受信したデータを読み取った後にデータ受信がない場合、次回

のデータ受信はデータなしとなる。

復帰値

RTE_E_OK 受信成功

RTE_E_INVALID -

RTE_E_MAX_AGE_EXCEEDED 鮮度が古い(未サポート)

RTE_E_NO_DATA データを受信していない

RTE_E_TIMEOUT 指定時間内にデータを受信したかった(未サポート)

RTE_E_LOST_DATA

受信したが Queueから溢れたデータがある

(イベント受信で QueueLength>0の場合サポート)

溢れたデータがある印は、データ受信すると消える。

RTE_E_LIMIT -

RTE_E_NOT_CONNECTED ポートが接続されていない

Page 61: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

58

10.5 RTE_ProcedureCall

文法 Std_ReturnType RTE_ProcedureCall_<p> (arg )

入力パラメータ

ー arg 送信するデータ

出力パラメータ

ー arg 受信するデータ

説明

データを引数としてプロシージャを呼び出し、結果も引数で受け取る。パラメーターargは入出力の区

別なく参照としてプロシージャに渡される。

復帰値はプロシージャが決定する。

復帰値

RTE_E_OK プロシージャ呼び出し成功

RTE_E_INVALID プロシージャ呼び出し失敗

RTE_E_MAX_AGE_EXCEEDED 鮮度が古い(未サポート)

RTE_E_NO_DATA データを受信していない

RTE_E_TIMEOUT 指定時間内にデータを受信したかった(未サポート)

RTE_E_LOST_DATA

受信したが Queueから溢れたデータがある

(イベント受信で QueueLength>0の場合サポート)

溢れたデータがある印は、データ受信すると消える。

RTE_E_LIMIT -

RTE_E_NOT_CONNECTED ポートが接続されていない

Page 62: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

59

10.6 RTE_Procedure

文法 Std_ReturnType RTE_Procedure_<p> (arg )

入力パラメータ

ー arg 送信するデータ

出力パラメータ

ー arg 受信するデータ

説明

呼び出し側から呼び出されるプロシージャ。その他の RTE API と異なり、ユーザーが API本体を実装

する(他の APIはコード生成されるので利用するのみ)。

パラメーターargは入出力の区別なく参照としてプロシージャに渡される。argの内容を変更すると、呼

び出し側に変更内容が返る。

復帰値はプロシージャが決定する。通常は RTE_E_OKを返す。

プロシージャは BricRobo部品の Bodyコードにて実装しなくてはならない。実装例を以下に示す。

[C++]

Std_ReturnType Block::RTE_Procedure_port1( PcIF& arg)

{

int x = arg.x;

int y = x + 1;

arg.y = y;

return RTE_E_OK;

}

[C]

Std_ReturnType RTE_Procedure_Port1(THIS, PcIF* arg)

{

int x = arg->x;

int y = x + 1;

arg->y = y;

return RTE_E_OK;

}

復帰値

RTE_E_OK プロシージャ呼び出し成功

RTE_E_INVALID プロシージャ呼び出し失敗

RTE_E_MAX_AGE_EXCEEDED 鮮度が古い(未サポート)

RTE_E_NO_DATA データを受信していない

RTE_E_TIMEOUT 指定時間内にデータを受信したかった(未サポート)

RTE_E_LOST_DATA

受信したが Queueから溢れたデータがある

(イベント受信で QueueLength>0の場合サポート)

溢れたデータがある印は、データ受信すると消える。

RTE_E_LIMIT -

RTE_E_NOT_CONNECTED

ポートが接続されていない。

RTEがポート接続を判定して決定するので、通常、プロシージ

ャはこの値を帰さない。

10.7 注意

10.7.1 RTE API のパラメーターパラメーター[C]

C言語コード生成において、RTE APIに渡すパラメーターパラメーターは受信時でも変数のアドレスではなく、変数自身

を指定します。これは内部のマクロでアドレスに変換されるためです。

例:

SRInterface IF1;

PCInterface IF2;

Page 63: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

60

RTE Read_inPort(IF1); //&IF1ではありません

RTE_Receive_inPort(IF1); //&IF1ではありません

RTE_ProcedureCall(IF2); //&IF2 ではありません

10.7.2 C 言語コード生成時の.local.h の使い方

C言語でコード生成すると、BricRobo部品ヘッダーファイル(*.h)以外に BricRobo部品.local.hヘッダーファイル

(*.local.h)が生成されます。BricRobo部品(*.c)の実装では、先にプリコンパイルヘッダーを、次に BricRobo部品.local.h

ヘッダーファイルをインクルードしてください。インクルード関係を図 10-1に示します。また、BricRobo部品の名前が

Blockの場合の実装例をリスト 10-1に示します。

<<*.c>>BricRobo部品

<<プリコンパイルヘッダ...s t da fx .h

<<*.local.h>>BricRobo部品.loca l .h

<<*.h>>BricRobo部品ヘッダーファイル

先にinclude

後にinclude

<<include>>

<<include>>

<<include>>

図 10-1 C言語コード生成時のインクルード関係

リスト 10-1 C言語コード生成時の BricRobo部品(Block.c)の実装例

#include “stdafx.h”

#incoude “Block.local.h”

Block_ConfigParam(THIS, param1)

{

Page 64: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

61

11 コンパイル

11.1 フォルダー構成

コンパイル作業を始めるにあたり、BricRoboGenで生成したコードは表 11-1に示すフォルダー構成になっていることを前

提としています。サンプル提供している BricRoboプロジェクトファイルに準拠すれば、このようなフォルダー構成になりま

す。ここに、「固定」は BricRoboがあらかじめ用意した固定ファイル、「自動生成」は BricRoboが生成するコードです。「ハ

ンドコード」部分は製品の必要に応じて適宜変更、作成してください。

なお、コード生成テンプレートを編集すれば BricRoboCOM・BricRoboRTEに含まれるヘッダーファイルへ相対的な

#include文を変更してコンパイルのインクルード参照することができます。

表 11-1 コンパイル時のフォルダー構成

No.

フォルダー/ファイル 説明

固定

ハンドコード

自動生成

1. BricRoboCO

M

COM層に関するファイル群 ○

2. BricRoboCOM.h COM層 APIマクロなど ○

3. BricRoboRTE RTE層に関するファイル群 ○

4.

[C]

BricRoboController.h

BricRoboController_.c

[C++]

BricRoboController.hh

BricRoboController.cc

RTEのコントローラーに関する定義とコード。RTEを動

作させるために必要。 ○

5. [C]

BricRoboRTE.h

[C++]

BricRoboRTE.hh

RTE層に関する定義(RTE層 APIの型など) ○

6. [C]

BricRoboTask.hh

BricRoboTask_.c

[C++]

BricRoboTask.h

BricRoboTask.cc

RTEのタスクに関する定義とコード。 ○

7. [C++]

main.cc

main関数を持つプラットフォームでのサンプルコード。

そのまま使用してもよいし、参考にしても良い。

8. [C]

osekMain_.c

[C++]

osekMain.cc

nxtOSEKの場合のサンプルコード。

そのまま使用してもよいし、参考にしても良い。

(nxtOSEKはオープンソースの LEGO MINDSTORMS

NXT用開発/実行環境です)

9.

<ライブラリ>

BricRobo部品の*.hヘッ

ダー

[C]

BricRobo部品の local.h

グルーコードヘッダー

[C/C++]

BricRobo部品の Bodyコ

ード

BricRobo部品を使うだけで、コード生成の対象にしな

いものを配置する。

○ ○

10. <製品> 開発製品を配置する。

Page 65: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

62

11.

BricRoboCOM_API.h

[C]

BricRoboCOM_API_.c

[C++]

BricRoboCOM_API.cc

COM層 API とバッファーに関する定義とコード。

自動生成される。

12. BricRoboRTE_API.h

[C]

BricRoboRTE_API_.c

[C++]

BricRoboRTE_API.cc

RTE層 APIに関する定義とコード

自動生成される。

13. BricRoboRTE_Model.h

[C]

BricRoboRTE_Model_.c

[C++]

BricRoboRTE_Model.cc

開発製品のモデルに関する定義とコード。

自動生成される。

14. [C]

BricRoboRTE_Task_.c

[C++]

BricRoboRTE_Task.cc

開発製品のモデルを駆動するタスクに関するコード。

自動生成される。

15. BricRobo部品のヘッダー

と Bodyコード 開発製品と構成する部品を配置する。

○ ○

11.2 プリコンパイルヘッダーの利用

生成したソースコードにはプリコンパイルヘッダー(stdafx.h)がインクルードされています。

プリコンパイルヘッダーのファイル名を変更するには、BricRoboプロジェクトで指定します。

プリコンパイルヘッダーのインクルードをなくすことはできません。プリコンパイルヘッダーを使用しないときは、空のプリコ

ンパイルヘッダーを用意してください。

Page 66: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

63

11.3 プラットフォームに応じたカスタマイズ

BricRoboでは BricRobo RTEを駆動する main関数や組込み用 API(nxtOSEK用)が用意されています。そのまま使うこ

ともできますが、環境や要件に合わせてカスタマイズ可能です。

表 11-2 BricRobo RTE API解説

No. API 言語 説明

1. void BricRoboController::Init(void) C++ BricRobo RTE全体を初期化します。

実行する前に必ず 1回だけ呼び出してください。 2. void BricRoboController_Init(void) C

3. void BricRoboController::Run(void) C++ 1ms周期で BricRobo RTEを駆動します。内部では

OSの Sleep関数を用いて 1msの待ち時間を作ってい

ます。正確な周期で駆動する場合には、正確な周期で

Elapseを呼び出してください。

4. void BricRoboController_Run(void) C

5. void BricRoboController::Elapsed(void) C++ 1周期分の駆動を行います。1周期は、BricRoboの

Taskの Elapseの 1刻みに相当します。 6. void BricRoboController_Elapsed(void) C

11.3.1 main.cc [C++]、main_.c[C] 解説

main 関数からプログラムが開始される場合に用いる main.cc[C++] 、 main_.c[C]の解説を表 11-3、表 11-4に示します。

表 11-3 main.cc解説

No. ソースコード 説明

1. #ifndef WIN32

//Windowsでないならmain関数形式

使用するコンパイラーに合わせてmain関数形式を選択してくださ

い。適切なものがない場合にはカスタマイズしてください。

2. int main(int argc,char** argv)

3. #else

4. int _tmain(int argc, _TCHAR*

argv[])

5. #endif

6. {

7. BricRoboController ctrl; BricRoboControllerがすべての始まりです。BricRoboController

はBricRobo RTEを駆動します。

8. ctrl.Init(); 初期化は絶対に必要です。初期化では以下のことを実施します。

RTE層の通信とCOM層の通信の結合

RTE層のConfigParam呼び出し

9. ctrl.Run(); BricRoboControllerの定期周期呼び出し(1ms単位)を実施しま

す。正確な定期周期が必要な場合にはRun関数を使わずにctrl.

Elapsed関数を定期周期で呼び出す実装をしてください。

10. return 0;

11. }

表 11-4 main_.c解説

No. ソースコード 説明

1. #ifndef WIN32 使用するコンパイラーに合わせてmain関数形式を選択してくださ

い。適切なものがない場合にはカスタマイズしてください。

2. int main(int argc,char** argv)

3. #else

4. int _tmain(int argc, _TCHAR*

argv[]) 5.

6. #endif

Page 67: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

64

7. {

8. BricRoboController_Init(); 初期化を行います。初期化では以下のことを実施します。

RTE層のConfigParam呼び出し

9. BricRoboController_Run();

定期周期呼び出し(1ms単位)を実施します。正確な定期周期が必

要な場合にはRun関数を使わずにBricRoboController_Elapsed

関数を定期周期で呼び出す実装をしてください。

10. return 0;

11. }

11.3.2 osekMain.cc [C++]、osekMain_.c[C] 解説

MindStormの nxtOSEKで利用する osekMain.cc [C++]、osekMain_.c [C]の解説を表 11-5、表 11-6に示します。

表 11-5 osekMain.cc解説

No. ソースコード 説明

1. #include "BricRoboController.h" BricRoboControllerを使用するための宣言

2. extern "C" { OSEK関係は C言語実装のため

3. #include "kernel.h" nxtOSEKのために必要

4. #include "kernel_id.h"

5. #include "ecrobot_interface.h"

6. DeclareCounter(SysTimerCnt); SystemTimerCntを宣言

7. DeclareTask(Task1); Task1を宣言

8. BricRoboController ctrl; BricRoboControllerのインスタンス確保

9. void ecrobot_device_initialize() nxtOSEK起動時に BricRoboControllerの

初期化を実施 10. {

11. ctrl.Init();

12. }

13. void ecrobot_device_terminate() nxtOSEK終了時に実施することはない。

14. {

15. }

16. void user_1ms_isr_type2(void) nxtOSEKのシステムを進めるための Tick

カウント実施 17. {

18. StatusType ercd;

19. ercd = SignalCounter( SysTimerCnt );

20. if( ercd != E_OK ){

21. ShutdownOS( ercd );

22. }

23. }

24. TASK(Task1) 1ms周期で Task1が起動されるので

BricRoboControllerの 1Tickを駆動し

Task1を停止

25. {

26. ctrl.Elapsed();

27. TerminateTask();

28. }

29. };

Page 68: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

65

表 11-6 osekMain_.c解説

No. ソースコード 説明

1. #include "BricRoboController.h" BricRoboControllerを使用するための宣言

2. extern "C" { OSEK関係は C言語実装のため

3. #include "kernel.h" nxtOSEKのために必要

4. #include "kernel_id.h"

5. #include "ecrobot_interface.h"

6. DeclareCounter(SysTimerCnt); SystemTimerCntを宣言

7. DeclareTask(Task1); Task1を宣言

8. void ecrobot_device_initialize() nxtOSEK起動に BricRoboControllerの初

期化を実施 9. {

10. BricRoboController_Init ();

11. }

12. void ecrobot_device_terminate() nxtOSEK終了時に実施することはない。

13. {

14. }

15. void user_1ms_isr_type2(void) nxtOSEKのシステムを進めるための Tick

カウント実施 16. {

17. StatusType ercd;

18. ercd = SignalCounter( SysTimerCnt );

19. if( ercd != E_OK ){

20. ShutdownOS( ercd );

21. }

22. }

23. TASK(Task1) 1ms周期で Task1が起動されるので

BricRoboControllerの 1Tickを駆動し

Task1を停止

24. {

25. BricRoboController_Elapsed ();

26. TerminateTask();

27. }

28. };

Page 69: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

66

12 使用上の注意

12.1 メモリ消費量

部品間の依存度を下げるため、部品はポートを介して接続します。ポートには COM層に内部バッファーが割り当てられ

ます。よって受信ポートの数に比例してメモリ消費量が多くなる傾向があります。メモリ消費量に関係する要因を表 12-1

消費量に関係するに示します。

表 12-1 消費量に関係する要因

No. 要因 説明

1. 受信ポート数

受信ポート1つにつき、Interface型バッファー、受信状態を記憶するバッファーが割り当てられる。

よって受信ポート数が増えるとメモリ消費量も比例して増える。

2.

ポート数

送信または受信ポート1つにつき、部品内部にポートアクセス関数が増える。ポートアクセス関数

は関数の実体に加えて高速化のための COM層バッファーへの参照を保持する[C++]。よってポ

ート数が増えるとメモリ消費量も比例して増える。

3. 部品数

設計した部品をインスタンス化して利用する際、インスタンス数に応じてメモリ消費量は比例して増

える。

Page 70: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

67

12.2 入れ子構造部品の設計

BricRobo部品の中にさらに BricRobo部品が入っている入れ子構造の部品を設計する場合の注意点を図 12-1エラー!

参照元が見つかりません。に示します。

外側の部品 Bに対し、内側の部品 C1・D1が入れ子構造になっている部分の説明です。

以下、特定の Portを指し示すために「部品名.Port名」の形式で表記します。

部品 B.in、部品 B.inEv、部品 B.inEvQの 3つの Portは、それぞれ同じ in・inEv・inEvQ特性の Portである C1.in2、

C1.inEv2、D1.nEvQ2を 1:1で接続する必要があります。内側の部品の Portが外側の部品に透過的に見える必要がある

からです。この接続を Delegate接続といいます。

Delegate接続は1:1でなくてはならないので、部品 Eの接続 4・接続 5は間違った接続です。

部品 B.in、部品 B.inEv、部品 B.inEvQは部品 Bのデレゲートポートです。

clas s 入れ子構造部品の設計

CompositionType部品A

▲out

▲outEv

CompositionType部品B

Λin

ΛinEv

Λ inEvQ [5]

SenderRecieverInterfaceインタフェース

CompositionType部品C

Λ in2

Λ inEv2

C1 :部品C

Λ inEv2

Λ in2

CompositionType部品D

ΛinEvQ2 [5]

D1 :部品D

Λ inEvQ2[5]CompositionType

部品E

Λ

in3C2 :部品C

Λ inEv2

Λin2

C4 :部品C

ΛinEv2

Λin2

Delegate接続は内側ポートと外側ポート

を1:1で接続しなくてはならない。

よって、この接続はNG。

接続3

接続2

接続1

接続4

接続5

図 12-1 入れ子構造の部品設計時の注意点

Page 71: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

68

12.3 通信が高速化されるポート接続の条件について [C++]

コード生成言語が C++の場合において、ポート接続が特定のある条件を満たす場合、ポートから COM層の COMバッフ

ァーをアクセスするルートが最適化され、ポートアクセス速度が向上します(参考:およそ 3 倍)。原理を図 12-2に示します。

object 通信高速化の原理

部品

<<RTE層>>ポートアクセス関数

ポート

<<COM層>>COMバッファアクセス関数

<<COM層>>COMバッファ

複数のCOMバッファにアクセスする必要がある場合に生成される。

Queueを持つCOMバッファにアクセスする必要がある場合に生成される。

COMバッファ1つにつきWrite,Read,Send,Recieveの4つのアクセス関数が生成される。

ただし、マクロ定義のため、利用しないアクセス関数はメモリ消費量に影響しない。

Interfaceの値と状態を保持するメモリ領域が確保される。

単純なポート接続のときに

生成されるルート

このとき、ポートアクセス

関数は生成されない。

COMバッファアクセス関数

を使わず直にCOMバッ

ファを読み書きする。

呼び出し

呼び出し

読み書き

読み書き

図 12-2 通信高速化の原理

高速化されない場合の要因を表 12-2 通信が高速化されないに示します。これら要因がポート間の接続に含まれる場合、

通信は高速化されません。

表 12-2 通信が高速化されない要因

No. 高速化されない要因 説明

1. C言語 コード生成言語が C言語である。

2. 1:N通信

複数の受信ポートへの同時データ送信は、アクセスポート関数を使って実現している

ため、送信ポートが複数になると、高速化されることはない。

3. Queue付き受信ポート

Queue付き受信ポートは COMバッファーを Queue構造とすることで実現しているた

め、COMバッファーアクセス関数を必ず利用する。よって、高速化されることはない。

4. ProcedureCall

高速化されるインターフェースは SenderReceiver インターフェースだけである。

ProcedureCall インターフェースは高速化されない。

通信が高速化されないポート接続例を図 12-3エラー! 参照元が見つかりません。に示します。

Page 72: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

69

▲outEv

▲out

●call

A1 :部品A

▲outEv

▲out

●call Λ inEvQ[5]

Λ inEv

Λ in

○ pc

B1 :部品B

Λ inEvQ[5]

Λ inEv

Λ in

○ pc

▲outEv

▲out

A2_2 :部品A

▲outEv

▲outΛ inEvQ[5]

Λ inEv

Λ in

B2 :部品B

Λ inEvQ[5]

Λ inEv

Λ in▲outEv

▲out

A2_1 :部品A

▲outEv

▲out1:N通信は高速化されない

受信ポートがQueue付きな

ら高速化されない

未接続ポートは高速化さ

れない

ProcedureCallは高速化さ

れない

接続2

<<高速>>

接続6

接続5

接続1

<<高速>>

接続4

接続7

図 12-3 通信が高速化されないポート接続例

コード生成により高速化されないものと、高速化されたものを比較すると、メモリ消費量の傾向が変化します。傾向を表

12-3に示します。このことから、ROM消費より RAM消費が大きなコストを生む場合には、高速化が適用されるモデルを利

用しない方がよい場合があります。(注意:高速化可能なモデルは必ず高速化されます。)

表 12-3 高速化コード生成のメモリ消費量傾向

No. 項目 説明

1. ROM消費量 ポートアクセス関数の減少により 67%に減少する。

2. RAM消費量

高速化前のコード生成パターンに比べて 231%に増加する。これは部品のポート毎に

COMバッファーへの参照が必要になるからである。

3. メモリ全体消費量 ROM+RAMの合計消費量は 97%に減少する。

Page 73: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

70

13 QA

13.1 BricRobo 部品のコードが生成されない

BricRobo部品のコード生成がされるには、表 13-1に示す条件が満たされる必要があります。すべての条件を満たさない

とコード生成できません。

表 13-1 BricRobo部品コード生成条件

No. 対象 説明

1.

BricRoboプロジェクトファイル

BricRobo部品が Packageテーブルの nameで指定したルートパッケージ

配下にある

Packageテーブルの isGenerateが trueに設定されている

2. BricRobo部品

BricRobo部品が BricRobo メタモデルの部品から汎化している。もしくは

BricRobo部品から汎化している

13.2 Port 関数が NULL になる

CompositionTypeに定義してある Portを ComponentPrototype(インスタンス化したもの)から削除した場合、その Portに

対応する Port関数は設定されません。よって NULL となります。

【例】

図 13-1に示すように BricRobo部品(Lamp)を定義し、図 13-2に示すように Lampを利用した場合、setLabelポートは使

わないため非表示(図から消している)としているだけでポートは削除されていないため、正しい使い方です。

これに対して、図 13-3に示すように Lampを利用した際に、BricRobo部品定義にある setLabelポートを削除すると、

Lamp部品の内部から setLabelポートにアクセスすると NULL関数にアクセスしてメモリアクセスエラーとなります。(C++

言語の場合)

図 13-1 BricRobo部品定義

図 13-2 BricRobo部品の正しい利用

Page 74: BricRobo V1.5 マニュアル

BricRobo V1.5 マニュアル bricrobo_man_001_005_001R3

71

図 13-3 BricRobo部品の間違った利用

13.3 最小の CompositionType

通常、CompositionType は Port、RunnableEntity を持ち、外部とデータ通信をしたり、外部から駆動されたりします。しかし、

CompositionTypeの最小要件は、BricRobo メタモデルの CompositionTypeから派生していることです。よって、Port、

RunnableEntityを持たない CompositionTypeは存在できます。

このような CompositionTypeの用途としては、ComfigParamを持ち、BricRoboRTEから ConfigParamの値を設定されるタ

イミングで、何らかの初期化処理をすることがあります。