Simulink® сигнал может быть скаляром, (1D) вектор, матрица (2-D) или N-D. Сигнал переменного размера Simulink является сигналом, размер которого (число элементов в размерности), в дополнение к ее значениям, может измениться во время симуляции модели. Однако во время симуляции, количество размерностей не может измениться. Эта возможность позволяет вам системам модели с различными ресурсами, ограничениями и средами.
Можно создать сигналы переменного размера в модели Simulink при помощи:
Переключитесь или Многопортовые блоки switch с различными входными портами, имеющими сигналы фиксированного размера с различными размерами. Выход является сигналом переменного размера.
Селекторный блок и Starting and ending indices (port)
индексация опции. Сигнал порта индекса может задать различные подобласти сигнала входных данных, которые производят выходной сигнал переменного размера, в то время как симуляция прогрессирует.
Блок s-function с выходным портом, сконфигурированным для сигнала переменного размера. Выход включает не только значения, но также и размерность сигнала.
В окружении Simulink сигналы переменного размера могут изменить свой размер во время выполнения модели одним из двух способов:
На каждом шаге выполнения модели.
Различные блоки в модели изменяют размеры сигналов во время осуществления выходного метода.
Только во время инициализации условно выполняемых подсистем.
Изменения размера происходят во время отличных событий переключения режимов в подсистемах, таких как Действие, Включают, и Подсистемы вызова функций.
Вы видите основное отличие путем рассмотрения блока Discrete 2-Tap Filter с состояниями.
Дискретный фильтр с 2 касаниями
Примите, что размерность входного сигнала к этому фильтру изменяется с 4 до 1 в процессе моделирования. Это неоднозначно, когда и как состояния блоков Unit Delay должны адаптироваться от 4 до 1, чтобы продолжить обрабатывать вход. Чтобы гарантировать непротиворечивость, оба блока Unit Delay должны изменить свое поведение состояния синхронно. Чтобы предотвратить неоднозначность, Simulink обычно запрещает блоки, количество которых состояний зависит от размеров входного сигнала в контекстах, где размеры сигнала изменяются в любой точке во время выполнения.
В отличие от этого рассмотрите тот же блок Discrete 2-Tap Filter в Подсистеме вызова функций. Примите, что эта подсистема использует второй способ распространить сигналы переменного размера. В этом случае размер входного сигнала изменяется с 4 до 1 только при инициализации подсистемы. При инициализации подсистема сбрасывает все свои состояния (включая состояния двух блоков Unit Delay) к их начальным значениям. Сброс подсистемы не гарантирует неоднозначности на присвоении состояний к входному сигналу фильтра.
Зависимые режимом Сигналы Переменного Размера показывают, как можно использовать два способа распространить сигналы переменного размера дополнительным способом смоделировать сложные системы.
Следующий пример демонстрирует, как использовать команды в командной строке или в скрипте, чтобы определить, имеет ли сигнальная линия переменный размер. В большой модели или иерархии подсистем или моделей, на которые ссылаются, используйте этот метод, чтобы определить, имеет ли сигнал переменный размер из-за восходящего блока.
Модель 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 Block Data Type Support включает полный список блоков тот переменный размер поддержки сигналы.
Просмотреть таблицу:
Откройте модель Simulink.
В MATLAB® командная строка, войти showblockdatatypetable
.
Отдельное окно с таблицей Simulink Block Data Type Support открывается.
X
в Variable-Size Support столбец указывает на поддержку того блока.
Совет
Можно также просмотреть таблицу путем ввода showblockdatatypetable
в командной строке.
Начальный размер сигнала от блока 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, установлен в максимальный размер.
Когда его родительская подсистема повторно распространяет размеры сигнала, значения выходных сигналов переменного размера подсистемы также сбрасываются к их начальным значениям выходного параметра.
Блоки порта управления находятся в условно выполняемых подсистемах. Можно установить параметр Propagate sizes of variable-size signals для этих блоков к During execution
, Only when execution is resumed
(Порт действия), и Only when enabling
(Включите и инициируйте или вызов функции).
Trigger — набор Trigger type к function-call
Переключение блоков поддерживает сигналы переменного размера путем разрешения входных сигналов с различными размерами и распространения размера входного сигнала к выходному сигналу. Можно установить параметр Allow different data input sizes для этих блоков на панели Атрибутов Сигнала или к на или к прочь.
Следующая таблица описывает ограничения сигнала переменного размера.
Ограничение | Работа вокруг |
---|---|
Логгирование формата массивов не поддерживает сигналы переменного размера. | Используйте Structure , Structure With Time , или Dataset формат для логгирования сигналов переменного размера. |
Основанный на системе координат сигнал переменного размера не может изменить длину системы координат (первый размер размерности), но это может изменить размер второго измерения (количество каналов). Используя основанные на системе координат сигналы требует программного обеспечения DSP System Toolbox™. | Используйте блок Frame Conversion, чтобы преобразовать сигнал в основанный на выборке сигнал. |
Сигналы переменного размера должны иметь дискретный шаг расчета. | — |
Embedded Coder® не поддерживает сигналы переменного размера с S-функциями ERT, пользовательскими классами памяти, управлением прототипом функции, AUTOSAR, интерфейсом C++ и интерфейсом повторно используемого кода ERT. | — |
Simulink не поддерживает параметр переменного размера или векторы DWork. | — |
Быстрый режим Accelerator не делает моделей поддержки, имеющих входные порты корневого уровня с сигналами переменного размера. | — |
Виртуальные шины, которые вы используете в качестве входных параметров к или выходных параметров из модели, на которую ссылаются (блок Model) не поддерживают сигналы переменного размера. | Сконфигурируйте сигнал шины как невиртуальный. Для получения дополнительной информации об использовании шин как входные параметры к или выходные параметры из модели, на которую ссылаются, смотрите Шины Использования в Интерфейсах модели. Для получения дополнительной информации об управлении виртуальностью шины, смотрите Типы Составных Сигналов. |
Сигналы переменного размера не поддерживаются для:
| — |
Вы не можете применить класс памяти к блоку Outport корневого уровня (см. Настройку генерации кода C для Элементов Интерфейса модели (Simulink Coder)), если сигнал, который вводит блок, имеет переменный размер. | Примените класс памяти к сигнальной линии вместо блока Outport. |