Main Content

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

出力端子がバーチャルであることを確認

Simulink® では、条件付きサブシステムの Outport ブロックの前またはモデルの最上位の Outport ブロックの前に非表示の信号バッファーが追加されることがあります。このバッファーは、Outport ブロック信号の一貫した初期化を必ず行います。

条件付き出力信号や部分書き込み信号においては、この信号バッファーの追加によって異なるシミュレーション結果が得られることがあります。[出力端子がバーチャルであることを確認] パラメーターは、このバッファーを削除するための Outport ブロックのオプションです。このオプションは、条件付き書き込み信号や部分書き込み信号が懸念される場合に選択します。

条件付き出力信号

次のモデルについて考えます。モデルを開くには、ex_conditional_write を参照してください。

Merge ブロックは、そのブロックの入力を任意時間における値が直前に計算された駆動側ブロックの出力に等しい単一の信号に結合します。

ほとんどのモデルでは、Enabled Subsystem C に接続された Outport ブロックの [出力端子がバーチャルであることを確認] チェック ボックスをオフにします。

  • Outport ブロックは非バーチャル セマンティクスに従います。必要に応じて Outport ブロックの前に非表示バッファーが挿入されます。

  • バッファーによって Outport ブロック信号の一貫した初期化が維持されます。

時間 0: A が実行され、C は実行されません。ただし、A にバッファーがあるため、バッファーが実行されて初期値である 0 が Outport ブロックにコピーされます。B は実行されません。マージ信号は A からの出力である 0 になります。

時間 0.5: A は実行されません。B が実行され、正弦波が出力されます。マージ信号は B からの正弦波になります。

時間 1: A が実行され、C は実行されません。ただし、ここでもバッファーが実行されて初期値である 0 が Outport ブロックにコピーされます。B は実行されません。マージ信号は、B からの最終値ではなく、再び A の初期値になります。

固定ステップでモデルをシミュレートすると、次のような結果が得られます。

条件付き書き込みや部分書き込みが懸念される場合は、Enabled Subsystem C に接続された Outport ブロックの [出力端子がバーチャルであることを確認] チェック ボックスをオンにします。

  • Outport ブロックはバーチャル セマンティクスに従います。

  • Subsystem の Outport ブロックの前に非表示バッファーは挿入されません。

  • Simulink でバッファーが必要であると判定された場合は、エラーが表示されます。

時間 0: A が実行され、C は実行されません。B は実行されません。マージ信号は信号の初期値になります。

時間 0.5 秒: A は実行されません。B が実行され、正弦波が出力されます。マージ信号は B からの正弦波の値になります。

時間 1: A が実行され、C は実行されません。B は実行されません。マージ信号は最後に計算された出力で、B からの正弦波でした。

Merge ブロックを使用した部分書き込み信号

一般的なモデル化パターンでは、ベクトル信号を初期化した後、特定の条件や入力に基づいて信号の部分的な要素を定期的に更新します。このパターンをモデル化する方法の 1 つに、2 つの Function-Call Subsystem ブロックから入力を受け取る Merge ブロックを使用する方法があります。一方のサブシステムが初期化タスクで、もう一方のサブシステムが定期的な書き込みタスクです。

次のモデルはこのパターンを示したものです。Initialize_Process_Subsystem は、シミュレーションの開始時にベクトル信号を初期化するために 1 回呼び出されます。Run_Process_Subsystem は、ベクトルの要素への部分的な書き込みを行うために呼び出されます。ただし、Assignment ブロックからの出力で、非表示バッファーによってベクトルのコピーが作成されないパスが必要になります。Outport ブロックの [出力端子がバーチャルであることを確認] チェック ボックスをオンにすると非表示バッファーが削除されます。Simulink でバッファーが必要であると判定された場合はエラーが表示されます。モデルを開くには、ex_partial_write_single_merge を参照してください。

Initialize_Process_SubSystem

  • 2 要素ベクトルの各要素の値を 7 に初期化します。

  • ベクトル [7 7] を出力します。

Run_Process_Subsystem

  • インデックス値 1 を入力します。Selector ブロックの [インデックス モード] パラメーターが [0 ベース] に設定されているため、入力ベクトルから 2 番目の要素が選択されます。

  • Selector ブロックからの出力スカラー値を加算します。結果は 4 です。

  • Assignment ブロックの [インデックス モード] パラメーターが [0 ベース] に設定されており、入力インデックス Idx1 が 1 であるため、出力信号は長さが 2 のベクトルでなければなりません。[出力サイズ] パラメーターを 2 に設定すると、Assignment ブロックで 2 番目の要素への書き込みが可能になります。

  • [出力端子がバーチャルであることを確認] チェック ボックスをオンにすると非表示バッファーが削除されます。

このモデルから生成されるコードには、Init_ProcRun_Proc の 2 つの関数が含まれます。

	/* Model step function */
	void Init_Proc(void)
	{
	  int32_T s3_iter;
	
	  /* Initialize signal vector elements with 7.0 */
         for (s3_iter = 0; s3_iter < 2; s3_iter++) {
	    PartialWriteSingleMerge_DW.Assignment[s3_iter] = 7.0;
	  }

	  for (s3_iter = 0; s3_iter < 2; s3_iter++) {
	    PartialWriteSingleMerge_Y.Out4[s3_iter] =
	      PartialWriteSingleMerge_DW.Assignment[s3_iter];
	  }
	}
	
	/* Model step function */
	void Run_Proc(void)
	{
        /* Write to element 1 of the output signal vector */
	  PartialWriteSingleMerge_Y.Out4[1] = 4.0;
	}