このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
その他のブロックとのデータ共有
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 ブロックで共有データを使用するには、次を行います。
MATLAB System ブロックに関連付ける System object™ でグローバル変数を宣言します。
System object の以下のメソッドで
global
キーワードを使用できます。グローバル変数と同じ名前をもつ 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 ブロックの使用方法
グローバルをサポートする System object メソッドでグローバル キーワードを宣言します。以下に例を示します。
global A;
MATLAB System ブロックをモデルに追加します。
MATLAB System ブロックをダブルクリックして System object を関連付けます。
Data Store Memory ブロックをモデルに追加して、以下を設定します。
MATLAB System ブロック コードのグローバル変数の名前と一致させる [データ ストア名]。
明示的なデータ型に対する [データ型]。
データ型を [
auto
] に設定することはできません。[信号タイプ]。
[初期値]。
Data Store Memory ブロックの初期値は、指定しないでおくことはできません。
MATLAB System ブロックでのデータ ストア メモリの使用
このモデルでは、Data Store Memory ブロック B
に保存されたグローバル データを MATLAB System ブロックで使用する方法を説明します。MATLAB System ブロックは globalSysObjMatrix1
System object に関連付けられています。完成したモデルを見るには、ex_globalsys_objmatrix1
モデルを開きます。
以下のブロックを新しいモデルにドラッグします。
MATLAB System
Data Store Memory
Display
System object を作成して MATLAB System ブロックと関連付けます。まず、MATLAB System ブロックから基本的な System object テンプレート ファイルを作成します。
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
MATLAB System ブロックをダブルクリックし、
globalSysObjMatrix1
System object をブロックに関連付けます。モデルで、Data Store Memory ブロック
B
をダブルクリックします。[信号属性] タブで、たとえば次のような初期値を入力します。
[74 75 5 1;22 23 24 32;33 44 55 22]
モデルのシミュレーションを実行します。
MATLAB System ブロックが実行されるたびに、
B
に格納されたグローバル データの初期値が読み取られ、B
の値が更新されます。このモデルは 5 回ステップを実行します。保存して、モデルを閉じます。
Simulink.Signal
オブジェクトの設定方法
Simulink.Signal
オブジェクトをモデル ワークスペースに作成します。
ヒント
ベース ワークスペースに Simulink.Signal
オブジェクトを作成し、複数モデルでグローバル データを使用します。
モデル エクスプローラーの [モデルの階層構造] ペインで、[
model_name
] 、 [モデル ワークスペース] に移動します。[追加] 、 [Simulink Signal] を選択します。
これらの設定が
Simulink.Signal
オブジェクトに適用されることを確認します。[データ型] を明示的なデータ型に設定します。
データ型を [
auto
] に設定することはできません。[次元] を完全に指定されるように設定します。
信号の次元を
-1
に、つまり継承されるように設定することはできません。[実数/複素数] を設定します。
[初期値] を指定します。
信号の初期値は、未指定にすることはできません。
[Name] をグローバル変数の名前に設定します。
MATLAB System ブロックでの Simulink.Signal
オブジェクトの使用
この単純なモデルは、MATLAB System ブロックで Simulink.Signal
を信号 B と併用する方法を示します。MATLAB System ブロックは globalSysObjScalar
System object と関連付けられます。完成したモデルを見るには、ex_globalsys_simulink_signal_share
モデルを開きます。
以下のブロックを新しいモデルにドラッグします。
MATLAB System
Display
System object を作成して MATLAB System ブロックと関連付けます。まず、MATLAB System ブロックから基本的な System object テンプレート ファイルを作成します。
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
MATLAB System ブロックをダブルクリックし、
globalSysObjScalar
System object をブロックに関連付けます。モデルの [モデル化] タブで [モデル エクスプローラー] をクリックします。
モデル エクスプローラーの左側ペインで、このモデルのモデル ワークスペースを選択します。
[コンテンツ] ペインは、モデル ワークスペースのデータを表示します。
モデル エクスプローラーの [モデルの階層構造] ペインで、[
model_name
] 、 [モデル ワークスペース] に移動します。[コンテンツ] ペインで、[Name] をB
に設定します。model_name
、 [モデル ワークスペース] に戻ります。[追加] 、 [Simulink Signal] を選択します。
Simulink.Signal
オブジェクトに対して以下の設定を行います。属性 値 データ型 double
実数/複素数 real
次元 1
初期値 25
モデルのシミュレーションを実行します。
MATLAB System ブロックが実行されるたびに、
B
に格納されたグローバル データの初期値が読み取られ、B
の値が更新されます。このモデルは 5 回ステップを実行します。保存して、モデルを閉じます。
データ ストア診断を使用したメモリのアクセス問題の検出
モデルを構成して、データ ストアの問題を回避する実行時およびコンパイル時の診断を提供できます。診断は、[コンフィギュレーション パラメーター] ダイアログ ボックスおよび 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