Simulink® блоки позволяют вам задать область значений допустимых значений для их выходных сигналов. Установка диапазонов сигнала помогает вам оптимизировать типы данных и улучшить сгенерированный код.
Если у вас есть Embedded Coder®Simulink Coder™ может оптимизировать код, который вы генерируете из модели, принимая во внимание минимальное и максимальное значения, которые вы задаете для сигналов и параметров. Эта оптимизация может удалить алгоритмический код и повлиять на результаты некоторых режимов симуляции, таких как SIL или режим external mode. Для получения дополнительной информации смотрите Оптимизировать используя указанные минимальное и максимальное значения (Embedded Coder).
Следующие блоки позволяют вам задать области значений для их выходных сигналов:
Чтобы задать диапазоны сигнала для большинства блоков, используйте Output minimum и Output maximum параметры блока, чтобы задать область значений допустимых значений для выходного сигнала блока. Исключения включают блоки Data Store Memory, Inport, Outport и Signal Specification, для которых вы используете их параметры Minimum и Maximum, чтобы задать диапазон сигнала. Список применимых блоков см. в разделе «Блоки, Диапазон сигнала которых разрешён спецификация».
Для доступа к этим параметрам используйте Property Inspector (на вкладке Modeling, под Design, нажмите Property Inspector), Model Data Editor (на вкладке Modeling, нажмите Model Data Editor) или диалоговое окно блока.
Задайте минимум или максимум как выражение, которое вычисляет скаляр, вещественное число с double
тип данных. Для примера можно использовать:
Буквальное число, такое как 98.884
. Неявно, тип данных double
.
Числовая переменная рабочей области (см. «Совместное использование и повторное использование значений параметров блоков путем создания переменных»), тип данных которой double
. Используйте этот метод, чтобы разделить минимальное или максимальное значение между несколькими элементами данных.
Однако вы не можете использовать переменные, чтобы задать Min
или Max
свойства Simulink.Signal
объект.
Заданное вами скалярное значение применяется к каждому элементу массива составному сигналу (для примера, когда сигнал нескаляра или шина). Для получения информации о скалярном расширении, см. Скалярное расширение входов и параметров.
Чтобы оставить минимум или максимум сигнала неопределенным, используйте пустую матрицу []
, которое является значением по умолчанию.
Если вы используете конструкции моделирования, такие как сигналы шины, хранилища данных и Stateflow® графики, можно использовать различные методы, чтобы задать информацию о области значений проекта. Используйте информацию в таблице.
Описание целевого сигнала | Метод и дополнительная информация |
---|---|
Численно сложный сигнал | Когда вы задаете Output minimum или Output maximum для сигнала, который является численно комплексным, заданные минимальное и максимальное значения применяются отдельно к вещественной части и к мнимой части комплексного числа. Если значение любой части числа меньше минимального или больше максимального, комплексное число находится вне заданной области. Никакая проверка области значений не происходит ни с одной комбинацией действительной и мнимой частей, такой как |
Сигнальные элементы в шине | Если вы собираете шину с помощью блока Bus Creator, можно задать информацию о области значений для вышестоящих блоков, которые питают Bus Creator. Независимо от метода, которую вы используете для сборки шины, можно создать |
Сигнал в блоке MATLAB Function | Используйте Диспетчер портов и данных, чтобы задать Minimum и Maximum свойства данных. См. Раздел «Настройка общих свойств». |
Сигнал на диаграмме Stateflow | Установите свойства Minimum и Maximum соответствующих данных Stateflow. См. «Предельный диапазон» (Stateflow). |
Сигнал, который вы связываете с сигнальным объектом (таким как | Установите |
Хранилище данных (Data Store Memory блок или | Для блока Data Store Memory установите параметры Minimum и Maximum блоков. Для объекта сигнала установите |
Simulink предоставляет диагностику с именем Simulation range checking, которую вы можете включить, чтобы обнаружить, когда сигналы превышают свои заданные области во время симуляции. Когда включено, Simulink сравнивает значения сигнала, которые блок выводит, с заданным диапазоном (см. «Работа с диапазонами сигналов в блоках») и типом данных блока. То есть Simulink выполняет следующую проверку:
DataTypeMin ≤ MinValue ≤ VALUE ≤ MaxValue ≤ DataTypeMax
где
DataTypeMin
- минимальное значение, представимое типом данных блоков.
MinValue
- минимальное значение, которое должен выводить блок, заданное, например, Output minimum.
VALUE
- значение сигналов, которое выводит блок.
MaxValue
- максимальное значение, которое должен выводить блок, заданное, например, Output maximum.
DataTypeMax
является максимальным значением, представимым типом данных блоков.
Примечание
Возможно переопределить, как блок обрабатывает сигналы, которые превышают определенные области значений. Для примера можно задать значения (кроме значений по умолчанию) для обоих параметров диапазона сигнала и включить параметр Saturate on integer overflow. В этом случае Simulink отображает предупреждающее сообщение, которое советует вам отключить параметр Saturate on integer overflow.
Чтобы включить диагностику Simulation range checking:
В окне модели на вкладке Modeling нажмите Model Settings.
Simulink отображает диалоговое окно Параметров конфигурации.
В дереве Select в левой части диалогового окна Параметры конфигурации щелкните категорию Diagnostics > Data Validity. На правой грани под Signals установите диагностику Simulation range checking равной error
или warning
.
Нажмите кнопку OK, чтобы применить изменения и закрыть диалоговое окно Параметры конфигурации.
Смотрите Проверку диапазона симуляции для получения дополнительной информации.
Для проверки на наличие ошибок диапазона сигнала или предупреждений:
Включите диагностику Simulation range checking для вашей модели (см. «Включить проверку области значений симуляции»).
В окне модели нажмите Run, чтобы симулировать модель.
Simulink моделирует вашу модель и выполняет проверку диапазона сигнала. Если сигнал превышает свою заданную область, когда диагностика Simulation range checking задает error
Simulink останавливает симуляцию и генерирует ошибку (для примера в Средство просмотра Diagnostic).
В противном случае, если сигнал превышает свою заданную область, когда диагностика Simulation range checking задает warning
Simulink генерирует предупреждающее сообщение в MATLAB® Командное окно. Каждое сообщение идентифицирует блок, чей сигнал выхода превышает его заданную область, и временной шаг, в который происходит это нарушение.
Некоторые виртуальные блоки (см. Невиртуальные и Виртуальные блоки) позволяют вам задавать области значений для их выходных сигналов, например, Inport и Outport блоки. Когда Simulation range checking диагностика включена для модели, которая содержит такие блоки, диапазон сигнала виртуального блока распространяется назад к первому образцу невиртуального блока, выходной сигнал которого он получает. Если невиртуальный блок задает различные значения для своей собственной области значений, Simulink выполняет проверку диапазона сигнала с tightest возможной областью значений. То есть Simulink проверяет сигнал, используя большее минимальное значение и меньшее максимальное значение.
Для примера рассмотрим следующую модель:
В этой модели блок Constant задает свой параметр Output maximum как 300, а параметр блока Inport установлен на 100. Предположим, вы включите Simulation range checking диагностику и симулируете модель. Блок Inport назад передает свое максимальное значение невиртуальному блоку, который предшествует ему, т.е. блоку Constant. Затем Simulink использует меньшее из двух максимальных значений, чтобы проверить сигнал, который выводит блок Constant. Поскольку блок Constant выводит сигнал, значение которого (200) превышает самую плотную область значений, Simulink генерирует ошибку.
Когда элемент данных (сигнал или параметр) использует тип данных, отличный от double
, перед сравнением, Simulink приводит элемент данных и каждый предел проекта (минимальное или максимальное значение, которое вы задаете) к типу данных, не связанному между собой. Этот метод помогает предотвратить генерацию ненужных, вводящих в заблуждение ошибок и предупреждений.
Однако Simulink хранит пределы проекта следующим double
перед сравнением. Если тип данных элемента данных имеет более высокую точность, чем double
(например, тип данных с фиксированной точкой с 128-битным размером слова и 126-битной длиной дроби) или больше области значений, чем double
, и double
не может точно представлять значение предела проекта, Simulink может генерировать неожиданные предупреждения и ошибки.
Если тип nondouble имеет более высокую точность, рассмотрите округление предела проекта до следующего числа, наиболее удаленного от нуля, которое double
может представлять. Например, предположим, что сигнал генерирует ошибку после того, как вы задаете максимальное значение 98.8847692348509014
. В командной строке вычислите следующее число дальше всего от нуля, которое double
может представлять.
format long
98.8847692348509014 + eps(98.8847692348509014)
ans = 98.884769234850921
Используйте получившееся число, 98.884769234850921
, для замены максимального значения.