Сигнал Simulink ® может быть скаляром, вектором (1-D), матрицей (2-D) или N-D. Сигнал переменного размера Simulink - это сигнал, размер которого (количество элементов в измерении), помимо его значений, может изменяться при моделировании модели. Однако во время моделирования количество размеров не может изменяться. Эта возможность позволяет моделировать системы с различными ресурсами, ограничениями и средами.
Можно создавать сигналы переменного размера в модели Simulink с помощью:
Коммутаторы или мультипортовые коммутаторы с различными входными портами, имеющими сигналы фиксированного размера с различными размерами. Выходной сигнал является сигналом переменного размера.
Блок селектора и Starting and ending indices (port) параметр индексирования. Индексный сигнал порта может определять различные субрегионы входного сигнала данных, которые производят выходной сигнал переменного размера по мере выполнения моделирования.
S-функциональный блок с выходным портом, сконфигурированным для сигнала переменного размера. Выход включает в себя не только значения, но и размер сигнала.
В среде Simulink сигналы переменного размера могут изменять свой размер во время выполнения модели одним из двух способов:
На каждом этапе выполнения модели.
Различные блоки в модели изменяют размеры сигналов во время выполнения способа вывода.
Только при инициализации условно выполненных подсистем.
Изменения размеров происходят во время различных событий переключения режимов в таких подсистемах, как Action, Enable и Function-Call.
Вы видите основное отличие, рассматривая Дискретный блок Фильтра С 2 сигналами с государствами.
Дискретный фильтр 2-Tap

Предположим, что размер входного сигнала этого фильтра изменяется от 4 до 1 во время моделирования. Неоднозначно, когда и как состояния блоков единичной задержки должны адаптироваться от 4 до 1 для продолжения обработки входных данных. Для обеспечения согласованности оба блока Unit Delay должны синхронно изменять свое состояние. Чтобы предотвратить неоднозначность, Simulink обычно запрещает блоки, число состояний которых зависит от размеров входного сигнала в контекстах, где размеры сигнала изменяются в любой точке во время выполнения.
Напротив, рассмотрим тот же блок дискретного фильтра 2-Tap в подсистеме Function-Call. Предположим, что эта подсистема использует второй способ распространения сигналов переменного размера. В этом случае размер входного сигнала изменяется с 4 на 1 только при инициализации подсистемы. При инициализации подсистема сбрасывает все свои состояния (включая состояния двух блоков единичной задержки) до их начальных значений. Сброс подсистемы обеспечивает отсутствие неоднозначности при назначении состояний входному сигналу фильтра.
Режим-зависимые сигналы переменного размера (Mode-Dependent Variable-Size Signals) показывает, как можно использовать два способа распространения сигналов переменного размера в дополнение к модельным сложным системам.
В следующем примере показано, как использовать команды в командной строке или в сценарии для определения того, имеет ли сигнальная линия переменный размер. В большой модели или иерархии подсистем или ссылочных моделей используйте этот метод, чтобы определить, имеет ли сигнал переменный размер из-за восходящего блока.
Пример модели sldemo_varsize_basic содержит сигнал a после блока Switch.
Откройте пример модели.
Выберите блок Sum, выходной сигнал которого помечен a.
Введите в командном окне следующее, чтобы перевести модель в скомпилированное состояние (аналогично обновлению диаграммы).
sldemo_varsize_basic([],[],[],'compile')Получите дескриптор выходного порта блока.
portHandles = get_param(gcb,'portHandles');
outPortHandle = portHandles.Outport;Запрос программного параметра CompiledPortDimensionsMode выходного порта.
varSize = get_param(outPortHandle,'CompiledPortDimensionsMode')varSize =
1Значение переменной varSize является 1, который указывает, что сигнал a имеет переменный размер.
Стоимость 0 указывает, что сигнал не имеет переменного размера.
Завершите компиляцию модели.
sldemo_varsize_basic([],[],[],'term')
Пустой сигнал - это сигнал длиной 0. Например, сигналы с размером [0], [0x3], [2x0], и [2x0x3] являются пустыми сигналами. Simulink позволяет использовать пустые сигналы с переменным размером и поддерживает большинство элементных операций. Однако Simulink не поддерживает пустые сигналы для блоков, изменяющих размеры сигнала. К неподдерживаемым блокам относятся блоки «Изменить форму», «Перестановка» и «Сумма» для заданного размера.
Таблица поддержки типа данных блока Simulink содержит полный список блоков, поддерживающих сигналы переменного размера.
Чтобы просмотреть таблицу, выполните следующие действия.
Откройте модель Simulink.
В командной строке MATLAB ® введитеshowblockdatatypetable.
Откроется отдельное окно с таблицей Поддержка типа данных блока Simulink (Simulink Block Data Type Support).
Один X в столбце «Поддержка переменного размера» указывается поддержка этого блока.
Совет
Можно также просмотреть таблицу, введя showblockdatatypetable в командной строке.
Начальный размер сигнала из блока Outport в условно выполняемой подсистеме зависит от выбранных параметров.
Если для параметра Распространить размеры сигналов переменного размера в родительской подсистеме задано значение During execution, параметр Initial output для блока Output не должен превышать максимальный размер входного порта. Если параметр Initial output имеет значение:
| Начальный выходной параметр | Размер исходного выходного сигнала |
|---|---|
| Нескалярная матрица | Начальный размер выходного сигнала - это размер параметра Initial output. |
| Скаляр | Начальный размер выходного сигнала является скалярным. |
| Значение по умолчанию [] | Начальный размер выходного сигнала является пустым сигналом (все размеры равны нулю). |
Если для параметра Распространить размеры сигналов переменного размера в родительской подсистеме задано значение Only when enabling, параметр Initial output для блока Output должен быть скалярным значением.
При повторном распространении размера для входа блока Outport начальное выходное значение устанавливается с использованием скалярного расширения из значения скалярного параметра.
Если параметр Initial output является значением по умолчанию []Simulink обрабатывает начальный вывод как заземленное значение.
Если модель не активирует родительскую подсистему во время запуска (t = 0), текущий размер выходного сигнала подсистемы, соответствующий блоку Outport, устанавливается равным максимальному размеру.
Когда его родительская подсистема повторно распространяет размеры сигнала, значения выходных сигналов переменного размера подсистемы также сбрасываются до их начальных значений выходных параметров.
Блоки портов управления находятся в условно выполненных подсистемах. Для параметра «Распространить размеры сигналов переменного размера» для этих блоков можно установить значение During execution, Only when execution is resumed (Порт действия), и Only when enabling (Enable and Trigger или Function-Call).

Триггер - тип триггера имеет значение function-call
Блоки переключения поддерживают сигналы переменного размера, позволяя входным сигналам различных размеров и распространяя размер входного сигнала на выходной сигнал. Параметр Разрешить различные размеры ввода данных для этих блоков на панели Атрибуты сигнала (Signal Attributes) можно включить или выключить.

В следующей таблице описаны ограничения сигнала переменного размера.
| Ограничение | Работа |
|---|---|
| Регистрация в формате массива не поддерживает сигналы переменного размера. | Использовать Structure, Structure With Time, или Dataset формат регистрации сигналов переменного размера. |
| Сигнал переменного размера на основе кадра не может изменить длину кадра (первый размер размера), но он может изменить второй размер размера (количество каналов). Для использования сигналов на основе кадров требуется программное обеспечение DSP System Toolbox™. | Блок преобразования кадров используется для преобразования сигнала в сигнал на основе выборки. |
| Сигналы переменного размера должны иметь дискретное время выборки. | — |
| Embedded Coder ® не поддерживает сигналы переменного размера с S-функциями ERT, пользовательскими классами хранения, управлением прототипами функций, интерфейсом AUTOSAR, C++ и интерфейсом кода многократного использования ERT. | — |
| Simulink не поддерживает векторы параметров переменного размера или DWork. | — |
| Режим быстрого ускорения не поддерживает модели, имеющие входные порты корневого уровня с сигналами переменного размера. | — |
| Виртуальные шины, используемые в качестве входных или выходных сигналов ссылочной модели (блок модели), не поддерживают сигналы переменного размера. | Сконфигурируйте сигнал шины как невиртуальный. Дополнительные сведения об использовании шин в качестве входных или выходных данных ссылочной модели см. в разделе Использование шин в интерфейсах модели. Дополнительные сведения об управлении виртуальностью шины см. в разделе Типы составных сигналов. |
Сигналы переменного размера не поддерживаются для:
| — |
| Класс хранения нельзя применить к выходному блоку корневого уровня (см. раздел Конфигурация генерации кода C для элементов интерфейса модели (Simulink Coder)), если входящий в блок сигнал имеет переменный размер. | Примените класс хранения к сигнальной линии вместо блока Outport. |