Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

シミュレーション中の MATLAB 関数でのデータへのアクセス

信号の [インストルメンテーションのプロパティ][データ アクセス] 機能を使用し、シミュレーション中に信号データを MATLAB® コールバック関数にストリームできます。シミュレーション全体を通じて、指定する関数が非同期的にパケットでデータを受け取ります。新しいデータを受け取るたびにコールバック関数が実行されます。コールバック関数を作成して、信号データを処理するか、シミュレーション中に信号のカスタムの可視化を作成できます。コールバック関数はモデル内の信号値に影響しません。この例では、シミュレーション中に信号をプロットする簡単なコールバック関数を使用して信号データにアクセスするために必要な手順を説明します。

メモ

データ アクセスはラピッド アクセラレータ モード、参照モデル、固定小数点データ、またはバーチャル バス信号をサポートしておらず、1 次元および 2 次元行列信号のみをサポートしています。

データ アクセス用のコールバック関数の作成

データ アクセス用のコールバック関数は常に信号データを最初の引数として受け取ります。シミュレーション時間とパラメーターを送信するかどうかを選択できます。3 つの引数をすべて含める場合、シミュレーション時間は 2 番目の引数になります。単一信号に固有のコールバック関数にすることも、同じコールバックを使用して複数の信号を処理および可視化することもできます。コールバック関数は一度に 1 つの信号のデータのみにアクセスできます。この例では、特定の呼び出しに対して関数で処理される信号を識別するために使用される信号データ、時間、およびパラメーターを受け取るコールバック関数を作成します。

メモ

データ アクセス コールバック関数は、非バーチャル バス データを、バスの階層と一致する配列の構造体として受け取ります。

コールバック関数を、関数と同じ名前の M ファイルに作成します。MATLAB 関数の作成の詳細については、関数のファイルでの作成を参照してください。この例のコールバック関数はオプション パラメーターを使用して各信号に数値識別子を割り当てます。パラメーターは、各信号に一意の figure を作成し、各信号に異なるラインの色を割り当てるために使用されます。信号データをプロットに累積するには、コールバックに hold on を含めます。コールバックへの各呼び出しで、関数は信号データの一部を受け取ります。コールバックを使用して、必要に応じてパケットを累積できます。

function plotSignals(y,time,sigNum)
   
    figure(sigNum)
    
    if isequal(sigNum,1)
        marker = "ro-";
    elseif isequal(sigNum,2)
        marker = "go-";
    else
        marker = "bo-";
    end
    
    hold on;
    plot(time,y,marker);

end

コールバック関数は戻り値を提供しません。戻り値で関数を指定すると、返されるデータは破棄されます。

ヒント

assignin を使用してベース ワークスペースでコールバック関数からデータにアクセスします。

MATLAB パスの場所でコールバック関数を保存します。コールバックを保存する場所がパス上にない場合は、パスに追加できます。MATLAB の [現在のフォルダー] セクションでコールバックが含まれるディレクトリを右クリックし、[パスに追加] を選択します。

データ アクセス用の信号の設定

前のセクションのコールバックを使用するように slexAircraftExample モデルの信号を設定します。

slexAircraftExample モデルを開きます。

mdl = "slexAircraftExample";
open_system(mdl)

データ アクセス コールバックで信号のデータにアクセスするには、信号をログ記録しなければなりません。ログ記録用に alpha, radq rad/sec、および Stick 信号をマークするには、信号を選択します。次に、選択した信号を右クリックし、コンテキスト メニューから [選択した信号のログ] を選択します。

あるいは、関数 Simulink.sdi.markSignalForStreaming を使用してログ記録対象の信号をマークできます。

lines = get_param('slexAircraftExample','Lines');
q_handle = lines(1).Handle;
alpha_handle = lines(2).Handle;
Stick_handle = lines(6).Handle;

Simulink.sdi.markSignalForStreaming(q_handle,"on")
Simulink.sdi.markSignalForStreaming(alpha_handle,"on")
Simulink.sdi.markSignalForStreaming(Stick_handle,"on")

各信号のデータ アクセスを設定するには、ログ バッジを右クリックして [プロパティ] を選択します。[インストルメンテーションのプロパティ] ダイアログ ボックスの [データ アクセス] タブで、コールバック関数の名前、コールバック関数が時間を引数として取るかどうか、およびオプションのパラメーター値を指定できます。

[インストルメンテーションのプロパティ] ダイアログ ボックスの [データ アクセス] タブで、以下のようにします。

  • [関数名] テキスト ボックスにコールバックの名前 plotSignals を入力します。

  • [シミュレーション時間を含める] を選択します。

  • [関数パラメーター] テキスト ボックスで、q, rad/sec 信号の「1」、alpha, rad 信号の「2」、Stick 信号の「3」を入力します。

The Instrumentation Properties for the z, rad/sec signal

モデルをシミュレートします。コールバックは、シミュレーション中に Figure 1、2、および 3 を生成して q, rad/sec 信号、alpha,rad 信号、および Stick 信号を表示します。

sim(mdl);

The q, rad/sec, alpha, rad, and Stick signals plotted with the line styles specified in the plotStyles function.

コールバック関数を変更してカスタムの可視化を作成することも、処理された信号データのプロットを作成することもできます。データ アクセス コールバック関数に関連するエラーはシミュレーションを中断しません。エラーは [診断ビューアー] で警告として表示されます。

参考

| |

関連するトピック