Основанные на событии методы реинициализации состояния и импульсной обработки позволяют вам физические явления модели, такие как столкновения и прыгающие мячи. Используя сброс состояния методы обеспечивает значительное повышение скорости симуляции для таких моделей, по сравнению с непрерывной симуляцией.
Чтобы реализовать сброс состояния, графики режима могут содержать instantaneous modes и compound transitions. Мгновенный режим является режимом, который активен только для одной итерации события. Вы указываете, что режим мгновенен при помощи составного перехода:
A -> B -> C : t
Средний режим, B
, мгновенно. Когда предикат t
становится верным, системные переходы от режима A
к режиму B
, выполняет одну итерацию события, и затем сразу переходы к режиму C
.
Вы объявляете мгновенные режимы тот же путь как регулярные режимы, с помощью mode
раздел графика режима. Чтобы указать, что режим мгновенен, перечислите его как средний режим в составном переходе. Только один мгновенный режим позволен на переход, поэтому, составной переход не может содержать больше чем три режима.
В большинстве вариантов использования сброса состояния значение сброса является функцией предыдущего значения переменной. Например, при моделировании прыгающего мяча, новая скорость зависит от скорости перед ударом. entry
разделите, объявленный в mode
разделите в графике режима, позволяет вам задать действия, которые будут выполняться после перехода к режиму. Эти действия являются обновлениями переменной события на основе значения непрерывного выражения сразу прежде, чем перейти к режиму. При моделировании сброса состояния можно использовать действия записи, чтобы обновить значение переменной события на основе значения соответствующей непрерывной переменной сразу прежде, чем перейти к режиму.
Когда вы соединяете несколько идеальных компонентов, которые используют сброс состояния, решатель автоматически обнаруживает и распространяет импульсы в непрерывных состояниях во время переменной реинициализации. Импульсное распространение может только триггерные события, предикаты которых являются линейными выражениями непрерывных состояний. Кроме того, импульсное обнаружение может добавить вычислительную стоимость во время переходной инициализации. Две опции в блоке Solver Configuration, Compute impulses и Impulse iterations, позволяют вам контролировать вычислительные затраты импульсного обнаружения во время переходной инициализации. Если вы используете симуляцию фиксированных затрат для модели, которая содержит компоненты со сбросом состояния, установите флажок Compute impulses, чтобы получить правильные импульсные результаты распространения.
Используйте этот простой пример, чтобы изучить, как смоделировать сброс состояния. Для более подробного примера смотрите Массу на Тележке с помощью Идеального Жесткого упора.
Блок Translational Hard Stop в библиотеке Simscape™ Foundation моделирует жесткий упор как пружину и демпфер, которые вступают в контакт с ползунком в границах.
Этот пример реализует идеальный поступательный жесткий упор, где скорость ползунка сбрасывает мгновенно после удара верхней или нижней границы.
component ideal_hard_stop nodes R = foundation.mechanical.translational.translational % R:left C = foundation.mechanical.translational.translational % C:right end parameters upper_bnd = { 0.1, 'm'} % Upper bound lower_bnd = {-0.1, 'm'} % Lower bound e = 0.8 % Coefficient of restitution end variables v = {0, 'm/s'} % Velocity f = {0, 'N'} % Force x = {value = {0, 'm'}, priority = priority.high} % Position end variables(Event = true, Access = private, ExternalAccess = none) v_old = {0, 'm/s'} end branches f : R.f -> C.f end equations v == R.v - C.v x.der == v assert(e > 0); assert(e <= 1); assert(upper_bnd > 0); assert(lower_bnd < 0); end modecharts(ExternalAccess = observe) m = modechart modes mode FREE equations f == 0 end end mode IMPACT entry v_old = v end equations v == -e*v_old end end end transitions FREE -> IMPACT -> FREE : x <= lower_bnd && v < 0 FREE -> IMPACT -> FREE : x >= upper_bnd && v > 0 end end end end
График режима m
задает два режима:
FREE
, когда ползунок свободно перемещается между границами.
IMPACT
, когда ползунок поражает одну из границ.
Каждый режим имеет equations
разделите, который перечисляет уравнения, применимые к тому режиму. equations
разделите вне списков графика режима утверждение и уравнения, которые применяются к обоим режимам.
transitions
раздел задает два составных перехода, один для ползунка, поражающего нижнюю границу и один для верхней границы. В каждом переходе, когда предикат становится верным, переключатели компонента от FREE
режим к IMPACT
, и затем обратно к FREE
. IMPACT
мгновенный режим.
Когда компонент вводит IMPACT
режим, переменная v_old
события обновляется со значением скорости перед ударом. Это действие обновления задано в
entry
разделите для того режима. Затем в equations
разделите для этого режима, скорости, v
, сбрасывается к значению, которое является функцией этого предыдущего скоростного значения и коэффициента восстановления, e
.
Компонент реализует отдельные переходы для верхних и нижних границ, чтобы улучшить удобочитаемость кода. Предикат для каждого из этих составных переходов включает и положение ползунка и скоростной знак, чтобы не вводить самоцикл. Составные переходы следуют тем же правилам как регулярные переходы. Если предикат верен, система сразу вводит переход. Поэтому, если вы задали составной переход, базирующийся только на положении ползунка:
transitions FREE -> IMPACT -> FREE : x <= lower_bnd || x >= upper_bnd end
предикат мог все еще быть верным после завершения перехода, система введет бесконечный цикл и в конечном счете сгенерирует ошибку. Чтобы избежать этой ситуации, это - хорошая практика, чтобы попытаться смоделировать составные переходы таким способом, которым мгновенный режим делает недействительным предикат:
transitions FREE -> IMPACT -> FREE : x <= lower_bnd && v < 0 FREE -> IMPACT -> FREE : x >= upper_bnd && v > 0 end
В этом случае, в то время как в мгновенном режиме, скоростном знаке щелчков и предикате больше не действительно.
Масса на Тележке с помощью Идеального примера Жесткого упора использует пользовательский блок Ideal Hard Stop с дополнительными опциями, которые покрывают более широкое множество вариантов использования. Этот блок имеет более комплексный график режима, но принципы моделирования и поведение блока подобны.
entry
| initial
| modecharts
| modes
| transitions