バックナンバーはこちら。
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。
- これが今回のサボりポイントの目玉となる。
バックナンバーはこちら。
コメント