ドメイン間のモデリング
この例では,System Modeler におけるサーボ機構モデルの構築を段階ごとに示す.これは,マルチ工学機能について説明し.Model Centerで作ったモデルをSimulation Centerを使ってどのように分析し,制御器を同期し,比較研究を行うかを示す.
このチュートリアルに使用されているモデル
|
DCMotor StiffAxis WeakAxis StiffServoMechanism WeakServoMechanism |
直流モーター
制御された直流モーターの簡単な動的モデルは,可変電源,抵抗,誘導子,直流モーター(DC motor)の電磁場によって与えられる電気エネルギーと力学エネルギーの結合を表す電気モーター力要素からなる.モーターの軸は,回転質量すなわち慣性によって表される.
これらのコンポーネントはすべて,System Modeler のModelica Standard Libraryに含まれている.ドラッグアンドドロップで以下の図のようなモデルを構築することができる.
Model CenterにおけるDC motorのダイアグラムビュー
このモデルは,新しいモデルを作り,適切なコンポーネントを見付け,見付かったコンポーネントをドラッグアンドドロップでダイアグラムエリアに置き,最後に接続線ツールを使ってコンポーネントを繋げることで構築できる.
まず,DCMotorという名前の新しいモデルを作ってみる.Modelica Standard Library内でコンポーネントを見付けるためには,検索するか,あるいは,格納されている場所が分かっている場合はクラスブラウザで目指すコンポーネントが含まれているパッケージを開くとよい.ここでは,その両方の方法を試してみる.
Stepソースコンポーネントが見付けたい場合は,クラスブラウザで検索する.クラスブラウザのテキストボックスにstepと書き込み,結果が表示されるまで待つ.
Model Centerのクラスブラウザを使ってステップソールコンポーネントを検索する
クラスブラウザで「step」にマッチするものの上位10個が見られるはずである.ここで使用したいコンポーネントは,上記でハイライトしてあるModelica.Blocks.Sources.Stepである.
このコンポーネントをDCMotorモデルに加えるために,これをクラスブラウザからドラッグし, クラスウィンドウのダイアグラムビューにドロップする.
信号電圧コンポーネントはModelica.Electrical.Analog.Sourcesパッケージにある.これの正しい位置を知っているので,クラスブラウザのツリービューを使い,必要なコンポーネントが入っているSourcesというパッケージを表しているブランチまで,ツリーのブランチを開いていくことにする.
まず,Modelicaパッケージを開く.パッケージのアイコンと名前の左にある記号をクリックするとよい.
見て分かるように,Modelicaパッケージにはいくつかのパッケージが入っている.次は,Analogパッケージの中のElectricalパッケージを開く.最後にSourcesパッケージを開く.ここに信号電圧コンポーネントがある.
Modelica.Electrical.Analog.Sourcesパッケージを開く
クラスウィンドウのダイアグラムビューにドラッグしてSignalVoltageコンポーネントをDCMotorに加える.
これで7つのコンポーネントのうち2つを加えることができた.残りの4つの電気コンポーネント(Resistor,Inductor,Ground,RotationalEMF)はModelica.Electrical.Analog.Basicパッケージにある.すでに Modelica.Electrical.Analogパッケージを開いてあるので,Basicパッケージは容易に見付かる.これを開いて,残りのコンポーネントを見付ける.
Modelica.Electrical.Analog.Basicパッケージを開く
DCMotorモデルに電気コンポーネントを加えると,必要なコンポーネントは慣性1つになる.慣性はModelica.Mechanics.Rotational.Componentsパッケージにある.検索してもよいし,Modelica,Mechanics,Rotational,Componentsの各パッケージを直接開いてもよい.
慣性コンポーネントを加えたら,後はコンポーネントを接続するだけで直流モーターのモデルは完成する.コンポーネントは接続線ツールを使って接続する.
例えば,アース端子を信号電圧コンポーネントのマイナスピンに繋ぎたい場合は,アース端子の上にマウスのカーソルを置き,左のマウスボタンを押しながら信号電圧コンポーネントのマイナスピンにカーソルを動かす.マウスボタンを離すと接続が完了する.
DCMotorのダイアグラムビューがこのチュートリアルの最初の図のようになるまで接続を続ける.
コンポーネントをドロップし,接続している間に,Model Centerはそのアクションに対応するModelicaコードを生成している.Modelicaテキストビューに切り換えて,モデルのテキスト表記を見てみる.モデルのテキスト表記では,各コンポーネントが宣言され,2つのコンポーネント間の接続が方程式セクションのconnect方程式で表されている.
model DCMotor
Modelica.Blocks.Sources.Step step1;
Modelica.Electrical.Analog.Basic.Resistor resistor1;
Modelica.Electrical.Analog.Basic.Inductor inductor1;
Modelica.Electrical.Analog.Basic.RotationalEMF EMF1;
Modelica.Electrical.Analog.Basic.Ground ground1;
Modelica.Electrical.Analog.Sources.SignalVoltage signalVoltage1;
Modelica.Mechanics.Rotational.Components.Inertia inertia1;
equation
connect(resistor1.n, inductor1.p);
connect(inductor1.n, EMF1.p);
connect(step1.y, signalVoltage1.v);
connect(signalVoltage1.p, resistor1.p);
connect(EMF1.n, signalVoltage1.n);
connect(ground1.p, signalVoltage1.n);
connect(EMF1.flange, inertia1.flange_a);
end DCMotor;
宣言と方程式の順序は,コンポーネントをドロップしたり接続したりした順序による.であるから,自分で作ったモデルでは,この順序が若干異なるかもしれない.また,読みやすくするために,DCMotorの定義からは実際のModelicaテキストビューで » 記号で表されたすべてのグラフィカルな注釈上記がすべて除かれている.
これでDCMotorモデルが完成し,シミュレーションができるようになった.しかし,まずはじめに,いくつかのシミュレーション設定を指定する必要がある.ツールバーのクラスのシミュレーションボタンの横にある下向きの矢印をクリックし,エクスペリメントの設定を選ぶ.クラスのプロパティダイアログボックスがポップアップするので,終了時間を編集してシミュレーション時間を25秒に設定する.OKをクリックするかReturnを押すかすると,設定がモデルに適用され,モデルのexperiment注釈が自動的に更新される.次にツールバーのクラスのシミュレーションボタンをクリックし,Simulation Centerを開いてモデルのシミュレーションを行う.
DCMotorモデルのシミュレーション時間を25秒に設定する
以下の図のように,変数を選んでエクスペリメントブラウザでプロットする.
DCMotorモデルのinertia1.wとsignalVoltage1.vをデフォルトのパラメータ値でプロットする
これで結果が得られる.inertia1.wとsignalVoltage1.vの時間に対してのプロットである.
システムの動作を修正するためにパラメータ値も大変簡単に変えることができる.振動するステップ応答の代りに減衰ステップ応答を得るために,抵抗器の抵抗, 誘電子のインダクタンス,軸の慣性のモーメントを変えてみる.
エクスペリメントブラウザでパラメータビューに切り換える.パラメータビューでパラメータの値を変える際は,現行の値をクリックする.resistor1の抵抗Rを10オームに,inductor1のインダクタンスLを0.1Hに,inertia1の慣性モーメントJを0.3kgm 2に変えてみる.
再びモデルのシミュレーションを行い.慣性の角速度のアップデートしたプロットを調べる.
カスタマイズしたパラメータ値でDCMotorモデルのinertia1.wとsignalVoltage1.vをプロットする
強軸と弱軸
このセクションは,弱軸モデルを開発し,以下に示したようにステップトルクを加えることでステップ応答を調べ,強軸モデルに弱さを加えることで軸がより正確にモデル化できることを示す.
まず,強軸モデルを開発することから始める.モデルのコンポーネント(Step,Torque,Inertia,IdealGear) はどれも,クラスブラウザでModelica.Blocks.Sources,Modelica.Mechanics.Rotational.Sources,Modelica.Mechanics.Rotational.Componentsの各パッケージを開くことで見付けることができる.検索して見付けることもできる.モデルの名前は好きなように付けてよい.モデルのさまざまなステージもIntroductoryExamples.MultiDomainパッケージで得ることができる.
IntroductoryExamples.MultiDomain.StiffAxisモデルのダイアグラムビュー
idealGear1コンポーネントを選ぶ.エディタの下にあるパラメータビューでコンポーネントのパラメータを編集することができる.
Model Centerで理想的なギアコンポーネントの伝達率を編集する
値3のratioパラメータを与える.これは,角度および角速度が3倍になり,ギアの片側からもう片側になるに従ってトルクが1/3に弱まることを意味している.また,startTimeパラメータの値を1秒にして,ステップソースの開始時を変える.
この系のシミュレーションを6秒間行うと,一定のトルクが一定の角加速度を生んでいる(角速度のrampとこの軸についての角度の二乗曲線)ことが分かる.
IntroductoryExamples.MultiDomain.StiffAxisデルのトルク,inertia2の角速度,inertia2の角度のプロット
追加的な弱さを含むことで,軸をより正確にモデル化することができる.これは,上記の軸モデルを,下の図にあるように2つの回転質量をねじりバネで繋いだモデルで置き換えることで可能になる.ねじりバネはModelica.Mechanics.Rotational.Componentsパッケージに含まれている.
IntroductoryExamples.MultiDomain.WeakAxisモデルのダイアグラムビュー
inertia1とには1kg·m 2の慣性モーメントが与えられているのに対し,inertia2およびinertia3には0.5kg·m 2の慣性モーメントが与えられている.spring1のバネ定数は5N·m/radに設定されている.この部分系のシミュレーションを6秒間行い結果を調べる(下記を参照こと).前のようにinertia2ではなく,inertia3が軸の最後の要素であり,従ってプロット変数として選ばれる点に注意のこと.
IntroductoryExamples.MultiDomain.WeakAxisモデルについての,トルク,inertia3(上のプロット)の角度,inertia3(下のプロット)の角速度をプロットする
弱軸モデルと強軸モデルの比較は,両者には類似点があるが,前者に偏向が加わっていることを示している.
練習
外向きシャフトにねじりバネが付き,他に慣性要素がある簡単な直流モーターを作る.シミュレーションをして結果を調べる.いくつかのパラメータを変更して結果を比較する.入力トルクを加え, inertia2に接続し,系を調べてみるのもよいだろう.
制御系
このチュートリアルの次のステップとして,上記で開発した直流モーターモデルと軸モデルを使って,強サーボ機構と弱サーボ機構を開発する.
この制御系の構造は以下の略図に示してある.この系は入力信号,センサー,フィードバックループ,制御器からなっている.物理系は直流モーターと軸のシステムの1つからなっている.物理系には負の静的ゲインがあるので,PIゲインもまた負でなければならない.
上記の図のように3つの系を全部繋ぐ.制御器パラメータのデフォルトの選択肢はk = 1およびT=1である.ただし,PI制御器変換関数は次の通りである.
まず,前に開発したDC motorと強軸についての制御系の開発から始める.下の図からも分かるように,フィードバック,PI制御器,スピードセンサーの3つのコンポーネントが新たに導入されている.
IntroductoryExamples.MultiDomain.StiffServoMechanismモデルのダイアグラムビュー
このモデルのシミュレーションを行う際は,以下の図に示してあるように,モーターの軸とギアの軸の両方の角速度の応答に注意を払いたい.モデルのシミュレーションは25秒間行う.
IntroductoryExamples.MultiDomain.StiffServoMechanismモデルのinertia1とinertia2の角速度のプロット
ここまでは,制御器にデフォルトのパラメータを使ってきたが,制御器ゲインkを変えると応答を制御することができる.この場合は,ゲインを1から2まで0.25の間隔で変えることにする.各シミュレーションの新たなエクスペリメントを作り結果を同じウィンドウにプロットすることで,全シミュレーションの結果を比較することができる.新たなエクスペリメントは,Simulation Centerでファイルメニューの新規を選んで作ることができる.各エクスペリメントで適切なパラメータ値を設定し,シミュレーションを行って,結果をプロットする.
IntroductoryExamples.MultiDomain.StiffServoMechanismモデルのinertia1とinertia2の角速度を,制御器ゲインを変えてプロットする.
調整器ゲインを変えて,モーターとギアの軸についての角速度応答を見ることでk=1.5を選ぶと,あまり振動せず十分に高速の応答が得られるとの結論が出る.
IntroductoryExamples.MultiDomain.WeakServoMechanismモデルのダイアグラムビュー
シミュレーションの前に,制御器ゲインをk=1.5に設定し,結果を強軸系のそれと比較する.
調整器ゲインk=1.5でのStiffServoMechanismモデルとWeakServoMechanismモデル間の慣性の比較
感度解析
このセクションでは,系のパラメータの違いについて制御設計の感度がどれほどかを見てみる.これは,前進感度解析をサポートするCVODESソルバを使って行う.パラメータpについての状態yi(t)の感度si(t)は以下で与えられる.
つまり,各インスタンスの感度は,パラメータpの小さな変化に対して状態yi(t)に対する解がどれほど変わるかを表している.
WeakServoMechanism中の,この3つの慣性に対する制御設計の感度をよく見てみよう.そのためには,設定ビューでCVODESソルバを選び,inertia1.J,inertia2.J,inertia3.Jについてのパラメータビューで感度解析チェックボックスをチェックする.
シミュレーションが終了すると,各状態の下の開くことができるツリーとして,プロットビューで感度解析の結果をプロットすることができる.
inertia1.J,inertia2.J,inertia3.Jに対しての,inertia3.wの感度
以下のスクリーンショットは,inertia1.J,inertia2.J,inertia3.Jについてのinertia3.wに対する感度を示している.inertia1.Jはinertia3.wの結果に対してはシミュレーションの初期に若干の影響を与えるに過ぎない.影響はシミュレーションの終りに近付くに従って小さくなる.inertia2.Jの影響は,シミュレーションの全体を通して無視し得る程度のものである.これに対し,慣性inertia3.Jは解に多大な影響を与える.このことから,この制御設計はinertia3.Jの変化に対してもっとも敏感であるということができる.
inertia1.J,inertia2.J,inertia3.Jに対してのinertia3.wの感度