MV-1080:MDLを用いたアナリシスの作成
本チュートリアルでは、アナリシス定義の作成と、MDLファイル内でのアナリシス定義のインスタンス化について学習します。
アナリシス定義は、これらのキーの違いを除くと、シンタックスとその使用法についてはシステム定義と類似しています:
- システム定義には*DefineSystem()を使用しますが、アナリシス定義には*DefineAnalysis()を使用します。
- アナリシスは、トップレベルのモデルの下でのみインスタンス化が可能
- 所与のインスタンスにおいてモデル内で1つのアナリシスのみがアクティブになり得る
アナリシス定義ブロックは*DefineAnalysis()で始まり、*EndDefine()で終わります。このブロック内で定義されたすべてのエンティティは、アナリシス定義の一部であるとみなされます。*DefineAnalysis()のシンタックスは下記のとおりです:
*DefineAnalysis(ana_def_name, arg_1,arg_2, ..., arg_n)
ana_def_name
はアナリシス定義の変数名で、このアナリシスのインスタンス生成の間に使用されます。arg_1,arg_2...arg_n
は、アタッチメントとしてアナリシス定義に渡される引数のリストです。
表 1 は、MDLファイル内のアナリシス定義およびそれに続くインスタンス化を示しています。アナリシス定義ファイルとモデルファイルの2つが、スタディ下の特定のアナリシスをインスタンス化する際に機能します。例の中で一部の語は、これらファイル間の幾つかの主要な関係に焦点を当てるため、太字で記されています。
Reference Numbers | System Instantiation with Definition |
---|---|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
表 2
は、アナリシス定義とMDLモデルファイル内のインスタンスとの関係を示したものです。
変数 | Relationship |
---|---|
j_joint_att |
アナリシス定義ファイルの*Attachment()ステートメント(行4)で宣言され、*DefineAnalysis()ステートメント(行3)に引数として現れるアタッチメントの変数名。モーションは、*Motion()ステートメント(行6)を使ってこのジョイントに適用されます。 |
ana_def |
アナリシス定義の変数名は、*DefineAnalysis()ステートメント(行3)内で指定されます。アナリシス定義は、ana1によって*Analysis()ステートメント(行2)内で使用されます。 |
アナリシス定義ファイルの作成
このステップでは、アナリシス定義ファイルを作成します。
- 以下の関数式を使って、x軸についての推進トルクを作成します:
Tx = step(TIME,.3, 0, .31, 10) + step(TIME, .31, 0, .32, -10)
- このアナリシスを応用し、図 1に示す三重振子モデルの固有振動数を推算します。
図 1. 平衡状態にある三重振子の詳細図

本演習では、以下の4つのMDLステートメントが使用されます:
*Attachment()
*ActionReactionForce()
*SetForce()
*Output()
注: 上記のMDLステートメントのシンタックスについては、MotionView Reference Guide(HyperWorks Desktop Reference Guide内)をご参照ください。
- テキストエディタで、空のファイルを開きます。
- *DefineAnalysis()および*EndDefine()ブロックを作成します。その他のすべてのステートメントは、このブロック間に追加します。
-
テキストエディタで、変数名
def_ana_0
、アタッチメントとして1つの引数がj_att
であるアナリシスを定義します:*DefineAnalysis(def_ana_0, j_att)
-
トルクは回転ジョイントで結合される2つのボディ間に適用され、ジョイントの原点は、力のかかるポイントとみなされます。これにより、1つのアタッチメント(回転ジョイント)のみを有することになります。アタッチメントとして
j_att
、エンティティタイプがJoint
を定義する*Attachment()ステートメントを作成します。ステートメントに使用される変数名は、*DefineAnalysis()ステートメントで使用されるものと同じでなければなりません。*Attachment(j_att, "Joint Attachment", Joint, "Select joint to apply torque")
これにより、1つのアタッチメント、すなわち回転ジョイントのみを有することになります。 -
*ActionReactionForce()ステートメントを使って、適用されるトルクを定義します。
要確認: ジョイントに係るボディに達するアタッチメントの正しいプロパティを参照してください。MDL内のドットセパレータの記述を参照してください。エンティティのプロパティには、ドットセパレータを使ってアクセスできます。例えば、回転ジョイントに結合されたボディは、
<joint variable name>.b1
および<joint variable name>.b2
としてアクセスが可能です。 -
*SetForce()
ステートメントを、変数名force_1
、下記のトルク値で作成します:TX = step(TIME,.3,0,.31,10) + step(TIME,.31,0,.32,-10),TY = 0,TZ = 0
-
*Output()ステートメントを作成し、適用されるフォースを出力します。
-
アナリシス定義をanalysis.mdlとして保存します。
ファイルは次のように見えるはずです:
*DefineAnalysis( def_ana_0,j_att ) *Attachment(j_att, "Joint Attachment", Joint, "Select joint to apply torque") *ActionReactionForce( force_1, "Torque", ROT, j_att.b1, j_att.b2, j_att.origin, Global_Frame ) *SetForce( force_1, EXPR, `step(TIME,.3,0,.31,10) + step(TIME,.31,0,.32,-10)`) *Output( o_force, "Input Torque", FORCE, FORCE, force_1, Global_Frame) *EndDefine()
モデル内のアナリシスのインスタンス生成
このステップでは、三重振子モデル内でアナリシスをインスタンス化します。
- MotionViewを起動し、mdlフォルダーからtriplependulum.mdlファイルを開きます。
- Project Browserから、Modelをクリックします。
- Systems/Assemblyパネルで、Import/Exportタブをクリックします。
-
(ファイルブラウザ)をクリックし、analysis.mdlを選択します。続いて、Importをクリックします。
-
Select a definitionドロップダウンメニューがAnalysisにセットされていることを確認します。
図 3.
- OKをクリックします。
- Project Browserで、新たに追加されたAnalysis 0をクリックします。
-
ジョイントのアタッチメントを指定します。
- モデルをnew_triplependulum.mdlとして保存します。
-
モデルを実行します。
-
(Run)パネルボタンをクリックします。
- パネル内で、End timeを1.0に、Print intervalを0.01と指定します。
- Runをクリックします。
-
-
(Start/Pause Animation)ボタンをクリックし、アニメーションを見ます。
- 解からの.abfファイルを使って、"Input Torque"出力をプロットします。