Документация Engee
Notebook

Модель взаимодействия постоянного магнита и железной поверхности

В этом примере демонстрируется способ моделирования сил, которые действуют между магнитом и железной пластиной, например стеной. Взаимодействие между магнитным доменом и доменом линейных перемещений моделируется при помощи блоков PermanentMagnet и ReluctanceForceActuator.

Описание модели

Блок ReluctanceForceActuator позволяет моделировать процессы, происходящие между постоянным магнитом и железной стеной благодаря тому, что его магнитное сопротивление и создаваемая им линейно направленная сила зависит от величины зазора между полюсами магнита и стеной.

image.png

Подсистема Управление усилием задает профиль воздействия внешней силы, направленной на отдаление магнита от стены.

Запуск модели и интерпретация

Запустим модель и изучим наблюдаемые явления.

In [ ]:
modelName = "permanent_magnet_on_wall";

model = modelName in [m.name for m in engee.get_all_models()] ? engee.open( modelName ) : engee.load( "$(@__DIR__)/$(modelName).engee");
data = engee.run( modelName, verbose=false )
Out[0]:
Dict{String, DataFrames.DataFrame} with 4 entries:
  "Управление усилием.F"    => 2001×2 DataFrame…
  "Измерение перемещения.V" => 2001×2 DataFrame…
  "Измерение перемещения.F" => 2001×2 DataFrame…
  "Измерение перемещения.P" => 2001×2 DataFrame

В начале симуляции модели, магнит соприкасается со стеной. Затем блок Управление усилием постепенно увеличивает значение силы, направленной на отдаление блока от стены. В тот момент, когда сила разъединения превышает критическое значение, блок Управление усилием прекращает приложение силы, чтобы магнит не удалился от стены слишком далеко, а затем, в момент t=1.1 усилие прекращается. Профиль изменения этой силы находится эмпирически.

После прекращения действия силы, направленной на разъединения магнита и пластины, магнит снова прикрепляется к железной поверхности и занимает прежнее место.

In [ ]:
plot(
    plot( data["Управление усилием.F"].time, 1e3.*data["Управление усилием.F"].value,
            title="Внешняя сила\n", ylabel="Сила, мН",
            titlefont=font(10), guidefont=font(8) ),
    plot( data["Измерение перемещения.F"].time, 1e3.*data["Измерение перемещения.F"].value,
            title="Сумма сил\n", ylabel="Сила, мН",
            titlefont=font(10), guidefont=font(8), lc=2 ),
    plot( data["Измерение перемещения.V"].time, 1e3.*data["Измерение перемещения.V"].value,
            title="Скорость перемещения магнита\n", ylabel="Скорость<br>мм/с",
            titlefont=font(10), guidefont=font(8), lc=3 ),
    plot( data["Измерение перемещения.P"].time, 1e3.*data["Измерение перемещения.P"].value,
            title="Расстояние от стены\n", xlabel="Время, с", ylabel="Смещение<br>мм",
            titlefont=font(10), guidefont=font(8), lc=4 ),
    layout=(4,1), legend=:false, size=(400,500)
)
Out[0]:

Модель постоянного магнита, реализованная при помощи блока PermanentMagnet, позволяет задавать свойства как через значение проницаемости (permeability), так и через коэрцитивность (coercivity). Выбор зависит от параметров магнита, указанных в документации от производителя.

Запуск с другими параметрами

Стоит нам изменить параметры, как мы увидим другое поведение модели.

In [ ]:
engee.get_param( "permanent_magnet_on_wall/Управление усилием/Saturation" )
Out[0]:
BlockParameters(
  LowerLimit => 0,
  UpperLimit => 265e-3,
)

Увеличим максимальное значение силы, которая будет направлена на отделение магнита от стены.

In [ ]:
engee.set_param!( "permanent_magnet_on_wall/Управление усилием/Saturation",
    "UpperLimit"=>350e-3 )
In [ ]:
data = engee.run( modelName, verbose=false )
Out[0]:
Dict{String, DataFrames.DataFrame} with 4 entries:
  "Управление усилием.F"    => 2001×2 DataFrame…
  "Измерение перемещения.V" => 2001×2 DataFrame…
  "Измерение перемещения.F" => 2001×2 DataFrame…
  "Измерение перемещения.P" => 2001×2 DataFrame
In [ ]:
plot(
    plot( data["Управление усилием.F"].time, 1e3.*data["Управление усилием.F"].value,
            title="Внешняя сила\n", ylabel="Сила, мН",
            titlefont=font(10), guidefont=font(8) ),
    plot( data["Измерение перемещения.F"].time, 1e3.*data["Измерение перемещения.F"].value,
            title="Сумма сил\n", ylabel="Сила, мН",
            titlefont=font(10), guidefont=font(8), lc=2),
    plot( data["Измерение перемещения.V"].time, 1e3.*data["Измерение перемещения.V"].value,
            title="Скорость перемещения магнита\n", ylabel="Скорость<br>мм/с",
            titlefont=font(10), guidefont=font(8), lc=3 ),
    plot( data["Измерение перемещения.P"].time, 1e3.*data["Измерение перемещения.P"].value,
            title="Расстояние от стены\n", xlabel="Время, с", ylabel="Смещение<br>мм",
            titlefont=font(10), guidefont=font(8), lc=4 ),
    layout=(4,1), legend=:false, size=(400,500)
)
Out[0]:

При таких настройках магнит слишком сильно отдаляется от стены и силы поля уже недостаточно для того, чтобы вернуть его обратно.

Заключение

Мы построили модель, которая позволяет рассчитать усилие, необходимое для удаления магнита от железной поверхности, а также увидеть в динамике изменение значение силы притяжения постоянного магнита к железной поверхности.

Блоки, использованные в примере