Программные настраиваемые ошибки времени выполнения и предупреждения
assert (
predicate_condition
, message
,
Action);
equations
раздел может содержать assert
конструкцию, которая позволяет вам задавать настраиваемые ошибки времени выполнения и предупреждения:
assert (
predicate_condition
, message
,
Action);
predicate_condition | Выражение, которое будет оценено во время исполнения. Это может быть функция времени, входов, параметров и переменных. |
message | Дополнительная текстовая строка (с одинарными кавычками), которая сообщает пользователю блока, почему срабатывает ошибки времени выполнения или предупреждение. |
Action | Необязательный атрибут, который задает, запускать ли результаты assert в предупреждении или ошибке во время симуляции. Действие по умолчанию является ошибкой. |
The Action
позволяет вам задать действие утверждения на основе перечисленного значения параметров. Встроенная система перечисления simscape.enum.assert.action
допускает три возможных действия при срабатывании значения: error
, warn
, и none
. Перечисленное значение можно задать непосредственно в Action
атрибут:
assert(u > 0, Action = simscape.enum.assert.action.warn)
или создайте перечисленный параметр и дайте пользователю блока управлять действием assert:
parameters assert_action = simscape.enum.assert.action.warn end equations assert(u > 0, Action = assert_action) end
Можно использовать assert
создать в:
Уравнения верхнего уровня, включая начальные уравнения.
The 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 (соответствующая объему жидкости в резервуаре) принимает отрицательное значение, симуляция останавливается и выводит сообщение об ошибке, содержащее следующую информацию:
Время симуляции, когда приведение в действие
The message
строка (в этом примере Insufficient fluid volume for proper operation
)
Активная ссылка на блок, который инициировал проверку типа «assertion». Нажмите на Block path
ссылка для подсветки блока в диаграмме модели.
Активная ссылка на расположение assert в исходном файле компонента. Нажмите на 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);
В этом случае, если условие предиката нарушено, симуляция продолжается, но выводит предупреждающее сообщение. Формат предупреждающего сообщения совпадает с форматом сообщения об ошибке, описанного в предыдущем примере.
Предупреждающее сообщение появляется один раз, на первом временном шаге, когда условие предиката нарушено. В этом примере предупреждающее сообщение появляется на первом временном шаге, когда давление падает ниже уровня пара. Пока давление остается ниже этого уровня, сообщение не повторяется на последующих временных шагах. Однако, когда симуляция продолжается, если давление повышается выше уровня насыщения пара, а затем снова падает ниже этого уровня, давление снова активируется и снова появляется предупреждающее сообщение.
Если вы хотите позволить пользователю блока управлять действием при запуске assert, создайте перечисленный параметр и установите 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
. Этот параметр позволяет пользователю блока решить, следует ли останавливать симуляцию с ошибкой, продолжить с предупреждением или полностью игнорировать проскальзывания двигателя.