Sensor

Model ElementSensorは、モデル内のイベントセンサーを定義します。対象のイベントが発生したら、そのイベントに応じてアクションをとることができます。

クラス名

センサー

説明

例えば、車両シミュレーション中に車体の横加速度を監視することで、車が制御不能になるかどうかを判断することができます。この量がしきい値を超えたら、シミュレーションを停止できます。

属性の概要

名前 プロパティ コマンドで変更可能か 設計可能か
id Int ()   ×
label Str ()
value Double ()  
error Double ()  
operator Enum ("LE EQ GE", default="EQ")
dt Double ()  
hmax Double ()  
halt Bool ()  
print_ Bool ()  
restart Bool ()  
return_ Bool ()  
stepsize Double ()  
zero_crossing Double ()  
function Function ("SENSUB")
routine Routine ()  
evaluate Function ("SEVSUB")  
evaluate_routine Routine ()  
active Bool ()

使用法

MotionSolveでは、Sensor_Eventの3つの代替実装を利用できます。
#1: Sensor event is specified in a MotionSolve expression
Sensor (value=double, function=expressionString, optional_arguments)

#2: Sensor event is specified in a compiled user-subroutine
Sensor (value=double, function=userString, routine=string, optional_arguments)

#3: Sensor event is specified in a Python function
Sensor (value=double, function=userString, routine=functionPointer, optional_arguments)

属性

センサーイベントはMotionSolve式で指定します。
value
倍精度
センサーイベントのしきい値。Sensor式またはユーザーサブルーチンがvalueに関して比較条件を満たしている場合、イベントが発生したと見なされます。
function
有効なMotionSolve式を定義する文字列。
Sensor値を定義するMotionSolve式を指定します。任意の有効な実行時MotionSolve式を入力として指定できます。
function属性は必須です。
センサーイベントはコンパイルされたユーザーサブルーチンで指定します。
value
倍精度
センサーイベントのしきい値。Sensor式またはユーザーサブルーチンがvalueに関して比較条件を満たしている場合、イベントが発生したと見なされます。
function
有効なユーザー関数MotionSolve式を定義する文字列。
データファイルから、Sensorが定義されるユーザー定義のサブルーチンに渡されるパラメータのリスト。
function属性は必須です。
routine
文字列
ユーザーサブルーチンの代替名を指定します。この名前は、“∷”で区切られた情報の2つの部分で構成されます。1つ目は、ユーザー定義のVariableの応答を計算する関数を含む共有ライブラリへのパス名です。2つ目は、計算を実行する共有ライブラリ内の関数の名前です。

例: routine="/staff/Altair/engine.dll::mySensor"

  • "/staff/Altair/engine.dllはDLLです。
  • mySensorは、計算を実行するこのDLL内の関数です。
属性routineは省略可能です。
指定しない場合、routineはデフォルトでSENSUBになります。
センサーイベントはPython関数で指定します。
value
倍精度
センサーイベントのしきい値。Sensor式またはユーザーサブルーチンがvalueに関して比較条件を満たしている場合、イベントが発生したと見なされます。
function
有効なユーザー関数MotionSolve式を定義する文字列。
データファイルから、Sensorが定義されるユーザー定義のサブルーチンに渡されるパラメータのリスト。
function属性は必須です。
routine
Python内の呼び出し可能な関数へのポインタ。
例:routine=mySensub
  • mySensubは、モデルが存在する場所ならどこからでも呼び出すことが可能なPython関数またはメソッドです。
属性routineは省略可能です。
指定しない場合、routineはデフォルトでSENSUBになります。
オプション属性 - すべてのバリアントに使用できます。
id
整数
要素識別番号を指定します。この番号は、モデル内のすべてのSensorオブジェクトの中で一意にする必要があります。
この属性は省略可能です。MotionSolveは、IDが指定されていない場合、自動的にこれを作成します。
値の範囲:id > 0
label
文字列
Sensorオブジェクトの名前を指定します。
この属性は省略可能です。指定しない場合は、MotionSolveが代わりにラベルを作成します。
operator
文字列
比較演算子を定義します。
"GE"、"EQ"、または"LE"から選択します。比較演算子は、イベントの発生時にこれを検出するために使用されます。次のように実装されます:
  • GE:SensorValue ≥ value - error
  • EQ:SensorValue ≥ value - error && SensorValue ≤ value + error
  • LE:SensorValue < value + error
この属性は省略可能です。指定しない場合は、デフォルトで"EQ"になります。
error
倍精度
イベントを検出するための誤差トレランスを定義します。検知された値がこのしきい値のトレランス内の場合、ソルバーはイベントを生成します。
この属性は省略可能です。指定しない場合は、デフォルトで0.001になります。
zero_crossing
倍精度
ゼロクロッシング検索のトレランスを指定します。トレランスは、zero_crossingの値に現在のhmaxを掛けたものとして定義されます。検索は、このトレランス内でイベントが発生した時間ちょうどの時点で停止します。詳細については、Sensor:イベント3をご参照ください。
dt
倍精度
イベントが発生したときに適用される新しい出力間隔を指定します。
この属性は省略可能です。指定しない場合、出力間隔は変更されません。
hmax
倍精度
センサーがトリガーされた直後にソルバーが取ることのできる最大ステップサイズの値を指定します。この値は、他のセンサーによって変更されない限り、シミュレーションの最後まで存続します。
この属性は省略可能です。指定しない場合、最大ステップサイズは変更されません。
halt
ブール
TrueまたはFalseに設定します。
イベントが発生してhalt=Trueの場合、シミュレーションを停止します。
この属性は省略可能です。指定しない場合は、halt = Falseになります。
print
ブール
TrueまたはFalseに設定します。
イベントが発生してprint=Trueの場合、結果を出力します。
この属性は省略可能です。指定しない場合は、print = Falseになります。
restart
ブール
TrueまたはFalseに設定します。
restart=Trueのときにイベントが検知されると、MotionSolveが積分器を再起動します。システムのすべての積分器履歴が削除され、積分器が再起動されます。
この属性は省略可能です。指定しない場合は、restart = Falseになります。
return
ブール
TrueまたはFalseに設定します。
return=Trueのときにイベントが検知されると、プログラムの制御がコマンドプロセッサに戻されるため、次のコマンドを処理できます。他にコマンドがなければ、シミュレーションは中断されます。
この属性は省略可能です。指定しない場合は、restart = Trueになります。
stepsize
倍精度
次の試験ステップの最大ステップサイズを指定します。これは1ステップで期限切れになります。
この属性は省略可能です。指定しない場合、積分器のステップサイズは影響を受けません。
evaluate
関数式を指定する場合
  • 有効なMotionSolve関数式を定義する文字列
  • 値に評価する適切なMotionSolve式を指定します。
ユーザーサブルーチンを指定する場合
  • 有効なユーザー関数MotionSolve式を定義する文字列
  • データファイルから、評価が実行されるユーザー定義のサブルーチンに渡されるパラメータのリストが含まれます。
evaluate_routine
コンパイルされたユーザーサブルーチンを指定する場合
  • 文字列

    ユーザーサブルーチンの代替名を指定します。この名前は、“∷”で区切られた情報の2つの部分で構成されます。1つ目は、ユーザー定義のVariableの応答を計算する関数を含む共有ライブラリへのパス名です。2つ目は、計算を実行する共有ライブラリ内の関数の名前です。

    例: routine="/staff/Altair/engine.dll::mySevsub"

    • "/staff/Altair/engine.dllはDLLです。
    • mySevsubは、計算を実行するこのDLL内の関数です。
属性routineは省略可能です。
指定しない場合、routineはデフォルトでSEVSUBになります。
Python関数を指定する場合
  • Python内の呼び出し可能な関数へのポインタ。
  • 例: routine= mySevsub
  • mySevsubは、モデルが存在する場所ならどこからでも呼び出すことが可能なPython関数またはメソッドです。
属性evaluate_routineは省略可能です。
指定しない場合、routineはデフォルトでSEVSUBになります。
active
ブール
TrueFalseのどちらかを選択します。
  • Trueは、要素がモデル内でアクティブであり、システムの動作に影響を与えていることを示します。
  • Falseは、要素がモデル内で非アクティブであり、システムの動作に影響を与えていないことを示します。エンティティがモデルから削除される場合とほとんど同じですが、必要に応じて“ON”にできる点が異なります。

属性activeは省略可能です。指定しない場合、activeはデフォルトでTrueになります。

同じ例のXMLシンタックスとPythonの比較。
<Sensor_Event
 id        = "100"
 type      = "EXPRESSION"
 expr      = "ABS(ACCX(21,11,21,11))"
 compare   = "GE"
 value     = "5"
 error_tol = "0.0001"
 halt      = "TRUE"
/>
expr = "ABS (ACCX (21,11,21,11))" 
sen1 = Sensor (function=expr, operator="GE", value=5, error=0.001, halt=True)
<Sensor_Event
 id                       = "200"
 type                     = "USERSUB"
 usrsub_param_string      = "USER(22,11)"
 usrsub_dll_name          = "NULL"
 compare                  = "GE"
 value                    = "0"
 evaluate_id              = "200" 
 error_tol                = "0.0001"
 dt                       = "le-2"
/>
expr1 = "USER (22,11)" 
expr2 = "FM (44,33,33)" 
sen2 = Sensor (function=expr1, operator="GE", value=0, error=0.001, dt=1e-2, evaluate=expr2)

コメント

  1. プロパティの概要、使用理由、および拡張方法については、プロパティをご参照ください。
  2. Sensorの詳細については、Sensor: Eventをご参照ください。