Main Content

Simulink 環境外での統合コードの作成

生成コードを外部ビルド プロセスで呼び出すために必要なファイルとインターフェイスを特定します。

以下の方法について説明します。

  • Simulink® 外部での統合コードの作成に必要なファイルを収集する。

  • 外部変数および外部関数とのインターフェイス。

モデル例と関連する例の詳細については、C コード生成のためのコントロール アルゴリズム モデルの準備を参照してください。

必要なデータとファイルの収集とビルド

Embedded Coder® が生成するコードには、MathWorks® が提供するサポート ファイルが必要です。生成コードを専用のビルド システムなどの別の開発環境に移動する場合は、これらのサポート ファイルを移動しなければなりません。これらのファイルは、packNGo ユーティリティを使って zip ファイルにパッケージ化できます。このユーティリティは、実行可能イメージをビルドしなければならないファイルを見つけてパッケージ化します。ユーティリティはコード生成後にビルド プロセスをカスタマイズするための、buildinfo_data 構造体や関数 packNGo などを含むツールを使用します。これらのファイルには、[モデル コンフィギュレーション パラメーター] ダイアログ ボックスの [コード生成]、[カスタム コード] ペインで特定する外部ファイルが含まれています。ユーティリティは buildinfo MAT ファイルを model_ert_rtw フォルダーに保存します。

モデル例 rtwdemo_PCG_Eval_P5 を開きます。

このモデルはコード生成後に packNGo を実行するように構成されます。

モデル全体からコードを生成します。

手動で zip ファイルを生成するには、次を実行します。

  1. ファイル buildInfo.mat (サブフォルダー rtwdemo_PCG_Eval_P5_ert_rtw 内) を読み込みます。

  2. コマンド プロンプトで、コマンド packNGo(buildInfo) を入力します。

zip ファイルに含まれるファイルの数は Embedded Coder のバージョンと使用しているモデルの構成により変わります。コンパイラでは zip ファイルにファイルのサブセットが必要となる場合があります。コンパイルされた実行可能ファイルのサイズ (RAM/ROM) はリンク作成プロセスによって変わります。リンカーには必要なオブジェクト ファイルのみが含まれる可能性があります。

生成されたコードの既存のシステムへの統合

この例では、生成されたコードを既存のコード ベースに統合する方法を示します。この例では、Eclipse™ IDE および Cygwin™/gcc コンパイラを使用します。必要な統合のタスクは、統合環境に共通のものです。

統合環境の概要

フル組み込みの制御システムは、ハードウェアとソフトウェアの複数のコンポーネントで構成されます。制御アルゴリズムは、コンポーネントの 1 タイプにすぎません。その他のコンポーネントは以下のいずれかです。

  • オペレーティング システム (OS)

  • スケジュール レイヤー

  • 物理的ハードウェア I/O

  • 低水準ハードウェア デバイス ドライバー

通常、生成されたコードはこれらのコンポーネントで使用しません。代わりに、生成されたコードにはこれらのコンポーネントと接続するインターフェイスが含まれます。MathWorks では、多くの一般的な組み込みコントローラーのために、ハードウェア インターフェイス ブロック ライブラリを提供しています。たとえば、Embedded Targets ブロック ライブラリをご覧ください。

この例では、フル システムを作成する手順を示すためのファイルが提供されます。メイン ファイルは example_main.c です。このファイルには、コードを演習するのに必要な基本アクションのみを実行する単純な main 関数が含まれています。

example_main.c を表示します。

このファイルは次を行います。

  • 関数インターフェイスを定義する (関数プロトタイプ)。

  • 外部データを宣言するファイルを含める。

  • extern データを定義する。

  • データを初期化する。

  • シミュレートされるハードウェアを呼び出す。

  • アルゴリズム関数を呼び出す。

関数の実行順序は、テスト ハーネス モデルおよび rtwdemo_PCG_Eval_P5.h 内でのサブシステムの実行順序と一致します。example_main.c での実行順を変更すると、実行可能イメージで作成される結果はシミュレーション結果と違ったものになります。

システム インターフェイスとの一致

生成コードと既存のシステム コードの統合では、"データ" インターフェイスと "関数" インターフェイスが一致していることが必要です。この例では、example_main.c ファイルは #include ステートメントと extern 宣言を通してデータをインポートおよびエクスポートします。ファイルは生成されたコードから関数も呼び出します。

入力データの接続

システムには 3 つの入力信号、pos_rqstfbk_1fbk_2 があります。生成されたコードはインポートされたグローバル変数 (ストレージ クラス ImportedExtern) を直接参照して 2 つのフィードバック信号にアクセスします。コードはインポートされたポインター (ストレージ クラス ImportedExternPointer) を介して位置信号にアクセスします。

手書きの defineImportedData.c ファイルは変数とポインターを定義します。変数とポインターは手書きのコードによって定義されるため、生成されたコードでは定義されません。代わりに、生成されたコードは rtwdemo_PCG_Eval_P5_Private.h ファイルにインポートされたデータ (extern) を宣言します。実際のシステムでは、データは通常、他のソフトウェア コンポーネントまたはハードウェア デバイスから取り込みます。

defineImportedData.c を表示します。

rtwdemo_PCG_Eval_P5_Private.h を表示します。

出力データの接続

この例では、システムの出力データにアクセスしません。生成コードのテストの例は、出力データを標準ログ ファイルに保存する方法を示します。rtwdemo_PCG_Eval_P5.h ファイルを参照すると出力データにアクセスできます。

rtwdemo_PCG_Eval_P5.h を表示します。

付加的データへのアクセス

生成されたコードには以下のような一般的に使用されるデータを保存するいくつかの構造体が含まれます。

  • ブロック状態値 (積分、伝達関数)

  • ローカル パラメーター

  • 時間

次の表に一般的なデータ構造体を示します。モデルの構成により、生成されたコードにこれらの構造体の組み合わせが表示されます。データが rtwdemo_PCG_Eval_P5.h ファイルで宣言された場合でも、この例ではこのデータにアクセスしません。

Data Type      Data Name     Data Purpose 
Constants      |model_cP|    Constant parameters
Constants      |model_cB|    Constant block I/O
Output         |model_U|     Root and atomic subsystem input
Output         |model_Y|     Root and atomic subsystem output
Internal data  |model_B|     Value of block output
Internal data  |model_D|     State information vectors
Internal data  |model_M|     Time and other system level data
Internal data  |model_Zero|  Zero-crossings
Parameters     |model_P|     Parameters

関数呼び出しインターフェイスとの一致

既定の設定では、コード ジェネレーターで生成された関数には void Func(void) インターフェイスがあります。モデルまたは Atomic サブシステムが再呼び出し可能なコードを生成するように構成されている場合、コード ジェネレーターはより複雑な関数プロトタイプを作成します。この例では、関数 example_main は有効な入力引数で生成された関数を呼び出します。

関数 PI_Cntrl_Reusable への呼び出しは、個別の構造体化されていないグローバル変数および Simulink Coder™ データ構造体の組み合わせを使用します。手書きのコードでこれらの変数を定義します。構造体の型は rtwdemo_PCG_Eval_P5.h で定義されます。

Eclipse 環境でのプロジェクトのビルド

この例では、組み込みシステムをビルドするために Eclipse IDE と Cygwin GCC デバッガーを使用します。この例には、両方のプログラムのインストール ファイルが用意されています。ソフトウェア コンポーネントとバージョン番号は次のとおりです。

  • Eclipse SDK 3.2

  • Eclipse CDT 3.3

  • Cygwin/GCC 3.4.4-1

  • Cygwin/GDB 20060706-2

Eclipse と GCC のインストールおよび使用方法の詳細については、Cygwin と Eclipse のインストールと使い方を参照してください。

この例のファイルは、このハイパーリンクをクリックするとインストールできます。

ビルド フォルダーを設定します。

あるいは、次を実行して手動でファイルをインストールします。

  1. ビルド フォルダー (Eclipse_Build_P5) を作成します。

  2. rtwdemo_PCG_Eval_P5.zip ファイルをビルド フォルダーに解凍します。

  3. rtwdemo_PCG_Eval_P5.cert_main.c および rt_logging.c の各ファイルは example_main.c で置き換えられるために削除します。

Eclipse デバッガーを使用して、ステップ実行し、生成した C コードの実行動作を評価することができます。Cygwin と Eclipse のインストールと使い方の例を参照してください。

入力データを使用してモデルの演習を行うには、生成コードのテストを参照してください。

関連するトピック

関連するトピック