【Modelica】最小構成のMBD事例 第2章 その26【DCモータ③】

【Modelica】最小構成のMBD事例 第2章 その26【DCモータ③】 事例
【Modelica】最小構成のMBD事例 第2章 その26【DCモータ③】

バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/

はじめに

前回、ModelicaのDCモータモデルをちょっと掘り下げ。

  • 電気/電子領域
  • 古典力学領域
  • 幾何学(材料力学)領域

の複数の領域を横断していることがわかった。

今回は、実際のModelicaコードを見ていく。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1

エンジニア歴8年の太郎くん

技術者太郎

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1

DCモータモデルのModelicaコード

太郎くん
太郎くん

今回はDCモータモデルを紐解いていくんだっけ?

フクさん
フクさん

そうだね。
まぁざっとコードを見てみよう。

model DCPM_Start
  "Test example: DC with permanent magnet starting with voltage ramp"
  extends Modelica.Icons.Example;
  parameter Modelica.SIunits.Voltage Va=100 "Actual armature voltage";
  parameter Modelica.SIunits.Time tStart=0.2
    "Start of armature voltage ramp";
  parameter Modelica.SIunits.Time tRamp=0.8 "Armature voltage ramp";
  parameter Modelica.SIunits.Torque TLoad=63.66 "Nominal load torque";
  parameter Modelica.SIunits.Time tStep=1.5 "Time of load torque step";
  parameter Modelica.SIunits.Inertia JLoad=0.15
    "Load's moment of inertia";
  Machines.BasicMachines.DCMachines.DC_PermanentMagnet dcpm(
    VaNominal=dcpmData.VaNominal,
    IaNominal=dcpmData.IaNominal,
    wNominal=dcpmData.wNominal,
    TaNominal=dcpmData.TaNominal,
    Ra=dcpmData.Ra,
    TaRef=dcpmData.TaRef,
    La=dcpmData.La,
    Jr=dcpmData.Jr,
    useSupport=false,
    Js=dcpmData.Js,
    frictionParameters=dcpmData.frictionParameters,
    coreParameters=dcpmData.coreParameters,
    strayLoadParameters=dcpmData.strayLoadParameters,
    brushParameters=dcpmData.brushParameters,
    TaOperational=293.15,
    alpha20a=dcpmData.alpha20a,
    phiMechanical(fixed=true),
    wMechanical(fixed=true),
    ia(fixed=true)) annotation (Placement(transformation(extent={{-20,-50},
            {0,-30}})));
  Modelica.Blocks.Sources.Ramp ramp(
    duration=tRamp,
    height=Va,
    startTime=tStart) annotation (Placement(transformation(extent={{-80,
            60},{-60,80}})));
  Modelica.Electrical.Analog.Sources.SignalVoltage signalVoltage
    annotation (Placement(transformation(extent={{0,30},{-20,50}})));
  Modelica.Electrical.Analog.Basic.Ground ground annotation (Placement(
        transformation(
        origin={-70,40},
        extent={{-10,-10},{10,10}},
        rotation=270)));
  Modelica.Mechanics.Rotational.Components.Inertia loadInertia(J=JLoad)
    annotation (Placement(transformation(extent={{40,-50},{60,-30}})));
  Modelica.Mechanics.Rotational.Sources.TorqueStep loadTorqueStep(
    startTime=tStep,
    stepTorque=-TLoad,
    useSupport=false,
    offsetTorque=0) annotation (Placement(transformation(extent={{90,-50},
            {70,-30}})));
  parameter Utilities.ParameterRecords.DcPermanentMagnetData dcpmData
    annotation (Placement(transformation(extent={{-20,-80},{0,-60}})));
equation
  connect(ramp.y, signalVoltage.v) annotation (Line(points={{-59,70},{-10,70},{-10,52}},
                         color={0,0,255}));
  connect(signalVoltage.p, dcpm.pin_ap) annotation (Line(points={{0,40},{
          0,-20},{-4,-20},{-4,-30}}, color={0,0,255}));
  connect(signalVoltage.n, ground.p)
    annotation (Line(points={{-20,40},{-60,40}}, color={0,0,255}));
  connect(dcpm.pin_an, signalVoltage.n) annotation (Line(points={{-16,-30},
          {-16,-20},{-20,-20},{-20,40}}, color={0,0,255}));
  connect(loadInertia.flange_b, loadTorqueStep.flange)
    annotation (Line(points={{60,-40},{70,-40}}));
  connect(dcpm.flange, loadInertia.flange_a) annotation (Line(
      points={{0,-40},{40,-40}}));
  annotation (experiment(StopTime=2.0, Interval=1E-4, Tolerance=1E-6), Documentation(
        info="<html>
<strong>Test example: Permanent magnet DC machine started with an armature voltage ramp</strong><br>
A voltage ramp is applied to the armature, causing the DC machine to start,
and accelerating inertias.<br>At time tStep a load step is applied.<br>
Simulate for 2 seconds and plot (versus time):
<ul>
<li>dcpm.ia: armature current</li>
<li>dcpm.wMechanical: motor's speed</li>
<li>dcpm.tauElectrical: motor's torque</li>
</ul>
Default machine parameters of model <em>DC_PermanentMagnet</em> are used.
</html>"));
end DCPM_Start;

DCモータモデルのModelicaコードの見るべきポイント

太郎くん
太郎くん

うわぁ・・・。
結構あるなー。

太郎くん
太郎くん

と、思ったけど、
予想よりかは少ないかな???
annotationで量が増えてるだけなのかも。

フクさん
フクさん

そうだね。
annotation部分だけでコードの半分近くを占めてるんで、
実際に見るべきポイントはそれほど多くない。

太郎くん
太郎くん

見るべきポイントってどこら辺になるのかな?

フクさん
フクさん

そうだなー。

  • 先頭のparameter部
  • 中間のモデル宣言部
  • 真ん中DcPermanentMagnetData

ってところかな。
最後の方はconnectでブロック間の接続を定義しているだけだから、あまり気にしなくても良いだろう。

太郎くん
太郎くん

「真ん中DcPermanentMagnetData」
ってのがイマイチピンと来ないなー。

フクさん
フクさん

まぁこれがこのモデルのサボりポイントを生み出してる仕掛けだからねー。

太郎くん
太郎くん

サボりポイント!

フクさん
フクさん

というわけで、どういう風にサボってるかを次回解説!

まとめ

フクさん
フクさん

まとめだよ。

  • DCモータモデルのModelicaコードを確認。
    • 半分くらいはannotationなのでそれほど規模は大きくない。
  • 見るべきポイントを列挙。
    • 先頭のparameter部。
    • 中間のモデル宣言部。
    • 真ん中DcPermanentMagnetData。
      • これが今回のサボりポイントの目玉となる。

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました