Основы сигнала переменного размера

Simulink® сигнал может быть скаляром, вектором (1-D), матрицей (2-D) или N-D. Сигнал переменного размера Simulink является сигналом, размер которого (количество элементов в размерности), в дополнение к его значениям, может измениться во время симуляции модели. Однако во время симуляции количество размерностей не может измениться. Эта возможность позволяет моделировать системы с различными ресурсами, ограничениями и окружениями.

Можно создать сигналы переменного размера в модели Simulink при помощи:

  • Switch или Multiport Switch блокируют различные входные порты, имеющие сигналы фиксированного размера с различными размерами. Выходной выход является сигналом переменного размера.

  • Блок селектора и Starting and ending indices (port) опция индексации. Сигнал порта индекса может задавать различные субрегионы сигнала входных данных, которые генерируют сигнал выхода переменного размера по мере прогрессирования симуляции.

  • Порт Блока s-function сконфигурирован для выхода сигнала переменного размера. Выходные выходы включают не только значения, но и размерность сигнала.

Как распространяются сигналы переменного размера

В окружение Simulink сигналы переменного размера могут изменить свой размер во время выполнения модели одним из двух способов:

  • На каждом шаге выполнения модели.

    Различные блоки в модели изменяют размеры сигналов во время выполнения выходного метода.

  • Только при инициализации условно выполненных подсистем.

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

Ключевое различие можно увидеть, рассматривая блок Discrete 2-Tap Filter с состояниями.

Фильтр дискретного 2-Tap

Предположим, что размерность входного сигнала для этого фильтра изменяется с 4 до 1 во время симуляции. Неоднозначно, когда и как состояния блоков Unit Delay должны адаптироваться от 4 до 1, чтобы продолжить обработку входа. Чтобы гарантировать согласованность, оба блока Unit Delay должны изменять свое поведение в состоянии синхронно. Чтобы предотвратить неоднозначность, Simulink обычно запрещает блоки, количество состояний которых зависит от размеров входного сигнала в контекстах, где размеры сигнала изменяются в любой точке во время выполнения.

Напротив, рассмотрим тот же блок Discrete 2-Tap Filter в подсистеме вызова функций. Предположим, что эта подсистема использует второй способ распространения сигналов переменного размера. В этом случае размер входного сигнала изменяется от 4 до 1 только при инициализации подсистемы. При инициализации подсистема сбрасывает все свои состояния (включая состояния двух блоков Unit Delay) к их начальным значениям. Сброс подсистемы не гарантирует неоднозначности при присвоении состояний входному сигналу фильтра.

Mode-Dependent Variable-Size Signals показывает, как можно использовать два способа распространения сигналов переменного размера взаимодополняющим образом для моделирования сложных систем.

Определите, имеет ли сигнальная линия переменный размер

В следующем примере показано, как использовать команды в командной строке или в скрипте, чтобы определить, имеет ли сигнальная линия размер переменной. В большой модели или иерархии подсистем или ссылочных моделей используйте этот метод, чтобы определить, имеет ли сигнал размер переменной из-за восходящего блока.

Пример модели sldemo_varsize_basic содержит сигнал a это ниже по потоку от блока Switch.

  1. Откройте пример модели.

  2. Выберите блок Sum, выходной сигнал которого маркирован a.

  3. Введите следующее в командном окне, чтобы установить модель в скомпилированное состояние (аналогичное обновлению схемы).

    sldemo_varsize_basic([],[],[],'compile')

  4. Получите указатель на выходной порт блока.

    portHandles = get_param(gcb,'portHandles');
    outPortHandle = portHandles.Outport;

  5. Запросите программный параметр CompiledPortDimensionsMode порта выхода.

    varSize = get_param(outPortHandle,'CompiledPortDimensionsMode')
    varSize =
    
         1

    Значение переменной varSize является 1, что указывает, что сигнал a имеет размер переменной.

    Значение 0 указывает, что сигнал не имеет переменного размера.

  6. Завершите компиляцию модели.

    sldemo_varsize_basic([],[],[],'term')

Пустые сигналы

Пустой сигнал является сигналом с длиной 0. Для примера сигналы с [0] размера, [0x3], [2x0], и [2x0x3] все пустые сигналы. Simulink допускает пустые сигналы с сигналами переменного размера и поддерживает большинство поэлементных операций. Однако Simulink не поддерживает пустые сигналы для блоков, которые изменяют размерности сигнала. Неподдерживаемые блоки включают в себя «Изменение формы», «Перестановка» и «Сумма по заданному измерению».

Поддержка блоков Simulink для сигналов переменного размера

Таблица Блока Simulink Данных Type Поддержки включает полный список блоков, поддержки сигналы переменного размера.

Чтобы просмотреть таблицу:

  1. Откройте модель Simulink.

  2. В MATLAB® командная строка, введите showblockdatatypetable.

    Откроется отдельное окно с таблицей Блока Simulink Данных Type Поддержки.

Система координат X в Variable-Size Support столбце указывается поддержка этого блока.

Совет

Можно также просмотреть таблицу, введя showblockdatatypetable в командной строке.

Инициализация подсистемы сигналов переменного размера

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

Если вы задаете параметр Propagate sizes of variable-size signals в родительской подсистеме During executionпараметр Initial output для блока Выхода не должен превышать максимальный размер порта входа. Если Initial output значения параметров:

Начальный выходной параметрРазмер исходного выходного сигнала
Матрица нескаляраНачальный размер выходного сигнала является размером параметра Initial output.
СкалярНачальный выход сигнала является скаляром.
Значение по умолчанию []Начальный выходной размер является пустым сигналом (размерности все нули).

Если вы задаете параметр Propagate sizes of variable-size signals в родительской подсистеме Only when enablingпараметр Initial output для блока Выхода должен быть скалярным значением.

  • Когда размер повторяется для входа блока Outport, начальное значение выхода устанавливается с помощью скалярного расширения от скалярного значения параметров.

  • Если параметр Initial output является значением по умолчанию []Simulink обрабатывает начальный выход как заземленное значение.

  • Если модель не активирует родительскую подсистему во время запуска (t = 0), текущий размер выходного сигнала подсистемы, соответствующего блоку Outport, установлен на максимальный размер.

  • Когда его родительская подсистема переупорядочивает размеры сигнала, значения выходных сигналов подсистемы переменного размера также сбрасываются к их начальным значениям выходного параметра.

Условно выполненные блоки Subsystem

Блоки портов управления находятся в условно выполненных подсистемах. Можно задать параметр Propagate sizes of variable-size signals для этих блоков следующим образом During execution, Only when execution is resumed (Порт действия), и Only when enabling (Включите и триггер или вызов функции).

Коммутационные блоки

Блоки коммутации поддерживают сигналы переменного размера, позволяя входным сигналам с различными размерами и распространяя размер входного сигнала на выход сигнал. Можно задать параметр Allow different data input sizes для этих блоков на панели Signal Attributes в on или off.

Ограничения сигнала переменного размера

Следующая таблица описывает ограничения сигнала переменного размера.

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

Сигналы переменного размера не поддерживаются для:

  • Массив сигналов шин

  • Блоки, которые задают начальное условие как структуру MATLAB

Вы не можете применить класс памяти к блоку Outport корневого уровня (см. Строение генерации кода C для элементов интерфейса модели (Simulink Coder)), если сигнал, который входит в блок, имеет размер переменной.Примените класс памяти к сигнальной линии вместо блока Outport.

Похожие темы