MAT ファイルを利用した、ラピッド シミュレーションに対応する Inport ブロックへのデータ入力
この例では、コード ジェネレーター RSim -i オプションで、ラピッド シミュレーションの Inport ブロックへの入力データ ソースとして MAT ファイルを使用する方法を説明します。このような MAT ファイルのデータは、次の形式で示すことができます。
double 値の時間/入力データ行列を定義する 1 つの変数。
Simulink® データ型の組み合わせを使用する構造体を定義する 1 つの変数。
複数の変数。それぞれが Simulink® データ型の組み合わせを使用する構造体を定義します。
このような柔軟性は、さまざまなデータ ファイルに保存されている入力データの範囲全体にシミュレーションの実行を必要とするアプリケーションに役立ちます。この例では、この機能を利用する方法を説明します。
Simulink 環境で複数のシミュレーションをすばやく実行するには、RSim の代わりにラピッド アクセラレータの使用を検討してください。アクセラレーションとはを参照してください。
モデルの準備
モデルを開いて書き込み可能な場所にそのコピーを保存します。次に、[Simulink Coder] アプリを開きます。モデル コンフィギュレーション パラメーター *[システム ターゲット ファイル] を rsim.tlc
に設定します。
操作のグラフィカルな実行と RSim システム ターゲット ファイルに関連するその他のモデル コンフィギュレーション パラメーターの設定の詳細については、システム ターゲット ファイルの構成 (Embedded Coder)を参照してください。
mdlName = 'rtwdemo_rsim_i'; open_system(mdlName); cs = getActiveConfigSet(mdlName); cs.switchTarget('rsim.tlc',[]);
Inport ブロックの設定
RSim -i
オプションを使用するには、各 Inport ブロックを適切に設定しなければなりません。Inport ブロックをダブルクリックすると、そのプロパティを表示できます。既定の設定では、Inport ブロックは下流のブロックからプロパティを継承します。外部 MAT ファイルからデータをインポートする前に、MAT ファイルのデータと一致するように各 Inport ブロックのパラメーターを設定しなければなりません。多くの場合、Inport ブロックの次のパラメーターを設定しなければなりません。
データを内挿する
端子の次元
データ型
信号タイプ
これらのパラメーターの詳細は、ヘルプ ボタンをクリックします。このモデル例には、3 つの Inport ブロックが含まれます。例の要件では、Inport 1 および Inport 2 についてはデータ間を内挿し、Inport 3 については内挿しません。各 Inport ブロックの次元は、それぞれ、2、1、2 です。信号は実信号です。設定は、以下のとおりです。
for i =1:3 portName =['/In', num2str(i)]; Interp = get_param(strcat(mdlName,portName),'Interpolate'); PortDimension = get_param(strcat(mdlName,portName),'PortDimensions'); DataType = get_param(strcat(mdlName,portName),'OutDataTypeStr'); SignalType = get_param(strcat(mdlName,portName),'SignalType'); end
入力端子
In1
およびIn2
の場合、内挿が選択されます。入力端子In3
の場合、内挿がクリアされます。入力端子
In1
およびIn3
の場合、端子の次元が 2 に設定されます。入力端子In2
の場合、端子の次元が 1 に設定されます。入力端子
In1
、In2
、およびIn3
の場合、データ型はdouble
で、信号のタイプはreal
です。
モデルの作成
モデルの実行可能ファイルを作成します。ビルド プロセスの間、構造的なチェックサムが計算され、生成された実行可能プログラムに組み込まれます。このチェックサムを使用して、実行可能プログラムに渡されたパラメーター セットとプログラムに互換性があることを確認します。
evalc('slbuild(mdlName)');
データ ファイルの信号の特定
Inport ブロックを設定したら、Inport ブロックに基づいてデータ ファイルを準備します。次の図は、使用する入力信号を示しています。
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)]; figure; plot(t, [s1 s2 s3]);
この図は、入力信号を示しています。
MAT ファイルの準備
一般的に、ワークスペース変数から MAT ファイルを作成できます。RSim -i オプションは、次の 3 つのデータ ファイル形式をサポートします。
TU 行列形式の double の 1 つの変数
この形式の場合、最初の列は時間ベクトルであり、残りの列は入力ベクトルです。TU 行列の列数は、ルート Inport ブロックの次元の和に 1 を加えた値に等しくなります。この MATLAB® コードは、TU 行列形式の 1 つの変数 var_matrix を含む 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]; save rsim_i_matrix.mat var_matrix;
MAT ファイル rsim_i_matrix.mat
には、TU 行列形式の 1 つの変数 var_matrix
が含まれます。
構造体形式の 1 つの変数
この形式の場合、変数は、'time' および 'signal' の 2 つのフィールドを含まなければなりません。Inport ブロックの 1 つにブロック パラメーター [データを内挿する] を設定する場合、変数の 'time' フィールドを空のベクトルにすることはできず、信号の幅は、Inport ブロックの幅の合計に等しくしなければなりません。次のコードは、信号変数構造体形式の 1 つの変数 var_matrix
を含む MAT ファイルを生成します。この形式は、異なるデータ型の入力端子をサポートできるため、TU 行列形式よりも柔軟性に富んでいます。
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 ]; save rsim_i_single_struct.mat var_single_struct;
MAT ファイル rsim_i_single_struct.mat
には、struct
形式の 1 つの変数 var_single_struct
が含まれます。
構造体形式の複数の変数
この形式の場合、変数の数は、Inport ブロックの数と等しくなります。異なる変数が、別々の時間ベクトルをもつことができます。次のコードは、構造体形式の複数の変数を含む MAT ファイルを生成します。この方法は、各 Inport ブロックが独自の時間ベクトルをもつことができるため、最も柔軟性が高い方法です。
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); save rsim_i_multi_struct.mat Inb1; save rsim_i_multi_struct.mat Inb2 -append; save rsim_i_multi_struct.mat Inb3 -append;
MAT ファイル rsim_i_multi_struct.mat
には、struct
形式の 3 つの変数 Inb1, Inb2
、Inb3
が含まれます。save
コマンドを -append
オプション付きで使用して、生成された MAT ファイルで変数の順序を保持します。
RSim シミュレーションの実行と結果のプロット
RSim -i オプションは、バッチ モードのシミュレーションで使用できます。異なる MAT ファイルを準備し、RSim 実行可能プログラムを MAT ファイルで実行します。
例のこの部分は、3 つのプロットを示しています。各プロットは、異なる変数形式での MAT ファイルのシミュレーション結果を示しています。モデルは一度コンパイルされます。
figure fileName = ({'rsim_i_matrix', 'rsim_i_single_struct', 'rsim_i_multi_struct'}); for i=1:3 % bang out and run a simulation using new parameter data name = fileName(i); runstr = ['.', filesep, 'rtwdemo_rsim_i -i ',char(name),'.mat', ' -v']; evalc('system(runstr)'); pause(0.5); % load simulation data into MATLAB(R) for plotting. load rtwdemo_rsim_i.mat; subplot(3,1,i); axis([0,6, -5, 5]); plot(rt_tout, rt_yout); hold on end
close_system(mdlName, 0);