コンポーネントVSブロック
ブロックベースのモデリングは因果関係が明確に定義された問題,つまりに流れの方向に適している.信号ベースの系のこのような種類の例に,制御系がある.しかし,多くの場合,因果関係は前もっては定義されていない.例えば,入力信号が電流であるかトルクであるかによって,モータは発電機として使うこともできる.もう一つの基本的な例であるAC回路を下に示す.
この例では,上記回路を使って,モデリングにおけるブロックベースのアプローチとコンポーネントベースのアプローチの違いを述べる.
このチュートリアルに使用されているモデル
|
ElectricCircuit BlockCircuit ElectricCircuit2 |
ブロックベースの回路
ブロックベースモデルを作成することから始める.実際にモデルを実装し始める前に,以下のことを行わなければならない.
この例では,駆動電圧の異なる周波数に応じた正弦波電圧源を流れる電流を調べる.これを計算するには,次の3つの方程式がある:
これらの方程式において, iは正弦波電圧源を通る全電流,i1とi2はそれぞれresistor1とresistor2を流れる電流である.上の方程式が導関数を含まないように書き直す:
これらの方程式を使って,以下のようにブロックベースのモデルを実装する.
IntroductoryExamples.ComponentBased.BlockCircuitモデルのダイアグラムビュー
新しいモデルを作成し,クラスブラウザでコンポーネントを探す.ブロックベースのアプローチを使った系の実装に必要なコンポーネントはすべて以下のパッケージに含まれている:
クラスブラウザでModelica.Blocks.Sourcesパッケージのコンポーネントを見るためには,Modelicaパッケージのアイコンと名前の左側の記号をクリックしてModelicaパッケージを開き,さらにBlocks,Sourcesと順に開く.
Modelica.Blocks内のContinuous,Math,Sourcesパッケージを開く
コンポーネントをクラスブラウザからドラッグしてクラスウィンドウにドロップし,作成したモデルのダイアグラムビューに置く.コンポーネントを繋げてモデルを完成させる.
Simulation Centerに切り替え,モデルの10秒間のシミュレーションを行う.出力電流はadd2の結果である.信号i1, i2はそれぞれgain3,integrator1からのものである.下の図は結果の電流を示している.
IntroductoryExamples.ComponentBased.BlockCircuitモデルのadd2.yをデフォルトパラメータ値を使ってプロットする
コンポーネントベースの回路
最初の下絵の系のコンポーネントベースモデルは,コンポーネントをドラッグアンドドロップして繋げ,パラメータを設定するだけで実装できる.完成したモデルは最初の下絵と同じようなものとなる.
IntroductoryExamples.ComponentBased.ElectricCircuitモデルのダイアグラムビュー
モデルを自分で構築したい場合は,正弦波電圧コンポーネントはModelica.Electrical.Analog.Sourcesパッケージに,その他のコンポーネントはModelica.Electrical.Analog.Basicパッケージにある.パラメータ値の中にはデフォルト値とは異なるものがあるので,同じシミュレーション結果を得るためには,その値を変更する必要もある.
Now you can simulate and plot the current sineVoltage1.i, and as expected it looks just like the result plotted from the block model.
sineVoltage1.iのシミュレーションを行って結果をプロットする.当然のことながら,結果のプロットはブロックモデルのものと同じになる.
IntroductoryExamples.ComponentBased.ElectricCircuit モデルにおいて,デフォルトパラメータ値で正弦電圧源を流れる電流をプロットする.
最後に,下に示すように,モデルに2つ目のコンデンサを加える.コンデンサコンポーネントは Modelica.Electrical.Analog.Basic パッケージに含まれている.
IntroductoryExamples.ComponentBased.ElectricCircuit2モデルのダイアグラムビュー
ElectricCircuitモデルとElectricCircuit2モデルの正弦波電圧源を流れる2つの電流の比較