Main Content

For Each Subsystem

入力信号またはマスク パラメーターの個々の要素またはサブ配列にアルゴリズムを適用

  • For Each Subsystem block

ライブラリ:
Simulink / Ports & Subsystems
HDL Coder / Ports & Subsystems

説明

For Each Subsystem ブロックは、シミュレーション タイム ステップ中に入力信号またはマスク パラメーター配列の各要素またはサブ配列で実行を繰り返すサブシステムを作成するための開始点として事前構成されている Subsystem ブロックです。

For Each Subsystem block icon, displayed alongside contents of for-each subsystem, consisting of a For Each block, an Inport block, and an Outport block.

サブシステム内のブロックのセットは、元の信号またはマスク パラメーター配列の 1 つの要素またはサブ配列に適用されるアルゴリズムを表します。このサブシステム内では、状態をもつ各ブロックは、処理対象の各要素またはサブ配列ごとに独立した状態セットを維持します。したがって、このサブシステムの操作は動作の点で、元の入力信号またはマスク パラメーター配列の各要素についてサブシステムの内容をコピーし、そのコピーを使用して各要素を処理することに似ています。サブシステム内のブロック セットが要素またはサブ配列を処理するとき、サブシステムは結果を連結して出力信号を形成します。

サブシステムの構成

For Each Subsystem ブロックには、このサブシステムの制御ブロックとして機能する For Each ブロックが含まれます。For Each ブロックのパラメーターを指定して、サブシステム入力またはマスク パラメーターを要素またはサブ配列に分解する処理、および個別の結果を連結して出力信号にする処理を設定します。ブロック パラメーター [分割次元] および [分割幅] で、入力信号またはマスク パラメーター配列をスライスする次元と各スライスの幅をそれぞれ指定します。行ベクトルを分割するには、[分割次元]2 に指定します。列ベクトルを分割するには、[分割次元]1 に指定します。パラメーター [分割オフセット] を使用して、分割の間のギャップまたはオーバーラップを指定します。データのサブセットに対する処理を制限するには [反復回数] を指定します。このブロック パラメーターの詳細については、For Each を参照してください。

入力信号のサブシステムへの分割

各反復に分割する入力信号を For Each Subsystem で指定するには、For Each ブロックのダイアログ ボックスの [入力分割] タブを使用します。分割する信号を指定するときは、[分割次元] パラメーター、[分割幅] パラメーター、[分割オフセット] パラメーターを指定します。

サブシステムのマスク パラメーターの分割

For Each Subsystem ブロックのマスク パラメーターは分割できます。分割は、システムの構造は変えずにパラメーターの値を変えて反復処理する場合に便利です。この場合、パラメーターごとにモデルを変更して追加の入力信号を分割する方法では煩雑になります。代わりに、For Each Subsystem にマスク パラメーターを追加します。詳細については、簡単なマスクの作成を参照してください。分割するマスク パラメーターを選択するには、For Each ブロックのダイアログ ボックスの [パラメーターの分割] タブを使用します。詳細については、以下の分割パラメーターの選択を参照してください。

出力の連結

結果を連結する次元を定義するには、[出力連結] タブで [連結の次元] を指定します。

サブ配列ごとにブロックによって生成された結果は、連結次元に沿って積み上げられます。既定では、次元 1 (y 軸) が使用され、結果が垂直に積み上げられることを意味します。ただし、連結の次元を 2 に指定すると、結果は水平方向 (x 軸) に連結されます。したがって、行ベクトルが処理されると、連結された結果は、最初のケースは行列になり、2 番目のケースは行ベクトルになります。例については、For Each ブロックでの連結の次元の指定を参照してください。

分割パラメーターの選択

分割する入力信号またはサブシステムのマスク パラメーターを選択するときは、それらを各反復用に要素またはサブ配列に分解する方法を指定しなければなりません。[分割次元] パラメーターと [分割幅][分割オフセット] パラメーターで整数値を設定します。

例として、次の形式の入力信号行列 A について考えてみます。

A 3-by-3 matrix A with all nine elements displayed, showing d1 as the vertical dimension and d2 as the horizontal dimension

ラベル d1 と d2 は、それぞれ次元 1 と次元 2 を定義します。分割次元と分割幅の両方に対して既定の設定 1、分割オフセットに 0 が保持されると、Simulink® は分割幅に等しい幅つまり 1 要素分の幅で分割次元 1 に対して直角にスライスします。

A 3-by-3 matrix A, with all nine elements showing, partitioned into rows

行列 A は、次の 3 つの行ベクトルに分解されます。

A 3-by-3 matrix A, decomposed into three 3-element row vectors

代わりに分割次元 2 を指定すると、Simulink は次元 2 に対して直角にスライスして、次の 3 つの列ベクトルを形成します。

A 3-by-3 matrix A, decomposed into three 3-element column vectors

[分割次元]2 に設定する以外に、[分割幅]2 および [分割オフセット]-1 に設定すると、Simulink は 2 つのオーバーラップする 3 行 2 列の分割を処理に使用します。

A 3-by-3 matrix A, decomposed into two overlapping 3-by-2 matrices

例については、For Each ブロックによる入力信号の分割を参照してください。

既定では、入力信号またはマスク パラメーターのすべての分割が処理されます。分割のサブセットを処理するには、処理する分割数を [反復回数] として入力します。上記の行列の例では、[分割オフセット]0 (既定の設定) に、[反復回数]2 に設定すると、入力行列 A の最初の 2 行または 2 列のみが処理されます。

メモ

Simulink で 1 次元と見なされるのは信号だけです。マスク パラメーターは、方向に応じて行ベクトルか列ベクトルのどちらかになります。行ベクトルを分割するには、分割次元を 2 (列方向) に指定します。列ベクトルを分割するには、分割次元を 1 (行方向) に指定します。

コード再利用のサポート

特定のモデルの場合、For Each Subsystem ブロックは、Simulink Coder™ 生成コードでのコードの再利用を向上させます。スカラー アルゴリズムが同じである、2 つの再利用可能な Atomic Subsystem ブロックを格納したモデルが、信号の各要素に適用されるとします。これらのサブシステムの入力信号次元が異なる場合、Simulink Coder 生成コードには 2 つの異なる関数が含まれます。これら 2 つのサブシステムを入力の各要素を同じアルゴリズムで処理するように設定された 2 つの同じ For Each Subsystem ブロックに置き換えることができます。この場合、Simulink Coder 生成コードは、入力信号の要素数でパラメーター化される 1 つの関数で構成されます。モデルの For Each Subsystem ブロックの一意のインスタンスごとに 1 回呼び出されるので、この関数は 2 回呼び出されることになります。これらのケースのそれぞれに対して、入力信号の要素はそれぞれ異なる値をもちます。

マルチコア実行のサポート

ラピッド アクセラレータ モードでモデルのシミュレーションを行う場合、Simulink は For Each Subsystem のより高速なシミュレーションのため、マルチコア実行を使用します。Simulink は、対象となる各 For Each Subsystem について、ラピッド アクセラレータ モードで実行される最初の 2 タイム ステップを自動的にプロファイリングして、並列実行時間と逐次実行時間を比較します。続いて、Simulink は、そうすることによって実行時間の速度が増すようであれば、シミュレーション実行の後続のタイム ステップにおいて、並列のマルチコア実行に For Each Subsystem を指定します。入れ子にされた For Each Subsystem の場合、マルチコア実行は最上位サブシステムにのみ適用されます。連続状態または Function Caller ブロックを含む For Each Subsystem にはマルチコア実行は適用されません。

特定の For Each Subsystem についてマルチコア実行を抑止するには、サブシステム内の For Each ブロックの MultithreadedSim パラメーターを 'off' に設定します。

set_param(ForEachBlockName,'MultithreadedSim','off')

For Each Subsystem ブロック自身ではなく、サブシステム内の For Each ブロックのパラメーターであることに注意してください。モデル内のすべての For Each Subsystem についてマルチコア実行を抑止するには、モデルの MultithreadedSim パラメーターを 'off' に設定します。

set_param(ModelName,'MultithreadedSim','off')

マルチコア実行を再度有効にするには、関連する MultithreadedSim パラメーターを既定値である 'auto' に設定します。

例については、For Each Subsystem を使用したマルチスレッド シミュレーションを参照してください。

メモ

ラピッド アクセラレータ モードでモデルのシミュレーションを行うかモデルからコードを生成する場合に、For Each Subsystem でマスク パラメーターを分割するときは、分割されたパラメーターを参照する For Each Subsystem 内のすべての式が調整可能な式である必要があります。調整可能な式の制限 (Simulink Coder)を参照してください。

S-Function のサポート

For Each Subsystem ブロックは、C-MEX S-Function と Level-2 MATLAB® S-Function の両方をサポートします。ただし、S-Function が次の手法のいずれかを使用して複数の実行インスタンスをサポートすることが条件です。

  • C-MEX S-Function は mdlSetWorkWidths メソッドで ssSupportsMultipleExecInstances(S, true) を宣言しなければなりません。

  • Level-2 MATLAB S-Function は、Setup メソッドで block.SupportsMultipleExecInstances = true を宣言しなければなりません。

これらの仕様を使用する場合:

  • DWork や Block I/O などの実行時データを、グローバル変数または永続変数を使用して、あるいは S-Function のユーザー データ内でキャッシュしないでください。

  • For Each Subsystem ブロックでは、mdlStart から mdlTerminate までの S-Function の各実行メソッドは、S-Function によって処理される各要素に対して 1 回呼び出されます。したがって、mdlTerminate に対する繰り返しの呼び出しで同じメモリを開放することのないように確認する必要があります。たとえば、mdlSetWorkWidths 内でランタイム パラメーターのメモリを割り当てる C-MEX S-Function について考えます。mdlTerminate でこのメモリを開放する必要があるのは 1 回だけです。解決策として、mdlTerminate をはじめて呼び出した後にポインターを空に設定します。

制限

For Each Subsystem ブロックの制限の詳細については、For Each Subsystem の制限を参照してください。

端子

入力

すべて展開する

Subsystem ブロックへの信号入力。スカラー、ベクトルまたは行列として指定します。Inport ブロックを Subsystem ブロック内に配置することで、ブロックへの外部入力端子が追加されます。端子ラベルは Inport ブロックの名前と一致します。

ローカル環境から信号を受信するには、Inport ブロックを使用します。

データ型: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point | enumerated | bus

出力

すべて展開する

Subsystem ブロックからの信号出力。スカラー、ベクトルまたは行列として返されます。Outport ブロックを Subsystem ブロック内に配置することで、ブロックへの外部出力端子が追加されます。端子ラベルは Outport ブロックの名前と一致します。

信号をローカル環境に送信するには、Outport ブロックを使用します。

データ型: half | single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point | enumerated | bus

パラメーター

すべて展開する

ブロック パラメーターを対話形式で編集するには、プロパティ インスペクターを使用します。Simulink ツールストリップから、[シミュレーション] タブの [準備] ギャラリーで [プロパティ インスペクター] を選択します。

メイン

Subsystem ブロック アイコンに端子ラベルを表示する方法を選択します。

  • なし — 端子ラベルを表示しません。

  • FromPortIcon — 対応する端子アイコン上に信号名が表示される場合、Subsystem ブロック上に信号名を表示します。それ以外の場合は、端子のブロック名、またはブロック名が既定の名前の場合は端子番号を表示します。

  • FromPortBlockNameSubsystem ブロック上に対応する端子のブロック名を表示します。

  • SignalName — 端子に接続されている信号に名前が付いている場合、Subsystem ブロック上の信号の名前を表示します。それ以外の場合は、対応する端子のブロック名を表示します。

Subsystem ブロックでの端子ラベルの編集については、Edit Port Labels on Subsystem Blocksを参照してください。

プログラムでの使用

ブロック パラメーターの値をプログラムで設定するには、関数 set_param を使用します。

パラメーター: ShowPortLabels
値: 'FromPortIcon' (既定値) | 'FromPortBlockName' | 'SignalName'

サブシステムの内容へのユーザー アクセスを制御します。

  • ReadWrite — サブシステムの内容を開き、修正することができます。

  • ReadOnly — サブシステムを開くことはできますが、修正することはできません。サブシステムがブロック ライブラリに存在する場合、サブシステムへのリンクを作成して開くことができます。また、サブシステムのローカル コピーを作成して変更することはできますが、アクセス許可や元のライブラリ インスタンスの内容を変更することはできません。

  • NoReadOrWrite — サブシステムを開くことも修正することもできません。サブシステムがライブラリに存在する場合、モデルにあるサブシステムのリンクを作成することはできますが、サブシステムを開いたり、アクセス許可を変更したり、サブシステムのローカル コピーを作成したりすることはできません。

[読み取り/書き込みアクセス許可] パラメーターが [NoReadOrWrite] に設定されているサブシステムの内容を表示しようとしても、応答はありません。たとえば、そのようなサブシステムをダブルクリックしても、サブシステムは開かれず、メッセージも表示されません。

プログラムでの使用

ブロック パラメーターの値をプログラムで設定するには、関数 set_param を使用します。

パラメーター: Permissions
値: 'ReadWrite' (既定値) | 'ReadOnly' | 'NoReadOrWrite'

サブシステムの実行中にエラーが発生した場合に呼び出される関数名を入力します。

2 つの引数が関数に渡されます。その引数は、サブシステムのハンドルと、エラー タイプを指定する文字ベクトルです。関数が指定されていない場合、サブシステムの実行によってエラーが発生すると、一般的なエラー メッセージが表示されます。

プログラムでの使用

ブロック パラメーターの値をプログラムで設定するには、関数 set_param を使用します。

パラメーター: ErrorFcn
値: '' (既定値) | function name in quotes
データ型: char | string

このサブシステムによって参照されるワークスペース変数名を解決するかどうかを選択します。

詳細については、記号の解釈および記号関連付けプロセスを参照してください。

  • すべて — ブロック パラメーター値と Simulink データ オブジェクト (Simulink.Signal オブジェクトなど) の指定に使用されるワークスペース変数など、このサブシステムが使用するワークスペース変数のすべての名前を解決します。

  • ExplicitOnly — ブロックのパラメーター値、データ ストア メモリ (ここにはブロックは存在しません)、信号、"must resolve" というマークの付いた状態を指定するために使用されるワークスペース変数名だけを解決します。

  • なし — ワークスペース変数名を解決しません。

プログラムでの使用

ブロック パラメーターの値をプログラムで設定するには、関数 set_param を使用します。

パラメーター: PermitHierarchicalResolution
値: 'All' (既定値) | 'ExplicitOnly' | 'None'

Atomic Subsystem を含むすべての人為的な代数ループを解消しようとします。

  • off — Atomic Subsystem を含むすべての人為的な代数ループを解消しません。

  • on — Atomic Subsystem を含むすべての人為的な代数ループを解消しようとします。

依存関係

このパラメーターを有効にするには、[Atomic サブシステムとして扱う] をオンにします。

プログラムでの使用

ブロック パラメーターの値をプログラムで設定するには、関数 set_param を使用します。

パラメーター: MinAlgLoopOccurrences
値: 'off' (既定値) | 'on'

コード生成

[コード生成] タブのパラメーターには、Simulink Coder または Embedded Coder® のライセンスが必要です。

atomic (非バーチャル) サブシステムに対して生成されるコード形式を選択します。

  • 自動 — モデル内に存在するサブシステムのインスタンスのタイプと数に基づいて、最適な形式が選択されます。

  • インライン — 無条件にサブシステムがインライン化されます。

  • 再利用できない関数[ファイル名オプション][自動] に設定されている場合、個々の関数がモデル ファイル内にパッケージ化されます。[ファイル名オプション] が別のファイル名を使用する [サブシステム名を使用][関数名を使用]、または [ユーザー指定] に設定されている場合、個々の関数が別々のファイルにパッケージ化されます。

    このように設定されたサブシステムは、関数インターフェイスパラメーターの設定に基づく引数をもつ関数を生成します。生成された関数とファイルには、それぞれ関数名およびファイル名 (拡張子なし)パラメーターを使用して名前を付けることができます。これらの関数は再呼び出し可能ではありません。

  • 再利用可能な関数 — モデルが複数のサブシステムのインスタンスを含む場合、サブシステムのコードの再利用を可能にする引数をもつ関数が生成されます。

    このオプションは、参照モデル全体にわたりサブシステムの複数のインスタンスを含むモデル参照階層の生成コードで、サブシステム コードの再利用を可能とする引数をもつ関数も生成します。この場合、サブシステムはライブラリに含まれていなければなりません。

詳細については、以下を参照してください。

ヒント

  • サブシステムの複数のインスタンスを 1 つの再利用が可能な関数として表す場合、それぞれ 自動 または [再利用可能な関数] として指定できます。それらのどちらか一方を使用するのが最適です。両方を使用すると、各指定につき 1 つずつ、2 つの再利用可能な関数が作成されます。これらの選択の結果は、再利用が不可能な場合にのみ異なります。[自動] を選択しても、サブシステム コードの関数やファイル名は制御できません。

  • [再利用可能な関数]自動 のオプションは両方とも、サブシステムのインスタンスが複数存在するかどうかと、コードが再利用可能かどうかを判定しようとします。再利用が不可能な場合、以下のように各オプションの動作はそれぞれ異なります。

    • [自動] はインライン化されたコードを生成し、インライン化が禁止されている場合は、サブシステムのインスタンスごとに別の関数を生成します。

    • [再利用可能な関数] はモデル内のサブシステムのインスタンスごとに、引数をもつ別の関数を生成します。

  • 生成コードがソース管理下にある場合に [再利用可能な関数] を選択する場合は、[ファイル名オプション][サブシステム名を使用][関数名を使用][ユーザー指定] のいずれかに設定してください。この設定を行わないと、モデルを変更するたびにコード ファイルの名前が変更され、ファイルのソース管理ができません。

  • [自動] または [インライン] 以外のオプションとモデル コンフィギュレーション パラメーター [状態] を選択した場合、コード ジェネレーターは出力メソッドと更新メソッドを別々に生成します。コード ジェネレーターでは、[コード生成およびシミュレーション用に出力メソッドと更新メソッドを結合] の指定は考慮されません。

依存関係

  • このパラメーターではコード生成のために Simulink Coder のライセンスが必要です。

  • このパラメーターを有効にするには、[Atomic サブシステムとして扱う] をオンにします。

プログラムでの使用

ブロック パラメーターの値をプログラムで設定するには、関数 set_param を使用します。

パラメーター: RTWSystemCode
値: 'Auto' (既定値) | 'Inline' | 'Nonreusable function' | 'Reusable function'

サブシステム用に生成される関数に名前を付ける方法を選択します。

Embedded Coder ライセンスをお持ちの場合、コンフィギュレーション パラメーターの [コード生成][識別子] ペインのオプションで関数名を制御できます。

  • 自動 — 既定の名前付けの規則、model_subsystem() を使用して一意の関数名を割り当てます。ここで model はモデルの名前であり、subsystem はサブシステムの名前、または、コードが再使用される場合に同一のものの名前です。

    [関数のパッケージ化] パラメーターに [再利用可能な関数] を選択し、モデル参照階層に再利用可能なサブシステムのインスタンスが複数含まれている場合に、サブシステムで再利用可能なコードを生成するには、[関数名オプション][自動] に設定しなければなりません。

  • サブシステム名を使用 — 関数名にサブシステム名を使用します。既定では、関数名は命名規則 model_subsystem を使用します。

    サブシステムがライブラリ ブロックにあり、そのサブシステムのパラメーター関数のパッケージ化[再利用可能な関数] に設定されている場合、[サブシステム名を使用] オプションを設定すると、コード ジェネレーターはそのサブシステムの関数名とファイル名に対してライブラリ ブロックの名前を使用します。

  • ユーザー指定[関数名] フィールドが有効になります。有効な C または C++ 関数名 (固有でなければならない) を入力します。

詳細については、サブシステム コードを別々の関数およびファイルとして生成 (Simulink Coder)を参照してください。

依存関係

  • このパラメーターには Simulink Coder のライセンスが必要です。

  • このパラメーターを有効にするには、[関数のパッケージ化][再利用できない関数] または [再利用可能な関数] に設定します。

プログラムでの使用

ブロック パラメーターの値をプログラムで設定するには、関数 set_param を使用します。

パラメーター: RTWFcnNameOpts
値: 'Auto' (既定値) | 'Use subsystem name' | 'User specified'

サブシステム コードに対して、一意で有効な C または C++ 関数名を指定します。

Simulink Coder コード ジェネレーターで自動生成された名前を割り当てたり、サブシステム名を使用したりする代わりに、関数に特定の名前を割り当てるには、このパラメーターを使用します。詳細については、サブシステム コードを別々の関数およびファイルとして生成 (Simulink Coder)を参照してください。

依存関係

  • このパラメーターには Simulink Coder のライセンスが必要です。

  • このパラメーターを有効にするには、[関数名オプション][ユーザー指定] に設定します。

プログラムでの使用

ブロック パラメーターの値をプログラムで設定するには、関数 set_param を使用します。

パラメーター: RTWFcnName
値: '' (既定値) | function name in quotes
データ型: char | string

サブシステムに対して生成される関数の個々のファイルに名前を付ける方法を選択します。

  • 自動 — サブシステムの構成およびモデルにあるインスタンスの数によって、[自動] は異なる結果を返します。

    • コード ジェネレーターがサブシステムに個別のファイルを "生成しない" 場合、サブシステムの親システムから生成されたコード モジュール内で、サブシステム コードが生成されます。サブシステムの親がモデル自体の場合、サブシステム コードは model.c または model.cpp 内で生成されます。

    • [関数のパッケージ化] パラメーターに [再利用可能な関数] を選択し、生成コードがソース管理下にある場合、[ファイル名オプション][自動] 以外の値を指定することを検討してください。これにより、関係のないモデル変更によって生成されたファイル名が変更されるのを防止できます。これは、ソース管理を使用して構成を管理する場合に問題となる点です。

    • [関数のパッケージ化] パラメーターに [再利用可能な関数] を選択し、モデル参照階層に再利用可能なサブシステムのインスタンスが複数含まれている場合に、サブシステムで再利用可能なコードを生成するには、[ファイル名オプション][自動] に設定しなければなりません。

  • サブシステム名を使用 — コード ジェネレーターは、サブシステム (またはライブラリ ブロック) 名をファイル名として使用して、別のファイルを生成します。

    [ファイル名オプション][サブシステム名を使用] に設定すると、モデルに Model ブロックが含まれている場合、またはモデルのモデル参照ターゲットが生成されている場合に、サブシステムのファイル名はマングルされます。これらの状況で、サブシステムのファイル名はモデル名を前置したサブシステムの名前で構成されます。

  • 関数名を使用 — コード ジェネレーターは [関数名オプション] により指定される関数名をファイル名として使用します。

  • ユーザー指定 — このオプションは [ファイル名 (拡張子なし)] テキスト入力フィールドを有効にします。コード ジェネレーターは入力された名前をファイル名として使用します。任意のファイル名を入力しますが、.c.cpp (などの) 拡張子は含めないでください。このファイル名は一意である必要はありません。

    サブシステムのソース ファイル名は一意である必要はありませんが、循環的な依存状態になるような一意でない名前を付けることは避けなければなりません。たとえば、sys_a.h には sys_b.h が含まれ、sys_b.h には sys_c.h が含まれ、sys_c.h には sys_a.h が含まれます。

依存関係

  • このパラメーターには Simulink Coder のライセンスが必要です。

  • このパラメーターを有効にするには、[関数のパッケージ化][再利用できない関数] または [再利用可能な関数] に設定します。

プログラムでの使用

ブロック パラメーターの値をプログラムで設定するには、関数 set_param を使用します。

パラメーター: RTWFileNameOpts
値: 'Auto' (既定値) | 'Use subsystem name' | 'Use function name' | 'User specified'

指定するファイル名は、一意である必要はありません。ただし、循環的な依存状態になるような一意でない名前を付けることは避けてください。たとえば、sys_a.h には sys_b.h が含まれ、sys_b.h には sys_c.h が含まれ、sys_c.h には sys_a.h が含まれます。

詳細については、サブシステム コードを別々の関数およびファイルとして生成 (Simulink Coder)を参照してください。

依存関係

  • このパラメーターには Simulink Coder のライセンスが必要です。

  • このパラメーターを有効にするには、[ファイル名オプション][ユーザー指定] に設定します。

プログラムでの使用

ブロック パラメーターの値をプログラムで設定するには、関数 set_param を使用します。

パラメーター: RTWFileName
値: '' (既定値) | filename in quotes
データ型: char | string

生成される関数で引数を使用する方法を選択します。

  • void_void — 引数をもたない関数を生成し、グローバル変数でデータを渡します。以下に例を示します。

    void subsystem_function(void)

  • 引数を許可 (最適化) — グローバル変数でデータを渡さずに引数を使用する関数を生成します。これを指定すると、グローバル RAM が節約されます。このオプションにより、コード サイズが削減され、実行速度が改善されます。また、コード ジェネレーターによりさらなる最適化が有効になります。以下に例を示します。

    void subsystem_function(real_T rtu_In1, real_T rtu_In2, 
                            real_T *rty_Out1)

    場合によっては、最適化されたコードの生成時に、コード ジェネレーターが引数をもつ関数を生成しない可能性があります。

  • 引数を許可 (グラフィカル インターフェイスとの一致)Subsystem グラフィカル ブロック インターフェイスに一致する引数を使用する関数インターフェイスを生成します。生成される関数インターフェイスは予測可能であり変更されません。予測可能なインターフェイスは、デバッグやコードのテスト、外部アプリケーションとの統合において有用である可能性があります。たとえば、モデルに 2 つの Inport ブロックと 2 つの Outport ブロックがある場合、生成される関数インターフェイスは次のようになります。

    void subsystem_function(real_T rtu_In1, real_T rtu_In2, 
                            real_T *rty_Out1, real_T *rty_Out2)

詳細については、以下を参照してください。

依存関係

  • このパラメーターには Embedded Coder のライセンスと ERT ベースのシステム ターゲット ファイルが必要です。

  • このパラメーターを有効にするには、[関数のパッケージ化][再利用できない関数] に設定します。

プログラムでの使用

ブロック パラメーターの値をプログラムで設定するには、関数 set_param を使用します。

パラメーター: FunctionInterfaceSpec
値: 'void_void' (既定値) | 'Allow arguments (Optimized)' | 'Allow arguments (Match graphical interface)'

Atomic Subsystem 用の内部データが親モデルから分離され、サブシステムに所有されているサブシステムの関数コードを生成します。

  • off — Atomic Subsystem 用の内部データが親モデルから分離され、サブシステムに所有されているサブシステムの関数コードを生成しません。

  • on — Atomic Subsystem 用の内部データが親モデルから分離され、サブシステムに所有されているサブシステムの関数コードを生成します。サブシステムのデータ構造は、親モデルのデータ構造とは別に宣言されます。個別のデータをもつサブシステムは、独自のブロック I/O と DWork データ構造対をもちます。結果として、サブシステムに対して生成されたコードの方が、追跡とテストが容易になります。また、データを分離すると、データが複数のデータ構造に分割されるため、モデル全体のデータ構造の最大サイズが小さくなる傾向があります。

Atomic Subsystem の modular function コードを生成する方法の詳細は、非バーチャル サブシステムのモジュラー関数コードの生成 (Embedded Coder)を参照してください。

Atomic Subsystem にメモリ セクションを適用する方法の詳細は、Override Default Memory Placement for Subsystem Functions and Data (Embedded Coder)を参照してください。

依存関係

  • このパラメーターには Embedded Coder のライセンスと ERT ベースのシステム ターゲット ファイルが必要です。

  • このパラメーターを有効にするには、[関数のパッケージ化][再利用できない関数] に設定します。

プログラムでの使用

ブロック パラメーターの値をプログラムで設定するには、関数 set_param を使用します。

パラメーター: FunctionWithSeparateData
値: 'off' (既定値) | 'on'

サブシステムの初期化および終了関数へのメモリ セクションの適用方法を選択します。

  • モデルから継承 — ルート モデルのメモリ セクションをサブシステムの関数コードに適用します。

  • 既定の設定 — 任意のモデルレベルの仕様を無効にして、サブシステムのシステム コードにメモリ セクションを適用しません。

  • 目的のメモリ セクション — モデルのメモリ セクションの 1 つをサブシステムに適用します。

ヒント

  • 入力可能な値は、モデル コンフィギュレーションに対してメモリ セクションのどのようなパッケージを設定しているのかによって異なります。Control Data and Function Placement in Memory by Inserting Pragmas (Embedded Coder)およびモデル コンフィギュレーション パラメーター: コード生成 (Simulink Coder)を参照してください。

  • パッケージを使用してモデルを構成していない場合、使用可能な値は [モデルから継承] のみです。そうでない場合、このリストには [既定の設定] と、モデルのパッケージに含まれているすべてのメモリ セクションが表示されます。

  • これらのオプションは、指定されたサブシステム モデルのメモリ セクションの設定を無効にする場合に利用できます。Atomic Subsystem にメモリ セクションを適用する方法の詳細は、Override Default Memory Placement for Subsystem Functions and Data (Embedded Coder)を参照してください。

依存関係

  • このパラメーターには Embedded Coder のライセンスと ERT ベースのシステム ターゲット ファイルが必要です。

  • このパラメーターを有効にするには、[関数のパッケージ化][再利用できない関数] または [再利用可能な関数] に設定します。

プログラムでの使用

ブロック パラメーターの値をプログラムで設定するには、関数 set_param を使用します。

パラメーター: RTWMemSecFuncInitTerm
値: 'Inherit from model' (既定値) | 'Default' | 'The memory section of interest'

Embedded Coder におけるサブシステムの実行関数へのメモリ セクションの適用方法を選択します。

  • モデルから継承 — ルート モデルのメモリ セクションをサブシステムの関数コードに適用します。

  • 既定の設定 — 任意のモデルレベルの仕様を無効にして、サブシステムのシステム コードにメモリ セクションを適用しません。

  • 目的のメモリ セクション — モデルのメモリ セクションの 1 つをサブシステムに適用します。

ヒント

  • 入力可能な値は、モデル コンフィギュレーションに対してメモリ セクションのどのようなパッケージを設定しているのかによって異なります。Control Data and Function Placement in Memory by Inserting Pragmas (Embedded Coder)およびモデル コンフィギュレーション パラメーター: コード生成 (Simulink Coder)を参照してください。

  • パッケージを使用してモデルを構成していない場合、使用可能な値は [モデルから継承] のみです。そうでない場合、このリストには [既定の設定] と、モデルのパッケージに含まれているすべてのメモリ セクションが表示されます。

  • これらのオプションは、指定されたサブシステム モデルのメモリ セクションの設定を無効にする場合に利用できます。Atomic Subsystem にメモリ セクションを適用する方法の詳細は、Override Default Memory Placement for Subsystem Functions and Data (Embedded Coder)を参照してください。

依存関係

  • このパラメーターには Embedded Coder のライセンスと ERT ベースのシステム ターゲット ファイルが必要です。

  • このパラメーターを有効にするには、[関数のパッケージ化][再利用できない関数] または [再利用可能な関数] に設定します。

プログラムでの使用

ブロック パラメーターの値をプログラムで設定するには、関数 set_param を使用します。

パラメーター: RTWMemSecFuncExecute
値: 'Inherit from model' (既定値) | 'Default' | 'The memory section of interest'

サブシステムの定数へのメモリ セクションの適用方法を選択します。

  • モデルから継承 — ルート モデルのメモリ セクションをサブシステム データに適用します。

  • 既定の設定 — 任意のモデル レベルの仕様を無効にして、サブシステムのデータにメモリ セクションを適用しません。

  • 目的のメモリ セクション — モデルのメモリ セクションの 1 つをサブシステムに適用します。

ヒント

  • 指定したメモリ セクションが、生成されたコードの対応するグローバル データ構造体に適用されます。Atomic サブシステムに対して生成されるグローバル データ構造体の基本情報については、標準のデータ構造体 (Simulink Coder)を参照してください。

  • 入力可能な値は、モデル コンフィギュレーションに対してメモリ セクションのどのようなパッケージを設定しているのかによって異なります。Control Data and Function Placement in Memory by Inserting Pragmas (Embedded Coder)を参照してください。

  • パッケージを使用してモデルを構成していない場合、使用可能な値は [モデルから継承] のみです。そうでない場合、このリストには [既定の設定] と、モデルのパッケージに含まれているすべてのメモリ セクションが表示されます。

  • これらのオプションは、指定されたサブシステム モデルのメモリ セクションの設定を無効にする場合に利用できます。Atomic Subsystem にメモリ セクションを適用する方法の詳細は、Override Default Memory Placement for Subsystem Functions and Data (Embedded Coder)を参照してください。

依存関係

  • このパラメーターには Embedded Coder のライセンスと ERT ベースのシステム ターゲット ファイルが必要です。

  • このパラメーターを有効にするには、[関数のパッケージ化][再利用できない関数] に設定し、[別々のデータをもつ関数] パラメーターを選択します。

プログラムでの使用

ブロック パラメーターの値をプログラムで設定するには、関数 set_param を使用します。

パラメーター: RTWMemSecDataConstants
値: 'Inherit from model' (既定値) | 'Default' | 'The memory section of interest'

サブシステムの内部データへのメモリ セクションの適用方法を選択します。

  • モデルから継承 — ルート モデルのメモリ セクションをサブシステム データに適用します。

  • 既定の設定 — 任意のモデル レベルの仕様を無効にして、サブシステムのデータにメモリ セクションを適用しません。

  • 目的のメモリ セクション — モデルのメモリ セクションの 1 つをサブシステムに適用します。

ヒント

  • 指定したメモリ セクションが、生成されたコードの対応するグローバル データ構造体に適用されます。Atomic サブシステムに対して生成されるグローバル データ構造体の基本情報については、標準のデータ構造体 (Simulink Coder)を参照してください。

  • 入力可能な値は、モデル コンフィギュレーションに対してメモリ セクションのどのようなパッケージを設定しているのかによって異なります。Control Data and Function Placement in Memory by Inserting Pragmas (Embedded Coder)を参照してください。

  • パッケージを使用してモデルを構成していない場合、使用可能な値は [モデルから継承] のみです。そうでない場合、このリストには [既定の設定] と、モデルのパッケージに含まれているすべてのメモリ セクションが表示されます。

  • これらのオプションは、指定されたサブシステム モデルのメモリ セクションの設定を無効にする場合に利用できます。Atomic Subsystem にメモリ セクションを適用する方法の詳細は、Override Default Memory Placement for Subsystem Functions and Data (Embedded Coder)を参照してください。

依存関係

  • このパラメーターには Embedded Coder のライセンスと ERT ベースのシステム ターゲット ファイルが必要です。

  • このパラメーターを有効にするには、[関数のパッケージ化][再利用できない関数] に設定し、[別々のデータをもつ関数] パラメーターを選択します。

プログラムでの使用

ブロック パラメーターの値をプログラムで設定するには、関数 set_param を使用します。

パラメーター: RTWMemSecDataInternal
値: 'Inherit from model' (既定値) | 'Default' | 'The memory section of interest'

サブシステムのパラメーターへのメモリ セクションの適用方法を選択します。

  • モデルから継承 — ルート モデルのメモリ セクションをサブシステムの関数コードに適用します。

  • 既定の設定 — 任意のモデル レベルの仕様を無効にして、サブシステムのシステム コードにメモリ セクションを適用しません。

  • 目的のメモリ セクション — モデルのメモリ セクションの 1 つをサブシステムに適用します。

ヒント

  • 指定したメモリ セクションが、生成されたコードの対応するグローバル データ構造体に適用されます。Atomic サブシステムに対して生成されるグローバル データ構造体の基本情報については、標準のデータ構造体 (Simulink Coder)を参照してください。

  • 入力可能な値は、モデル コンフィギュレーションに対してメモリ セクションのどのようなパッケージを設定しているのかによって異なります。Control Data and Function Placement in Memory by Inserting Pragmas (Embedded Coder)を参照してください。

  • パッケージを使用してモデルを構成していない場合、使用可能な値は [モデルから継承] のみです。そうでない場合、このリストには [既定の設定] と、モデルのパッケージに含まれているすべてのメモリ セクションが表示されます。

  • これらのオプションは、指定されたサブシステム モデルのメモリ セクションの設定を無効にする場合に利用できます。Atomic Subsystem にメモリ セクションを適用する方法の詳細は、Override Default Memory Placement for Subsystem Functions and Data (Embedded Coder)を参照してください。

依存関係

  • このパラメーターには Embedded Coder のライセンスと ERT ベースのシステム ターゲット ファイルが必要です。

  • このパラメーターを有効にするには、[関数のパッケージ化][再利用できない関数] に設定し、[別々のデータをもつ関数] パラメーターを選択します。

プログラムでの使用

ブロック パラメーターの値をプログラムで設定するには、関数 set_param を使用します。

パラメーター: RTWMemSecDataParameters
値: 'Inherit from model' (既定値) | 'Default' | 'The memory section of interest'

ブロックの特性

データ型

Booleana | busa | doublea | enumerateda | fixed pointa | halfa | integera | singlea

直達

いいえ

多次元信号

はいa

可変サイズの信号

いいえ

ゼロクロッシング検出

いいえ

a 実際のデータ型または機能のサポートは、ブロックの実装に依存します。

拡張機能

バージョン履歴

R2010a で導入