Main Content

Stateflow チャートを使用したエクスポート関数モデルのシミュレーションのテスト

Stateflow® チャートを使用して、周期的 (同期) または非周期的 (非同期) 呼び出しシーケンスのスケジューリング プロセスを完全に制御できる関数呼び出しスケジューラを設定します。

  1. Simulink® モデルを作成します。

  2. エクスポート関数モデルを参照する Model ブロックを追加します。

  3. Stateflow チャートを使用して関数呼び出し入力を指定します。

  4. データ入力を指定します。

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

エクスポート関数モデルの参照

Model ブロックからエクスポート関数モデルを参照すると、モデルそのものを変更することなく、Stateflow チャートから関数呼び出しイベントを追加したり、テスト用のデータ信号のログ記録を実行したりできます。

  1. Model ブロックを新しい Simulink モデルに追加します。[モデル名] ボックスで、エクスポート関数モデルの名前を入力します。たとえば、エクスポート関数モデルの作成で作成したエクスポート関数モデルを使用します。

  2. Outport ブロックを追加し、output_100ms 端子と output_10ms 端子に追加して、シミュレーション データを保存します。

  3. Sine Wave ブロックを追加してデータ入力を設定します。[振幅]2[サンプル時間]0.01 に設定します。ブロックを Model ブロックの [input_10ms] 入力端子に接続します。

    Model block that references export-function model with input and output ports connected

Stateflow チャートを使用した周期的スケジューラの作成

  1. Stateflow チャートを作成します。この手順には、Stateflow ライセンスが必要です。

  2. [モデル化] タブの [設計] セクションで、[モデル エクスプローラー] を選択します。[モデルの階層構造] ペインで、Chart を選択します。

  3. 出力端子をもつ関数呼び出しイベントをチャートに追加します。メニューから、[追加][イベント] を選択します。[名前] ボックスに、out_100ms と入力します。[スコープ] リストから、[Simulink に出力] を選択します。この手順を繰り返して、out_10ms の関数呼び出しイベントと出力端子を作成します。

    Stateflow chart with two output ports: out_100ms and out_10ms

  4. ブロックをダブルクリックしてチャートを開きます。State ブロックとデフォルト遷移矢印を追加します。

    State block and Default transition arrow

  5. ステートの名前を function_call_scheduler に変更します。

  6. 周期関数呼び出しを 10 ミリ秒および 100 ミリ秒ごとに追加します。State ブロックで、次のコマンドを入力します。

    on every(10, tick):send(out_10ms);
    on every(100, tick):send(out_100ms);

    キーワード tick は、シミュレーション ステップの数をカウントする暗黙的なイベントで、send は関数呼び出しイベントを出力端子に出力する明示的なイベントです。

    Chart with state named function_call_scheduler

シミュレーション用のテスト モデル (ハーネス) の作成

シミュレーション専用の Simulink テスト モデルを使用します。シミュレーション テストの後に、エクスポート関数モデルからコードを生成します。その後、エクスポートした関数コードを外部でコード化されたスケジューラと統合します。

  1. Stateflow チャートをテスト モデルに追加します。

  2. Stateflow チャート出力を Model ブロック入力に接続します。

    Test harness with Stateflow chart outputs connected to export-function model function-call ports

参照エクスポート関数モデルのスケジューリングの制限

テスト モデルがエクスポート関数モデルを参照する場合、シミュレーション結果との整合性を確保するためにいくつかの制限があります。

テスト モデルの場合は、次の制限があります。

  • Model ブロック上の入力端子の関数呼び出しは、参照されるエクスポート関数モデルのルートレベルの関数呼び出し Inport ブロックの実行順序に従わなければなりません。

    テスト モデルが参照モデル関数をいずれかのタイム ステップにおいて不適切な順序で呼び出す場合、エラーが表示されます。並べ替えられた実行順序についての詳細は、実行順序の制御と表示を参照してください。この制限を無効にするには、コンフィギュレーション パラメーター [参照モデルの厳密なスケジューリング チェックを有効にする] をオフにします。

エクスポート関数モデルの場合は、次の制限があります。

  • ルートレベルの関数呼び出し Inport ブロックのサンプル時間は、[継承] (-1) に設定されるか、関数呼び出しを駆動する Stateflow チャートからの関数呼び出しのサンプル時間と一致しなければなりません。

シミュレーションのためのエクスポート関数モデルの準備

エクスポート関数モデルをテストする前に、モデルの設定を構成し、ログを記録する信号を指定します。

  1. [モデル化] タブで、[モデル設定] をクリックします。

  2. [モデル参照] ペインで、コンフィギュレーション パラメーター [参照モデルの厳密なスケジューリング チェックを有効にする] をオフにします。

  3. [ソルバー] ペインで、次のコンフィギュレーション パラメーターの設定を確認します。

    • [タイプ][固定ステップ] に設定されている。

    • [ソルバー][離散 (連続状態なし)] に設定されている。

    • [固定ステップ サイズ (基本サンプル時間)][自動] に設定されている。

  4. 信号のログ記録をセットアップします。ログを記録する信号を右クリックします。その後、[選択した信号のログ] を選択します。この例では、エクスポート関数モデルの出力信号が Outport ブロックに接続されているため、それらのログが記録されます。

メモ

最上位モデルのシミュレーションでエクスポート関数モデルを使用する場合、シミュレーション中にモデルの有効/無効ステータスを変更しないでください。これは、シミュレーション開始時に有効にし、関数呼び出しを使用して呼び出します。

Stateflow チャートを使用したエクスポート関数モデルのテスト

コードを生成する前にエクスポート関数モデルの動作をテストおよび確認するには、完成したテスト モデルをシミュレートします。

必要に応じて、完成した ex_export_function_test_model_with_stateflow_chart という名前のテスト モデルを開いてシミュレートします。

シミュレーション結果を表示するには、シミュレーション データ インスペクターを開きます。[シミュレーション] タブで、[データ インスペクター] をクリックします。

モデルをテストした後に、関数のコードを生成できます。エクスポート関数モデルのコードの生成を参照してください。

参考

関連するトピック