プログラム実行結果のログを作成する
Simulink® Coder™ ソフトウェアによって生成されたプログラムによって、解析用の MAT ファイルにデータを保存できる複数の手法が使用可能です。生成された実行可能ファイルは、モデルの各実行タイム ステップにおけるシステムの状態、出力およびシミュレーション時間を保存できます。データは、既定では
という名前の MAT ファイルに書き込まれます。ここで、model
.matmodel
はモデルの名前です。データ ログ記録のチュートリアルについては、解析のためのログ データを参照してください。
メモ
データのログ作成は、ファイル システムにアクセスできるシステム ターゲットファイルでのみ利用できます。また、RSim ターゲットの実行可能ファイルのみが MATLAB ワークスペース データにアクセスできます。
MAT ファイルのログ記録の制限については、コンフィギュレーション パラメーターMAT ファイルのログを参照してください。
解析のためのログ データ
モデルのセットアップと構成
この例では、モデル slexAircraftExample
のコピーによって生成されたデータのログを myAircraftExample.mat
ファイルに記録する方法について説明します。まだ作業フォルダーに slexAircraftExample
のコピーを myAircraftExample
としてセットアップしていない場合は、リアルタイム システムのビルド プロセス ワークフローの手順を参照してください。
メモ
コード ジェネレーターを構成して実行時のデータ ログのサポートが含まれるコードを生成すると、コード ジェネレーターはログ ファイル内に格納されるブロック パスのブロック名のテキストを含めることができます。これらのテキストに、モデルの文字セット エンコードで表現できない文字が含まれている場合、コード ジェネレーターはその文字を XML エスケープ シーケンスに置き換えます。たとえば、コード ジェネレーターは日本語の全角カタカナの文字「ア」を、エスケープ シーケンス ア
で置き換えます。詳細については、地域と言語の設定とコード生成を参照してください。
データのログを構成するには、[コンフィギュレーション パラメーター] ダイアログ ボックスを開き、[データのインポート/エクスポート] ペインを選択します。このプロセスは、Simulink モデルを設定して出力を MATLAB® ワークスペースに保存する方法と同じです。定義して有効にした各ワークスペースの戻り値変数に対し、Simulink Coder ソフトウェアが同様の MAT ファイル変数を定義します。たとえば、シミュレーション時間を変数 tout
に保存する場合、生成されたプログラムではこのデータが rt_tout
という名前の変数に記録されます。プレフィックス「rt_
」は、サフィックス「_rt
」に変更するか、削除できます。これを実行するには、モデル コンフィギュレーション パラメーター [MAT ファイルの変数名の修飾子] を設定します。
生成されたコードで信号のログを取るには、以下に説明する [データのインポート/エクスポート] モデル コンフィギュレーション パラメーターを使用するか、モデルに To File ブロックまたは To Workspace ブロックを含めます。
メモ
コード生成の MAT ファイルのログでは、信号のログがサポートされません。[データのインポート/エクスポート] モデル コンフィギュレーション パラメーターを使用して MAT ファイルと信号のログを有効にし、Simulink エディターでログを作成する信号を選択した場合、コード ジェネレーターに次の警告が表示されます。
Warning: MAT-file logging does not support signal logging. When your model code executes, the signal logging variable 'rt_logsout' will not be saved to the MAT-file.
この例では、myAircraftExample
モデルを変更して、生成されたプログラムによってシミュレーション時間とシステム出力が myAircraftExample.mat
ファイルに保存されるようにします。次に、データをベース ワークスペースに読み込んで、出力の 1 つに対してシミュレーション時間をプロットします。myAircraftExample
モデルをリアルタイム システムのビルド プロセス ワークフローで説明されているとおりに設定する必要があります。
シミュレーション中のデータ ログ
データ ログ機能を使用するには、次の手順に従います。
myAircraftExample
モデルがまだ開かれていなければ、開きます。[コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。
[データのインポート/エクスポート] ペインを選択します。[データのインポート/エクスポート] ペインでは、ワークスペースに保存する出力データおよびそのデータに使用する変数名を指定できます。
パラメーター [形式] を
[時間付き構造体]
に設定します。この形式を選択すると、Simulink ではモデルの状態と出力が [ワークスペースまたはファイルに保存] エリアで名前を指定した構造体に保存されます。既定では、これらの構造体はxout
が状態用でyout
が出力用です。出力の保存に使用される構造体には、次の 2 つの最上位フィールドがあります。time
とsignals
です。time
フィールドにはシミュレーション時間のベクトルが、signals
にはサブ構造体の配列が含まれ、それぞれモデル出力ポートに対応しています。[出力] を選択します。これにより、Simulink でシミュレーション中に出力信号データが
yout
という名前の変数として保存されるようになります。[出力] を選択すると、コード ジェネレーターでルートの Output ブロック (alpha, rad
) を MAT ファイルに記録するコードを作成できるようになります。[間引き] に
1
を設定します。その他のパラメーターが選択されている場合、それらをオフにします。
[適用] と [OK] をクリックして変更を登録し、ダイアログ ボックスを閉じます。
モデルを保存します。
モデル ウィンドウで、Aircraft Dynamics Model ブロックの横にあるスコープ シンボルをダブルクリックし、次にモデルのシミュレーションを実行します。スコープ表示の結果は以下のとおりです。
シミュレーション時間と出力が MAT ファイルのベース ワークスペースに保存されたことを確認します。MATLAB プロンプトで次のように入力します。
Simulink に以下のように表示されます。whos yout
Name Size Bytes Class Attributes yout 1x1 10756 struct
シミュレーション時間と変数をプロットして、
alpha, rad
が記録されたことを確認します。コマンド ウィンドウで以下のように入力します。plot(yout.time,yout.signals.values)
生成されたコードからのデータ ログ
この例の 2 番目の部分では、モデル myAircraftExample
についてコード ジェネレーターが作成した実行可能プログラムをビルドして実行します。このプログラムは、前に調べたシミュレーション時間と出力を記載した MAT ファイルを出力します。myAircraftExample
モデルのコードは既に生成しましたが、データ ログを有効にしてモデルを変更したのでコードを再生成しなければなりません。以下にこの手順を説明します。
シミュレーションによるデータでワークスペース データを上書きすることを避けるために、コード ジェネレーターでは Simulink によって記録される変数の識別子が変更されます。これらの変更は制御できます。
モデル コンフィギュレーション パラメーター [MAT ファイルの変数名の修飾子] を
_rt
に設定します。これにより、この例の最初の部分でログを作成することにした各変数に接尾辞の_rt
が追加されます。[適用] と [OK] をクリックして変更を登録し、ダイアログ ボックスを閉じます。
モデルを保存します。
実行可能ファイルをビルドします。
ビルドが完了したら、次のコマンドで実行可能プログラムを実行します。
!myAircraftExample
プログラムにより、MAT ファイルが書き込まれたことを示す次の 2 行のメッセージが生成されます。
** starting the model ** ** created myAircraftExample.mat **
以下のように入力して、実行可能プログラムによって作成された MAT ファイル データを読み込み、シミュレーションと生成されたプログラムのワークスペース変数を表示します。
load myAircraftExample.mat whos yout*
Simulink には以下のように表示されます。
Name Size Bytes Class Attributes yout 1x1 10756 struct yout_rt 1x1 10756 struct
ここで、シミュレーションの実行および生成されたコードによる構造体のサイズとバイト数は同じです。
コマンド ウィンドウで次のコマンドを入力して、生成されたコードの出力をプロットします。
plot(yout_rt.time,yout_rt.signals.values)
このプロットは、この例の前述部分で作成したプロットと同一でなければなりません。
ヒント
UNIX® プラットフォームの場合、コマンド ウィンドウで構文 !./
executable_name
を使用して実行可能プログラムを実行します。必要に応じて、構文 ./
executable_name
を使用して OS シェルから実行可能プログラムを実行します。詳細については、外部コマンド、スクリプト、プログラムの実行を参照してください。
状態、時間および出力のログの構成
[データのインポート/エクスポート] ペインを使用すると、生成したプログラムで各モデルの実行タイム ステップにおけるシステムの状態や出力、シミュレーション時間を保存できるようになります。データは、(既定で)
という名前の MAT ファイルに書き込まれます。model
.mat
このデータ ログ機能を使用する前に、MATLAB ワークスペースに出力を返す Simulink モデルの設定方法について学習してください。これは、シミュレーション データの保存で説明しています。
定義して有効にした各ワークスペース出力変数に対し、コード ジェネレーターが MAT ファイル変数を定義します。たとえば、モデルがシミュレーション時間をワークスペース変数 tout
に保存する場合、生成されたプログラムではこのデータが (既定の設定では) rt_tout
という名前の変数に記録されます。
コード ジェネレーターで生成されたコードでは、次のデータが記録されます。
Root Outport ブロック
システム出力の既定の MAT ファイルの変数名は
rt_yout
です。配列
rt_yout
の並べ替え順序は Outport ブロックの端子番号に基づき、1 から始まる昇順になります。モデルの連続状態と離散状態
システム出力の既定の MAT ファイルの変数名は
rt_xout
です。シミュレーション時間
シミュレーション時間の既定の MAT ファイルの変数名は
rt_tout
です。
既定の MAT ファイルの変数名のオーバーライド
既定の設定では、コード ジェネレーターによって、MAT ファイル変数名を形成するシステム出力、状態およびシミュレーション時間の変数名の前にテキスト rt_
が付けられます。モデルのこの接頭辞を変更するには、モデル コンフィギュレーション パラメーター [MAT ファイルの変数名の修飾子] を (rt_
)、接尾辞 (_rt
) または修飾子なし ([なし]
) に設定します。他のシステム ターゲット ファイルでは、このパラメーターはサポートされない場合があります。
既定の MAT ファイルの名前またはバッファー サイズのオーバーライド
生成コードで次の MAT ファイル属性をオーバーライドするためのコンパイラ オプションを指定できます。
MAT ファイル属性 | 既定値 | コンパイラ オプション |
---|---|---|
名前 |
| -DSAVEFILE= |
データ ログ バッファーのサイズ | 1024 バイト | -DDEFAULT_BUFFER_SIZE= |
メモ
有効なオプションの構文はコンパイラによって異なります。たとえば、Microsoft® Visual C++® コンパイラは通常 /DSAVEFILE=
と filename
-DSAVEFILE=
を受け入れます。filename
テンプレート makefile (TMF) ベースのターゲットの場合は、モデル コンフィギュレーション パラメーター [make コマンド] をコンパイラ オプションに設定します。たとえば、次のようにします。
GRT や ERT などのツールチェーンベースのシステム ターゲット ファイルの場合、コンパイラ オプションをモデル コンフィギュレーションに追加します。パラメーター [ビルド構成] を [Specify]
に設定して、コンパイラ オプションを [ツール]/[オプション] テーブルの [C コンパイラ] 行に追加します。たとえば、次のようにします。
コンパイラ オプションをカスタム ツールチェーンに追加するには、MATLAB® Coder™ ビルド プロセスへのカスタム ツールチェーンの追加の例に示す手順を使用してカスタム ツールチェーンを変更して登録します。たとえば、コンパイラ オプションをカスタム ツールチェーンの MATLAB ソース ファイルに追加するには、次のように myCompilerOpts
を定義します。
optimsOffOpts = {'/c /Od'}; optimsOnOpts = {'/c /O2'}; cCompilerOpts = '$(cflags) $(CVARSFLAG) $(CFLAGS_ADDITIONAL)'; cppCompilerOpts = '$(cflags) $(CVARSFLAG) $(CPPFLAGS_ADDITIONAL)'; myCompilerOpts = {' -DSAVEFILE=myCodeLog.mat '}; ...
次に、myCompilerOpts
を、これが適用される各コンフィギュレーションとコンパイラのフラグに追加します。
cfg = tc.getBuildConfiguration('Faster Builds'); cfg.setOption('C Compiler', horzcat(cCompilerOpts, myCompilerOpts, optimsOffOpts));
MATLAB® Coder™ ビルド プロセスへのカスタム ツールチェーンの追加に示すように、カスタム ツールチェーンの変更後、コンフィギュレーションを MAT ファイルに保存してターゲット レジストリを更新します。
Scope ブロックと To Workspace ブロックを使用したデータのログ記録
コード ジェネレーターで生成されたコードでは、次に示すソースからのデータも記録されます。
ブロック パラメーター [ワークスペースにデータのログを作成] が有効になっている Scope ブロック
各 Scope ブロックのダイアログ ボックスで、変数名とデータ形式を指定しなければなりません。
モデル内の To Workspace ブロック
各 To Workspace ブロックのダイアログ ボックスで、変数名とデータ形式を指定しなければなりません。
変数は、[ワークスペース I/O] ペインで記録される変数と共に、model.mat
に書き込まれます。
To File ブロックを使用したデータのログの作成
To File ブロックに対してデータのログを作成することもできます。生成されたプログラムは、モデルの To File ブロックごとに別々の MAT ファイル (model.mat
とは異なるファイル) を生成します。ファイルにはブロックの時間と入力データが含まれます。To File ブロックのダイアログ ボックスで、ファイル名、変数名、間引きおよびサンプル時間を指定しなければなりません。
メモ
Model ブロックで参照されるモデルは、最上位モデル用に記録された状態に含めることができる状態以外のコンテキストでは、データのログを実行しません。参照されるモデル用の Simulink Coder ソフトウェアで生成されたコードは、MAT ファイルに対してデータのログを実行しません。
シングルタスクおよびマルチタスクにおけるデータのログの相違点
シングルタスクおよびマルチタスクのシステムでデータを記録すると、以下の記録に違いがあることがわかります。
連続でないルートの Outport ブロック
離散状態
マルチタスク モードでは、最初のタスク実行後に (最初のタイム ステップの終わりではなく)、状態と出力の記録が行われます。シングルタスク モードでは、ビルド手順で生成されたコードによって、最初のタイム ステップ後に、状態および出力が記録されます。
シングルタスクおよびマルチタスクのデータのログ間における相違点については、シングルタスク モデルおよびマルチタスク モデルの実行におけるデータのログを参照してください。
メモ
ラピッド ミュレーション ターゲット (RSim) には、改善されたログ オプションがあります。詳細については、RSim システム ターゲット ファイルを使用したホスト コンピューターでのハイブリッド動的システムの高速化、調整およびテストを参照してください。