assert

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

Синтаксис

assert (predicate_condition, message, Action);

Описание

equations раздел может содержать assert создайте, который позволяет вам задать настроенные ошибки времени выполнения и предупреждения:

assert (predicate_condition, message, Action);

predicate_conditionВыражение, которое будет оценено во время выполнения. Это может быть функция времени, входных параметров, параметров и переменных.
messageДополнительная текстовая строка (с одинарными кавычками), который говорит пользователю блока, почему ошибка времени выполнения или предупреждение инициированы.
ActionДополнительный атрибут, который задает ли инициирование утверждать результаты в предупреждении или ошибке в процессе моделирования. Действие по умолчанию является ошибкой.

Action атрибут позволяет вам задать утверждать действие на основе перечислимого значения параметров. Встроенное перечисление simscape.enum.assert.action позволяет три возможных действия, когда утверждение инициировано: error, warn, и none. Можно ввести перечисляемое значение непосредственно к Action атрибут:

assert(u > 0, Action = simscape.enum.assert.action.warn)

или создайте перечислимый параметр и позвольте контролю за работой пользователей блока утверждать действие:

parameters
  assert_action = simscape.enum.assert.action.warn 
end

equations
  assert(u > 0, Action = assert_action)
end

Можно использовать assert создайте в:

  • Уравнения верхнего уровня, включая начальные уравнения.

  • if-elseif-else ветви условного выражения.

  • Пункт выражения и правая сторона пункта объявления let выражение.

Когда вы используете assert создайте в ветви условного выражения, это не считается к количеству выражений в ветви и поэтому освобождено от общего правила, что общее количество выражений уравнения, их размерности и их порядка должно быть тем же самым для каждой ветви if-elseif-else оператор. Например, следующее допустимо:

if x>1
     y == 1;
else
     assert(b > 0);
     y == 3;
end

Осциллограф assert построение задано осциллографом его ветви. В предыдущем примере, условие предиката b > 0 оценен только когда else ветвь в действительности, то есть, когда x меньше чем или равно 1.

Когда вы включаете assert построения в начальных уравнениях, их условия предиката проверяются только однажды после решения для начальных условий (прежде чем запуск симуляции, смотрите Расчет Начальных условий). Используйте эти утверждения, чтобы охранять против инициализации модели нефизическими значениями.

Примеры

Ошибка времени выполнения

Сгенерируйте ошибку времени выполнения, если объем жидкости в резервуаре становится отрицательным:

assert( V >= 0, 'Insufficient fluid volume for proper operation' );

В процессе моделирования, если внутренняя переменная V (соответствие объему жидкости в резервуаре) принимает отрицательную величину, остановки симуляции и выводит сообщение об ошибке, содержащее следующую информацию:

  • Время симуляции, когда утверждение было инициировано

  • message строка (в этом примере, Insufficient fluid volume for proper operation)

  • Активная ссылка на блок, который инициировал утверждение. Нажмите Block path соединитесь, чтобы подсветить блок в диаграмме модели.

  • Активная ссылка на утверждать местоположение в исходном файле компонента. Нажмите Assert location соединитесь, чтобы открыть исходный файл Simscape™ компонента с курсором в начале нарушенного условия предиката. Поскольку Simscape защитил файлы, Assert location информация не использована из сообщения об ошибке.

Предупреждение во время выполнения

Если вы не хотите, чтобы симуляция остановила, но все еще хотела вывести предупреждение, что определенное условие было нарушено, установил Action припишите simscape.enum.assert.action.warn. Например, если гидравлические перепады давления ниже уровня давления насыщения пара в какой-то момент, это условие может привести к кавитации и делать недействительным предположения моделирования, используемые в блоке. Можно добавить следующий assert создайте к гидравлическим уравнениям компонента:

assert( p > p_cav, 'Pressure is below vapor level; cavitation possible', 
                              Action = simscape.enum.assert.action.warn);

В этом случае, если условие предиката нарушено, симуляция продолжается, но выводит предупреждающее сообщение. Формат предупреждающего сообщения эквивалентен сообщения об ошибке, описанного в предыдущем примере.

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

Управляемое пользователем действие

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

Например, в блоке Stepper Motor, можно позволить пользователю блока выбрать желаемое действие, когда двигатель уменьшается. Объявите, что параметр управления, на основе встроенного утверждают перечисление действия и добавляют следующий assert создайте к уравнениям компонента:

parameters
  assert_action = simscape.enum.assert.action.warn % Action on slipping
end

equations
  assert(slipping<1,'Stepper motor slip',Action = assert_action)
end

В этом случае действие по умолчанию является также предупреждением времени выполнения, как в предыдущем примере. Однако диалоговое окно блока содержит перечислимый параметр, Action on slipping, с тремя возможными значениями: error, warn'none'. Этот параметр позволяет пользователю блока решить, должна ли симуляция остановиться с ошибкой, продолжить предупреждение или проигнорировать моторные промахи полностью.

Вопросы совместимости

развернуть все

Поведение изменяется в R2019a

Представленный в R2011b