Сигнал Simulink® может быть скаляром, (1D) вектор, матрица (2-D) или N-D. Для получения информации об этих типах сигналов смотрите Основы Сигнала в Руководстве пользователя Simulink.
Сигнал переменного размера Simulink является сигналом, размер которого (число элементов в размерности), в дополнение к ее значениям, может измениться во время симуляции модели. Однако во время симуляции, количество размерностей не может измениться. Эта возможность позволяет вам образцовым системам с переменными ресурсами, ограничениями и средами.
Можно создать сигналы переменного размера в модели Simulink при помощи:
Переключитесь или Многопортовые блоки switch с различными входными портами, имеющими сигналы фиксированного размера с различными размерами. Вывод является сигналом переменного размера.
Селекторный блок и опция индексации Starting and ending indices (port)
. Индексный сигнал порта может задать различные подобласти сигнала входных данных, которые производят выходной сигнал переменного размера, в то время как симуляция прогрессирует.
Блок s-function с выходным портом, сконфигурированным для сигнала переменного размера. Вывод включает не только значения, но также и размерность сигнала.
В окружении Simulink сигналы переменного размера могут изменить свой размер во время образцового выполнения одним из двух способов:
На каждом шаге образцового выполнения.
Различные блоки в модели изменяют размеры сигналов во время осуществления выходного метода.
Только во время инициализации условно выполняемых подсистем.
Изменения размера происходят во время отличных событий переключения режимов в подсистемах, таких как Действие, Включают, и Подсистемы вызова функций.
Вы видите основное отличие путем рассмотрения блока Discrete 2-Tap Filter с состояниями.
Дискретный фильтр с 2 касаниями
Примите, что размерность входного сигнала к этому фильтру изменяется с 4 до 1 во время симуляции. Это неоднозначно, когда и как состояния блоков Единичной задержки должны адаптироваться от 4 до 1, чтобы продолжить обрабатывать вход. Чтобы гарантировать непротиворечивость, оба блока Единичной задержки должны изменить свое поведение состояния синхронно. Чтобы предотвратить неоднозначность, Simulink обычно запрещает блоки, количество которых состояний зависит от размеров входного сигнала в контекстах, где размеры сигнала изменяются в любой точке во время выполнения.
Напротив, рассмотрите тот же блок Discrete 2-Tap Filter в Подсистеме вызова функций. Примите, что эта подсистема использует второй способ распространить сигналы переменного размера. В этом случае размер входного сигнала изменяется с 4 до 1 только при инициализации подсистемы. При инициализации подсистема сбрасывает все свои состояния (включая состояния двух блоков Единичной задержки) к их начальным значениям. Сброс подсистемы не гарантирует неоднозначности на присвоении состояний к входному сигналу фильтра.
Зависимые режимом Сигналы Переменного Размера показывают, как можно использовать два способа распространить сигналы переменного размера дополнительным способом смоделировать сложные системы.
Этот пример показывает, как использовать команды в командной строке или в скрипте, чтобы определить, имеет ли сигнальная линия переменный размер. В большой модели или иерархии подсистем или моделей, на которые ссылаются, используйте этот метод, чтобы определить, имеет ли сигнал переменный размер из-за восходящего блока.
Модель sldemo_varsize_basic
в качестве примера содержит a
сигнала, который является нисходящим из блока switch. Используйте команды в командной строке, чтобы определить, имеет ли a
переменный размер.
Откройте модель в качестве примера.
Выберите блок 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 не поддерживает пустые сигналы для блоков, которые изменяют размерности сигнала. Неподдерживаемые блоки включают, Изменяют, Переставляют, и Сумма в заданном измерении.
Начальный размер сигнала от блока Outport в условно выполняемой подсистеме отличается в зависимости от параметров, которые вы выбираете.
Если вы устанавливаете параметр Propagate sizes of variable-size signals в родительской подсистеме к During execution
, параметр Initial output для блока Output не должен превышать максимальный размер входного порта. Если значение параметров Initial output:
Начальный выходной параметр | Начальный размер выходного сигнала |
---|---|
Нескалярная матрица | Начальный размер выходного сигнала является размером параметра Initial output. |
Скаляр | Начальный размер выходного сигнала является скаляром. |
Значение по умолчанию [] | Начальный выходной размер является пустым сигналом (размерности являются всеми нулями). |
Если вы устанавливаете параметр Propagate sizes of variable-size signals в родительской подсистеме к Only when enabling
, параметр Initial output для блока Output должен быть скалярным значением.
Когда размер повторно распространен для входа блока Outport, начальное выходное значение установлено с помощью скалярного расширения от скалярного значения параметров.
Если параметр Initial output является значением по умолчанию []
, Simulink обрабатывает начальный вывод как основанное значение.
Если модель не активирует родительскую подсистему во время начала (t = 0
), текущий размер выходного соответствия подсистемы блоку Outport установлен в максимальный размер.
Когда его родительская подсистема повторно распространяет размеры сигнала, значения выходных сигналов переменного размера подсистемы также сбрасываются к их начальным значениям выходного параметра.