Основанные на событиях методы повторной инициализации состояния и импульсной обработки позволяют вам модели физические явления, такие как столкновения и прыгающие мячи. Использование этих методов сброса состояния обеспечивает значительное увеличение скорости симуляции для таких моделей по сравнению с непрерывной симуляцией.
Чтобы реализовать сброс состояния, используйте instantaneous modes и compound transitions в график режима. Мгновенный режим является режимом, который активен только для одной итерации события. Вы задаете, что режим мгновенен при помощи составного перехода:
A -> B -> C : t
Режим посередине, B
, мгновенно. Когда предикат t
становится true, система переходит из режима A
в режим B
, выполняет одну итерацию события, а затем сразу переходит в режим C
.
Вы объявляете мгновенные режимы так же, как и обычные режимы, используя mode
раздел графика режима. Чтобы указать, что режим мгновенен, перечислите его как средний режим в составном переходе. На каждый переход разрешен только один мгновенный режим, поэтому составной переход не может содержать более трех режимов.
В большинстве случаев использования сброса состояния значение сброса является функцией от предыдущего значения переменной. Для примера при моделировании прыгающего мяча новая скорость зависит от скорости перед влиянием. The 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
раздел, в котором перечислены уравнения, применимые к этому режиму. The equations
В разделе вне графика режимов перечислены значения и уравнения, которые применяются к обоим режимам.
The transitions
раздел задает два составных перехода, один для ползунка, ударяющегося о нижнюю границу, и один для верхней границы. На каждом переходе, когда предикат становится верным, компонент переключается со FREE
режим для IMPACT
, а затем вернемся к FREE
. IMPACT
является мгновенным режимом.
Когда компонент входит в IMPACT
mode, переменная события v_old
обновляется значением скорости перед влиянием. Это действие обновления определено в entry
раздел для этого режима. Затем, в equations
сечение для этого режима, скорость, v
, сбрасывается значение, которое является функцией от этого предыдущего значения скорости и коэффициента реституции, e
.
Компонент реализует отдельные переходы для верхней и нижней границ, чтобы улучшить читаемость кода. Предикат для каждого из этих составных переходов включает в себя как положение ползунка, так и знак скорости, чтобы избежать входа в самоцикл. Составные переходы следуют тем же правилам, что и регулярные переходы. Если предикат равен true, система немедленно входит в переход. Поэтому, если вы определили составной переход, основанный только на положении ползунка:
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
В этом случае, в то время как в мгновенном режиме, скорость переворачивается знак и предикат больше не действителен.
Для более подробного примера смотрите Mass on Cart с помощью Идеального Жёсткого упора, который использует пользовательский Ideal Hard Stop блок с дополнительными опциями, которые охватывают более широкий спектр вариантов использования. Этот блок имеет более сложный график режимов, но принципы моделирования и поведение блоков аналогичны.
entry
| initial
| modecharts
| modes
| transitions