Ошибки и предупреждения настраиваемого времени выполнения программы
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
В этом случае действие по умолчанию также является предупреждением времени выполнения, как в предыдущем примере. Однако диалоговое окно блока содержит перечисляемый параметр «Действие при проскальзывании» с тремя возможными значениями: error, warn, none. Этот параметр позволяет пользователю блока решить, следует ли остановить моделирование с ошибкой, продолжить с предупреждением или полностью игнорировать проскальзывания двигателя.