Программа настроила ошибки времени выполнения и предупреждения
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
. Этот параметр позволяет пользователю блока решить, должна ли симуляция остановиться с ошибкой, продолжить предупреждение или проигнорировать моторные промахи полностью.