連成シミュレーションに関するFAQ

MotionSolveはどのような種類の連成シミュレーションをサポートしますか?

MotionSolveは、下記のモデルと直接連成シミュレーションできます:
  1. Simulinkモデル:
    1. Simulinkから実行
    2. Simulink Coderモデル / ライブライブラリ(旧名Real-Time Workshop)に変換
  2. DSHPlusモデル(FluidonのWebサイトwww.fluidon.comをご参照ください)
  3. 一部のタイヤおよびドライバーモデル(例えば、FTire)

MotionSolveは、その広範なユーザーサブルーチンサポートの使用により、他のインターフェースもサポートできます。この件に関する詳細な情報については、お近くのアルテアの担当者またはAltair support(www.altair.com)にお問い合わせください。

Simulink-driven が主導する連成シミュレーションに使用されるS-Functionライブラリを自らコンパイルする必要がありますか?

いいえ。S-Functionライブラリをコンパイルする必要はありません。MotionSolveとの連成シミュレーションのためのS-Functionライブラリがあらかじめ作成されており、以下のいずれかの方法で呼び出すことができます:

mscosim - SMPコミュニケーション用(共有メモリ)

mscosimipc - IPCコミュニケーション用(TCP/IPソケットを介したプロセス間コミュニケーション)

S-Functionライブラリは、<installation>\hwsolvers\motionsolve\bin\<platform>に配置されています。

連成シミュレーションを実行するのに、モデル内にいくつのControl_PlantInputおよびControl_PlantOutputを擁することが可能または必要ですか?

現在の実装では、MotionSolveは1つのモデルにつき任意の数のControl_PlantInput要素とControl_PlantOutput要素をサポートします。

MotionViewでは、どうやってControl_PlantInputとControl_PlantOutputを作成できますか?

Control_PlantInputまたはControl_PlantOutputは、ソルバー配列を作成し、typeをPlant InputまたはPlant Outputに設定することで作成できます。ソルバー配列については、Control Entitiesツールバーをご参照ください。


図 1.

自身のモデルに適用するためにMotionSolveへの入力信号(プラント入力)をどのように使用したらよいですか?

モデルに入力を適用するには、式でPINVAL()関数を使用します(例えば、Force = pinval(1234,1))。VARVAL()を使ってはいけません。VARVAL()の値はPINVAL()に近いものの、全く同じように更新はされません。

Simulink S-Functionへの入力または出力、あるいはその両方の順序は重要ですか?

はい。Control_PlantlnputおよびControl_PlantOutputステートメント内にリストされる入力と出力の順序は、Simulinkの入力と出力により使用されている信号と同じ順序でなければなりません。Mux and Demuxブロックを使って順に並べ、信号を展開してください。複数のControl_PlantInputまたはControl_PlantOutputが使用されている場合、それらがMotionSolveモデル内でどのようにリストされているか(例えば、ライン番号順、など)によって順序は決定されます。

MotionSolveはどんな種類のコミュニケーションを連成シミュレーション用にサポートしますか?

MotionSolveはコミュニケーション用に、共有メモリ(プロセス間のIPCではなくスレッドを介して)およびTCP/IPソケットのいずれもサポートします。これは、適切なS-Functionライブラリ名を選ぶことによって選択されます。またTCP/IPは、さらなる設定を必要とします。TCP/IPコミュニケーション用にモデルをセットアップする方法の詳細については、TCP/IPを使った連成シミュレーションのトピックをご参照ください。

TCP/IPと共有メモリのコミュニケーションはどうやって選択できますか?

最速のコミュニケーションは通常、共有メモリオプションを介して達成されます。TCP/IPは、MotionSolveとSimulinkを別々のマシン上で実行したい場合に推奨されます。

MotionSolveとSimulinkを別々のマシン上で実行できますか?

はい。ソケットを介したTCP/IPコミュニケーションを使うことで可能です。これにより、MotionSolveを1つのマシンで、Simulinkを別のマシンで実行できます。TCP/IPコミュニケーションは独立したプラットフォームであるため、異なるタイプのマシンでも可能です。

コミュニケーションは、MotionSolveとSimulinkへの入力信号をIPアドレスと関連付けすることで行えます。

データの補間について、0次、1次および2次ホールドの違いは何ですか?

これらの異なるホールド手法は、連続システムのサンプリングの方法です。0次ホールドは1つの値を抽出し、それを1つのサンプル周期用の定数値として保持します。1次ホールドは2つの値の線形補間または外挿、2次ホールドは3つの値の2次補間または外挿です。

コマンド行(バッチモード)で連成シミュレーションを実行するにはどうしたらよいですか?

MotionSolveでは、MotionSolveと連成シミュレーションを実行するために準備されたSimulinkモデルをコールすることが可能です。モデルの準備方法については、MotionViewチュートリアルオンラインヘルプ内のトピックMV-7002: Simulinkとの連成シミュレーションをご参照ください。このモデルを実行するには、MotionSolveの実行ファイル(mbd_d.exe)を直接呼び出します。この実行ファイルは<install_dir>/hwsolvers/motionsolve/bin/<platform>にあります。

そのためにまず、下記を実行する必要があります:
  1. MotionSolveのS-Functionをいつでも探し出せるようにMATLABのパスを保存します(File > Set Path > Save)。
  2. mbd_d.exeをコールするように環境変数を設定します。
  3. MATLAB用のトップレベルのインストレーション場所を指定するために、環境変数MATLABROOTを設定します。

MotionSolveの実行ファイルをコールする方法と、バッチによる連成シミュレーションをコールするための引数の例を以下に示します:

C:\sim_temp>"C:\Program Files\Altair\12.0\motionsovle\bin\win64\mbd_d.exe"
Usage:   mbd_d <source>.{xml|py|pyc|acf|mdl} <target>.mrf [<usrsub_dll>]
Purpose: Run as the main driver for a complete Pre->Solve->Post process.
{} Select one item. [] Optionally select the item.
<source>.mdl - Simulink model file (for batch-mode co-simulation)
<target>.mrf - MotionSolve output MRF file
<usrsub_dll> - Optional usersub dll filename

最終的なコマンドは次のようになります:

C:\sim_temp>"C:\Program Files\Altair\12.0\hwsolvers\motionsolve\bin\win64\mbd_d.exe" my_simulink_model.mdl output.mrf

Simulinkを使って連成シミュレーションを行う方法と、Simulink Coder(Real-Time Workshop)でSimulinkモデルからライブラリを生成して複合システムを連成シミュレーションする方法の利点 / 欠点は何ですか?

Simulinkインターフェースを介した連成シミュレーションでは、モデルのトポロジー(ブロックがどのように結合されているか、どれが使用されているか、どのような設定か、など)やモデルパラメータも含め、希望するSimulinkモデルに、Simulinkユーザーが任意の変更を加えることができます。

Simulink Coder(Real-Time Workshop)でSimulinkモデルからライブラリを生成するには、その生成時に追加のライセンスが必要です。Simulinkモデルを表現する1つのファイルを生成しますが、新しいライブラリが生成されるまでは、モデルのトポロジーは固定されたままです。このライブラリは知的所有権を保護し、生成後に実行するためのMathworksライセンスは必要としません。またこの方法は通常、Simulinkインターフェースの使用に比べて短時間で実行されますが、モデルによって異なります。

MotionSolveモデル(.xml)のSimulateコマンドは、Simulinkからの連成シミュレーション実行時にSimulate(end time)にある設定と同期している必要がありますか?

はい。通常、そうです。各ソルバーは、そのシミュレーションパラメータによって指定された時間量に応じて実行されます。したがって、連成シミュレーションを完了するには、両ソルバー間でend timeを同じに設定する必要があります。MotionSolveモデル内のSimulate::end_timeパラメータをご参照ください。

<Simulate
analysis_type       = "Transient"
end_time            = "2."
print_interval      = "0.01"
/>

Simulate::print_intervalは、MotionSolveファイルを書き出すために使用されます。

Simulinkでの連成シミュレーションでエラーが起こり、修正はしましたが、シミュレーションで誤った結果が出されます。どのように修正したらよいでしょうか?

まずできることは、MATLABコマンドウィンドウでの“clear mex”コマンドの発行です。これによりS-Function(mex)ライブラリがアンロードされ、Simulinkは後続の解析のためにそれを再度リロードします。これがうまくいったら、新規のセッションでMATLAB/Simulinkを再起動してください。

連成シミュレーションの最良の例は何ですか?

  • まず、各モデルを単独で実行: 連成シミュレーションを試みる前に、できれば連成シミュレーションで見られるものと同様の入力を用いて、各モデルを単独で実行します。
  • 入出力の精度: 連成シミュレーションでカップリングされたシステムで、両方のソルバーが互いへの入力として正確なデータを提供していることを確実にします。そうでないと、不正確な結果が出されたり、実行に不具合が生じる場合があります。例えば、Simulinkへの入力(フォースの計算に使用する入力)として、MotionSolveから速度を提供する場合、その速度はできる限り正確にする必要があります。MotionSolveでの動解析(DSTIFF I3 (Index 3)を使用)にデフォルト値を使う場合、それらのソルバー設定は速度についてエラー制御を行いません。代りに、エラー制御を行い、より正確な結果を提供するDSTIFF SI2の使用を考慮してもよいでしょう。詳細については、RADIOSS, MotionSolve, and OptiStructオンラインヘルプのReference Guide内、XML FormatのトピックParam_Transient、特にComment 11の“Have my results converged?”をご参照ください。最後に各ソルバーにより生成された出力を確認して、結果が収束し、それが、連成シミュレーションとして組み合わせる前に各モデルを単独で実行した最善の結果であろうことを確かめます。
  • 入出力のためのHold_order: MotionSolveでは前述のとおり、Control_PlantInput::hold_orderおよびControl_PlantOutput::hold_orderパラメータを介して連成シミュレーション内でどのように補間または外挿されるかを指定することができます。開始および終了時刻の値はすでに両方用意されているため、補間にゼロ以外のホールド次数を選択すると安全で、精度またはパフォーマンス、あるいはその両方の向上に役立つ場合があります。しかしながら、外挿にホールド次数を選択することは、システムの安定性と精度について多少のリスクがあります。それは、ソルバーから既に得られているものを上回った値を外挿が予測しようとするためです。外挿のhold_orderに1または2を選んでシステムの応答が悪くなった場合は、hold_orderを1または0に下げ、システムの応答が安定するかどうかを確認します。
  • 連成シミュレーションの安定: いずれでも上手くいかない場合は、1つまたは両方のソルバーの最大積分タイムステップを減らします。これによりシミュレーションのスピードは落ちますが、各ソルバーに最も正確 / 安定した値を提供する助けになるかもしれません。それもだめな場合、各ソルバーへの入力を確認し、結果がスムーズでリーズナブルであることを確実にします。連続しない(スムーズではない)入力はしばしばソルバーが上手く実行されない原因となります。

Simulink内に離散(のみ。非連続状態の)モデルがあります。連成シミュレーションは上手くいきません。何が悪いのでしょうか?

MotionSolveモデル内のControl_PlantInputおよびControl_PlantOutputステートメントのsampling_periodがゼロではない値に設定されているか確認してください。ゼロに設定されていたり未設定である場合、サンプルの時間仕様内の非互換性のために、Simulinkモデルが機能しません。

マシン上に複数のMATLABインストレーション環境があります。連成シミュレーションの実行時に、MotionSolveではどれが使用されますか?

複数のMATLABインストレーション環境が使用可能な場合は以下の手順に従います:
  1. 複数のMATLABバージョンがインストールされているマシンでコマンドプロンプトを開きます。この操作は必ず“管理者モード”で実行します。
  2. コマンド“matlab /regserver”を実行します。このコマンドでは、MATLABソフトウェアのいずれかのバージョンをリスニングサーバーとして登録できます。MotionSolveによる連成シミュレーションは、このバージョンで実行されます。