Гарантируйте, что Выходной порт является Виртуальным

Simulink® может добавить скрытый буфер сигнала перед блоком Outport в условной подсистеме или перед блоком Outport на корневом уровне модели. Этот буфер гарантирует сопоставимую инициализацию блока-сигнала Выходного порта.

В нескольких случаях, добавляя буфер сигнала с условным выходным сигналом или частичным сигналом записи может вызвать различный результат симуляции. Параметр Гарантирует, что выходной порт является виртуальным, опция на блоке Outport, чтобы демонтировать буфер. Выберите эту опцию, когда вы будете обеспокоены условными или частичными сигналами записи.

Условный выходной сигнал

Рассмотрите следующую модель.

Блок Merge комбинирует свои входные параметры в единственный сигнал, значение которого в любое время равно последний раз вычисленному выводу его ведущих блоков.

Для случая с большинством моделей очиститесь (сняли флажок) с Гарантировать выходным портом, виртуальный флажок на блоке Outport, соединенном с Enabled Subsystem C.

  • Блок выходного порта следует за невиртуальной семантикой. Скрытый буфер вставляется в случае необходимости перед блоком Outport.

  • Буфер обеспечивает сопоставимую инициализацию блока-сигнала Выходного порта.

Время 0: выполнения A, C не запускается, но потому что буфер находится в A, это запускает и копирует начальное значение нуля к блоку Outport. B не запускается. Сигнал слияния является нулем от вывода от A.

Время 0.5: A не запускается. B выполнения и выходные параметры синусоида. Сигнал слияния является синусоидой от B.

Время 1. выполнения A, C не запускается, но буфер снова запускает и копирует по начальному значению нуля к блоку Outport. B не запускается. Сигнал слияния является снова начальным значением A, не последним значением от B.

При моделировании модели с фиксированным шагом, приводит к следующему результату.

Для случая, где вы обеспокоены условным выражением и частичными записями, выберите (проверяют), что Гарантировать выходной порт является виртуальным флажком для блока Outport, соединенного с Enabled Подсистемой C.

  • Блок Outport следует за виртуальной семантикой.

  • Скрытый буфер не вставляется перед блоком Outport Подсистемы.

  • Если Simulink решает, что буфер необходим, ошибка отображена.

Время 0: выполнения A, C не запускается. B не запускается. Сигнал слияния является начальным значением сигнала.

Время 0,5 секунды: A не запускается. B выполнения и выходные параметры синусоида. Сигнал слияния является значением синусоиды от B.

Время 1: выполнения A, C не запускается. B не запускается. Сигналом слияния является последний раз вычисленный вывод, который был синусоидой от B.

Частичные сигналы записи с блоком слияния

Типичный шаблон моделирования - то, где вы хотите инициализировать векторный сигнал и затем периодически обновлять частичные элементы сигнала, основанного на определенных обстоятельствах или входных параметрах. Один способ смоделировать этот шаблон состоит в том, чтобы использовать блок Merge, входные параметры которого от двух блоков Подсистемы вызова функций. Одна подсистема является инициализировать задачей, в то время как другая подсистема является периодической задачей записи.

Модель ниже демонстрирует этот шаблон. Initialize_Process_Subsystem называется однажды в начале моделирования, чтобы инициализировать векторный сигнал. Run_Process_Subsystem называется, чтобы частично записать в элементы вектора. Однако для вывода от блока Assignment нужен путь, где скрытые буферы не делают копии вектора. Выбор выходного порта Ensure является виртуальным флажком на блоке Outport, демонтирует скрытый буфер. Если Simulink решает, что буфер необходим, ошибка отображена.

Initialize_Process_SubSystem

  • Инициализирует каждый элемент 2 векторов элемента со значением 7.

  • Выводит векторный [7 7].

Run_Process_Subsystem

  • Вводит индексное значение 1, но потому что параметр Режима индексации для Селекторных блоков устанавливается на Zero-based, они выбирают 2-е элементы из входных векторов.

  • Добавляют выходные скалярные значения от Селекторных блоков для результата 4.

  • Поскольку параметр Режима индексации блока Assignment устанавливается на Zero-based, и входным индексом Idx1 является 1, выходной сигнал должен быть вектором с длиной 2. После установки Выходного параметра размера на 2 блок Assignment может записать в 2-й элемент.

  • Выбор выходного порта Ensure является виртуальным флажком, демонтирует скрытый буфер.

Код, сгенерированный от этой модели, включает две функции. Init_Proc и Run_Proc.

	/* 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;
	}
Была ли эта тема полезной?