Main Content

その他のブロックとのデータ共有

global キーワードおよび Data Store Memory ブロックまたは Simulink.Signal オブジェクトを使用し、MATLAB System とその他のブロック間でデータを共有します。次の場合に、グローバル データを MATLAB System ブロックと併用しなければならないことがあります。

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

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

MATLAB System ブロックとのデータの共有

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

MATLAB System ブロックでの共有データのスコープ規則

MATLAB System ブロックは以下のスコープ規則を使用します。

  • Data Store Memory ブロックと Simulink.Signal オブジェクトの両方で同じ名前を使用する場合、Data Store Memory ブロックによりデータはモデルのスコープになります。

  • グローバル変数は、モデル内の同じ名前をもつ最も近い Data Store Memory ブロックに、階層的に関連付けられます。2 つの異なる MATLAB System ブロックに表示される同じグローバル変数は、モデルの階層によって、異なる Data Store Memory ブロックに関連付けられることがあります。この機能を使用して、データの可視性をサブシステムにスコープできます。

MATLAB System ブロックでの共有データの使用

MATLAB System ブロックは次の項目でデータ ストア メモリをサポートします。

  • MATLAB® 構造体 (バス)

  • 列挙データ型

MATLAB System でのデータ共有の使用方法

MATLAB System ブロックで共有データを使用するには、次を行います。

  1. MATLAB System ブロックに関連付ける System object™ でグローバル変数を宣言します。

    System object の以下のメソッドで global キーワードを使用できます。

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

Simulink.Signal オブジェクトを使用して参照モデル間でデータを共有するには、Simulink.Signal オブジェクトをベース ワークスペースで定義し、MATLAB System ブロックと同じグローバル変数名を使用します。

共有データの格納方法の選択

Data Store Memory ブロックまたは Simulink.Signal オブジェクトを使用して、共有データを格納できます。

データの種類グローバル データのストレージ方法関連するリンク

モデル参照を使用しない単一モデルで、少数のグローバル変数を使用する場合。

Data Store Memory ブロック。

メモ

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

MATLAB System ブロックでの 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 オブジェクトの設定方法

MATLAB System ブロックでの Data Store Memory ブロックの使用方法

  1. グローバルをサポートする System object メソッドでグローバル キーワードを宣言します。以下に例を示します。

    global A;
  2. MATLAB System ブロックをモデルに追加します。

  3. MATLAB System ブロックをダブルクリックして System object を関連付けます。

  4. Data Store Memory ブロックをモデルに追加して、以下を設定します。

    1. MATLAB System ブロック コードのグローバル変数の名前と一致させる [データ ストア名]

    2. 明示的なデータ型に対する [データ型]

      データ型を [auto] に設定することはできません。

    3. [信号タイプ]

    4. [初期値]

      Data Store Memory ブロックの初期値は、指定しないでおくことはできません。

MATLAB System ブロックでのデータ ストア メモリの使用

このモデルでは、Data Store Memory ブロック B に保存されたグローバル データを MATLAB System ブロックで使用する方法を説明します。MATLAB System ブロックは globalSysObjMatrix1 System object に関連付けられています。完成したモデルを見るには、ex_globalsys_objmatrix1 モデルを開きます。

  1. 以下のブロックを新しいモデルにドラッグします。

    • MATLAB System

    • Data Store Memory

    • Display

  2. System object を作成して MATLAB System ブロックと関連付けます。まず、MATLAB System ブロックから基本的な System object テンプレート ファイルを作成します。

  3. MATLAB エディターで、次のようなコードを使用して System object を作成します。System object を globalSysObjMatrix1.m として保存します。System object は実行するたびに B を変更します。

    classdef globalSysObjMatrix1 < matlab.System
        % Global/DSM support scalar example
        
        methods(Access = protected)
            function setupImpl(obj)
                % Perform one-time calculations, such as computing constants
            end
    
            function y = stepImpl(obj) 
                global B; 
                B(:,1)= B(:,1)+100; 
                y = B; 
            end
        end
    end
  4. MATLAB System ブロックをダブルクリックし、globalSysObjMatrix1 System object をブロックに関連付けます。

  5. モデルで、Data Store Memory ブロック B をダブルクリックします。

  6. [信号属性] タブで、たとえば次のような初期値を入力します。

    [74 75 5 1;22 23 24 32;33 44 55 22]
  7. モデルのシミュレーションを実行します。

    MATLAB System ブロックが実行されるたびに、B に格納されたグローバル データの初期値が読み取られ、B の値が更新されます。このモデルは 5 回ステップを実行します。

  8. 保存して、モデルを閉じます。

Simulink.Signal オブジェクトの設定方法

Simulink.Signal オブジェクトをモデル ワークスペースに作成します。

ヒント

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

  1. モデル エクスプローラーの [モデルの階層構造] ペインで、[model_name][モデル ワークスペース] に移動します。

    [追加][Simulink Signal] を選択します。

  2. これらの設定が Simulink.Signal オブジェクトに適用されることを確認します。

    1. [データ型] を明示的なデータ型に設定します。

      データ型を [auto] に設定することはできません。

    2. [次元] を完全に指定されるように設定します。

      信号の次元を -1 に、つまり継承されるように設定することはできません。

    3. [実数/複素数] を設定します。

    4. [初期値] を指定します。

      信号の初期値は、未指定にすることはできません。

    5. [Name] をグローバル変数の名前に設定します。

MATLAB System ブロックでの Simulink.Signal オブジェクトの使用

この単純なモデルは、MATLAB System ブロックで Simulink.Signal を信号 B と併用する方法を示します。MATLAB System ブロックは globalSysObjScalar System object と関連付けられます。完成したモデルを見るには、ex_globalsys_simulink_signal_share モデルを開きます。

  1. 以下のブロックを新しいモデルにドラッグします。

    • MATLAB System

    • Display

  2. System object を作成して MATLAB System ブロックと関連付けます。まず、MATLAB System ブロックから基本的な System object テンプレート ファイルを作成します。

  3. MATLAB エディターで System object を作成します。System object を globalSysObjScalar.m として保存します。System object は実行するたびに B を変更します。

    classdef globalSysObjScalar < matlab.System
        % Global/DSM support scalar example
        
        methods(Access = protected)
            function setupImpl(obj)
                % Perform one-time calculations, such as computing constants
            end
    
            function y = stepImpl(obj) 
                global B; 
                B= B+100; 
                y = B; 
            end
        end
    end
  4. MATLAB System ブロックをダブルクリックし、globalSysObjScalar System object をブロックに関連付けます。

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

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

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

  7. モデル エクスプローラーの [モデルの階層構造] ペインで、[model_name][モデル ワークスペース] に移動します。[コンテンツ] ペインで、[Name]B に設定します。

  8. model_name[モデル ワークスペース] に戻ります。

    • [追加][Simulink Signal] を選択します。

    • Simulink.Signal オブジェクトに対して以下の設定を行います。

      属性
      データ型double
      実数/複素数real
      次元1
      初期値25
  9. モデルのシミュレーションを実行します。

    MATLAB System ブロックが実行されるたびに、B に格納されたグローバル データの初期値が読み取られ、B の値が更新されます。このモデルは 5 回ステップを実行します。

  10. 保存して、モデルを閉じます。

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

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

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

MATLAB System ブロックは可変サイズのデータに対してデータ ストア メモリをサポートしません。

P コード System object での共有データの使用

System object が P コードの場合、getGlobalNamesImpl メソッドを実装し、System object で使用するグローバル変数名を指定しなければなりません。次に例を示します。

classdef GlobalSysObjMatrix < matlab.System 
    % Matrix DSM support: Increment first row by 1 at each time step
    methods (Access = protected)  
        function y = stepImpl(obj)
            global B;
            B(1,:) = B(1,:)+1;
            y = B;
        end

				function globalNames = getGlobalNamesImpl(~)
            globalNames = {'B'};
				end    
    end
end

参考

ブロック

オブジェクト

関連するトピック