ドキュメンテーション

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

可変サイズの信号の基礎

可変サイズの信号について

Simulink® の信号となるのはスカラー、ベクトル (1 次元)、行列 (2 次元) または N 次元の行列です。これらのタイプの信号に関する詳細は、『Simulink ユーザー ガイド』の信号の基礎を参照してください。

Simulink の可変サイズの信号は、モデル シミュレーション実行中に、値だけではなくサイズ (次元の要素数) も変更できる信号です。ただし、シミュレーション実行中に次元数を変更することはできません。この機能により、さまざまなリソース、制約、および環境のモデル システムを実現できます。

可変サイズの信号の作成

Simulink モデルに可変サイズの信号を作成するには、次のものを使用します。

  • 異なるサイズの固定サイズの信号をもつ異なる入力端子をもつ、Switch または Multiport Switch ブロック。出力は、可変サイズの信号です。

  • Selector ブロックおよび [開始と終了インデックス (端子)] インデックス オプション。インデックス端子信号は、シミュレーションの進行中に可変サイズの出力信号を生成する、入力データ信号の異なるサブ領域を指定できます。

  • 可変サイズの信号を受け入れるよう設定された出力端子をもつ S-Function ブロック。出力には、値だけではなく信号の次元も含まれます。

可変サイズの信号の伝播方法

Simulink 環境では、可変サイズの信号は、モデル実行中に次の 2 つの方法でサイズを変更できます。

  • モデル実行のステップごと

    モデル内のさまざまなブロックは、出力メソッドの実行中に信号サイズを変更することができます。

  • 条件付きで実行されるサブシステムの初期化中のみ

    サイズ変更は、Action、Enable、および Function-Call などのサブシステムの、異なるモード切り替えイベント中に発生します。

状態をもつ Discrete 2-Tap Filter ブロックを見ると、主な違いがわかります。

Discrete 2-Tap Filter

このフィルターの入力信号の次元が、シミュレーション実行中に 4 から 1 に変化すると仮定します。入力処理を継続するために Unit Delay ブロックの状態が 4 から 1 に変化するタイミングおよび状態はあいまいです。整合性を保つために、両方の Unit Delay ブロックは、その状態の動作を同期的に変更しなければなりません。あいまいさを回避するために、通常、Simulink は、実行中の任意のときに信号のサイズが変化する状況で、状態数が入力信号のサイズに依存するブロックを許可しません。

一方、Function-call Subsystem の同じ Discrete 2-Tap Filter ブロックを見てみましょう。このサブシステムが 2 番目の方法を使用して可変サイズの信号を伝播するものと仮定します。この場合、入力信号のサイズは、サブシステムの初期化のときにのみ 4 から 1 に変化します。初期化の間、サブシステムは (2 つの Unit Delay ブロックの状態を含む) すべての状態を初期値にリセットします。サブシステムをリセットすると、フィルターの入力信号に対する状態の割り当てがあいまいになることはありません。

モード依存の可変サイズ信号は、2 つの方法を使用し、補完的な方法で可変サイズの信号をモデルの複雑なシステムに伝播する様子を示します。

信号線が可変サイズかどうかのプログラムによる確認

この例では、コマンド プロンプトまたはスクリプトでコマンドを使用して、信号線が可変サイズかどうかを確認する方法を示します。サブシステムまたは参照モデルの大きなモデルまたは階層で、この手法を使用して上流ブロックにより信号が可変サイズであるかどうかを確認します。

このモデル例 sldemo_varsize_basic には、Switch ブロックの下流の信号 a が含まれています。コマンド プロンプトでコマンドを使用して a が可変サイズかどうかを確認します。

  1. モデル例を開きます

  2. 出力信号に a のラベルが付いている Sum ブロックを選択します。

  3. コマンド プロンプトで、(ブロック線図の更新と同様に) モデルをコンパイルされた状態に設定します。

    sldemo_varsize_basic([],[],[],'compile')

  4. ブロック出力端子へのハンドルを取得します。

    portHandles = get_param(gcb,'portHandles');
    outPortHandle = portHandles.Outport;

  5. 出力端子のプログラム上のパラメーター CompiledPortDimensionsMode をクエリします。

    varSize = get_param(outPortHandle,'CompiledPortDimensionsMode')
    varSize =
    
         1

    変数 varSize の値は 1 で、信号 a が可変サイズであることを示します。

    0 は、信号が可変サイズではないことを示します。

  6. モデルのコンパイルを終了します。

    sldemo_varsize_basic([],[],[],'term')

空の信号

空の信号は、長さが 0 である信号です。たとえば、大きさが [0][0x3][2x0]、および [2x0x3] の信号はすべて空の信号です。Simulink では、空の信号および可変サイズの信号を許容し、ほとんどの要素単位の演算をサポートしています。ただし、Simulink は、信号次元を変更するブロックの空の信号はサポートしません。サポートされないブロックには、特定の次元の Reshape、Permute、および Sum が含まれます。

可変サイズの信号のサブシステム初期化

条件付き実行サブシステムの Outport ブロックからの初期信号のサイズは、ユーザーが選択したパラメーターによって異なります。

親サブシステムの [可変サイズの信号のサイズを伝播] パラメーターを [実行中] に設定する場合、Output ブロックの [初期出力] パラメーターは、入力端子の最大サイズを超えてはなりません。[初期出力] パラメーターと初期出力信号サイズとの関係は、次のとおりです。

[初期出力] パラメーター初期出力信号のサイズ
非スカラー行列初期出力信号のサイズは、[初期出力] パラメーターのサイズです。
スカラー初期出力信号のサイズは、スカラーです。
既定の []初期出力信号のサイズは、空の信号 (次元はすべてゼロ) です。

親サブシステムの [可変サイズの信号のサイズを伝播] パラメーターを [イネーブルのときのみ] に設定する場合、Output ブロックの [初期出力] パラメーターは、スカラー値でなければなりません。

  • Outport ブロックの入力についてサイズが再伝播される場合、スカラー パラメーター値のスカラー拡張を使用して初期出力値が設定されます。

  • [初期出力] パラメーターが既定値 [] である場合、Simulink は初期出力を安定した値として扱います。

  • 開始時にモデルが親サブシステムを有効にしない場合 (t = 0)、Outport ブロックに対応するサブシステム出力の現在のサイズは、最大サイズに設定されます。

  • 親サブシステムが信号サイズを再伝播する場合、サブシステムの可変サイズの出力信号の値も初期出力パラメーター値にリセットされます。

関連するトピック