TCP/IPを使った連成シミュレーション

Inter-Process Communication(IPC: プロセス間通信)連成シミュレーションは、1台のマシン上でも、別々のマシン / プラットフォームの間でも実行できます。

IPC連成シミュレーションは、ソルバーを実行する2つのプロセス間のコミュニケーションをTCPソケットを使って行います。TCPプロトコルは独立したプラットフォームであるため、このコミュニケーションタイプでは、異なるプラットフォーム間のコミュニケーションが可能です。

TCP/IPを使用したMATLAB/Simulink関連の連成シミュレーションでサポートされている手法

次の2つのIPC連成シミュレーションモードがサポートされています:
  • 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デーモン)を仲立ちするプロセスは、先導するプロセスによりコールされるマシン上で実行されます。

必要とされるモデル変更

TCP/IPコミュニケーションを使った2つの異なる方法、すなわちRTW連成シミュレーションとSimulink連成シミュレーションに必要なモデル変更は以下のとおりです。
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連成シミュレーションの実行

  1. TCP/IPを使った連成シミュレーションに記されているとおり、ip_address属性をControl_PlantInputおよびControl_PlantOutputに追加することで、RTW XMLモデルをIPCモデルに変更します。
  2. XMLモデルが存在するマシンでは、通常のMotionSolve実行コマンドmsolve xml_name mrf_nameを発行します。
    注: msolve.exeのほかにmbd_d.exeも機能する点に注目してください。
  3. RTW DLLを有するマシンでは次のコマンドを発行します。
    msdaemon 22903 < ip_address string

    例えば、204.235.26.47>とします。

    以下の点に注意してください:
    1. ip_addressは、MotionSolveを実行しているマシンを指します。
    2. このマシン上で必要なファイルはmsdaemon.exeおよびnuclient.dllで、これらは同じプラットフォームの別のインストール環境からコピーできます。
    3. このマシンの検索パスに、msdaemon.exeとRTW DLLのパスを記述しておく必要があります。
    4. msdaemon.exeおよびnuclient.dllが存在するフォルダを指すように、環境変数NUSOL_DLL_DIRを設定します。
    5. 必要なmsdaemon.exeファイルとnuclient.dllファイルは、MotionSolveのインストール先ディレクトリにあります。

      <install_dir>\hwsolvers\motionsolve\bin\<platform>

      例えば、C:\Program Files\Altair\2019.1\hwsolvers\motionsolve\bin\win64

      これで、連成シミュレーションが最後まで実行されます。

Simulink IPC連成シミュレーションの実行

  1. Simulinkモデルを次のようにしてIPCモデルに変更します:
    1. S-Function名をmscosim/mscosimipcに変更します。
    2. MS_SERVER_IP_ADDRESSを、MATLABのワークスペース内部で定義するか、上述の環境変数として定義します。
  2. MotionSolve XMLモデルが存在するマシン上で、コマンドmsdaemon 22903を実行します。
    このプロセスはnuserver DLLを読み込み、その後からnusolver DLLを読み込み、MotionSolveモデルを実行します。実行されるXMLモデルの名称は、Simulinkモデル内で定義されます。
  3. Simulinkモデルが存在するマシン上でSimulinkモデルを起動し、シミュレーションを実行します。
    これで、連成シミュレーションが最後まで実行されます。
    注: Control_PlantInputおよびControl_PlantOutputへのip_address属性は、Simulink IPC連成シミュレーションでは使用されません。
    パラメータip_addressが、localhostであるローカルマシンを指している場合、発行が必要なコマンドは、連成シミュレーションを実行するプロセス(RTW IPC連成シミュレーションの場合はMotionSolve、IPC連成シミュレーションの場合はSimulink)を開始するためのコマンドのみです。msdaemonプロセスを別途開始する必要はありません(自動的に始まります)。