Stateflow チャート内のカスタム C++ コードへのアクセス
この例では、Simulink® モデルの Stateflow® チャートにカスタム C++ コードを統合する方法を示します。カスタム コードと Stateflow チャートの間でデータと関数を共有することにより、Stateflow の機能を拡張し、既存のコードを活用できます。詳細については、Stateflow チャートでのカスタム コードの再利用を参照してください。
この例では、C をアクション言語として使用するチャートで adderOutput というカスタム コード関数を呼び出します。この関数は、グローバル カスタム変数 adderVar の値を指定された量だけ変更します。チャートは、この関数の出力をチャートの出力 counter として格納します。
counter が 100 以下の場合、チャートはグローバル変数をチャートの入力 increment ずつ増やすカスタム関数を呼び出します。counter が 100 より大きい場合、チャートはグローバル変数をチャートの入力 increment ずつ減らすカスタム関数を呼び出します。

ラッパーを使用したカスタム コード ファイルへのアクセス
カスタム C++ コードの統合にはラッパーを使用します。この例では、既存のソース ファイル adder_cpp.cpp とヘッダー ファイル adder_cpp.h をモデルで使用しています。ソース ファイルで add_one と add_two の 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;
}既存のコードを変更せずに adder クラスにアクセスするために、モデルでラッパー ファイル adder_wrapper.c を使用しています。このラッパー ファイルには adder クラスのインスタンスからの出力を作成、削除、受け取るメソッドを定義します。
adder *createAdder()
{
return new adder;
}void deleteAdder(adder *obj)
{
delete obj;
}double adderOutput(adder *obj, int increment)
{
obj->add_one(increment);
return obj->get_val();
}C++ コンパイラの選択
既定のコンパイラを表示または変更するには、MATLAB® コマンド ウィンドウで次のように入力します。
mex -setup c++
詳細については、C++ コンパイラの選択を参照してください。サポートされているコンパイラの一覧については、サポートされるコンパイラを参照してください。
シミュレーション用のカスタム コード ファイルのインクルード
シミュレーション ターゲットを構成し、C++ をカスタム コード言語として選択します。
[コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。
[シミュレーション ターゲット] ペインで、[言語] パラメーターを
C++に設定します。[コード情報] タブで、カスタム コードの構成の説明に従ってヘッダー ファイルとソース ファイルを指定します。

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

C++ コード生成
C++ をコード生成言語として選択し、シミュレーション ターゲットに指定したもとの同じカスタム コード設定をモデルで使用するように構成します。
[コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。
[コード生成] ペインで、[言語] パラメーターを
C++に設定します。[コード生成]、[カスタム コード] ペインで、[シミュレーション ターゲットと同じカスタム コードの設定を使用] を選択します。
Simulink Coder を使用したコード生成 (Simulink Coder)またはEmbedded Coder を使用したコード生成 (Embedded Coder)の説明に従って C++ コードを生成します。