утверждение

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

Синтаксис

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( 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