Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

モデルからの Simulink 関数の呼び出し

Simulink® 関数には、プログラミング言語に似た入力引数と出力引数を使用するインターフェイスがあります。Simulink 関数の呼び出し元は、Simulink 関数に入力引数を介してデータを送り、関数を実行し、出力引数を介して関数からデータを受け取ります。次を使用して Simulink 関数を呼び出すことができます。

  • Function Caller ブロック

  • MATLAB Function ブロック

  • Stateflow® チャート

次のセクションで Simulink 関数を呼び出す方法を説明します。関数 y = timestwo(x) は呼び出し元からの値 (x) を 2 で乗算してから、計算された値 (y) を呼び出し元に送り返します。関数を作成するにはモデルへの Simulink 関数の追加を参照してください。

Simulink 関数および関数呼び出しを使用して完成したモデルを開くには、ex_simulink_functions_and_function_callers を参照してください。

Function Caller ブロックを使用した Simulink Function ブロックの呼び出し

入力引数を介して Simulink Function ブロックにデータを送信する Function Caller ブロックを設定し、出力引数を介して関数からデータを受け取ります。

  1. Function Caller ブロックをモデルに追加します。

  2. Function Caller ダイアログ ボックスを開きます。[関数プロトタイプ] ボックスで y = timestwo(x) を入力します。この関数プロトタイプは、Function Caller ブロックに入力端子 x と出力端子 y を作成します。

    メモ

    空白のテキスト ボックスに入力すると、入力しているテキストに一致する以前作成した関数プロトタイプのリストが表示されます。

  3. Simulink Function ブロックを使用した Simulink 関数の作成で説明しているように Simulink Function ブロックを追加して設定します。

    メモ

    Simulink Function ブロックの関数名と引数名と、Function Caller ブロックの [関数プロトタイプ] は、正確に一致していなければなりません。

関数呼び出しのテスト

  1. 入力にテスト データを供給する Sine Wave ブロックと、出力から結果を表示する Scope ブロックを追加します。

  2. シミュレーションを実行します。振幅 2 の入力正弦波は 2 倍になります。

MATLAB Function ブロックを使用した Simulink Function ブロックの呼び出し

入力引数を介して Simulink Function ブロックにデータを送信する MATLAB Function ブロックを設定し、出力引数を介して関数からデータを受け取ります。

  1. MATLAB Function ブロックをモデルに追加します。

  2. このブロックをダブルクリックして MATLAB® エディターを開きます。関数呼び出し y1 = timestwo(x1) を入力します。

    メモ

    MATLAB Function ブロック内で定義する関数の引数名は、Simulink Function ブロック内で定義する関数の引数名と一致する必要はありません。Simulink Function を呼び出す Function Caller ブロックの場合、引数名は一致しなければなりません。

    メモ

    MATLAB Function ブロックは離散サンプル時間と固定マイナー サンプル時間のみをサポートします。

  3. Simulink Function ブロックを使用した Simulink 関数の作成で説明しているように Simulink Function ブロックを追加して設定します。

関数呼び出しのテスト

  1. 入力にテスト データを供給する Sine Wave ブロックと、出力から結果を表示する Scope ブロックを追加します。

  2. Sine Wave ブロックの場合、[サンプル時間]0.01 に設定します。モデルの場合、[コンフィギュレーション パラメーター] ダイアログ ボックスの [ソルバー] ペインを開きます。[タイプ][固定ステップ][固定ステップ サイズ]0.01 に設定します。

  3. シミュレーションを実行します。

Stateflow チャートを使用した Simulink Function ブロックの呼び出し

入力引数を介して Simulink Function ブロックにデータを送信する Stateflow チャートを設定し、出力引数を介して関数からデータを受け取ります。

  1. Stateflow チャートを Simulink モデルに追加します。Simulink ブロック線図でダブルクリックします。検索ボックスで chart を入力し、検索結果から [チャート] を選択します。

  2. チャートをダブルクリックして開きます。

  3. 左側のツール バーで、デフォルト遷移アイコン をクリックし、チャートにドラッグします。

  4. チャートに入力端子を追加します。モデル エクスプローラーを開きます。左側のペインで Chart を選択します。メニューから、[追加][データ] を選択します。[名前]x1 に、[スコープ][入力] に設定します。

    メモ

    Stateflow チャートで定義する関数の引数名は、Simulink Function ブロックで定義する関数の引数名と一致する必要はありません。Simulink Function を呼び出す Function Caller ブロックの場合、引数名は一致しなければなりません。

  5. チャートに出力端子を追加します。メニューから、[追加][データ] を選択します。[名前]y1 に、[スコープ][出力] に設定します。

  6. Sine Wave ブロックを追加し、信号出力をチャートの入力端子に接続します。Scope ブロックを追加し、入力をチャートの出力端子に接続します。

  7. 遷移コードを編集して関数を呼び出します。たとえば、Simulink Function ブロックを呼び出すには、次を入力します。

    {y1=timestwo_sf(x1);}

    メモ

    Stateflow チャートへの入力信号は、連続または離散のどちらであっても構いません。

  8. Simulink Function ブロックを使用した Simulink 関数の作成で説明しているように Simulink Function ブロックを追加して設定します。

関数呼び出しのテスト

  1. 入力にテスト データを供給する Sine Wave ブロックと、出力から結果を表示する Scope ブロックを追加します。

  2. Sine Wave ブロックの場合、[サンプル時間]0.01 に設定します。モデルの場合、[コンフィギュレーション パラメーター] ダイアログ ボックスの [ソルバー] ペインを開きます。[タイプ][固定ステップ][固定ステップ サイズ]0.01 に設定します。

  3. シミュレーションを実行します。

複数のサイトからの Simulink Function ブロックの呼び出し

複数のサイトから Simulink Function ブロックを呼び出す場合、すべての呼び出しサイトが関数の状態を共有します。たとえば、2 つの呼び出しを含む Stateflow チャートと同じ関数の呼び出しを含む 2 つの Function Caller ブロックがあると仮定します。

Simulink Function ブロックで定義される関数は 1 の入力で呼び出されるたびに 1 ずつインクリメントされるカウンターです。

2 つの Function Caller ブロックと Stateflow チャートからの呼び出しの間でブロック値が維持されるため、Unit Delay ブロックには状態があります。概念上、これは以下のように MATLAB コードに実装される関数と考えることができます。

function y = counter(u)
persistent state;
if isempty(state)
      state = 0;
end
y = state;
state = state + u;

Simulink は Unit Delay ブロックの状態値をシミュレーションの開始時に初期化します。その後は、関数が呼び出されるたびに状態値が更新されます。

この例では、Scope1 で観測される出力はタイム ステップごとに 4 ずつインクリメントします。Scope2Scope3Scope4 も似たような動作を示します。関数呼び出しの実行シーケンスによる観測信号のシフトが唯一の違いです。

複数の呼び出しがある診断設定

1 つの関数を共有し、サンプル時間レートが異なる複数の呼び出しでは、データの整合性とリアルタイム コードの一貫性が問題になる場合があります。診断の重大度を制御することを検討します。

[固定ステップ] ソルバーを選択します。[各離散レートを個別のタスクとして扱う] パラメーターを以下のように設定します。

  • オフにし (シングルタスク)、[シングルタスク データ転送] パラメーターを [なし] (既定)、[警告] または [エラー] に設定する。

  • オンにし (マルチタスク)、[マルチタスク データ転送] パラメーターを [エラー] (既定) または [警告] に設定する。

参考

ブロック

関連するトピック