Документация Engee

Многопортовый переключатель

Выбирает выходной сигнал на основе управляющего сигнала.

Тип: MultiPortSwitch

Многопортовый переключатель

Путь в библиотеке:

/Basic/Signal Routing/Multiport Switch

Вектор индексов

Путь в библиотеке:

/Basic/Signal Routing/Index Vector

Описание

Блок Многопортовый переключатель определяет, какой из нескольких входов в блок проходит на выход, в зависимости от значения сигнала на первом входе. Первый вход называется входом управления, а остальные — входами данных. Значение управляющего входа определяет, какие входные данные передаются на выход.

В таблице ниже указано, как блок интерпретирует управляющий сигнал и определяет, какой именно входной сигнал будет передан на выход.

Вход управления

Округление

Настройка нумерации портов данных

Поведение блока во время моделирования

Индексирование для выбора ввода данных

Условие выхода за диапазон

Целое значение

Нет

Нумерация с нуля

Нумерация с нуля

Сигнал на входе управления меньше 0 или больше, чем количество входов данных минус один.

Нумерация с единицы

Нумерация с единицы

Сигнал на входе управления меньше 1 или больше, чем количество входов данных.

Произвольная нумерация

Пользовательская нумерация

Сигнал на входе управления не соответствует ни одному номеру входа данных.

Нецелое значение

Блок усекает значение до целого числа путем округления в сторону нуля.

Нумерация с нуля

Нумерация с нуля

Округленное значение входного сигнала меньше 0 или больше количества вводов данных минус один.

Нумерация с единицы

Нумерация с единицы

Округленное значение входного сигнала меньше 1 или больше числа вводов данных.

Произвольная нумерация

Пользовательская нумерация

Округленное значение входного сигнала не соответствует ни одному номеру входа данных.

Многопортовый переключатель, сконфигурированный как блок Вектор индексов

Вектор индексов является специальной конфигурацией блока Многопортовый переключатель, в которой задается только один вход данных, а управляющий вход отсчитывается с нуля. Выход блока — это элемент входного вектора, индекс которого соответствует управляющему входу. Например, если входной вектор равен [18 15 17 10], и управляющий вход равен 3, то элемент вектора с номером 3 (начиная с нуля), равный 10, становится значением выходного сигнала.

Чтобы использовать блок Вектор индексов, установите для параметра Количество портов значение 1, а для параметра Тип нумерации портов данных значение Нумерация с нуля.

Как блок обрабатывает ввод управления вне диапазона

Если управляющий сигнал целочисленный и его значение меньше чем typemax(Int), то оно принимается вышедшим за пределы допустимого диапазона, если оно не соответствует ни одному номеру входа данных. Если управляющий сигнал не является целочисленным, то его значение принимается вышедшим за пределы допустимого диапазона, если округленное значение не соответствует ни одному индексу порта данных. В обоих случаях поведение блока зависит от настроек Входной порт в случае значения управляющего сигнала вне диапазона и Сообщение о выходе управляющего сигнала из допустимого диапазона.

Если значение управляющего сигнала больше, чем typemax(Int), блок преобразует входное значение в целое число.

Поведение при моделировании

Следующее поведение применяется только к симуляции модели.

Входной порт в случае значения управляющего сигнала вне диапазона

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

Нет

Ошибка

Вывод в последний входной порт

Используется последний вход данных и не появляется предупреждений или ошибок.

Появляется сообщение об ошибке, и моделирование останавливается.

Вывод в дополнительный входной порт

Используется дополнительный вход данных с меткой * и не появляется предупреждений или ошибок.

Появляется сообщение об ошибке, и моделирование останавливается.

Поведение при генерации кода

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

Входной порт в случае значения управляющего сигнала вне диапазона

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

Нет

Ошибка

Вывод в последний входной порт

Используется последний вход данных.

Используется последний вход данных.

Вывод в дополнительный входной порт

Используется дополнительный вход данных с меткой *.

Используется дополнительный вход данных с меткой *.

Правила, определяющие поведение блока

Количество входов данных задается параметром Количество портов.

  • Если задать Количество портов равным 1, то блок ведет себя как блок Выбор, а не как Многопортовый переключатель.

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

  • Если все входные сигналы являются скалярными, выходной сигнал также скалярный.

Допущения и ограничения

  1. Если входные сигналы блока являются шинами, то их структура на различных портах (имена, типы и размерности) должна полностью совпадать. Чтобы выходная шина имела одну и ту же структуру независимо от того, какую входную шину выбирает блок, запрещается смешивать шины с обычными сигналами.

  2. Для работы с шинами значение параметра Количество портов должно быть не меньше 2.

  3. Для шин управляющий сигнал должен быть скаляром.

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

Порты

Вход

# IN_1 — управляющий сигнал
скаляр | вектор | матрица

Details

Управляющий сигнал, определяющий, какой из входных сигналов проходит на выход.

Типы данных

Float16, Float32, Float64, Int8, Int16, Int32, Int64, Int128, UInt8, UInt16, UInt32, UInt64, UInt128, Bool, Fixed

Поддержка комплексных чисел

Да

# 1 — первый входной сигнал
скаляр | вектор | матрица | шина

Details

Первый вход данных в виде скаляра, вектора, матрицы, массива или шины.

  • Если все входные сигналы — скаляры, то выходной сигнал также является скаляром.

  • Если хотя бы один из входных сигналов является вектором, выход блока является вектором. В этом случае блок расширяет любые скалярные входные сигналы до векторов.

Зависимости

Для работы с шинами значение параметра Количество портов должно быть ≥ 2.

Типы данных

Float16, Float32, Float64, Int8, Int16, Int32, Int64, Int128, UInt8, UInt16, UInt32, UInt64, UInt128, Bool, Fixed

Поддержка комплексных чисел

Да

# 2 — второй входной сигнал
скаляр | вектор | матрица | шина

Details

Второй вход данных в виде скаляра, вектора, матрицы, массива или шины.

  • Если все входные сигналы — скаляры, то выходной сигнал также является скаляром.

  • Если хотя бы один из входных сигналов является вектором, выход блока является вектором. В этом случае блок расширяет любые скалярные входные сигналы до векторов.

Зависимости

Для работы с шинами значение параметра Количество портов должно быть ≥ 2.

Типы данных

Float16, Float32, Float64, Int8, Int16, Int32, Int64, Int128, UInt8, UInt16, UInt32, UInt64, UInt128, Bool, Fixed

Поддержка комплексных чисел

Да

# * — вход данных для значения управляющего сигнала вне диапазона
скаляр | вектор | матрица | шина

Details

Порт входных данных для значения управляющего сигнала вне диапазона в виде скаляра, вектора, матрицы, массива или шины.

Все сигналы на входах данных могут иметь любой тип данных, который поддерживает Engee.

Зависимости

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

Для работы с шинами значение параметра Количество портов должно быть ≥ 2.

Типы данных

Float16, Float32, Float64, Int8, Int16, Int32, Int64, Int128, UInt8, UInt16, UInt32, UInt64, UInt128, Bool, Fixed

Поддержка комплексных чисел

Да

Параметры

Базовые настройки

# Тип нумерации портов данных — тип нумерации портов данных
Нумерация с нуля | Нумерация с единицы | Произвольная нумерация

Details

Задает тип нумерации портов данных.

  • Нумерация с нуля — блок начинает отсчет входных портов с нуля. Это значение по умолчанию для блока Index Vector.

  • Нумерация с единицы — блок начинает отсчет входных портов с единицы. Это значение по умолчанию для блока Многопортовый переключатель.

  • Произвольная нумерация — блок использует произвольную нумерацию портов данных.

Зависимости

  • Выбор Нумерация с нуля или Нумерация с единицы включает параметр Количество портов.

  • Выбор Произвольная нумерация включает параметр Массив индексов для портов данных (например, [1,[2,3]]).

Значения

Zero-based contiguous | One-based contiguous | Specify indices

Значение по умолчанию

Имя для программного использования

DataPortOrder

Настраиваемый

Нет

Вычисляемый

Нет

# Количество портов — количество портов ввода данных
Целое число типа Int64

Details

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

Зависимости

Чтобы использовать этот параметр, установите для параметра Тип нумерации портов данных значение Нумерация с нуля или Нумерация с единицы.

Значение по умолчанию

Имя для программного использования

Inputs

Настраиваемый

Нет

Вычисляемый

Да

# Массив индексов для портов данных (например, [1,[2,3]]) — массив индексов для портов данных

Details

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

Зависимости

Чтобы использовать этот параметр, установите для параметра Тип нумерации портов данных значение Произвольная нумерация.

Значение по умолчанию

[1, 2, 3]

Имя для программного использования

DataPortIndices

Настраиваемый

Да

Вычисляемый

Да

# Входной порт в случае значения управляющего сигнала вне диапазона — входной порт в случае значения управляющего сигнала вне диапазона
Вывод в последний входной порт | Вывод в дополнительный входной порт

Details

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

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

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

Если вы установите для этого параметра значение Вывод в дополнительный входной порт и Количество портов равно 3, то количество входных портов в блоке будет равно 5. Первый вход — это порт управления, следующие три входа — это порты данных, а пятый вход — это порт по умолчанию в случае значения управляющего сигнала вне диапазона.
Значения

Last data port | Additional data port

Значение по умолчанию

Last data port

Имя для программного использования

DataPortForDefault

Настраиваемый

Нет

Вычисляемый

Нет

# Сообщение о выходе управляющего сигнала из допустимого диапазона — диагностическое действие
Нет | Ошибка

Details

Определяет диагностическое действие, которое следует предпринять, если значение порта управления не соответствует ни одному из индексов порта данных. Варианты включают:

  • Нет — система не предпринимает никаких действий.

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

Значения

None | Error

Значение по умолчанию

Error

Имя для программного использования

DiagnosticForDefault

Настраиваемый

Нет

Вычисляемый

Нет

Настройки выходного сигнала

# Тип данных выходного сигнала — тип выходных данных
Наследовать автоматически | Наследование из 1 входного порта | Float64 | Float32 | Float16 | Int8 | UInt8 | Int16 | UInt16 | Int32 | UInt32 | Int64 | UInt64 | Int128 | UInt128 | Фиксированная точка

Details

Укажите тип выходных данных. Можно задать:

  • Наследование типа данных Наследовать автоматически.

  • Встроенный тип данных, например, Float32.

  • Тип данных с фикисрованной точкой Фиксированная точка.

Значения

Inherit: auto | Same as first data input | Float64 | Float32 | Float16 | Int8 | UInt8 | Int16 | UInt16 | Int32 | UInt32 | Int64 | UInt64 | Int128 | UInt128 | Fixed-point

Значение по умолчанию

Inherit: auto

Имя для программного использования

OutDataTypeStr

Настраиваемый

Нет

Вычисляемый

Нет

# Тип выходного сигнала в виде фиксированной точки — тип выходных данных с фиксированной точкой
Тип данных

Details

Укажите тип выходных данных с фиксированной точкой.

Зависимости

Чтобы использовать этот параметр, установите для параметра Тип данных выходного сигнала значение Фиксированная точка.

Значение по умолчанию

fixdt(1, 16, 0)

Имя для программного использования

OutDataTypeStrFixed

Настраиваемый

Нет

Вычисляемый

Да

Основные

# Режим округления целых чисел — режим округления для операций с фиксированной точкой
К большему | Конвергентный | К меньшему | К ближайшему | К целому | К нулю

Details

Выберите режим округления для операций с фиксированной точкой. Вы можете выбрать:

  • К меньшему — округляет как положительные, так и отрицательные числа в меньшую сторону (в сторону отрицательной бесконечности).

  • К большему — округляет как положительные, так и отрицательные числа в большую сторону (в сторону положительной бесконечности).

  • Конвергентный — округляет число до ближайшего представимого значения. В случае если дробная часть числа оканчивается на 5, число округляется до ближайшего четного целого числа.

  • К ближайшему — округляет число до ближайшего представимого значения. В случае если дробная часть числа оканчивается на 5, число округляется в большую сторону (в сторону положительной бесконечности).

  • К целому — округляет число до ближайшего целого числа.

  • К нулю — округляет число в сторону нуля.

Параметры блока всегда округляют до ближайшего представимого значения.

Значения

Ceiling | Convergent | Floor | Nearest | Round | Zero

Значение по умолчанию

Floor

Имя для программного использования

RndMeth

Настраиваемый

Нет

Вычисляемый

Нет

# Ограничение при целочисленном переполнении — метод действия при переполнении
Логический тип

Details

При установке этого флажка насыщение применяется ко всем внутренним операциям блока, а не только к выходу или результату.

Действие Причины для принятия этого решения Что происходит при переполнении Пример

Установите этот флажок.

В вашей модели возможно переполнение, и вам нужна явная защита от насыщения в генерируемом коде.

Переполнения насыщаются до минимального или максимального значения, которое может представлять данный тип данных.

Переполнение, связанное со знаковым 8-битным целым числом, может насытиться до -128 или 127.

Не устанавливайте этот флажок.

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

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

Число 130 не помещается в знаковое 8-битное целое число и сворачивается в -126

Значение по умолчанию

false (выключено)

Имя для программного использования

SaturateOnIntegerOverflow

Настраиваемый

Нет

Вычисляемый

Нет

# Требование на идентичность типов данных входных портов — все входные данные должны иметь одинаковый тип
Логический тип

Details

Установите этот флажок, чтобы все входные данные имели один и тот же тип данных.

Значение по умолчанию

false (выключено)

Имя для программного использования

InputSameDT

Настраиваемый

Нет

Вычисляемый

Нет

Дополнительные возможности

Генерация Си кода: Да