メインコンテンツ

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_oneadd_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++ をカスタム コード言語として選択します。

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

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

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

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

C++ コード生成

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

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

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

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

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

参考

トピック

外部の Web サイト