新しいコンポーネントを作成する
この章チュートリアルではカスタムコンポーネントを作成し再利用する方法を説明する.チェーン振り子は,一端の周りを回転する物体からなるチェーンリンクを連結させたものと考えることができる.ここではチェーンリンクコンポーネントを作成し,それを再利用してチェーン振り子モデルにする方法を示す.
このチュートリアルに使用されているモデル
|
ChainLink ChainPendulum |
チェーンリンクコンポーネント
チェーンリンクを構築するのに必要なコンポーネントはSystem Modelerに含まれるModelica Standard Libraryで利用できる.チェーンリンクはModelica.Mechanics.MultiBodyライブラリの振り子例題をヒントとしており,回転関節の周りを回転する物体からできている.回転に摩擦を与えるためには,回転関節にダンパを接続する.
チェーンリンクのモデルを構築するためには,新しいモデルを作成し,適切なコンポーネントを見付け,そのコンポーネントをダイアグラムエリアにドラッグアンドドロップし,接続線ツールを使ってコンポーネントを接続する必要がある.この最初のステップはこちらのチュートリアルで詳しく説明する.さらに,モデルがコンポーネントとして使われるようにするためには,他のコンポーネントへの接続を許可するコネクタインターフェースも必要である.接続線ツールを使って簡単にコネクタインターフェースを加える方法も示す.コンポーネントをより柔軟にするために,パラメータも加える.
まず,ChainLinkという名前の新しいモデルを作成する.必要なコンポーネントは,Modelica.Mechanics.MultiBody.Jointsにある回転関節Revolute,Modelica.Mechanics.MultiBody.PartsにあるボディBodyBox,Modelica.Mechanics.Rotational.Componentsにある回転ダンパDamperである.ChainLinkモデルにコンポーネントを加えるためには,クラスブラウザからコンポーネントをドラッグして,クラスウィンドウのダイアグラムビューにドロップする.モデルは以下のようなものである.
ChainLinkモデルのダイアグラムビュー
回転ダンパを回転関節に接続するためには,コンポーネントrevolute1のパラメータを設定する必要がある.パラメータを変更するためには,revolute1コンポーネントを選び,一般タブのパラメータの中のuseAxisFlangeをfalseからtrueにする.
3つのコンポーネントを加えたら,それぞれを接続しなければならない.各コンポーネントは接続線ツールを使って接続する.
コネクタは,同様の属性を持つもの同士しか接続できない.この規則は接続線ツールでサポートされている.ユーザが適合しない2つのコネクタを接続しようとすると,以下のスクリーンショットのように接続線は無効になる.
MultiBodyコネクタは「フレーム」と呼ばれ,座標系を表す.この物体は一端を中心に回転させたいので,bodyBox1のframe_aを回転関節のframe_bに接続することにする.
例えば,bodyBox1のframe_a(グレーのコネクタ)を回転関節コンポーネントのframe_b(白いコネクタ)に接続するためには,bodyBox1のframe_aの上にマウスカーソルを置き,左のマウスボタンを押したままでマウスカーソルを回転関節コンポーネントのframe_bまで動かす.マウスボタンを離すと,接続が構築される.
一次元機械系のコネクタであるダンパの2つのフランジも同様にして回転関節のフランジに接続する.
このモデルはコンポーネントとして使いたいので,モデルが他のコンポーネントとリンクできるように,適合性のあるコネクタを追加する必要がある.これは接続線ツールを使うと簡単にできる.bodyBox1のframe_bの上にマウスカーソルを置き,左のマウスボタンを押したままで新しいコネクタの希望の位置までカーソルを動かす.マウスボタンを右クリックしてコネクタの作成を選ぶか,カーソルが新しいコネクタ上に置かれたときに左マウスボタンを放すかすると接続が構築される.これで適合性のあるコネクタが生成される.回転関節のframe_aのコネクタは,同じようにして作成できる.
ここでパラメータを加えて,コンポーネントをより柔軟なものにしたい.これは,変数ビュー(変数をリフトすることに関するこのセクションは特にここに関係がある)で説明しているように,グラフィカルユーザインターフェースを使って行うことができる.しかしこのチュートリアルではModelicaテキストビューを使った方法を説明する.コンポーネントをドロップしたり接続したりする間に,モデルエディタはそれぞれのアクションに対応するModelicaコードを生成する.Modelicaテキストビューに切り替えると,モデルのテキスト表記を見ることができる.モデルのテキスト表記では,各コンポーネントが宣言され,2つのコンポーネント間の各接続は「equation」セクションの「connect」方程式で表されている.
テキストビューでは,bodyBox1の次元ベクトルr (長さ,幅,高さ)とダンピング係数dをモデルのパラメータとして宣言している.(明確にするために,以下に示すModelicaコードは注釈と説明を除いて簡約したものである.この時点でModelicaコードが実際にどのように見えるのかが知りたい場合はChainLinkのModelicaテキストビューを参照のこと.)
model ChainLink
parameter Modelica.Units.SI.Position r[3] = {1, 0.1, 0.1};
parameter Modelica.Units.SI.RotationalDampingConstant d = 1.0;
Modelica.Mechanics.MultiBody.Joints.Revolute revolute1(useAxisFlange = true);
Modelica.Mechanics.MultiBody.Parts.BodyBox bodyBox1(r = {r[1], 0, 0}, length = r[1], width = r[2], height = r[3]);
Modelica.Mechanics.Rotational.Components.Damper damper1(d = d);
Modelica.Mechanics.MultiBody.Interfaces.Frame_a frame_a;
Modelica.Mechanics.MultiBody.Interfaces.Frame_b frame_b;
equation
connect(revolute1.frame_a, frame_a);
connect(revolute1.frame_b, bodyBox1.frame_a);
connect(damper1.flange_b, revolute1.axis);
connect(damper1.flange_a, revolute1.support);
connect(bodyBox1.frame_b, frame_b);
end ChainLink;
次にコンポーネントのアイコンを生成する.アイコンビューに切り替えてグラフィックスツールツールバーを利用しながらコンポーネントアイコンを描画する.
接続線ツールでコネクタが作成されると,自動的にアイコンウィンドウのコネクタが追加されることに注目のこと.
チェーンリンクをアイコンビューで楕円としてグラフィックス的に表す.楕円の属性を変更するためには,楕円オブジェクトをダブルクリックし,マウスでそれを選んでAlt+Returnを押す.
テキストツールを使ってテキスト%nameのアイテムを加えると,コンポーネントの名前を表示することができる.パラメータの名前と値を表示するためには,parameterName=%parameterNameとタイプする.例えばコンポーネントのパラメータrとdを表示するためには,テキストr=%rとd=%dを含む2つのテキストボックスを加える.
チェーンリンクコンポーネントのアイコンビュー.同様のChainLinkモデルにはより洗練されたアイコンが与えられている.
チェーン振り子モデル
チェーンリンクコンポーネントができたら,チェーン振り子モデルは4つのチェーンリンクを繋ぎ,最初のフレームに繋いだものとして表すことができる.チェーン振り子モデルのダイアグラムビューは以下のスクリーンショットで表された通りである.
チェーン振り子モデルのダイアグラムビュー.ChainLinkアイコンが洗練されて見えるため,ChainPendulumのダイアグラムは多少異なって見える.
Simulation Centerに切り替えて,10秒間モデルのシミュレーションを行う.ツールバーのアニメーションボタンをクリックすると,シミュレーションの後に振り子のアニメーションを見ることができる.
アニメーションは,ツールバーのアニメーションボタンをクリックすると見ることができる.
パラメトリックプロットにおけるチェーン振り子の端点の位置.問題がカオス的性質を持つため,得られる厳密な軌道はわずかに異なる可能性がある.
練習問題
チェーンリンクの数をパラメータとした,より一般的なチェーン振り子を作成してみよう.