ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

エクスポート関数モデル

エクスポート関数モデルは、外部環境およびスケジューラと統合できる独立した関数のコードを生成する Simulink® モデルです。関数は、Function-Call Subsystem ブロック、関数呼び出し Model ブロック、Simulink Function ブロック、および S-Function ブロックを使用して定義されます。

以下のエクスポート関数モデルには、Function-Call Subsystem ブロックで定義された 2 つの関数が含まれています。このモデルを作成する手順については、エクスポート関数モデルの作成を参照してください。

このモデルから生成されたコードには、遅延関数用と関数 square 用の 2 つの独立した関数が含まれています。

      /*
       * File: export_function_model.c    
       * Code generated for Simulink model 'export_function_model'.
       */
		
	void function_call_100ms(void)         /* Sample time: [0.1s, 0.0s] */
	{
	  export_function_model_Y.output_100ms =
	    export_function_model_DW.UnitDelay_DSTATE;
	
	  export_function_model_DW.UnitDelay_DSTATE =
	    export_function_model_Y.output_100ms + 1.0;	
	}

      void function_call_10ms(void)          /* Sample time: [0.01s, 0.0s] */
	{
	    export_function_model_Y.output_10ms = export_function_model_U.input_10ms *
	    export_function_model_U.input_10ms;
	}

エクスポート関数モデルのワークフロー

エクスポート関数モデルを作成するための 3 つの一般的なワークフローは、関数のコードを生成する前のモデルのシミュレーションとテストの方法が異なります。

関数呼び出しシーケンスが単純でモデル入力として指定できる場合、入力行列を使用したシミュレーションが、エクスポート関数モデルをテストする推奨方法になります。入力行列を使用したエクスポート関数モデルのシミュレーションのテストを参照してください。

関数呼び出しシーケンスが複雑すぎて入力行列で指定できない場合、テスト モデル (ハーネス) を作成してターゲット環境の動作を再現します。このテスト モデルを使用して関数呼び出し入力をエクスポート関数モデルに提供します。関数呼び出しジェネレーターを使用したエクスポート関数モデルのシミュレーションのテストおよびStateflow チャートを使用したエクスポート関数モデルのシミュレーションのテストスケジュール エディターを使用したエクスポート関数モデルのスケジュールを参照してください。

許可されるブロック

ルートレベルでは、エクスポート関数モデルは以下のブロックに制限されます。

  • Inport

  • Outport

  • Goto

  • From

  • Function-Call Subsystem

  • 関数呼び出し Model

  • Function-Call Split

  • Simulink Function

  • Initialize Function

  • Reset Function

  • Terminate Function

  • Data Store Memory

  • Bus Creator

  • Bus Selector

  • Mux

  • Demux

  • Merge

  • Signal Specification

  • S-Function

エクスポート関数モデルの要件

エクスポート関数モデルで関数コードを正常に生成するには、以下の要件を満たさなければなりません。

モデル コンフィギュレーション パラメーター:

  • ソルバーの [タイプ][固定ステップ] に設定します。

  • [ソルバー][自動] または [離散] に設定します。

  • [コード生成] の [システム ターゲット ファイル][ert.tlc] に設定します。ert.tlc を選択するには、Embedded Coder® ライセンスが必要です。

  • 関数呼び出し Model ブロックの場合、参照モデルの [周期的なサンプル時間の制約][サンプル時間に依存しない] に設定されます。

ルートレベルの関数呼び出し Inport ブロック:

  • [関数呼び出しの出力] チェック ボックスはオンにします。

  • Asynchronous Task Specification ブロックから信号を受信できません。

ルートレベルのデータ Inport ブロックと Outport ブロックは、バーチャル バス データ信号に接続できません。

ルートレベルの Function-Call Subsystem ブロックと関数呼び出し Model ブロック:

  • ブロック内のすべての内部ブロックはコード生成をサポートしなければなりません。

  • Trigger ブロックの [サンプル時間タイプ] は以下のように設定されます。

    • [トリガー]。内部ブロックの [サンプル時間]-1 に設定しなければなりません。

    • [周期的]。ルートレベルの関数呼び出し Inport ブロックの [サンプル時間] を指定された離散時間に設定し、すべての内部ブロックの [サンプル時間]-1 または指定された離散時間に設定しなければなりません。

データのログ記録と信号ビューアーのブロックは、ルートレベルまたは Subsystem ブロックおよび Model ブロック内で許可されません。

Function-Call Subsystem のサンプル時間

エクスポート関数モデルでは、ルートレベルの Function-Call Subsystem ブロックまたは関数呼び出し Model ブロック内のルートレベルの関数呼び出し Inport ブロックと Trigger ブロックにサンプル時間を指定できます。これらのサンプル時間を指定する方法について次の表で説明します。

Trigger ブロックの [サンプル時間タイプ]Trigger ブロックの [サンプル時間]Inport ブロックの [サンプル時間]シミュレーション中の関数呼び出しレート

トリガー

未指定で、パラメーターは非アクティブです。

-1 (継承)

シミュレーションの場合、Inport ブロックに接続されている関数呼び出しイニシエーターがシミュレーションのレートを設定します。

指定された離散時間

Inport ブロックに接続されたテスト モデルの関数呼び出しイニシエーターのサンプル時間は、Inport ブロックの指定された離散時間と一致しなければなりません。

シミュレーションでは、指定された離散レートでコンポーネントが実行されます。関数呼び出しソースが別のサンプルを使用すると、Simulink にエラー メッセージが表示されます。

周期的

エクスポート関数モデルが Model ブロックから参照される場合、周期関数呼び出しの実行時チェックが適用されます。

-1 (継承) または Inport ブロックの指定された離散時間。

-1 (継承)

この構成は許可されません。Simulink にエラー メッセージが表示されます。

指定された離散時間

シミュレーションの場合、コンポーネントは指定された離散サンプル時間で実行されます。関数呼び出しソースが異なるサンプル時間を使用すると、Simulink にエラー メッセージが表示されます。

ルートレベルの関数呼び出し Inport ブロックの実行順序

関数呼び出し Inport ブロックのサンプル時間と優先順位を指定すると、Function-Call Subsystems と関数呼び出し Models の実行順序を制御できます。

  1. シミュレーション実行のサンプル時間を指定します。関数呼び出し Inport ブロックを右クリックしてから、[ブロック パラメーター] を選択します。

  2. [信号属性] タブを選択します。[サンプル時間] ボックスに、離散時間を入力します。

  3. シミュレーションのブロック優先順位を指定します。関数呼び出し Inport ブロックを右クリックし、[プロパティ] を選択します。

  4. [優先順位] ボックスに、優先順位値を入力します。

  5. シミュレーションのソートされた実行順序を表示します。[情報表示][ブロック][ソートされた実行順序] を選択します。この表示は生成されるコードに影響しません。

以下のエクスポート関数モデルでは、Inport ブロック 2 の [サンプル時間]0.01 (10 ms) に設定した Function-Call Subsystem 2 が、Inport ブロック 1 の [サンプル時間]0.1 (100 ms) に設定した Function-Call Subsystem 1 よりも前に実行されます。

相対的な実行順序の決定

Simulink では、関数呼び出し Inport ブロックのプロパティを比較し、以下のルールを使用して相対実行順序を決定します。

  1. 優先順位 – 優先順位が小さい方が最初に実行される

  2. サンプル時間 – サンプル時間が小さい方が最初に実行される

  3. 端子番号 – 端子番号が小さい方が最初に実行される

2 つのブロックの [優先順位] パラメーターの値が異なる場合は、より小さい優先順位をもつブロックが最初に実行されます。[優先順位] パラメーターが等しい場合は、より速いレート (サンプル時間が小さい) をもつブロックが最初に実行されます。両方のブロックの [優先順位] とサンプル時間が同じ場合は、より小さい端子番号をもつブロックが最初に実行されます。

メモ

最上位モデルのシミュレーション モードが [アクセラレータ] または [ラピッド アクセラレータ] の場合、Simulink はルートレベルの関数呼び出し Inport ブロックの実行順序に関する実行時シミュレーション チェックを参照されるエクスポート関数モデル内で実行しません。

エクスポート関数モデルに、表に示すブロック プロパティをもつ 5 つのルートレベルの関数呼び出し Inport ブロック A ~ E があると仮定します。相対的な実行順序を決定するために、Simulink は、それらの [優先順位] パラメーター、サンプル時間 (異なる継承されないサンプル時間の場合)、端子番号を順に比較します。

ルートレベルの関数呼び出し InportABCDE
優先順位1030404030
サンプル時間–10.20.10.1–1
端子番号54321
  • ブロック A は 5 個のすべてのブロックの中で最小の優先順位をもっています。A が最初に実行されます。

  • B と E が A の後、C と D の前に実行されます。B と E は同じ優先順位のため、Simulink はサンプル時間を比較して実行順序を決定します。E のサンプル時間は -1 (継承) であり、B のサンプル時間 0.2 よりも小さくなります。E が B の前に実行されます。

  • C と D は同じ優先順位と同じ別個の継承されないサンプル時間をもちます。D の端子番号 (2) は C (3) よりも小さいため、D が C の前に実行されます。

これらの関数呼び出し Inport ブロックの相対実行順序は A、E、B、D、および C です。

Function-Call Subsystem のラッチされた入力データ

Function-Call Subsystem ブロック内の Inport ブロックの入力データをラッチしてデータの整合性を確保できます。入力データをラッチするには、[Function-Call Subsystem 出力のフィードバック信号の入力をラッチする] チェック ボックスをオンにします。

以下のモデルでは、Function-Call Subsystem ReadDSAndCal1Inport ブロックの入力データがラッチされ (<Li> で示される)、サブシステムの実行中は変更できません。Data Store Read ブロックと Data Store Write ブロックは、各 Function-Call Subsystem 内で呼び出されます。1 回目と 2 回目の関数呼び出しでデータが書き込まれ、最後の関数呼び出しでデータが Data Store Memory ブロックに読み込まれます。

メモ

内部 Inport ブロックに接続されているルートレベルのデータ Inport ブロックも、ルートレベルのブロックに接続されているすべてのブロックがラッチされる場合、ラッチされます。詳細については、Function-Call Subsystem 出力のフィードバック信号の入力をラッチする, Latch input for feedback signals of function-call subsystem outputsFunction-Call Subsystem 出力のフィードバック信号の入力をラッチするLatch input for feedback signals of function-call subsystem outputsを参照してください。

メモ

既定では、データ転送信号は生成されるコードにおいて保護されません。カスタムのストレージ クラスを使用して、ターゲット環境内の現在のタスクのプリエンプションによる、これらの信号のデータ破損を防ぎます。

入れ子にされたエクスポート関数モデル

入れ子にされたエクスポート関数モデルは、編成の追加の層を提供します。以下のモデルは、Model ブロックから参照された 2 つの参照エクスポート関数モデルをもっています。

メモ

エクスポート関数モデルは、非同期関数呼び出し入力をもつ参照モデルを含むことはできませんが、Function-Call Subsystem および関数呼び出しモデルを含むことはできます。非同期関数呼び出し入力をもつモデルは、エクスポート関数モデル、Function-Call Subsystem または関数呼び出しモデルを含むことができます。

複数インスタンスの関数呼び出しモデルをもつエクスポート関数モデル

エクスポート関数モデル内では、Function-Call Subsystem ブロックまたは関数呼び出し Model ブロックを使用できます。関数呼び出し Model ブロックを使用する場合、モデルの複数のインスタンスも作成できます。

  1. Trigger ブロックを含むモデルでアルゴリズムを定義します。[トリガー タイプ][関数呼び出し] に設定します。

  2. Model ブロックからモデルを参照します。結果は関数呼び出しモデルになります。

  3. 関数呼び出し Inport ブロックを接続し、[関数呼び出しの出力] チェック ボックスをオンにします。信号の Inport ブロックと Outport ブロックを追加します。モデルを更新します (Ctrl + D)。結果は、関数呼び出しモデルをもつエクスポート関数モデルになります。

  4. 参照モデルと端子ブロックをコピーして、モデルの 2 つ目のインスタンスを作成します。[ソート順序] には、2 つ目のインスタンスの前に最初のインスタンスが実行されることが示されます。

エクスポート関数モデルと非同期関数呼び出し入力をもつモデル

エクスポート関数モデルの機能は非同期関数呼び出し入力端子をもつモデルで使用できます。これらのモデルは関数が Simulink スケジューラで呼び出される Simulink 環境で主に使用します。

比較特性エクスポート関数モデル非同期関数呼び出し入力をもつモデル
定義これらのモデルには、Asynchronous Task Specification ブロックに接続されない、ルートレベルの関数呼び出し Inport ブロックがあります。これらの Inport ブロックは、Function-Call Subsystem または関数呼び出しモデル (Trigger ブロックをもつ Model ブロック) をトリガーします。これらのモデルには、Asynchronous Task Specification ブロックに接続されたルートレベルの関数呼び出し Inport ブロックがあります。これらの Inport ブロックは、Function-Call Subsystem または関数呼び出しモデルをトリガーします。
ルートレベル ブロック関数呼び出しコンテキストで実行されるブロックのみ、ルート レベルに存在することが許されます。関数呼び出しコンテキスト以外で実行されるブロックも許されます。
データ転送データ転送インジケーターを使用してシミュレーション結果を解釈します。既定で、エクスポート関数モデルのデータ転送は、生成されるコード内で保護されません。詳細については、Function-Call Subsystem のラッチされた入力データを参照してください。Rate Transition ブロックを使用して、異なるレートで実行される Function-Call Subsystem 間でのデータ転送を保護します。詳細については、Rate Transitionを参照してください。
シミュレーションのサポートこれらのモデルは、スタンドアロン シミュレーションとテスト モデル シミュレーションをすべてのシミュレーション モードでサポートします。これらのモデルは、テスト モデル シミュレーションをすべてのシミュレーション モードで、スタンドアロン シミュレーションをノーマル、アクセラレータ、ラピッド アクセラレータの各モードでサポートします。
コード生成のサポート最上位モデルおよびスタンドアロンのコード生成はサポートされます。最上位モデルおよびスタンドアロンのコード生成はサポートされます。

参考

ブロック

関連するトピック