Simulink ® может добавить скрытый буфер сигнала перед блоком Outport в условной подсистеме или перед блоком Outport на верхнем уровне модели. Этот буфер обеспечивает последовательную инициализацию блочного сигнала Outport .
В нескольких случаях добавление буфера сигнала с условным выходным сигналом или сигналом частичной записи может привести к другому результату моделирования. Параметр Убедитесь, что исходящий порт является виртуальным, является параметром в блоке исходящего порта для удаления буфера. Выберите эту опцию, если речь идет об условных или частичных сигналах записи.
Рассмотрим следующую модель. Сведения об открытии модели см. в разделе ex_conditional_write.

Блок слияния объединяет свои входы в единый сигнал, значение которого в любой момент времени равно последнему вычисленному выходу его управляющих блоков.
В случае большинства моделей снимите флажок Обеспечить наличие виртуального исходящего порта на блоке Исходящий порт, подключенном к Enabled Subsystem C.
Блок Outport следует за невиртуальной семантикой. При необходимости перед блоком Outport вставляется скрытый буфер.
Буфер обеспечивает последовательную инициализацию блочного сигнала Outport.
Время 0: A прогоны, C не выполняется, но потому, что буфер находится в A, выполняется и копирует начальное значение нуля в блок Outport. B не выполняется. Сигнал объединения равен нулю от выхода A.
Время 0,5: A не выполняется. B выполняет и выводит синусоидальную волну. Сигнал слияния является синусоидальным сигналом от B.
Время 1. A выполняется, C не выполняется, но буфер снова запускается и копирует исходное значение, равное нулю, в блок Outport. B не выполняется. Сигнал слияния снова является начальным значением A, не последнее значение из B.
Моделирование модели с фиксированным шагом приводит к следующему результату.

Для случая, когда речь идет об условных и частичных записях, установите (установите) флажок «Гарантировать, что исходящий порт является виртуальным» для блока «Исходящий порт», подключенного к включенной подсистеме C.
Блок Outport следует виртуальной семантике.
Скрытый буфер не вставляется перед блоком Outport подсистемы.
Если Simulink определяет, что буфер необходим, отображается ошибка.
Время 0: A выполняется, C не выполняется. B не выполняется. Сигнал слияния является начальным значением сигнала.
Время 0,5 сек.: A не выполняется. B выполняет и выводит синусоидальную волну. Сигнал слияния - это значение синусоидальной волны от В.
Время 1: A выполняется, C не выполняется. B не выполняется. Сигнал слияния является самым последним вычисленным выходным сигналом, который был синусоидальным сигналом от В.

Типичный шаблон моделирования - это то, где требуется инициализировать векторный сигнал, а затем периодически обновлять частичные элементы сигнала на основе определенных условий или входных данных. Одним из способов моделирования этого шаблона является использование блока Merge, входные данные которого поступают из двух блоков Function-Call Subsystem. Одна подсистема является задачей инициализации, в то время как другая подсистема является задачей периодической записи.
Модель, приведенная ниже, демонстрирует этот шаблон. Этот Initialize_Process_Subsystem вызывается один раз в начале моделирования для инициализации векторного сигнала. Вызывается Run_Process_Subsystem для частичной записи в элементы вектора. Однако для вывода из блока Assignment требуется путь, по которому скрытые буферы не создают копии вектора. Установка флажка «Гарантировать, что исходящий порт является виртуальным» в блоке «Исходящий» удаляет скрытый буфер. Если Simulink определяет, что буфер необходим, отображается ошибка. Сведения об открытии модели см. в разделе ex_partial_write_single_merge.

В Initialize_Process_SubSystem
Инициализирует каждый элемент 2-элементного вектора со значением 7.
Вывод вектора [7 7].
В Run_Process_Subsystem
Вводит значение индекса 1, но потому, что параметр режима «Индекс» для блоков селектора имеет значение Zero-based, они выбирают 2-е элементы из входных векторов.
Добавляет выходные скалярные значения из блоков селектора для результата 4.
Поскольку параметр режима индекса блока назначения имеет значение Zero-based и входной индекс Idx1 равен 1выходной сигнал должен быть вектором длиной 2. После установки для параметра Output size значения 2блок Assignment способен записывать данные во 2-й элемент.
Установка флажка Убедитесь, что исходящий порт является виртуальным удаляет скрытый буфер.
Код, созданный на основе этой модели, включает две функции. 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;
}