Основанные на событиях методы повторной инициализации состояния и обработки импульсов позволяют моделировать физические явления, такие как столкновения и отскоки шаров. Использование этих методов сброса состояния обеспечивает значительное увеличение скорости моделирования для таких моделей по сравнению с непрерывным моделированием.
Чтобы выполнить сброс состояния, используйте мгновенные режимы и составные переходы в диаграмме режимов. Мгновенный режим - это режим, который активен только для одной итерации события. С помощью составного перехода можно указать, что режим является мгновенным:
A -> B -> C : t
Средний режим, B, является мгновенным. При предикате t становится истинным, система переходит из режима A к способу B, выполняет одну итерацию события, а затем немедленно переходит в режим C.
Мгновенные режимы объявляются так же, как и обычные, с помощью mode раздел диаграммы режимов. Чтобы указать, что режим является мгновенным, перечислите его как средний режим в составном переходе. Для каждого перехода допускается только один мгновенный режим, поэтому составной переход не может содержать более трех режимов.
В большинстве случаев использования сброса состояния значение сброса является функцией предыдущего значения переменной. Например, при моделировании подпрыгивающего шара новая скорость зависит от скорости перед ударом. entry , который объявляется в mode раздел в диаграмме режимов позволяет указать действия, выполняемые при входе в режим. Эти действия представляют собой обновления переменных событий на основе значения непрерывного выражения непосредственно перед входом в режим. При моделировании сброса состояния можно использовать действия ввода для обновления значения переменной события на основе значения соответствующей непрерывной переменной непосредственно перед входом в режим.
При подключении нескольких идеальных компонентов, использующих сброс состояния, решатель автоматически обнаруживает и распространяет импульсы в непрерывных состояниях во время повторной инициализации переменной. Импульсное распространение может инициировать только события, предикаты которых являются линейными выражениями непрерывных состояний. Кроме того, импульсное обнаружение может увеличить вычислительную стоимость во время временной инициализации. Две опции в блоке Конфигурация решателя (Solver Configuration), Вычислительные импульсы (Compute Pulses) и Импульсные итерации (Impulse iterations), позволяют управлять вычислительной стоимостью обнаружения импульса во время инициализации переходного процесса. Если для модели, содержащей компоненты с сбросами состояния, используется моделирование с фиксированной стоимостью, установите флажок Вычислить импульсы (Compute impulses), чтобы получить правильные результаты распространения импульса.
Используйте этот простой пример, чтобы понять, как моделировать сброс состояния.
Блок поступательного жесткого останова в библиотеке 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.
Компонент реализует отдельные переходы для верхней и нижней границ для улучшения читаемости кода. Предикат для каждого из этих составных переходов включает в себя как положение ползунка, так и знак скорости, чтобы избежать входа в самокольцо. Составные переходы следуют тем же правилам, что и обычные переходы. Если предикат имеет значение 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В этом случае, находясь в мгновенном режиме, знак изменения скорости и предикат больше недействительны.
Более подробный пример см. в разделе Масса в корзине с использованием идеального жесткого останова, в котором используется пользовательский блок идеального жесткого останова с дополнительными параметрами, охватывающими более широкий спектр вариантов использования. Этот блок имеет более сложную модовую диаграмму, но принципы моделирования и поведение блока схожи.
entry | initial | modecharts | modes | transitions