Main Content

Stateflow チャート内のカスタム C++ コードへのアクセス

この例では、Simulink® モデルの Stateflow® チャートにカスタム C++ コードを統合する方法を示します。カスタム コードと Stateflow チャートの間でデータと関数を共有することにより、Stateflow の機能を拡張し、既存のコードを活用できます。詳細については、Stateflow チャートでのカスタム コードの再利用を参照してください。

この例では、C をアクション言語として使用するチャートで adderOutput というカスタム コード関数を呼び出します。この関数は、グローバル カスタム変数 adderVar の値を指定された量だけインクリメントします。チャートは、この関数の出力をチャートの出力 counter として格納します。counter が 100 以下の場合、チャートはグローバル変数をチャートの入力 increment ずつ増やすカスタム関数を呼び出します。counter が 100 より大きい場合、チャートはグローバル変数をチャートの入力 increment ずつ減らすカスタム関数を呼び出します。

カスタム コード ファイルの準備

C++ コードの各メソッドを実行するための C 関数ラッパーを追加します。たとえば、この例では、C++ ソース ファイル adder_cpp.cppadd_oneget_val の 2 つのメソッドをもつ adder というクラスが定義されています。

adder::adder()
{
	int_state = 0;
}
int adder::add_one(int increment)
{
	   int_state += increment;
    return int_state;
}
int adder::get_val()
{
    return int_state;
}

これらのメソッドを呼び出すために、Stateflow チャートで C 関数ラッパー adderOutput を使用しています。

double adderOutput(adder *obj, int increment)
{
	   obj->add_one(increment);
	   return obj->get_val();
}

この C 関数ラッパーのプロトタイプはヘッダー ファイル adder_cpp.h に含まれています。

extern double adderOutput(adder *obj, int increment);

C++ コンパイラの選択

既定のコンパイラを表示または変更するには、MATLAB® コマンド ウィンドウで次のように入力します。

mex -setup c++

詳細については、C++ コンパイラの選択を参照してください。サポートされているコンパイラの一覧については、サポートされるコンパイラを参照してください。

シミュレーション用のカスタム コード ファイルのインクルード

シミュレーション ターゲットを構成し、C++ をカスタム コード言語として選択します。

  1. [コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。

  2. [シミュレーション ターゲット] ペインで、[言語] パラメーターを C++ に設定します。

  3. [コード情報] タブで、モデルのカスタム コードの構成の説明に従ってヘッダー ファイルとソース ファイルを指定します。

モデルをシミュレートすると、Scope ブロックに、チャートの出力 counter の値がチャートの入力 increment の値ずつ増減する様子が示されます。

C++ コード生成

C++ をコード生成言語として選択し、シミュレーション ターゲットに指定したもとの同じカスタム コード設定をモデルで使用するように構成します。

  1. [コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。

  2. [コード生成] ペインで、[言語] パラメーターを C++ に設定します。

  3. [コード生成]、[カスタム コード] ペインで、[シミュレーション ターゲットと同じカスタム コードの設定を使用] を選択します。

  4. Simulink Coder を使用したコード生成 (Simulink Coder)またはEmbedded Coder を使用したコード生成 (Embedded Coder)の説明に従って C++ コードを生成します。

関連するトピック

外部の Web サイト