Main Content

MATLAB Function ブロックでのグローバル データの使用

関数コードでグローバル変数を定義することで、MATLAB Function ブロックでグローバルに定義されたデータを参照できます。グローバル変数は次の場合に使用します。

  • グローバル変数を使用する複数の MATLAB® 関数があり、これらの関数を MATLAB Function ブロックから呼び出す場合。

  • グローバル データを使用する既存のモデルに MATLAB Function ブロックを追加し、他の入力や出力によるモデルの混乱を避ける場合。

  • データの可視性をモデルの部分にスコープする場合。

Simulink® では、Data Store Memory ブロックまたは Simulink.Signal オブジェクトを使用して、グローバル データを格納します。詳細については、ローカルおよびグローバル データ ストアを参照してください。

Data Store Memory ブロックからのグローバル データの使用

Data Store Memory ブロックでグローバル データを定義し、そのデータを MATLAB Function ブロックまたはこのブロックが呼び出すコードで使用するには、次を行います。

  1. MATLAB Function ブロックで、または MATLAB Function ブロックが呼び出すコードでグローバル変数を宣言します。

  2. MATLAB Function ブロックで、グローバル変数の [スコープ] プロパティを Data Store Memory に設定します。MATLAB Function ブロックで変数を定義する方法の詳細については、MATLAB Function ブロックの変数の作成と定義を参照してください。

  3. モデルに、Data Store Memory ブロックを作成します。[データ ストア名] パラメーターをグローバル変数と同じ名前に割り当てます。

  4. Data Store Memory で、[初期値][データ型]、および [信号タイプ] パラメーターを設定します。データ型は継承できず、信号タイプは実数または複素数にする必要があります。

Data Store Memory ブロックでは、データはモデルのスコープになります。Data Store Memory ブロックはグローバル データごとにモデルに追加する必要があります。Data Store Memory ブロックでは、MATLAB 値クラスまたは可変サイズ データはサポートされません。

Simulink.Signal オブジェクトからのグローバル データの使用

Simulink.Signal オブジェクトでグローバル データを定義し、そのデータを MATLAB Function ブロックまたはこのブロックが呼び出すコードで使用するには、次を行います。

  1. MATLAB Function ブロックで、または MATLAB Function ブロックが呼び出すコードでグローバル変数を宣言します。

  2. MATLAB Function ブロックで、グローバル変数の [スコープ] プロパティを Data Store Memory に設定します。MATLAB Function ブロックで変数を定義する方法の詳細については、MATLAB Function ブロックの変数の作成と定義を参照してください。

  3. モデル ワークスペースまたはベース ワークスペースに、Simulink.Signal オブジェクトを作成します。Simulink.Signal オブジェクトを、グローバル変数と同じ名前をもつ変数に割り当てます。

  4. Simulink.Signal オブジェクトの DataTypeInitialValue、および Dimensions プロパティを設定します。データ型は継承できず、信号タイプは実数または複素数にする必要があります。

Simulink.Signal オブジェクトのスコープはモデルまたはベース ワークスペースに設定できます。Simulink.Signal オブジェクトは、モデル エクスプローラーで定義するか MAT ファイルから読み込むことができます。

グローバル データの格納方法の選択

グローバル データの格納方法は、グローバル変数の数と範囲によって決まります。次の表は、Data Store Memory ブロックまたは Simulink.Signal オブジェクトのどちらを使用するかを示しています。

グローバル データの使用方法解決法
参照モデルを使用しない単一モデルで、少数のグローバル変数を定義する必要がある。

Data Store Memory ブロック。

参照モデルを使用しない単一モデルで、多数のグローバル変数を定義する必要がある。

モデル ワークスペースで定義された Simulink.Signal オブジェクト。

複数モデル間でグローバル データを共有する (参照モデルを含む)。

ベース ワークスペースで定義された Simulink.Signal オブジェクト。

Data Store Memory ブロックからのデータの取得

この例では、Data Store Memory ブロックに格納されているグローバル データを MATLAB Function ブロックで使用する方法を示します。

Data Store Memory ブロックのパラメーターの表示

Data Store Memory ブロックを開いてパラメーターを表示します。[メイン] タブで、[データ ストア名] パラメーターが A であることに注意してください。[信号属性] タブを開きます。この例では、[初期値] パラメーターは 25[データ型] パラメーターは double、信号タイプは実数です。

MATLAB Function ブロックでグローバル データを使用する場合、これらのパラメーターを [自動] または [継承] に設定することはできません。

MATLAB Function ブロックの検証

MATLAB Function ブロックを開きます。関数コードで、Data Store Memory ブロックの [データ ストア名] パラメーターの名前と一致するグローバル変数 A が宣言されています。ブロックが実行されるたびに、次のコードを使用して A1 が追加されます。

function y = fcn
    global A;
    A = A+1;
    y = A;

変数 A がブロックのデータ ストア メモリを使用することを確認します。

  1. [関数] タブの [準備] セクションで、[データの編集] をクリックします。

  2. [シンボル] ペインで変数 A を選択します。プロパティ インスペクターにプロパティが表示されます。

  3. [スコープ] プロパティが Data Store Memory であることを確認します。

モデルのシミュレーション

モデルを実行します。各メジャー タイム ステップでブロックの実行が発生します。MATLAB Function ブロックの最終出力は 76 です。

Simulink.Signal オブジェクト例からのデータの取得

この例では、Simulink.Signal オブジェクトに格納されているグローバル データを MATLAB Function ブロックで使用する方法を示します。

Simulink.Signal オブジェクトのプロパティの表示

Simulink.Signal オブジェクトのプロパティを表示します。

  1. モデル エクスプローラーを開きます。[モデル化] タブの [設計] セクションで、[モデル エクスプローラー] をクリックします。

  2. 左側のペインで、MLFB_slsignal_model を展開して [モデル ワークスペース] をクリックします。中央のペインに、モデル ワークスペースのデータが表示されます。

  3. Simulink.Signal オブジェクト A をクリックします。モデル エクスプローラーの右側のペインに、A のプロパティが表示されます。この例では、[データ型]double[次元]1[初期値]25、実数/複素数は実数です。

MATLAB Function ブロックでグローバル データを使用する場合、これらのプロパティを [自動] または [継承] に設定することはできません。

MATLAB Function ブロックの検証

MATLAB Function ブロックを開きます。関数コードで、Data Store Memory ブロックの [データ ストア名] パラメーターの名前と一致するグローバル変数 A が宣言されています。ブロックが実行されるたびに、次のコードを使用して A1 が追加されます。

function y = fcn
    global A;
    A = A+1;
    y = A;

変数 A がオブジェクトのデータ ストア メモリを使用することを確認します。

  1. [関数] タブの [準備] セクションで、[データの編集] をクリックします。

  2. [シンボル] ペインで変数 A を選択します。プロパティ インスペクターにプロパティが表示されます。

  3. [スコープ] プロパティが Data Store Memory であることを確認します。

モデルのシミュレーション

モデルを実行します。各メジャー タイム ステップでブロックの実行が発生します。MATLAB Function ブロックの最終出力は 76 です。

データ ストア診断を使用したメモリのアクセス問題の検出

Data Store Memory ブロックを使用する場合は、実行時およびコンパイル時の診断を提供するようにモデルを構成して、データ ストアの問題を回避できます。Data Store Memory ブロックの診断は、[コンフィギュレーション パラメーター] ウィンドウおよび [パラメーター] ウィンドウに表示されます。データ ストア診断の使用についての詳細は、データ ストア診断を参照してください。

メモ

データ ストア メモリ配列を関数に渡す場合、A = foo(A) のような最適化を実行すると、コード生成ソフトウェアは、いくつかの要素のみがアクセスされたにもかかわらず、配列のすべての内容を読み取りまたは書き込みとしてマークを付けることがあります。

参考

ブロック

オブジェクト

関連するトピック