Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

グローバルなデータ共有

グローバル データの使用時期

次の場合に、グローバル データを MATLAB Function ブロックと併用しなければならないことがあります。

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

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

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

グローバル データと MATLAB Function ブロックの併用

Simulink® では、データ ストア メモリを使用して、グローバル データを格納します。Data Store Memory ブロックまたは Simulink.Signal オブジェクトのいずれかを使用して、データ ストア メモリを実装します。グローバル データの格納方法は、グローバル変数の数と範囲によって決まります。詳細については、ローカルおよびグローバル データ ストアグローバル データの格納方法の選択を参照してください。

MATLAB グローバルとデータ ストア メモリの関連性

Simulink の MATLAB 関数では、グローバル宣言は MATLAB グローバル ワークスペースにマップされません。その代わり、グローバル データを MATLAB Function ブロックとともに登録し、データをデータ ストア メモリにマップします。これにより、MATLAB 関数のグローバル データは Simulink ソルバーと相互運用され、誤って使用された場合は診断が与えられます。

グローバル変数は、モデル内の同じ名前をもつ最も近いデータ ストア メモリに、階層的に関連付けられます。2 つの異なる MATLAB Function ブロックで発生する同じグローバル変数は、モデルの構造体によって、異なるデータ ストア メモリに関連付けられることがあります。この機能を使用して、データの可視性をサブシステムにスコープできます。

グローバルと MATLAB Function ブロックの併用

MATLAB Function ブロックまたはこのブロックが呼び出すコードでグローバル データを使用するには、以下を行わなければなりません。

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

  2. グローバル変数と同じ名前をもつ Data Store Memory ブロックまたは Simulink.Signal オブジェクトを MATLAB Function ブロックに登録します。

詳細については、Data Store Memory ブロックを使用したデータの格納Simulink.Signal オブジェクトを使用したデータの格納を参照してください。

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

次の表は、Data Store Memory ブロックまたは Simulink.Signal オブジェクトのどちらを使用するかをまとめています。

実行する操作:使用:詳細情報:
モデル参照を使用しない単一モデルで、少数のグローバル変数を使用する場合。Data Store Memory ブロック。

メモ

Data Store Memory ブロックを使用することで、データはモデルのスコープになります。

Data Store Memory ブロックを使用したデータの格納
モデル参照を使用しない単一モデルで、多数のグローバル変数を使用する場合。モデル ワークスペースで定義された Simulink.Signal オブジェクト。Simulink.Signal オブジェクトには、次の利点があります。
  • 多数の Data Store Memory ブロックをモデルに追加する必要はありません。

  • MAT ファイルから Simulink.Signal オブジェクトを読み込むことができます。

Simulink.Signal オブジェクトを使用したデータの格納
複数モデル間でデータを共有する場合 (参照されたモデルを含む)。ベース ワークスペースで定義された Simulink.Signal オブジェクト

メモ

Simulink.Signal に加えて Data Store Memory ブロックを使用する場合は、Data Store Memory ブロックを使用することによって、データがモデルのスコープになることに注意してください。

Simulink.Signal オブジェクトを使用したデータの格納

Data Store Memory ブロックを使用したデータの格納

このモデルでは、Data Store Memory ブロック A に保存されたグローバル データを MATLAB Function ブロックで使用する方法を説明します。

  1. dsm_demo.mdl モデルを開きます。

  2. MATLAB Function ブロックをダブルクリックして MATLAB Function ブロック エディターを開きます。

    この MATLAB Function ブロックのコードでは、グローバル変数 A が定義されています。ブロックが実行されるたびに A の値が変更されます。

    function y = fcn
    %#codegen
    global A;
    A = A+1;
    y = A;
    

  3. グローバル変数が MATLAB Function ブロックに登録されていることを確認します。MATLAB Function ブロックへのデータの追加を参照してください。

    1. MATLAB Function ブロック エディターで、[データの編集] を選択して [端子とデータの管理] ダイアログ ボックスを開きます。

    2. [端子とデータの管理] で、左のペインにあるデータ A を選択します。このデータではグローバル変数と同じ名前を使用しています。

    3. データの [スコープ]Data Store Memory に設定されています。

    端子とデータの管理も参照してください。

  4. Data Store Memory ブロック A をダブルクリックします。[ブロック パラメーター] ダイアログ ボックスで、[データ ストア名] にグローバル変数の名前と同じ A が表示されます。ブロックの初期値は 25 です。

    Data Store Memory をモデルに追加するときは次のようにします。

    1. [データ ストア名] を設定して、MATLAB Function ブロック コードのグローバル変数の名前と一致するようにします。

    2. [データ型] を明示的なデータ型に設定します。データ型を [auto] に設定することはできません。

    3. [信号タイプ] を設定し、[初期値] を指定します。

  5. モデルのシミュレーションを実行します。

    MATLAB Function ブロックが実行されるたびに、A に格納されたグローバル データの初期値が読み取られ、A の値が更新されます。

Simulink.Signal オブジェクトを使用したデータの格納

このモデルでは、Simulink.Signal オブジェクト A に保存されたグローバル データを MATLAB Function ブロックで使用する方法を説明します。

  1. simulink_signal_local モデルを開きます。

    このモデルでは、モデル ワークスペースの Simulink.Signal オブジェクトを使用します。

    メモ

    複数のモデルでグローバル データを使用するには、ベース ワークスペースに Simulink.Signal オブジェクトを作成します。

  2. Simulink.Signal オブジェクトがモデル エクスプローラーに追加されていることを確認します。

    1. [モデル化] タブで、[モデル エクスプローラー] をクリックします。

    2. モデル エクスプローラーの左側ペインで、simulink_signal_local モデルのモデル ワークスペースを選択します。

      [コンテンツ] ペインは、モデル ワークスペースのデータを表示します。

    3. Simulink.Signal オブジェクト A をクリックします。

      モデル エクスプローラーの右側のペインで、A の属性が次のように表示されていることを確認します。

      属性
      データ型double
      実数/複素数real
      次元1
      初期値 5

    モデル エクスプローラーも参照してください。

  3. MATLAB Function ブロックをダブルクリックして、エディターを開きます。

    MATLAB Function ブロックが実行されるたびに、グローバル データ A の値が変更されます。

    function y = fcn
    %#codegen
    global A;
    A = A+1;
    y = A;
    

  4. Simulink.Signal オブジェクトが MATLAB Function ブロックに登録されていることを確認します。

    1. MATLAB Function ブロック エディターで、[データの編集] を選択して [端子とデータの管理] ダイアログ ボックスを開きます。

    2. [端子とデータの管理] で、左のペインにあるデータ A を選択します。このデータではグローバル変数と同じ名前を使用しています。

    3. データの [スコープ] を [Data Store Memory] に設定します。

    端子とデータの管理も参照してください。

  5. モデルのシミュレーションを実行します。

    MATLAB Function ブロックが実行されるたびに、A に格納されたグローバル データの初期値が読み取られ、A の値が更新されます。

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

モデルを構成して、データ ストアの問題を回避する実行時およびコンパイル時の診断を提供できます。診断は、[コンフィギュレーション パラメーター] ダイアログ ボックスおよび Data Store Memory ブロックのパラメーター ダイアログ ボックスで使用可能です。これらの診断は、Simulink.Signal オブジェクトではなく、Data Store Memory ブロックのみで使用可能です。データ ストア診断の使用についての詳細は、データ ストア診断を参照してください。

メモ

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

MATLAB Function ブロックでの共有データ使用の制限

Data Store Memory は次をサポートしません。

  • MATLAB 構造体

  • 可変サイズのデータ

関連する例

詳細