OpenModelicaの使い方 User’s Guide解読_3

OpenModelica

引き続きUser’s Guideを読んでいきます。
8ページからの内容となります。
前回の記事はこちら

今回はModelica標準ライブラリ、DCモータのサンプルを使ってみます。
急にMBDっぽい内容ですね。
dcmotor.moはバージョン3.2.2のようですが3.2.3にも互換性があるようです。
現段階では細かいことはよくわかりません。。。

>> loadModel(Modelica, {"3.2.3"})
true

>> loadFile(getInstallationDirectoryPath() +"/share/doc/omc/testmodels/dcmotor.mo")
true
"Notification: dcmotor requested package Modelica of version 3.2.2. Modelica 3.2.3 is used instead which states that it is fully compatible without conversion script needed.
"

simulateでシミュレーションができるようです。この例では0~10s間の計算を実行。
計算に6.4719391sかかったということっぽい。

>> simulate(dcmotor, startTime=0.0, stopTime=10.0)
record SimulationResult
    resultFile = "C:/Users/[ユーザ名]/AppData/Local/Temp/OpenModelica/dcmotor_res.mat",
    simulationOptions = "startTime = 0.0, stopTime = 10.0, numberOfIntervals = 500, tolerance = 1e-06, method = 'dassl', fileNamePrefix = 'dcmotor', options = '', outputFormat = 'mat', variableFilter = '.*', cflags = '', simflags = ''",
    messages = "LOG_SUCCESS       | info    | The initialization finished successfully without homotopy method.
LOG_SUCCESS       | info    | The simulation finished successfully.
",
    timeFrontend = 0.0887131,
    timeBackend = 0.0223541,
    timeSimCode = 0.0078872,
    timeTemplates = 0.0127341,
    timeCompile = 1.8318949,
    timeSimulation = 4.5081214,
    timeTotal = 6.4719391
end SimulationResult;
"Notification: Modelica requested package Complex of version 3.2.3. Complex 4.0.0 is used instead which states that it is fully compatible without conversion script needed.
Notification: Modelica requested package ModelicaServices of version 3.2.3. ModelicaServices 4.0.0 is used instead which states that it is fully compatible without conversion script needed.
Notification: dcmotor requested package Modelica of version 3.2.2. Modelica 3.2.3 is used instead which states that it is fully compatible without conversion script needed.
"

listでモデルの内容をまとめてくれそうです。

>> list(dcmotor)
"model dcmotor
  import Modelica.Electrical.Analog.Basic;
  Basic.Resistor resistor1(R = 10);
  Basic.Inductor inductor1(L = 0.2, i.fixed = true);
  Basic.Ground ground1;
  Modelica.Mechanics.Rotational.Components.Inertia load(J = 1, phi.fixed = true, w.fixed = true);
  Basic.EMF emf1(k = 1.0);
  Modelica.Blocks.Sources.Step step1;
  Modelica.Electrical.Analog.Sources.SignalVoltage signalVoltage1;
equation
  connect(step1.y, signalVoltage1.v);
  connect(signalVoltage1.p, resistor1.p);
  connect(resistor1.n, inductor1.p);
  connect(inductor1.n, emf1.p);
  connect(emf1.flange, load.flange_a);
  connect(signalVoltage1.n, ground1.p);
  connect(ground1.p, emf1.n);
  annotation(
    uses(Modelica(version = \"3.2.2\")));
end dcmotor;"

instantiateModelでソースコードが表示されるのかな?
下記は長いので一部だけを抜粋です。

>> instantiateModel(dcmotor)
"class dcmotor
  parameter Real resistor1.R(quantity = \"Resistance\", unit = \"Ohm\", start = 1.0) = 10.0 \"Resistance at temperature T_ref\";
  parameter Real resistor1.T_ref(quantity = \"ThermodynamicTemperature\", unit = \"K\", displayUnit = \"degC\", min = 0.0, start = 288.15, nominal = 300.0) = 300.15 \"Reference temperature\";
  parameter Real resistor1.alpha(quantity = \"LinearTemperatureCoefficient\", unit = \"1/K\") = 0.0 \"Temperature coefficient of resistance (R_actual = R*(1 + alpha*(T_heatPort - T_ref))\";
  Real resistor1.v(quantity = \"ElectricPotential\", unit = \"V\") \"Voltage drop of the two pins (= p.v - n.v)\";
  Real resistor1.i(quantity = \"ElectricCurrent\", unit = \"A\") \"Current flowing from pin p to pin n\";

結果をplotした結果がUser’s Guideには載っていますが、作り方がわからないのでまた追々、、、
こちらがUser’s Guideのグラフ

こんなグラフが作れるみたい

想像でplot(load.w)を実行してみたらOMPlotでグラフが作成されましたが、重ね書きの方法がわかりませんでした。

今回はここまでにします。
DCモータに関するシミュレーションを実行し、実用に近づいてきました。

コメント

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