APIの内容

MBSのプロパティ

Pythonでは、変数のデータ型を宣言する必要がありません。つまり、変数は任意の値を取ることができます。1つのセッションで、次の処理を行うことができます:
  • Pressure = 200.0
  • Pressure = "High"
  • Pressure = [1, "High", False]

プログラミングの観点ではこのような汎用性が望まれますが、マルチボディシステムを指定するための言語を定義する場合は望まれません。マルチボディコンテキストでは、すべてのユーザー定義の入力に明確に定義された“プロパティ”があり、変数に代入する値はそのプロパティに従う必要があります。

例:
  • ボディの質量は、0以上の倍精度値にする必要があります。倍精度値、文字列、負の値などの配列にすることはできません。
  • ボディの慣性は、0、3、または6の値で指定された半正定値対称3x3マトリクスです。それ以外にすることはできません。
  • ブッシュの剛性Kと減衰Cは、対角3x3マトリクスとして指定されます。
    • KとCは、入力としてちょうど3つの数値を受け入れます。それ以上でもそれ以下でもありません。
    • それぞれの数値を0以上にする必要があります。

MotionSolveのPythonインターフェースでは、次の考え方を組み込むために“プロパティ”という概念が導入されました。

  • クラスは属性を持つ(例えば、PARTは属性として質量を持ちます)
  • 属性はそのプロパティに従う必要のある値を持つ(例えば、質量は0以上の数値を持っています)
プロパティは、MotionSolveオブジェクトのユーザー定義の値を定義します。
  • パートの質量
  • 積分器の誤差
  • スプリングダンパの剛性k
  • など...

すべての属性は1つのプロパティを持ちます。属性値を間違ったプロパティタイプに設定しようとするとエラーになります。以下に例を挙げます:

>>> Part1.mass = "A bad value"

TypeError: float() argument must be a number

値を設定するときに、すべての属性値検証を処理できるわけではありません。チェックによっては、必要な値が指定され、他のプロパティ値と矛盾していないことを確認する必要があります。例えば、ジョイントのiマーカーとjマーカーを指定して、別々のボディに関連付ける必要があるとします。このチェックは、モデルが検証されるときに実施されます。モデル検証は、モデル全体が定義された後で行われます。

一部のプロパティ値はシミュレーションの開始後に設定できますが、その他のプロパティは変更できません。パートの質量は変更できますが、CMの位置や方向は変更できません。この制限は、CMを変更すると、すべての質量プロパティも変更されるために存在します。

MotionSolveによってサポートされるプロパティとそれぞれの簡単な説明を下の表に示します。

プロパティ名 説明
Int Python整数値。

デフォルトは0

Bool Pythonブール値。

デフォルトはFalse

Double Python浮動小数点値。

デフォルトは0.0

注: 一部のDoubleでは、パート速度(vx、vy、vz、wx、wy、wz)と同様、値が0と値なしとは異なります。デフォルトはNone
Str Python文字列値。

デフォルトは""

Enum 指定された値のリストのいずれかにする必要のあるPython Str値。

例えば、ARRAYは"X" "Y" "IC" "U"の4つのタイプのいずれかにする必要があります。ARRAYのタイプ属性はプロパティEnumを持ちます。

EnumStr 複数の値を取るEnum。それぞれの値は文字列です。

例えば、FrictionオブジェクトのINPUT属性は複数の値を取ることができます。これらの値は次のいずれかにする必要があります:"PRELOAD"、"NONE"、"ALL"、"REACTION_FORCE_BENDING_MOMENT"、"TORSIONAL_MOMENT"

Reference 既存のMotionSolveオブジェクトへの参照。

例えば、CONTACTオブジェクトのIGEOM属性は、1つまたは複数の既存のGRAPHICSオブジェクトを参照する必要があります。

Location Pointクラスのインスタンス。

例えば、MARKERオブジェクトのQP属性はPointオブジェクトにする必要があります。Pointはリストであるため、3つの数値のリストを指定することもできます。

Angles 3つの倍精度浮動小数点数値。

MARKERとPARTのREULER属性のプロパティを指定するために使用します。

Ips ボディの慣性マトリクスを指定するための0、3、または6のDouble値。

このプロパティは、慣性マトリクスが半正定値であることを保証します。

Exact ボディの正確な固定位置を指定するためのPython文字列。

例: exact="X:Z:PSI"

Pattern(文字列) 最大で10個のTrue/False値を指定するためのPython文字列。

例: pattern="TFFFTFFFTF"

Function 適切なMotionSolve関数式を含むPython文字列。

例1:"DX(21,11)*VX(21,11) + DY(21,11)*VY(21,11) + DZ(21,11)*VZ(21,11)"

例2:"USER(21,11,4,0e-4)"

Routine DLL/SO名の後ろに関数名または呼び出し可能な関数ポインタが続くPython文字列。

例:"tires::pacejka2002"。DLL/SO名は“tires”です。DLL/SOには、MotionSolveによって実行される“pacejka2002”という名前の関数が含まれています。

MBSのクラス

モデリングクラスライブラリ
これらのクラスはモデルを定義するために使用します。その多くがコマンドとしても使用できます。コマンドは、シミュレーション中にモデルまたはシミュレーションの属性を変更するために使用します。
Model Accgrav Array Beam Bushing
Contact Coupler Curve Cvcv Cvsf
Debug Dcurve Diff Dsurface Dv
Equilibrium Field FlexBody Friction Gcon
Gear Gforce Graphics Gse Ic
Integrator Joint Jprim Kinematic Lse
Marker Mate Matrix Mforce Motion
Nforce Output Part Pforce Pinput
PointMass Poutput Preferences Ptcv Ptdcv
Ptdsf Ptdsff Ptsf Request Rv
Sensors Sforce Sfsf Spline SpringDamper
String Surface Tfsiso Transient(過渡解析) Ucon
Units Variable Vforce Vtorque  
表 1. 結果クラスライブラリ
BodyResult H3dOutput RequestResult ResultObject RvResult
SimulationResults Upost UserMsg    

アクセス関数

MSOLVE APIは、MotionSolveが提供するすべてのアクセス関数をサポートします。アクセス関数は、ユーザーサブルーチン内から呼び出してシステム状態依存情報を取得するためのものです。

モデリング要素がIDで識別されるXMLインターフェースとは違って、Pythonインターフェースでは、オブジェクトまたはIDをこれらのアクセス関数に渡すことができます。このインターフェースは、オブジェクトとIDの任意の組み合わせを引数として受け入れます。

例えば、関数ACCX (I, J, K, L)について考えてみます。これは次のように定義されています:

ACCX (I, J, K, L) =  d L 2 d t 2 ( R I R J ) · x ^ K

R I is the vector from the global origin to the origin of I

R J is the vector from the global origin to the origin of J

x ^ K is the unit vector along the x-axos of marker K

最大4つの引数を受け入れる。
  • I: 加速度のx成分が必要とされるマーカーの原点
  • J: Iに対する変位を測定する際の基準となるマーカーの原点
  • K: 結果が表される座標系マーカー
  • L: JからIへの変位ベクトルの2つの時間微分が取られる参照フレームマーカー
ACCX関数は、次のように、このインターフェースに実装されます:
  • Iは、マーカーオブジェクトまたはマーカーIDにすることができます。
  • Jは、マーカーオブジェクト、マーカーID、または全体座標系の原点を示す0にすることができます。
  • Kは、マーカーオブジェクト、マーカーID、または全体座標系を示す0にすることができます。
  • Lは、マーカーオブジェクト、マーカーID、または慣性参照フレームを示す0にすることができます。

次のアクセス関数が前述した方法でサポートされます。

AX AY AZ ACCM ACCX
ACCY ACCZ ACCXYZ DM DX
DY DZ DXYZ FM FX
FY FZ FXYZ TM TX
TY TZ TXYZ VM VR
VX VY VZ VXYZ WM
WX WY WZ WXYZ WDTM
WDTX WDTY WDTZ WDTXYZ PHI
PSI THETA YAW PITCH ROLL
INCANG Q QDOT QDDOT UVX
UVY UVZ BUSH SPDP VTORQ
BEAM_FNC FIELD_FNC SFORCE_FNC VFORCE_FNC GFORCE_FNC
NFORCE_FNC JOINT_FNC JPRIM_FNC MATE_FNC MOTION_FNC
COUPLER_FNC CVCV_FNC PTCV_FNC CVSF_FNC SFSF_FNC
ARYVAL DIF DIF1 PINVAL POUVAL
VARVAL SENVAL DVAL DSVAL DSVAL1
DSARY DSARY1 RVAL RVAL1