このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
Stateflow チャート内のカスタム C++ コードへのアクセス
この例では、Simulink® モデルの Stateflow® チャートにカスタム C++ コードを統合する方法を示します。カスタム コードと Stateflow チャートの間でデータと関数を共有することにより、Stateflow の機能を拡張し、既存のコードを活用できます。詳細については、Stateflow チャートでのカスタム コードの再利用を参照してください。
この例では、C をアクション言語として使用するチャートで adderOutput
というカスタム コード関数を呼び出します。この関数は、グローバル カスタム変数 adderVar
の値を指定された量だけインクリメントします。チャートは、この関数の出力をチャートの出力 counter
として格納します。counter
が 100 以下の場合、チャートはグローバル変数をチャートの入力 increment
ずつ増やすカスタム関数を呼び出します。counter
が 100 より大きい場合、チャートはグローバル変数をチャートの入力 increment
ずつ減らすカスタム関数を呼び出します。
カスタム コード ファイルの準備
C++ コードの各メソッドを実行するための C 関数ラッパーを追加します。たとえば、この例では、C++ ソース ファイル adder_cpp.cpp
で add_one
と get_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++ をカスタム コード言語として選択します。
[コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。
[シミュレーション ターゲット] ペインで、[言語] パラメーターを
C++
に設定します。[コード情報] タブで、カスタム コードの構成の説明に従ってヘッダー ファイルとソース ファイルを指定します。
モデルをシミュレートすると、Scope ブロックに、チャートの出力 counter
の値がチャートの入力 increment
の値ずつ増減する様子が示されます。
C++ コード生成
C++ をコード生成言語として選択し、シミュレーション ターゲットに指定したもとの同じカスタム コード設定をモデルで使用するように構成します。
[コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。
[コード生成] ペインで、[言語] パラメーターを
C++
に設定します。[コード生成]、[カスタム コード] ペインで、[シミュレーション ターゲットと同じカスタム コードの設定を使用] を選択します。
Simulink Coder を使用したコード生成 (Simulink Coder)またはEmbedded Coder を使用したコード生成 (Embedded Coder)の説明に従って C++ コードを生成します。