Main Content

プログラム実行結果のログを作成する

Simulink® Coder™ ソフトウェアによって生成されたプログラムによって、解析用の MAT ファイルにデータを保存できる複数の手法が使用可能です。生成された実行可能ファイルは、モデルの各実行タイム ステップにおけるシステムの状態、出力およびシミュレーション時間を保存できます。データは、既定では model.mat という名前の MAT ファイルに書き込まれます。ここで、model はモデルの名前です。データ ログ記録のチュートリアルについては、解析のためのログ データを参照してください。

メモ

データのログ作成は、ファイル システムにアクセスできるシステム ターゲットファイルでのみ利用できます。また、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 モデルをリアルタイム システムのビルド プロセス ワークフローで説明されているとおりに設定する必要があります。

シミュレーション中のデータ ログ

データ ログ機能を使用するには、次の手順に従います。

  1. myAircraftExample モデルがまだ開かれていなければ、開きます。

  2. [コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。

  3. [データのインポート/エクスポート] ペインを選択します。[データのインポート/エクスポート] ペインでは、ワークスペースに保存する出力データおよびそのデータに使用する変数名を指定できます。

  4. パラメーター [形式][時間付き構造体] に設定します。この形式を選択すると、Simulink ではモデルの状態と出力が [ワークスペースまたはファイルに保存] エリアで名前を指定した構造体に保存されます。既定では、これらの構造体は xout が状態用で yout が出力用です。出力の保存に使用される構造体には、次の 2 つの最上位フィールドがあります。timesignals です。time フィールドにはシミュレーション時間のベクトルが、signals にはサブ構造体の配列が含まれ、それぞれモデル出力ポートに対応しています。

  5. [出力] を選択します。これにより、Simulink でシミュレーション中に出力信号データが yout という名前の変数として保存されるようになります。[出力] を選択すると、コード ジェネレーターでルートの Output ブロック (alpha, rad) を MAT ファイルに記録するコードを作成できるようになります。

  6. [間引き]1 を設定します。

  7. その他のパラメーターが選択されている場合、それらをオフにします。

  8. [適用][OK] をクリックして変更を登録し、ダイアログ ボックスを閉じます。

  9. モデルを保存します。

  10. モデル ウィンドウで、Aircraft Dynamics Model ブロックの横にあるスコープ シンボルをダブルクリックし、次にモデルのシミュレーションを実行します。スコープ表示の結果は以下のとおりです。

    Resulting scope display

  11. シミュレーション時間と出力が MAT ファイルのベース ワークスペースに保存されたことを確認します。MATLAB プロンプトで次のように入力します。

    whos yout
    Simulink に以下のように表示されます。

      Name        Size            Bytes  Class     Attributes
    
      yout        1x1             10756  struct
  12. シミュレーション時間と変数をプロットして、alpha, rad が記録されたことを確認します。コマンド ウィンドウで以下のように入力します。

    plot(yout.time,yout.signals.values)

    Plot of simulation output

生成されたコードからのデータ ログ

この例の 2 番目の部分では、モデル myAircraftExample についてコード ジェネレーターが作成した実行可能プログラムをビルドして実行します。このプログラムは、前に調べたシミュレーション時間と出力を記載した MAT ファイルを出力します。myAircraftExample モデルのコードは既に生成しましたが、データ ログを有効にしてモデルを変更したのでコードを再生成しなければなりません。以下にこの手順を説明します。

シミュレーションによるデータでワークスペース データを上書きすることを避けるために、コード ジェネレーターでは Simulink によって記録される変数の識別子が変更されます。これらの変更は制御できます。

  1. モデル コンフィギュレーション パラメーター [MAT ファイルの変数名の修飾子]_rt に設定します。これにより、この例の最初の部分でログを作成することにした各変数に接尾辞の _rt が追加されます。

  2. [適用][OK] をクリックして変更を登録し、ダイアログ ボックスを閉じます。

  3. モデルを保存します。

  4. 実行可能ファイルをビルドします。

  5. ビルドが完了したら、次のコマンドで実行可能プログラムを実行します。

    !myAircraftExample
  6. プログラムにより、MAT ファイルが書き込まれたことを示す次の 2 行のメッセージが生成されます。

    ** starting the model **
    ** created myAircraftExample.mat **
  7. 以下のように入力して、実行可能プログラムによって作成された MAT ファイル データを読み込み、シミュレーションと生成されたプログラムのワークスペース変数を表示します。

    load myAircraftExample.mat
    whos yout*

    Simulink に以下のように表示されます。

      Name           Size            Bytes  Class     Attributes
    
      yout           1x1             10756  struct
      yout_rt        1x1             10756  struct
    

    ここで、シミュレーションの実行および生成されたコードによる構造体のサイズとバイト数は同じです。

  8. コマンド ウィンドウで次のコマンドを入力して、生成されたコードの出力をプロットします。

    plot(yout_rt.time,yout_rt.signals.values)

    Plot of generated code output

    このプロットは、この例の前述部分で作成したプロットと同一でなければなりません。

ヒント

UNIX® プラットフォームの場合、コマンド ウィンドウで構文 !./executable_name を使用して実行可能プログラムを実行します。必要に応じて、構文 ./executable_name を使用して OS シェルから実行可能プログラムを実行します。詳細については、外部コマンド、スクリプト、プログラムの実行を参照してください。

状態、時間および出力のログの構成

[データのインポート/エクスポート] ペインを使用すると、生成したプログラムで各モデルの実行タイム ステップにおけるシステムの状態や出力、シミュレーション時間を保存できるようになります。データは、(既定で) model.mat という名前の 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 ファイル属性既定値コンパイラ オプション
名前model.mat-DSAVEFILE=filename
データ ログ バッファーのサイズ1024 バイト-DDEFAULT_BUFFER_SIZE=n

メモ

有効なオプションの構文はコンパイラによって異なります。たとえば、Microsoft® Visual C++® コンパイラは通常 /DSAVEFILE=filename-DSAVEFILE=filename を受け入れます。

テンプレート makefile (TMF) ベースのターゲットの場合は、モデル コンフィギュレーション パラメーター [make コマンド] をコンパイラ オプションに設定します。たとえば、次のようにします。

Set Make command parameter to make_rtw OPTS="-DSAVEFILE=myCodeLog.mat"

GRT や ERT などのツールチェーンベースのシステム ターゲット ファイルの場合、コンパイラ オプションをモデル コンフィギュレーションに追加します。パラメーター [ビルド構成][Specify] に設定して、コンパイラ オプションを [ツール]/[オプション] テーブルの [C コンパイラ] 行に追加します。たとえば、次のようにします。

Add compiler option to C Compiler row of Tool Options table as $(cflags) $(CVARSFLAG) $(CFLAGS_ADDITIONAL) -DSAVEFILE=myCodeLog.mat /Od /Oy-

コンパイラ オプションをカスタム ツールチェーンに追加するには、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 システム ターゲット ファイルを使用したホスト コンピューターでのハイブリッド動的システムの高速化、調整およびテストを参照してください。

関連するトピック