MV-1090:MDLを用いたデータセットの作成

本チュートリアルでは、開始時刻、中間時刻、終了時刻および荷重の大きさを指定するデータセットを作成し、データセット定義をアナリシス定義に含め、トルクの作用時間と大きさを変化させる方法について学習します。

1つのインターフェースを介してモデルの設計変数を変更したり入力を与えたりするのは便利なことがあります。データセットを持つことにより、そのようなモデリングのパターンが可能となります。データセットは、MDL内で別のエンティティによって値が使用または参照されるユーザー定義の変数の集合体です。データセットは、MDL言語またはグラフィカルユーザーインターフェースを使って作成されます。本演習では、MDLを用いたデータセットの作成に焦点を当てます。データセットは、システムやアナリシスなど、他の定義ベースのエンティティと同様、*DefineDataSet() - *EndDefine()ブロックを使って定義されます。続いて、*DataSet()ステートメントを使って、定義がインスタンス化されます。


データセット定義の作成

このステップでは、データセット定義を作成します。

使用するMDLステートメントの正しいシンタックスについては、MDL Language Referenceオンラインヘルプをご参照ください。

  1. テキストエディタで新しいドキュメントを作成します。
  2. *DefineAnalysis()および*EndDefine()ブロックを作成します。これらのステートメント間に、データセット属するデータメンバーを作成します。
    データセットには下記のデータメンバーが必要です:
    • 開始時刻
    • 中間時刻
    • End time
    • 荷重の大きさ
    すべてのデータメンバーは実数であるため、*Real()ステートメントを使用してそれぞれ定義することができます。
    注: また、整数、文字列、オプションまたはファイルなど(ユーザーのモデルに適用可能な)他のメンバーのタイプを定義することが可能です。
  3. 1つのデータメンバーの定義に1つの*Real ()ステートメントを使用します。
    ファイルは下の例のようになるはずです:
    *DefineDataSet(ds_def_force)
     *Real(start_time, "Starting Time")
     *Real(mid_time, "Mid Time") 
     *Real(end_time, "End Time")
     *Real(force_magnitude, "Force Magnitude")
    *EndDefine()
  4. モデルをdataset.mdlとして<作業ディレクトリ>に保存します。

データセット定義をアナリシス定義に含める

このステップでは、*Include()ステートメントを使ってデータセットをアナリシス定義に追加し、インスタンス化します。データセットエンティティは、トルクについて統合します。

  1. MV-1080:MDLを用いたアナリシスの作成で作成されたアナリシス定義をテキストエディタで開きます。
  2. *DefineAnalysis()ステートメントの前に*Include()ステートメントを使うことにより、データセットを含めます:
    *Include("dataset.mdl")
  3. *DataSet()ステートメントを使って、1つ目のデータセット定義をインスタンス化します。このステートメントを*DefineAnalysis()ブロック内の*Attachment()ステートメントの後ろに置きます。
    *DataSet(ds_force, "Force Data", ds_def_force)
    データセットのシンタックスは:
    *DataSet(ds_name, "ds_label", ds_def, [optional arguments])
    • ds_name データセットの変数名
    • ds_label データセットのラベル
    • ds_def 既存のデータセット定義の変数名
    • optional arguments アタッチメントとして渡される引数(存在する場合)
  4. *SetReal()ステートメント(*DataSet()ステートメントの後ろに置かれる)を使って、データセット内のデータメンバーのデフォルト値を設定します。
    *SetReal(ds_force.start_time, 0.3) 
    *SetReal(ds_force.mid_time, 0.31)
    *SetReal(ds_force.end_time, 0.32) 
    *SetReal(ds_force.force_magnitude, 10)
    *SetReal()ステートメントのシンタックスは以下に示すとおりです:
    *SetReal(real_name, real_value)
    • real_name 値が設定されるデータメンバーの変数名
    • real_value データメンバーの値
    データメンバーはデータセットの一部であるため、実際のエンティティの変数名を参照する正しいフォームは、ds_name.real_nameです。
  5. データセット内にエンティティを組み入れることにより、*SetForce()ステートメント内の適切な値を変更します。
    編集の前の段階では、ステートメントは次のように見えます:

    *SetForce( force_1, EXPR, `step(TIME,.3,0,.31,10) +step(TIME,.31,0,.32,-10)`)

    考え方としては、ドットオペレータを使ってモデルの階層構造をブラウズし、データセット値にアクセスします。これは、下記のとおりです:
    *SetForce(force_1, EXPR, `step(TIME, {ds_force.start_time.value}, 0,
        {ds_force.mid_time.value},
        {ds_force.force_magnitude.value}) + step(TIME,
        {ds_force.mid_time.value}, 0, {ds_force.end_time.value}, -
        {ds_force.force_magnitude.value})`,0,0)

    かぎ括弧{ }内の式は、MotionViewでTemplexによって処理され、データセット内で定義された適切な値に評価されます。

    アナリシス定義は、下に示す例のようになるはずです:
    *Include("dataset.mdl")
    *DefineAnalysis( def_ana_0,j_att )
     *Attachment(j_att, "Joint Attachment", Joint, "Select joint to apply
    torque")
    
    *DataSet(ds_force, "Force Data", ds_def_force)
    *SetReal(ds_force.start_time, 0.3)
    *SetReal(ds_force.mid_time, 0.31)
    *SetReal(ds_force.end_time, 0.32)
    *SetReal(ds_force.force_magnitude, 10)
    
    *ActionReactionForce( force_1, "Torque", ROT, j_att.b1, j_att.b2,
    j_att.origin, Global_Frame )
    
    *SetForce(force_1, EXPR, `step(TIME, {ds_force.start_time.value}, 0,
    {ds_force.mid_time.value}, {ds_force.force_magnitude.value}) +
    step(TIME, {ds_force.mid_time.value}, 0, {ds_force.end_time.value}, -
    {ds_force.force_magnitude.value})`)
    
    *Output( o_force, "Input Torque", FORCE, FORCE, force_1, Global_Frame)
    *EndDefine()
  6. 新しいアナリシス定義ファイルをanalysis_dataset.mdlとして保存します。

データセットパラメータの変更と解析の実行

このステップでは、データセットパラメータを変更し、でMotionSolveで解析を実行します。

  1. MotionViewで、MV-1080:MDLを用いたアナリシスの作成において作成した三重振子モデルを読み込みます。
  2. 既存のアナリシスがある場合は削除します。
    1. Projectブラウザで、Analysisを右クリックします。
    2. コンテキストメニューで、Deleteをクリックします。
  3. ProjectブラウザModelをクリックします。
  4. Systems/Assemblyパネルで、Import/Exportタブをクリックします。
  5. 新しいアナリシス定義ファイル(analysis.dataset.mdl)をインポートします。
    注: 下の図に示すように、Analysis定義タイプを選択します。


    図 1.
  6. Projectブラウザで、Datasetsフォルダーを拡張し、Force Dataをクリックします。


    図 2.
  7. データセットのパネルで、Starting Timeを0.5、Mid Timeを0.55、End Timeを0.6、Force Magnitudeを15に変更します。
  8. モデルを実行します。
  9. プロットウィンドウ内のInput Torqueを、MV-1080:MDLを用いたアナリシスの作成で行った解析からのものと比較します。
    データセットグラフィカルユーザーインターフェースを介してフォースパラメータを容易に変更し、解析を再実行することができます。
  10. モデルをtriplependulum_dataset.mdlとして保存します。