TCP/IPを使った連成シミュレーション
Inter-Process Communication(IPC: プロセス間通信)連成シミュレーションは、1台のマシン上でも、別々のマシン / プラットフォームの間でも実行できます。
IPC連成シミュレーションは、ソルバーを実行する2つのプロセス間のコミュニケーションをTCPソケットを使って行います。TCPプロトコルは独立したプラットフォームであるため、このコミュニケーションタイプでは、異なるプラットフォーム間のコミュニケーションが可能です。
TCP/IPを使用したMATLAB/Simulink関連の連成シミュレーションでサポートされている手法
- Simulink Coder/Real-Time Workshop (RTW) IPC連成シミュレーション
- Simulink IPC連成シミュレーション
これらのIPC連成シミュレーションはいずれも、2つの追加のDLLとしてnuclient.dllおよびnuserver.dllを必要とします。これらのライブラリは、サーバー-クライアント コミュニケーションの構築に使用されます。
RTW DLLでは、既存のRTW DLLを読み込めるようにするための変更はありません。Simulink IPC連成シミュレーションで必要なmex DLLはmscosimまたはmscosimipcのいずれかです。これはS-Functionブロックに対して入力する名前です。
RTW DLLを使った連成シミュレーションではMotionSolveがシミュレーションを先導する(MotionSolveが最初にコールされる)点に注意が必要です。Simulink IPC連成シミュレーションの場合、Simulinkが起動され、最初にコールされます。コミュニケーション(TCP/IPデーモン)を仲立ちするプロセスは、先導するプロセスによりコールされるマシン上で実行されます。
必要とされるモデル変更
- RTW
- RTW連成シミュレーションの場合、Control_PlantInput要素とControl_PlantOutput要素に属性ip_addressを追加します。この属性には、MotionSolveソルバーが稼動するIPアドレス(例えば、204.235.26.47やlocalhost)を示す文字列が記述されています。
- Simulink
- Simulink IPC連成シミュレーションの場合、MotionSolve XMLモデルに変更はありません。Simulinkモデルについては、S-Functionの名前をmscosimからmscosimipcに変更するか、同じ名前のままにします。
さらに、MotionSolveが稼動するマシンのIPアドレスを指定する必要があります。これを行うには、MATLABワークスペース内のMATLAB変数または環境変数MS_SERVER_IP_ADDRESSのいずれかを定義します(例えば、MS_SERVER_IP_ADDRESS = 204.235.26.47またはsetenv(MS_SERVER_IP_ADDRESS, 204.235.26.47))。
この方法では、MATLABを終了すると変数は保持されないため、MATLABを起動するたびにこの指定が必要になります。IPアドレスを定義するのは一度だけにして、その後は変更しない場合は、MotionSolveが稼動するIPアドレスを指すシステムレベルの環境変数MS_SERVER_IP_ADDRESSを定義できます。IPC連成シミュレーションの実行時にこの環境変数が見つからない場合は、IPアドレスのデフォルトとしてloaclhostが使用されます。
RTW IPC連成シミュレーションの実行
- TCP/IPを使った連成シミュレーションに記されているとおり、ip_address属性をControl_PlantInputおよびControl_PlantOutputに追加することで、RTW XMLモデルをIPCモデルに変更します。
-
XMLモデルが存在するマシンでは、通常のMotionSolve実行コマンド
msolve xml_name mrf_name
を発行します。注: msolve.exeのほかにmbd_d.exeも機能する点に注目してください。 -
RTW DLLを有するマシンでは次のコマンドを発行します。
msdaemon 22903 < ip_address string
例えば、
204.235.26.47>
とします。以下の点に注意してください:- ip_addressは、MotionSolveを実行しているマシンを指します。
- このマシン上で必要なファイルはmsdaemon.exeおよびnuclient.dllで、これらは同じプラットフォームの別のインストール環境からコピーできます。
- このマシンの検索パスに、msdaemon.exeとRTW DLLのパスを記述しておく必要があります。
- msdaemon.exeおよびnuclient.dllが存在するフォルダを指すように、環境変数NUSOL_DLL_DIRを設定します。
- 必要なmsdaemon.exeファイルとnuclient.dllファイルは、MotionSolveのインストール先ディレクトリにあります。
<install_dir>\hwsolvers\motionsolve\bin\<platform>
例えば、C:\Program Files\Altair\2019.1\hwsolvers\motionsolve\bin\win64
これで、連成シミュレーションが最後まで実行されます。
Simulink IPC連成シミュレーションの実行
-
Simulinkモデルを次のようにしてIPCモデルに変更します:
- S-Function名をmscosim/mscosimipcに変更します。
- MS_SERVER_IP_ADDRESSを、MATLABのワークスペース内部で定義するか、上述の環境変数として定義します。
-
MotionSolve XMLモデルが存在するマシン上で、コマンド
msdaemon 22903
を実行します。このプロセスはnuserver DLLを読み込み、その後からnusolver DLLを読み込み、MotionSolveモデルを実行します。実行されるXMLモデルの名称は、Simulinkモデル内で定義されます。 -
Simulinkモデルが存在するマシン上でSimulinkモデルを起動し、シミュレーションを実行します。
これで、連成シミュレーションが最後まで実行されます。注: Control_PlantInputおよびControl_PlantOutputへのip_address属性は、Simulink IPC連成シミュレーションでは使用されません。パラメータip_addressが、localhostであるローカルマシンを指している場合、発行が必要なコマンドは、連成シミュレーションを実行するプロセス(RTW IPC連成シミュレーションの場合はMotionSolve、IPC連成シミュレーションの場合はSimulink)を開始するためのコマンドのみです。msdaemonプロセスを別途開始する必要はありません(自動的に始まります)。