Main Content

RSim システム ターゲット ファイルを使用したホスト コンピューターでのハイブリッド動的システムの高速化、調整およびテスト

モデルを作成したら、ラピッド シミュレーション (RSim) システム ターゲット ファイルを使用して、モデルの動作を特徴付けます。ビルド プロセスで生成された実行可能プログラムは、開発用コンピューターでの非リアルタイム実行に使用されます。実行可能プログラムは、可変ステップ ソルバーやゼロクロッシング検出を使用するモデルなど、ハイブリッドな動的システムのモデルをシミュレーションするために高度に最適化されています。RSim システム ターゲット ファイルの生成コードの速度は、バッチまたはモンテ カルロ シミュレーションのプログラムを作成するのに最適な速度になります。

ラピッド シミュレーションについて

RSim ターゲットを使用して、高速なスタンドアロンのシミュレーションを実行する実行可能ファイルを生成します。シミュレーションをさまざまなデータセットで、対話的またはスクリプトでプログラム的に、モデルのリビルドなしで繰り返すことができます。これにより、モデル動作とコード生成テストの特徴付けと調整を加速化できます。

コマンド ライン オプションを使用すると、以下のことができます。

  • モデルのリビルドなしで、シミュレーション開始時に読み込み、および再読み込みできる 1 つ以上の MAT ファイルのパラメーター値と入力信号を定義します。

  • ログ データを 1 つ以上の MAT ファイルにリダイレクトし、それを解析して比較します。

  • シミュレーション時間を制御します。

  • エクスターナル モード オプションを指定します。

メモ

RSim 実行可能ファイルを実行するには、MATLAB® を実行するようコンピューターを設定し、MATLAB と Simulink® の各インストール フォルダーにアクセスできるようにします。スタンドアロン (つまり、MATLAB も Simulink もインストールされていない状態) のホスト実行可能ファイルを展開するには、ホストベースの共有ライブラリ ターゲット (ert_shrlib) の使用を検討してください。

ラピッド シミュレーションの利点

ラピッド シミュレーションによって得られる利点はそれぞれ異なります。シミュレーションが大きくなると、標準の Simulink シミュレーションの最大 10 倍の速度向上が見られます。モデルによっては、シミュレーション速度に目立った改良が見られないこともあります。モデルの速度の差を判断するには、標準の Simulink シミュレーションの時間を測り、結果をラピッド シミュレーションと比較します。さらに、ラピッド アクセラレータ シミュレーション モードでモデル シミュレーションをテストします。

一般的なラピッド シミュレーションのワークフロー

モデルベース デザインの他の段階と同様、モデル動作の特性化と調整は、図の一般的なワークフロー図に示すように反復プロセスです。ワークフロー内のタスクは以下のとおりです。

Rapid simulation workflow

ラピッド シミュレーション要件の特定

ラピッド シミュレーションを設定するには、まずシミュレーション要件を特定します。

質問詳細情報の参照先
シミュレーションをどのぐらいの期間実行しますか。 ラピッド シミュレーション用のモデルの構成とビルド
ソルバー要件はありますか。ラピッド シミュレーション用に設定されたモデルで同じソルバーを使用しますか。ラピッド シミュレーション用のモデルの構成とビルド
ラピッド シミュレーションは柔軟なカスタム コードのインターフェイスに対応させる必要がありますか。またはシミュレーションでストレージ クラス設定を保持しなければなりませんか。ラピッド シミュレーション用のモデルの構成とビルド
複数のデータセットでシミュレーションを実行していますか。ラピッド シミュレーション入力データの設定
入力データの構成はグローバル パラメーターですか、信号ですか、または両方ですか。ラピッド シミュレーション入力データの設定
モデルに入力データを提供するソース ブロックの種類は、From File、Inport、From Workspace のどれですか。 ラピッド シミュレーション入力データの設定
モデルのパラメーター ベクトル (model_P) を入力データに使用しますか。モデル パラメーター構造体をもつ MAT ファイルの作成
入力パラメーターと信号のデータ型は何ですか。ラピッド シミュレーション入力データの設定
ソース データは 1 つの変数で構成されていますか、複数の変数で構成されていますか。ラピッド シミュレーション入力データの設定
入力データに調整可能なパラメーターは含まれていますか。モデル パラメーター構造体をもつ MAT ファイルの作成
調整可能なパラメーター情報 (モデルのチェックサム、パラメーターのデータ型、識別子、複雑度) にアクセスしなければなりませんか。モデル パラメーター構造体をもつ MAT ファイルの作成
シミュレーション実行時にシミュレーションの停止時間を変える必要がありますか。ラピッド シミュレーション用のモデルの構成とビルドおよびモデル シミュレーションの終了時間のオーバーライド
シミュレーションに時間制限を設定しますか。モデルで頻繁にゼロクロッシングが検出され、小さいマイナー ステップ サイズがある場合は、時間制限を設定することを検討してください。ラピッド シミュレーションのクロック時間制限の設定
各シミュレーションの実行ごとに出力を保存しなければなりませんか。 シミュレーションでの新しい出力ファイル名の指定およびTo File ブロックの新しい出力ファイル名の指定
シミュレーションは対話的に実行しますか、それともバッチ モードで実行しますか。バッチ シミュレーションおよびモンテ カルロ シミュレーション用のスクリプト

シミュレーション ソース データを提供するための入力端子の構成

Inport ブロックをラピッド シミュレーションの入力データ ソースに使用できます。使用するには、外部の MAT ファイルからデータをインポートできるようにブロックを設定します。既定の設定では、Inport ブロックは下流ブロックからのパラメーター設定を継承します。ほとんどの場合、外部の MAT ファイルからデータをインポートするには、次のブロック パラメーターが MAT ファイルのソース データに一致するように明示的に設定を行わなければなりません。

  • [メイン][データを内挿する]

  • [信号属性][端子の次元]

  • [信号属性][データ型]

  • [信号属性][信号タイプ]

モデルの内容を管理できない場合は、MAT ファイルのデータを変更して、モデルが入力を期待する内容に適合させなければならないことがあります。入力データの特性とデータを受け取る Inport ブロックの仕様は一致しなければなりません。

これらのパラメーターの調整方法、および Inport ブロックで使用する MAT ファイルの作成方法は、Inport ブロックの MAT ファイルの作成を参照してください。前述のブロック パラメーターの説明は、Inport ブロックに関する説明を参照してください。

ラピッド シミュレーション用のモデルの構成とビルド

ラピッド シミュレーションの要件を特定したら、ラピッド シミュレーションに合わせてモデルを設定します。

  1. モデル コンフィギュレーション パラメーター [システム ターゲット ファイル] を [rsim.tlc] (ラピッド シミュレーション ターゲット) に設定します。

  2. [RSim ターゲット] をクリックすると、[RSim ターゲット] ペインが表示されます。

    RSim Target pane in Model Configuration Parameters dialog box

  3. RSim ターゲットのコンフィギュレーション パラメーターをラピッド シミュレーションの要件に設定します。

    実行する操作 説明
    RSim 実行可能ファイルが MAT ファイルからパラメーターを読み込めるようにするコードを生成する[MAT ファイルからパラメーターを読み込むための RSim の実行可能な形式を有効にする] (既定の設定) を選択します。
    ターゲットが既にモデル用に設定されているソルバーに基づいて、ソルバーを選択する

    [ソルバーの選択][Auto] (既定の設定) に設定します。コード ジェネレーターは、固定ステップ ソルバーが [ソルバー] ペインで指定されている場合に組み込みソルバーを使用し、可変ステップ ソルバーが指定されている場合は Simulink ソルバー モジュール (共有ライブラリ) を呼び出します。

    固定ステップ ソルバーを使用するように明示的にターゲットに指示する[ソルバーの選択][固定ステップ ソルバーを使用] に設定します。[コンフィギュレーション パラメーター] ダイアログ ボックスの [ソルバー] ペインで固定ステップ ソルバーを指定します。
    可変ステップ ソルバーを使用するように明示的にターゲットに指示する

    [ソルバーの選択][Simulink ソルバーのモジュールを使用] に設定します。[コンフィギュレーション パラメーター] ダイアログ ボックスの [ソルバー] ペインで可変ステップ ソルバーを指定します。

    柔軟なカスタム コード インターフェイス用にストレージ クラスを強制的に [Auto] にする[ストレージ クラスを強制的に Auto にする] (既定の設定) を選択します。
    アプリケーション要件に従い、[ExportedGlobal][ImportedExtern] などのストレージ クラス設定を保持する[ストレージ クラスを強制的に Auto にする] をクリアします。
  4. データのインポート オプションとエクスポート オプションを設定します。[データのインポート/エクスポート] ペインの [ワークスペースへ保存] セクションで、必要であれば [時間][状態][出力] および [最終状態] パラメーターを選択します。既定の設定では、コード ジェネレーターはシミュレーション ロギングの結果を model.mat という名前のファイルに保存します。詳細については、シミュレーション データのエクスポートを参照してください。

  5. エクスターナル モードの通信を使用する場合は、[コード生成][インターフェイス] ペインを使用してインターフェイスを設定します。詳細については、エクスターナル モード シミュレーションによるパラメーター調整、信号監視、コード実行プロファイリングを参照してください。

  6. Ctrl+B キーを押します。コード ジェネレーターは、リビルドせずに開発用コンピューターでさまざまなデータを実行できる、高度に最適化された実行可能プログラムをビルドします。

    Simulink Coder™ 製品と互換性のあるコンパイラの詳細については、C または C++ コンパイラの選択と設定およびテンプレート makefile と make オプションを参照してください。

ラピッド シミュレーション入力データの設定

ラピッド シミュレーション データの設定について

ラピッド シミュレーションの入力データの形式と設定は、要件によって異なります。

入力データ ソース説明
モデルのグローバル パラメーター ベクトル (model_P)関数 rsimgetrtp を使用してベクトルの内容を取得し、MAT ファイルに保存します。
モデルのグローバル パラメーター ベクトル、およびベクトルと調整可能なパラメーター間のマッピング関数 rsimgetrtp を呼び出してグローバル パラメーター構造体を取得し、MAT ファイルに保存します。
From File ブロック提供のデータFrom File ブロックが読み取れる MAT ファイルを作成します。
Inport ブロック提供のデータInport ブロックが読み取れる 3 つのデータ ファイル形式の 1 つに即した MAT ファイルを作成します。
From Workspace ブロック提供のデータMATLAB ワークスペース内で構造体変数を作成します。

RSim ターゲットでは、From FileInport ブロックの入力に使用する MAT ファイルにデータが含まれていなければなりません。grt ターゲットは MAT ファイル データを直接生成コードに挿入します。データは続けて実行可能ファイルとしてコンパイルされ、リンクされます。一方、RSim では連続するシミュレーションごとにデータセットを置き換えできます。From File ブロックまたは Inport ブロックがモデルに存在する場合、From File または Inport ブロック データをもつ MAT ファイルが存在していなければなりません。

モデル パラメーター構造体をもつ MAT ファイルの作成

モデルのグローバル パラメーター構造体 (model_P) をもつ MAT ファイルを作成するには、以下の手順に従います。

  1. 関数 rsimgetrtp を呼び出して、構造体を取得します。

  2. パラメーター構造体を MAT ファイルに保存します。

さまざまなデータセットでシミュレーションを実行する場合は、パラメーター構造体を cell 配列に変換し、パラメーターのバリエーションを単一の MAT ファイルに保存することを検討してください。

モデルのパラメーター構造体の取得.  モデルのグローバル パラメーター構造体 (model_P) を取得するには、関数 rsimgetrtp を呼び出します。

param_struct = rsimgetrtp('model')
引数説明
modelラピッド シミュレーションを実行中のモデル。

関数 rsimgetrtp は、指定のモデルのブロック線図更新アクションを強制し、以下のフィールドをもつ構造体を返します。

フィールド説明
modelChecksumモデルの構造をエンコードする 4 つの要素をもつベクトル。コード ジェネレーターはチェックサムを使用して、RSim 実行可能ファイルの生成後にモデルの構造体が変化したかどうかを調べます。ブロックを削除または追加してから新しい model_P ベクトルを生成すると、新しいチェックサムは元のチェックサムに一致しなくなります。RSim 実行可能ファイルはパラメーター ベクトルからこの非互換性を検出すると、終了して間違ったシミュレーション結果が返されるのを回避します。モデル構造体が変化した場合は、モデルのコードを再生成しなければなりません。
parametersモデルのグローバル パラメーターをもつ構造体。

パラメーター構造体には、以下の情報が含まれます。

フィールド説明
dataTypeNameパラメーターのデータ型名。たとえば、double
dataTypeIDコード ジェネレーターで使用される内部データ型識別子
complex実数の場合の値は 0、複素数の場合の値は 1
dtTransIdxコード ジェネレーターで使用される内部データ インデックス
valuesこの構造体に関連したパラメーター値のベクトル
mapこのフィールドには「値」をモデルの調整可能なパラメーターと相関させるマッピング情報が表示されます。このマッピング情報を rsimsetrtpparam と併用すると、ブロック線図をコンパイルせずに以降の構造体 rtP を作成できるので便利です。

コード ジェネレーターは、保存されている値に従って、調整可能な固定小数点パラメーターのレポートを生成します。たとえば、1.4sfix(16) パラメーター値でスケーリングが 2^-8 の場合、int16 の値は 358 になります。

以下の例では、rsimgetrtp はモデル例 rtwdemo_rsimtf のパラメーター構造体を param_struct に返します。

param_struct = rsimgetrtp('rtwdemo_rsimtf')
param_struct = 

    modelChecksum: [1.7165e+009 3.0726e+009 2.6061e+009 2.3064e+009]
       parameters: [1x1 struct]

パラメーター構造体の MAT ファイルへの保存.  rsimgetrtp を呼び出したら、関数呼び出しの戻り値を MAT ファイルに保存します。コマンド ライン オプションを使用すると、MAT ファイルをラピッド シミュレーションの入力に指定できます。

以下の例は、rtwdemo_rsimtf に返されたパラメーター構造体を MAT ファイル myrsimdemo.mat に保存します。

save myrsimdemo.mat param_struct;

コマンド ライン オプションを使用した必要なファイルの指定方法の詳細については、ラピッド シミュレーションの実行を参照してください。

さまざまなデータセットでシミュレーションを実行するためのパラメーター構造体の変換.  ラピッド シミュレーションを使用して特定のパラメーターに加えた変更をテストするために、モデル パラメーターの構造体を cell 配列に変換することができます。その後、@ 演算子でファイルの特定のパラメーター セットのインデックスを指定することによって、特定のパラメーター セットにアクセスできます。

構造体を cell 配列に変換するには、以下の手順に従います。

  1. 関数 rsimgetrtp を使用して、モデル例 rtwdemo_rsimtf のパラメーター情報が含まれる構造体を取得します。構造体を変数 param_struct に格納します。

    param_struct = rsimgetrtp('rtwdemo_rsimtf');
    

    構造体の parameters フィールドはパラメーター情報が含まれるサブ構造体です。parameters サブ構造体の values フィールドには、シミュレーション コードの実行中に調整できるパラメーターの数値が含まれます。

  2. より多くのパラメーター セットが含まれるように、関数 rsimsetrtpparam を使用して構造体を拡張します。この場合、さらに 2 つのパラメーター セットを作成します (合計 3 つのセット)。

    param_struct = rsimsetrtpparam(param_struct,3);

    関数は、parameters フィールドを 3 つの要素をもった cell 配列に変換します。各要素には単一のパラメーター セットの情報が含まれます。既定では、関数は最初の要素をコピーして、cell 配列の 2 番目と 3 番目の要素を作成します。したがって、すべてのパラメーター セットで同じパラメーター値を使用します。

  3. 2 番目と 3 番目のパラメーター セットのパラメーターに新しい値を指定します。

    param_struct.parameters{2}.values = [-150 -5000 0 4950];
    param_struct.parameters{3}.values = [-170 -5500 0 5100];
  4. パラメーター セット情報が含まれる構造体を MAT ファイルに格納します。

    save rtwdemo_rsimtf.mat param_struct;

あるいはモデル内でブロック パラメーターを変更し、rsimgetrtp を使用して複数のパラメーター セットを作成できます。

  1. 関数 rsimgetrtp を使用して、モデル例 rtwdemo_rsimtf のパラメーター情報が含まれる構造体を取得します。構造体を変数 param_struct に格納します。

    param_struct = rsimgetrtp('rtwdemo_rsimtf');
    

  2. より多くのパラメーター セットが含まれるように、関数 rsimsetrtpparam を使用して構造体を拡張します。この場合、さらに 2 つのパラメーター セットを作成します (合計 3 つのセット)。

    param_struct = rsimsetrtpparam(param_struct,3);

    関数は、parameters フィールドを 3 つの要素をもった cell 配列に変換します。各要素には単一のパラメーター セットの情報が含まれます。既定では、関数は最初の要素をコピーして、cell 配列の 2 番目と 3 番目の要素を作成します。したがって、すべてのパラメーター セットで同じパラメーター値を使用します。

  3. ブロック パラメーターまたはワークスペース変数の値を変更します。たとえば、変数 w の値を 70 から 72 に変更します。

    w = 72;

  4. rimsgetrtp を使用してパラメーター情報が含まれる別の構造体を取得します。構造体を一時変数 rtp_temp に格納します。

    rtp_temp = rsimgetrtp('rtwdemo_rsimtf');

  5. rtp_tempparameters フィールドの値を 2 番目のパラメーター セットとして構造体 param_struct に代入します。

    param_struct.parameters{2} = rtp_temp.parameters;

  6. 変数 w の値を 72 から 75 に変更します。

    w = 75;

  7. rimsgetrtp を使用してパラメーター情報が含まれる別の構造体を取得します。次に、parameters フィールドの値を 3 番目のパラメーター セットとして param_struct に代入します。

    rtp_temp = rsimgetrtp('rtwdemo_rsimtf');
    param_struct.parameters{3} = rtp_temp.parameters;

  8. パラメーター セット情報が含まれる構造体を MAT ファイルに格納します。

    save rtwdemo_rsimtf.mat param_struct;

シミュレーション実行時の各パラメーター セットの指定方法の詳細については、RSim シミュレーション用のブロック パラメーターの変更を参照してください。

From File ブロックの MAT ファイルの作成

MAT ファイルを From File ブロックの入力データ ソースに使用できます。MAT ファイルのデータ形式は、そのブロックで期待されているデータ形式に一致しなければなりません。たとえば、MAT ファイルへの入力として行列を使用する場合、実行可能ファイルの行列のサイズと異なってはいけません。

From File ブロックの MAT ファイルを作成するには、以下の手順に従います。

  1. 配列形式のデータの場合、ワークスペースで 2 つ以上の行から構成される行列を作成します。1 行目には単調増加する時点が含まれていなければなりません。他の行には、その列の時点に対応するデータ点が含まれます。時点およびデータ点は double のデータ型でなければなりません。

    以下に例を示します。

    t=[0:0.1:2*pi]';
    Ina1=[2*sin(t) 2*cos(t)];
    Ina2=sin(2*t);
    Ina3=[0.5*sin(3*t) 0.5*cos(3*t)];
    var_matrix=[t Ina1 Ina2 Ina3]';

    int16 や固定小数点など、他にサポートされているデータ型の場合は、時点とデータ点は配列形式データと同様 double のデータ型でなければなりません。ただしサンプル データには、任意の次元を使用できます。

    入力データの設定方法の詳細については、From File ブロックに関する説明を参照してください。

  2. 行列を MAT ファイルに保存します。

    以下の例は、行列 var_matrix を Version 7.3 形式の MAT ファイル myrsimdemo.mat で保存しています。

    save '-v7.3' myrsimdemo.mat var_matrix;

    コマンド ライン オプションを使用すると、MAT ファイルをラピッド シミュレーションの入力に指定できます。

Inport ブロックの MAT ファイルの作成

MAT ファイルを Inport ブロックの入力データ ソースに使用できます。

MAT ファイルのデータ形式は、以下の表に記載されている 3 つの列ベースの形式の 1 つに従わなければなりません。この表では、最も柔軟性の低い形式から最も柔軟性の高い形式の順に記載しています。

形式説明
単一の時間/データ行列
  • 最も柔軟性が低い。

  • 1 つの変数。

  • 2 つ以上の "列"。列数は、すべてのルートの Inport ブロック次元の合計に 1 を加えたものに等しくなければなりません。1 列目には、単調増加の時点を含めなければなりません。他の列には、その行の時点に対応するデータ点が含まれます。

  • double のデータ型。

例については、以下の手順 4 の「単一の時間/データ行列」を参照してください。詳細については、データ配列のルートレベル入力への読み込みを参照してください。

信号-および-時間構造体
  • 単一の時間/データ行列形式よりも柔軟

  • 1 つの変数。

  • 2 つの最上位フィールドを含まなければなりません。timesignals です。time フィールドには、シミュレーション時間の "列" ベクトルが含まれます。signals フィールドにはサブ構造体の配列が含まれ、それぞれのサブ構造体が Inport ブロックに対応します。サブ構造体のインデックスは Inport ブロック番号に対応します。各 signals サブ構造体は values と言うフィールドを含んでいなければなりません。values フィールドには、対応する Inport ブロックに対する入力の配列が含まれ、各入力は、time フィールドで指定される時間点に対応します。

  • time フィールドが空の値に設定されている場合は、Inport ブロックの [データを内挿する] パラメーターのチェック ボックスをオフにします。

  • データ型は Inport ブロック設定に一致しなければなりません。

例については、以下の手順 4 の「信号-および-時間構造体」を参照してください。この形式の詳細については、データ構造体のルートレベル入力への読み込みを参照してください。

端子ごとの構造体
  • 柔軟性が最も高い

  • 複数の変数。変数の数は Inport ブロックの数と等しくなければなりません。

  • Inport ブロックに対する独立した時間付き構造体 1 個または時間なし構造体 1 個で構成されます。各 Inport ブロックのデータ構造体は、signals フィールドのみをもっています。この形式を使用するには、構造体の名前を [入力] テキスト フィールドにコンマ区切りリスト in1, in2,..., inN として入力します。ここで、in1 はモデルの最初の入力端子に対するデータ、in2 は 2 番目の端子に対するデータ、その他も同様に各端子に対するデータです。

  • 変数ごとに、別々の時間ベクトルをもつことができます。

  • time フィールドが空の値に設定されている場合は、Inport ブロックの [データを内挿する] パラメーターのチェック ボックスをオフにします。

  • データ型は Inport ブロック設定に一致しなければなりません。

  • 複数の変数を同じデータ ファイルに保存するには、-append オプションを使用して、モデルで期待される順に保存しなければなりません。

例については、以下の手順 4 の「端子ごとの構造体」を参照してください。詳細については、データ構造体のルートレベル入力への読み込みを参照してください。

サポートされている形式と次の手順は、rtwdemo_rsim_i に記載されています。

Inport ブロックの MAT ファイルを作成するには、以下の手順に従います。

  1. 前述のデータ ファイル形式の 1 つを選択します。

  2. Inport ブロック パラメーター設定と仕様が MAT ファイルで提供されているデータの仕様に一致するように更新します。

    既定の設定では、Inport ブロックは下流ブロックからのパラメーター設定を継承します。外部の MAT ファイルからデータをインポートするには、次のパラメーターが MAT ファイルのソース データに一致するように明示的に設定を行います。

    • [メイン][データを内挿する]

    • [信号属性][端子の次元]

    • [信号属性][データ型]

    • [信号属性][信号タイプ]

    ワークスペース変数に構造体形式を使用したときに time フィールドが空白の場合は、ブロック パラメーター [データを内挿する] をオフにするか、パラメーターを変更して、空ではない値になるように設定します。内挿を行うには時間データが必要です。

    前述のブロック パラメーターの説明は、Inport ブロックに関する説明を参照してください。

  3. モデルの RSim 実行可能プログラムをビルドします。ビルド プロセスは、モデルの構造的なチェックサムを作成して計算し、これを生成された実行可能ファイルに組み込みます。RSim ターゲットはチェックサムを使用して、モデルに渡されているデータがモデルの実行可能ファイルで期待されている内容と整合することを確認します。

  4. ラピッド シミュレーションのソース データを提供する MAT ファイルを作成します。ワークスペース変数から MAT ファイルを作成できます。前述の形式の比較表の仕様を使用して、シミュレーションのワークスペース変数を作成します。

    各形式の例は次のとおりです。

    単一の時間/データ行列

    t=[0:0.1:2*pi]';
    Ina1=[2*sin(t) 2*cos(t)];
    Ina2=sin(2*t);
    Ina3=[0.5*sin(3*t) 0.5*cos(3*t)];
    var_matrix=[t Ina1 Ina2 Ina3];

    信号-および-時間構造体

    t=[0:0.1:2*pi]';
    var_single_struct.time=t;
    var_single_struct.signals(1).values(:,1)=2*sin(t);
    var_single_struct.signals(1).values(:,2)=2*cos(t);
    var_single_struct.signals(2).values=sin(2*t);
    var_single_struct.signals(3).values(:,1)=0.5*sin(3*t);
    var_single_struct.signals(3).values(:,2)=0.5*cos(3*t);
    v=[var_single_struct.signals(1).values...
    var_single_struct.signals(2).values...
    var_single_struct.signals(3).values];

    端子ごとの構造体

    t=[0:0.1:2*pi]';
    Inb1.time=t;
    Inb1.signals.values(:,1)=2*sin(t);
    Inb1.signals.values(:,2)=2*cos(t);
    t=[0:0.2:2*pi]';
    Inb2.time=t;
    Inb2.signals.values(:,1)=sin(2*t);
    t=[0:0.1:2*pi]';
    Inb3.time=t;
    Inb3.signals.values(:,1)=0.5*sin(3*t);
    Inb3.signals.values(:,2)=0.5*cos(3*t);
  5. ワークスペース変数を MAT ファイルに保存します。

    単一の時間/データ行列

    以下の例は、ワークスペース変数 var_matrix を MAT ファイル rsim_i_matrix.mat に保存します。

    save rsim_i_matrix.mat var_matrix;

    信号-および-時間構造体

    以下の例は、ワークスペース構造体変数 var_single_struct を MAT ファイル rsim_i_single_struct.mat に保存します。

    save rsim_i_single_struct.mat var_single_struct;

    端子ごとの構造体

    端子ごとの構造体変数を単一の MAT ファイルに保存するときにデータを順序付けするには、save コマンドの -append オプションを使用します。モデルで期待されている順序でデータを追加してください。

    以下の例は、ワークスペース変数 Inb1Inb2、および Inb3 を MAT ファイル rsim_i_multi_struct.mat に保存します。

    save rsim_i_multi_struct.mat Inb1;
    save rsim_i_multi_struct.mat Inb2 -append;
    save rsim_i_multi_struct.mat Inb3 -append;

    save コマンドでは、データを MAT ファイルに保存したときにコマンド ラインで指定したワークスペース変数の順序は保存されません。たとえば、変数 v1v2、および v3 の順で変数を指定しても、MAT ファイルの変数の順序が v2 v1 v3 になることがあります。

    コマンド ライン オプションを使用すると、MAT ファイルをラピッド シミュレーションの入力に指定できます。

バッチ シミュレーションおよびモンテ カルロ シミュレーション用のスクリプト

RSim ターゲットは、パラメーターと入力信号が複数のシミュレーションで異なるバッチ シミュレーションを目的としています。新しい出力ファイル名を使用することで、以前のシミュレーション結果をオーバーライドせずに、新しいシミュレーションを実行することができます。Microsoft® Windows® プラットフォームで使用する .bat ファイルを作成することで、実行する一連のシミュレーションを設定することができます。

テキスト エディターを使用して Windows プラットフォームのファイルを作成し、mybatch などのファイル名を入力して実行できます (この場合、テキスト ファイルの名前は mybatch.bat)。

rtwdemo_rsimtf -f rtwdemo_rsimtf.mat=run1.mat -o results1.mat -tf 10.0
rtwdemo_rsimtf -f rtwdemo_rsimtf.mat=run2.mat -o results2.mat -tf 10.0
rtwdemo_rsimtf -f rtwdemo_rsimtf.mat=run3.mat -o results3.mat -tf 10.0
rtwdemo_rsimtf -f rtwdemo_rsimtf.mat=run4.mat -o results4.mat -tf 10.0

この場合、バッチ シミュレーションは、ファイル run1.matrun2.mat、などの 4 つの入力データセットを使用して実行されます。RSim 実行可能ファイルは、-o オプションで指定したファイルにデータを保存します。

各ファイルのシミュレーション結果が含まれる変数名は同じです。このため、MATLAB ワークスペースに入ったデータの名前を変更せずに連続したデータのセットを読み込むと、以前のワークスペース変数が新しいデータで上書きされます。上書きを回避するため、次のデータセットを読み込む前に結果を新しい MATLAB 変数にコピーすることができます。

また、MATLAB スクリプトを記述して新しい信号と新しいパラメーター構造体を作成し、データを保存してから「bang」コマンド (!) を使用してバッチ実行を行うこともできます。

シミュレーションの実行と使用可能なコマンド ライン オプションの詳細については、ラピッド シミュレーションの実行を参照してください。ラピッド シミュレーションのバッチ スクリプトの例については、生成コードを再コンパイルしないバッチ シミュレーションの実行の例を参照してください。

ラピッド シミュレーションの実行

ラピッド シミュレーション

RSim ターゲットを使用すると、モデルを 1 度だけビルドし、複数のシミュレーションを実行して、さまざまなパラメーター設定や入力信号の効果を調べることができます。シミュレーションはオペレーティング システムのコマンド ラインから直接実行するか、「bang」(!) 文字を使用して MATLAB コマンド ラインからコマンドをリダイレクトするか、スクリプトからコマンドを実行することができます。

オペレーティング システムのコマンド ラインから、次のコマンドを使用します。

rtwdemo_rsimtf

MATLAB コマンド ラインから、次のコマンドを使用します。

!rtwdemo_rsimtf

RSim ターゲット コマンド ライン オプションを使用してシミュレーションを制御する方法を以下の表に示します。

目的...使用する機能
以前のシミュレーションに使用された MAT ファイル以外の MAT ファイルから From File ブロックの入力データを読み取る

model -f oldfilename.mat=newfilename.mat

RSim 実行可能ファイルのターゲットのオプションの概要を表示するexecutable filename -h
MAT ファイルから Inport ブロックの入力データを読み取る model -i filename.mat
n クロック時間 (秒) 後にタイム アウトする。(n は正の整数値) model -L n
MAT ファイルのログ データをファイル filename.mat に書き込む model -o filename.mat
ファイル filename.mat からパラメーター ベクトルを読み取る model -p filename.mat
エクスターナル モードの既定の TCP ポート (17725) のオーバーライド model -port TCPport
前のシミュレーションで使用された MAT ファイル以外の MAT ファイルに MAT ファイルのログ データを書き込む model -t oldfilename.mat=newfilename.mat
時間の値の stoptime になるまでシミュレーションを実行する model -tf stoptime
詳細モードで実行する model -v
Simulink エンジンがエクスターナル モードでモデルを開始するのを待機する model -w

以下の節はモデル rtwdemo_rsimtf を例に使用して、これらのコマンド ライン オプションのいくつかを紹介します。各状況の例では、既に次の操作が行われたことを前提とします。

  • 作業フォルダーを作成した、または作業フォルダーに変更した。

  • サンプル モデルを開いた。

  • データ ファイル matlabroot/toolbox/rtw/rtwdemos/rsimdemos/rsim_tfdata.mat を作業フォルダーにコピーした。この操作を行うには、以下のコマンドを使用します。

    copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos',...
    'rsimdemos','rsim_tfdata.mat'),pwd);

ラピッド シミュレーションを実行するための要件

以下の要件は、固定ステップ実行可能ファイルと可変ステップ実行可能ファイルの両方に適用されます。

  • RSim 実行可能ファイルは、MATLAB を実行するように設定されたコンピューター上で実行しなければなりません。また、RSim.exe ファイルは、このマシン上の MATLAB と Simulink インストール フォルダーにアクセスできなければなりません。アクセスするには、PATH 環境変数に /bin と /bin/($ARCH) を含め、($ARCH) がオペレーティング システムのアーキテクチャを表すようにしなければなりません。たとえば、Windows プラットフォームで実行されるパーソナル コンピューターの場合、($ARCH) は "win64" ですが、Linux マシンでは、($ARCH) は "glnxa64" になります。

  • GNU® Linux® プラットフォームで RSim 実行可能ファイルを実行するには、次のように MATLAB インストール フォルダーへのパスを示すように LD_LIBRARY_PATH 環境変数を定義します。

    % setenv LD_LIBRARY_PATH /matlab/sys/os/glnx64:$LD_LIBRARY_PATH

  • Apple Macintosh OS X プラットフォームで RSim ターゲット実行可能ファイルを実行するには、環境変数 DYLD_LIBRARY_PATH を設定して、MATLAB インストール フォルダー下にある bin/macsys/os/mac を含めなければなりません。たとえば、MATLAB インストールが /MATLAB にある場合、/MATLAB/bin/mac/MATLAB/sys/os/macDYLD_LIBRARY_PATH の定義に追加します。

ラピッド シミュレーションのクロック時間制限の設定

モデルで頻繁にゼロクロッシングが検出され、モデルのマイナー ステップ サイズが小さい場合は、ラピッド シミュレーションに時間制限を設定することを検討してください。時間制限を設定するには、正の整数値を使用して -L オプションを指定します。シミュレーションは指定のクロック時間後 (シミュレーション時間ではなく) に中断されます。次に例を示します。

  !rtwdemo_rsimtf -L 20

実行可能ファイルがクロックに基づいて 20 秒実行された後、プログラムは終了します。次のいずれかのようなメッセージが表示されます。

  • Microsoft Windows プラットフォームの場合

    Exiting program, time limit exceeded
    Logging available data ...
  • The Open Group UNIX® プラットフォームの場合

    ** Received SIGALRM (Alarm) signal @ Fri Jul 25 15:43:23 2003
    ** Exiting model  'rtwdemo_rsimtf' @ Fri Jul 25 15:43:23 2003

このオプションを使用するために、モデルまたはそのコンフィギュレーションに何か操作を行う必要はありません。

モデル シミュレーションの終了時間のオーバーライド

既定の設定では、ラピッド シミュレーションはシミュレーション時間が [ソルバー] ペインの [コンフィギュレーション パラメーター] ダイアログ ボックスで指定した時間に達するまで実行を続けます。モデル シミュレーションの終了時間をオーバーライドするには、-tf オプションを使用します。たとえば以下のシミュレーションは、時間が 6.0 秒に達するまで実行を続けます。

!rtwdemo_rsimtf -tf 6.0

RSim ターゲットは停止し、MAT ファイルのデータ ロギング ルールを使用して出力データのログが作成されます。

モデルに From File ブロックが含まれる場合、シミュレーションの最後は [ソルバー] ペインの [コンフィギュレーション パラメーター] ダイアログ ボックスで指定された停止時間設定、または RSim ターゲット オプション -tf によって制御されます。ブロックの時間ベクトルの値は無視されます。ただし、シミュレーション時間が時間および信号行列のエンドポイントを超えた場合 (最終時間がデータ行列の最終時間値より大きい場合)、信号データは最終時間値に外挿されます。

パラメーター ベクトルのラピッド シミュレーションへの読み取り

モデルのパラメーター ベクトルをラピッド シミュレーションに読み取るには、最初にモデル パラメーター構造体をもつ MAT ファイルの作成で説明したパラメーター構造体をもつ MAT ファイルを作成しなければなりません。その後で -p オプションを使用して、コマンド ラインで MAT ファイルを指定することができます。

以下に例を示します。

  1. モデル例 rtwdemo_rsimtf の RSim 実行可能ファイルをビルドします。

  2. モデルのパラメーターに変更を加え、パラメーター構造体を保存します。

    param_struct = rsimgetrtp('rtwdemo_rsimtf');
    save myrsimdata.mat param_struct
  3. 新しいパラメーター セットを使用して、実行可能ファイルを実行します。

    !rtwdemo_rsimtf -p myrsimdata.mat
    
    ** Starting model 'rtwdemo_rsimtf' @ Tue Dec 27 12:30:16 2005 
    ** created rtwdemo_rsimtf.mat **
  4. ワークスペース変数を読み込み、次のコマンドを入力してシミュレーション結果をプロットします。

    load rtwdemo_rsimf.mat
    plot(rt_yout)

From File ブロックの新しい信号データ ファイルの指定

モデルの入力データ ソースが From File ブロックの場合、シミュレーション時に単一の MAT ファイルから入力データを与えるか、シミュレーションから次のシミュレーションへ MAT ファイルを変更できます。MAT ファイルはそれぞれFrom File ブロックの MAT ファイルの作成で説明した形式に従わなければなりません。

初回シミュレーション後に MAT ファイルを変更するには、以下の例に示すように -f オプションと oldfile.mat=newfile.mat パラメーターを使用して実行可能ファイルを指定します。

  1. 一部のパラメーターを MATLAB ワークスペースに設定します。以下に例を示します。

    w = 100;
    theta = 0.5;
  2. モデル例 rtwdemo_rsimtf の RSim 実行可能ファイルをビルドします。

  3. 実行可能ファイルを実行します。

    !rtwdemo_rsimtf

    RSim 実行可能ファイルはシミュレーションのセットを実行し、固有のシミュレーション結果を含む出力 MAT ファイルを作成します。

  4. ワークスペース変数を読み込み、次のコマンドを入力してシミュレーション結果をプロットします。

    load rtwdemo_rsimtf.mat
    plot(rt_yout)

    結果のプロットには、既定の入力データに基づくシミュレーション結果が表示されます。

    Plot that shows simulation results based on default input data

  5. 以下のデータを含む新しいデータ ファイル newfrom.mat を作成します。

    t=[0:.001:1];
    u=sin(100*t.*t);
    tu=[t;u];
    save newfrom.mat tu;
  6. -f オプションを使用して元のファイルの rsim_tfdata.matnewfrom.mat で置き換え、新しいデータでラピッド シミュレーションを実行します。

    !rtwdemo_rsimtf -f rsim_tfdata.mat=newfrom.mat
  7. データを読み込み、次のコマンドを入力して新しい結果をプロットします。

    load rtwdemo_rsimtf.mat
    plot(rt_yout)

    次の図は結果のプロットを示します。

    Plot that shows results based on loaded data

From File ブロックには、double 型の入力データが必要です。double 以外のデータ型の信号データをインポートする場合は、Inport ブロック (Inport ブロックの MAT ファイルの作成を参照) または、From Workspace ブロックで、構造体に指定したデータを使用します。

ワークスペース データは以下の形式でなければなりません。

variable.time
variable.signals.values

1 つを超える信号がある場合は、以下の形式を使用します。

variable.time
variable.signals(1).values
variable.signals(2).values

Inport ブロックの信号データ ファイルの指定

モデルの入力データ ソースが Inport ブロックの場合、シミュレーション時に単一の MAT ファイルから入力データを与えるか、シミュレーションから次のシミュレーションへ MAT ファイルを変更できます。MAT ファイルはそれぞれInport ブロックの MAT ファイルの作成で説明した 3 つの形式の 1 つに従わなければなりません。

シミュレーション後に MAT ファイルを指定するには、-i オプションと入力データが含まれる MAT ファイルの名前で実行可能ファイルを指定します。以下に例を示します。

  1. モデル rtwdemo_rsim_i を開きます。

  2. Inport ブロックのパラメーター設定を確認します。ワークスペース変数用に指定する、以下の Inport ブロック データのパラメーター設定および仕様は、シミュレーション ソース データを提供するための入力端子の構成に示すように、MAT ファイルの設定に一致しなければなりません。

    • [メイン][データを内挿する]

    • [信号属性][端子の次元]

    • [信号属性][データ型]

    • [信号属性][信号タイプ]

  3. モデルを作成します。

  4. 入力信号を設定します。次に例を示します。

    t=[0:0.01:2*pi]';
    s1=[2*sin(t) 2*cos(t)];
    s2=sin(2*t);
    s3=[0.5*sin(3*t) 0.5*cos(3*t)];
    plot(t, [s1 s2 s3])

    Plot that shows input signals

  5. Inport ブロックの MAT ファイルの作成で説明した、使用可能な 3 つのファイル形式を使用して、MAT ファイルを準備します。以下の例は、ワークスペースの信号および時間構造体を定義し、var_single_struct と言う名前を付けます。

    t=[0:0.1:2*pi]';
    var_single_struct.time=t;
    var_single_struct.signals(1).values(:,1)=2*sin(t);
    var_single_struct.signals(1).values(:,2)=2*cos(t);
    var_single_struct.signals(2).values=sin(2*t);
    var_single_struct.signals(3).values(:,1)=0.5*sin(3*t);
    var_single_struct.signals(3).values(:,2)=0.5*cos(3*t);
    v=[var_single_struct.signals(1).values...
    var_single_struct.signals(2).values...
    var_single_struct.signals(3).values];
  6. ワークスペース変数 var_single_struct を MAT ファイル rsim_i_single_struct に保存します。

    save rsim_i_single_struct.mat var_single_struct;
  7. -i オプションを使用して、入力データのラピッド シミュレーションを実行します。結果を読み込み、プロットします。

    !rtwdemo_rsim_i -i rsim_i_single_struct.mat
    
    ** Starting model 'rtwdemo_rsim_i' @ Tue Aug 19 10:26:53 2014 
     *** rsim_i_single_struct.mat is successfully loaded! *** 
    ** created rtwdemo_rsim_i.mat ** 
     
    ** Execution time = 0.02024185130718954s
  8. 結果を読み込み、プロットします。

    load rtwdemo_rsim_i.mat
    plot(rt_tout, rt_yout);

    Plot that shows loaded results

RSim シミュレーション用のブロック パラメーターの変更

モデル パラメーター構造体をもつ MAT ファイルの作成で説明したとおり、Simulink ブロック線図で 1 つ以上のパラメーターを変更した後で、パラメーター ベクトルの model_P をモデル全体のために抽出することができます。その後でパラメーター ベクトルをモデルのチェックサムと一緒に MAT ファイルに保存することができます。この MAT ファイルは直接スタンドアロンの RSim 実行可能ファイルで読み取れるため、パラメーター ベクトル全部、または個々のパラメーター値を置き換えて、係数を表すパラメーター値や入力信号の新しいデータのバリエーションの研究を実行したりすることができます。

RSim では、1 つ以上のパラメーターが変更されるたびに、モデル全体をリコンパイルせずに MAT ファイルを読み取り、model_P 構造体全体を置き換えることができます。

たとえば、モデルで 1 つ以上のパラメーターを変更し、新しい model_P ベクトルを生成して、model_Pmymatfile.mat と言う新しい MAT ファイルに保存したとします。同じ rtwdemo_rsimtf モデルを実行し、新しいパラメーター値を使用するには、以下の例に示すように -p オプションを使用します。

!rtwdemo_rsimtf -p mymatfile.mat
load rtwdemo_rsimtf 
plot(rt_yout)

さまざまなデータセットでシミュレーションを実行するためのパラメーター構造体の変換で説明したように、さまざまなデータセットでシミュレーションを実行するためにパラメーター構造体を cell 配列に変換した場合は、@n サフィックスを MAT ファイル仕様に加えなければなりません。n はこのシミュレーションに使用する特定の入力が含まれる cell 配列の要素です。

以下の例は param_struct を cell 配列に変換し、パラメーター値を変更して、変更を MAT ファイルの mymatfile.mat に保存してから、cell 配列の 2 番目の要素のパラメーター値を入力に使用して、実行可能ファイルを実行します。

param_struct = rsimgetrtp('rtwdemo_rsimtf');
param_struct = rsimsetrtpparam(param_struct,2);
param_struct.parameters{1}
ans = 

       dataTypeName: 'double'
         dataTypeId: 0
            complex: 0
         dtTransIdx: 0
             values: [-140 -4900 0 4900]
                map: []
    structParamInfo: []
param_struct.parameters{2}.values=[-150 -5000 0 4950];
save mymatfile.mat param_struct;
!rtwdemo_rsimtf -p mymatfile.mat@2 -o rsim2.mat

シミュレーションでの新しい出力ファイル名の指定

[コンフィギュレーション パラメーター] ダイアログ ボックスの [データのインポート/エクスポート] ペインで [ワークスペースへ保存] パラメーター ([時間][状態][出力] または [最終状態]) のいずれかまたはいくつかを指定した場合、既定の設定ではシミュレーションのログ結果が model.mat というファイルに保存されます。たとえば、例で使用するモデル rtwdemo_rsimtf では、通常、以下のようにデータを rtwdemo_rsimtf.mat に保存します。

!rtwdemo_rsimtf
created rtwdemo_rsimtf.mat

実行可能ファイルの実行時に -o オプションを使用して、データ ロギングの新しい出力ファイル名を指定することができます。

!rtwdemo_rsimtf -o rsim1.mat

この場合、From File ブロック データ パラメーターを含むコード生成時に提供されたパラメーターのセットが実行されます。

To File ブロックの新しい出力ファイル名の指定

新しいシステム出力ファイル名を指定するのとほぼ同じ方法で、1 つ以上の To File ブロックから保存されたデータの新しい出力ファイル名を指定できます。その場合、以下の例に示すように、コード生成時に元のファイル名に新しい名前を付けます。

!rtwdemo_rsimtf -t rtwdemo_rsimtf_data.mat=mynewrsimdata.mat

この場合、元のモデルが出力ファイル rtwdemo_rsimtf_data.mat にデータを書き込んだと想定します。新しいファイル名を指定すると、RSim は強制的に mynewrsimdata.mat ファイルに書き込むようになります。この手法を使用することで、既存のシミュレーションの実行が上書きされないようにすることができます。

ラピッド シミュレーション中のパラメーターの対話的な調整

RSim システム ターゲット ファイルは、可能な限り高速でバッチ シミュレーションを実行できるように設計されました。そのシステム ターゲット ファイルおよび調整可能なパラメーター データ構造体と組み合わせて可変ステップまたは固定ステップ ソルバーを使用すると、[既定のパラメーター動作]Tunable または Inlined のどちらに設定していても、複数のパラメーター セットを作成できます。これらのデータセットは、生成された実行可能プログラム (Windows では .exe) で実行できます。実行可能プログラムの呼び出しでは毎回、結果に使用するファイル名を指定できます。

モデル例 RsimParamTuning を開きます。

open_system('RsimParamTuning.slx'); 

このモデルの [既定のパラメーター動作]Inlined に設定されています。モデルは、ワークスペース変数を調整可能なパラメーターとして宣言しています。[既定のパラメーター動作]Tunable に設定し、調整可能なパラメーターを明示的に宣言せずに RSim システム ターゲット ファイルを使用する場合は、生成コードを再コンパイルしないバッチ シミュレーションの実行を参照してください。

このモデルは RSim システム ターゲット ファイルと関数 rsimgetrtp を使用して、Simulink モデルを再コンパイルせずに新しいデータを非リアルタイム実行可能ファイルに渡すことができます。この機能により、モデル内で宣言された調整可能なパラメーターのマップを取得し、MAT ファイルに保存することができます。その後、独自の MATLAB グラフィカル ユーザー インターフェイス (GUI) またはスタンドアロンの GUI (MATLAB に依存しない) を作成して、MAT ファイルの読み取りと書き込みを行い、実行可能ファイルを再実行して新しい出力ファイルを生成することができます。

モデルで、ボタンを順番にダブルクリックして例を実行します。

MATLAB GUI およびスタンドアロンの GUI の作成に使用するコードを確認するには、[View MATLAB programs] ボタンをダブルクリックします。

詳細については、RSim システム ターゲット ファイルを使用したホスト コンピューターでのハイブリッド動的システムの高速化、調整およびテストを参照してください。

ラピッド シミュレーションのターゲットの制限

RSim ターゲットには次の制限があります。

  • 代数ループがサポートされていない。

  • Interpreted MATLAB Function ブロックがサポートされていない。

  • Fortran S-Function のインライン化されていない MATLAB 言語がサポートされていない。

  • RSim のビルドに参照モデル (Model ブロックを使用) が含まれる場合、固定ステップを使用してコードを生成するようにモデルを設定します。ただし、最上位モデルでは、参照モデルのブロックが離散であれば、可変ステップ ソルバーを使用することが可能です。

  • 特定の状況では、ブロック パラメーターを変更すると、モデルのチェックサムも変更される構造的な変更がモデルに加えられることがあります。そのような変更の例として、DSP シミュレーションで遅延回数を変更する場合が挙げられます。その場合は、モデルのコードを再生成しなければなりません。

関連するトピック