このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
"データ オブジェクト" を作成して信号、状態、ブロック パラメーターの値、値の範囲、データ型、調整可能性などの特性を指定できます。Simulink® ダイアログ ボックスでオブジェクト名を使用して信号、状態、パラメーターの特性を指定できます。オブジェクトは、ベース ワークスペース、モデル ワークスペース、Simulink データ ディクショナリなどのワークスペースにあります。データ オブジェクトを使用すると、ワークスペース オブジェクトの値を変更するだけで、モデル全体の信号、状態、パラメーターの特性を変更できます。
データ オブジェクトはデータ クラスのインスタンスとして作成します。"データ クラス パッケージ" と呼ばれるメモリ構造体にデータ クラス定義が含まれています。組み込みのパッケージ Simulink
によって、データ オブジェクトの作成に使用できる Simulink.Signal
と Simulink.Parameter
の 2 つのデータ クラスが定義されています。ルックアップ テーブル ブロック (n-D Lookup Table など) 間で共有するルックアップ テーブル データを保存するために、Simulink.LookupTable
クラスと Simulink.Breakpoint
クラスを使用できます。
データ オブジェクトを使用して信号を設定するかどうかを決定する場合は (Inport ブロックと Outport ブロックを含め)、信号の設計属性と状態の保存を参照してください。
組み込みのデータ クラスのサブクラスを定義することによって、データ オブジェクトのプロパティとメソッドをカスタマイズできます。データ クラス パッケージの作成についての詳細は、データ クラスの定義を参照してください。
Simulink では、データ クラスの名前付けにドット表記を使用します。
package.class
package はクラスの定義を含むパッケージの名前です。
class はクラスの名前です。
この表記法により、異なるパッケージに属する個別のクラスを作成および参照することができます。この表記法では、クラス名をパッケージ名で "修飾" します。
クラスとパッケージの名前は大文字、小文字を区別します。たとえば、同じクラスを参照するために MYPACKAGE.MYCLASS
と mypackage.myclass
を置き換えて使用することはできません。
ワークスペースまたはデータ ディクショナリ内の変数を変更することによって信号、ブロック パラメーター、状態のシミュレーションおよびコード生成のオプションを指定するには、データ オブジェクトを使用します。オブジェクトをモデル ブロック線図内の信号、パラメーターおよび状態と関連付けます。
MATLAB® の数値変数の代わりにパラメーター オブジェクトを使用してブロック パラメーターの値を指定できます。たとえば、Gain ブロックの [ゲイン] パラメーターを指定するために myParam
という名前の Simulink.Parameter
オブジェクトを作成して使用するには次のようにします。
モデルの [モデル化] タブの [設計] で、[プロパティ インスペクター] をクリックします。
モデルでターゲットの Gain ブロックをクリックします。プロパティ インスペクターによってブロックのプロパティとパラメーターが表示されます。
[ゲイン] パラメーターの値を myParam
に設定します。
パラメーター値の横にあるアクション ボタン をクリックし、[作成] を選択します。
[新規データの作成] ダイアログ ボックスで、[値] を Simulink.Parameter(15.23)
に設定して [作成] をクリックします。
Simulink.Parameter
オブジェクト myParam
がベース ワークスペースに表示されます。このオブジェクトの [値] プロパティにパラメーター値 15.23
が格納されていることがプロパティ ダイアログ ボックスに表示されます。
プロパティ ダイアログ ボックスを使用してオブジェクトのプロパティを調整することによって、ブロック パラメーターのその他の特性を指定します。たとえば、パラメーターが取ることのできる最小値および最大値を指定するには、[最小値] プロパティと [最大値] プロパティを使用します。
シミュレーション中に、[ゲイン] パラメーターの値として 15.23
が使用されるようになります。
Simulink.LookupTable
および Simulink.Breakpoint
を使用したルックアップ テーブル データの共有の詳細については、ルックアップ テーブルの共有ブレークポイントとテーブル データのパッケージ化を参照してください。
信号線またはブロックの状態 (Unit Delay ブロックの状態など) を信号オブジェクトに関連付けることができます。
信号の場合- 信号オブジェクトを使用してモデル内の信号の特性を制御するには、ワークスペース内で信号と同じ名前を使用してオブジェクトを作成します。
モデルの [モデル化] タブで [モデル データ エディター] をクリックします。
モデル データ エディターで、[信号] タブを選択します。
モデルでターゲットの信号を選択します。モデル データ エディターによって信号に対応する行が強調表示されます。
モデル データ エディターの [Name] 列で、この信号に mySig
などの名前を付けます。
信号名の横にあるボタン をクリックします。[作成と関連付け] を選択します。
[新規データの作成] ダイアログ ボックスで、[値] を Simulink.Signal
に設定します。[場所] ドロップダウン リストを使用してオブジェクトを保存するワークスペースを選択します (既定値は [ベース ワークスペース]
です)。[作成] をクリックします。
Simulink.Signal
オブジェクトの mySig
がターゲット ワークスペースに表示されます。Simulink によって信号のプロパティ [信号名を Simulink の信号オブジェクトに関連付ける] が選択され、モデル内の信号が信号オブジェクトに保存されているプロパティを使用するように強制されます。信号名が信号オブジェクトに解決される仕組みを制御する方法についての詳細は、記号の解釈を参照してください。
新しいオブジェクトのプロパティ ダイアログ ボックスが開きます。
プロパティ ダイアログ ボックスを使用して信号の特性を指定します。[OK] をクリックします。
プログラムで信号を設定するには、以下を実行します。
% Create the signal object. mySig = Simulink.Signal; mySig.DataType = 'boolean'; % Get a handle to the block port that creates the % target signal. portHandles = get_param('myModel/myBlock','portHandles'); outportHandle = portHandles.Outport; % Specify the programmatic port parameter 'Name'. set_param(outportHandle,'Name','mySig') % Set the port parameter 'MustResolveToSignalObject'. set_param(outportHandle,'MustResolveToSignalObject','on')
ルートレベルの Outport ブロックをプログラムによって設定するには、多少異なる手法を使用しなければなりません。
% Create the signal object. mySig = Simulink.Signal; mySig.DataType = 'boolean'; % Specify the programmatic block parameter 'SignalName'. set_param('myModel/myOutport','SignalName','mySig') % Set the block parameter 'MustResolveToSignalObject'. set_param('myModel/myOutport','MustResolveToSignalObject','on')
状態の場合- 信号オブジェクトを使用して Discrete-Time Integrator ブロックなどのブロックの状態の特性を制御できます。
モデルの [モデル化] タブで [モデル データ エディター] をクリックします。
モデル データ エディターで、[状態] タブを選択します。
モデル内で、ターゲットの状態を格納するブロックを選択します。モデル データ エディターによって状態に対応する行が強調表示されます。
モデル データ エディターの [Name] 列で、状態に myState
などの名前を付けます。
状態名の横にあるボタン をクリックします。[作成と関連付け] を選択します。
[新規データの作成] ダイアログ ボックスで、[値] を Simulink.Signal
に設定します。[場所] ドロップダウン リストを使用してオブジェクトを保存するワークスペースを選択します (既定値は [ベース ワークスペース]
です)。[作成] をクリックします。
Simulink.Signal
オブジェクトの myState
がターゲット ワークスペースに表示されます。Simulink によってブロック パラメーター [状態名を Simulink の信号オブジェクトに関連付ける] が選択され、モデル内の状態が信号オブジェクトに保存されているプロパティを使用するように強制されます。状態名が信号オブジェクトに解決される仕組みを制御する方法の詳細については、記号の解釈を参照してください。
新しいオブジェクトのプロパティ ダイアログ ボックスが開きます。
プロパティ ダイアログ ボックスを使用して状態の特性を指定します。[OK] をクリックします。
プログラムで状態を設定するには、以下を実行します。
% Create the signal object. myState = Simulink.Signal; myState.DataType = 'int16'; % Set the state name in the block. set_param('myModel/myBlock','StateName','myState') % Set the port parameter 'StateMustResolveToSignalObject'. set_param('myModel/myBlock','StateMustResolveToSignalObject','on')
パラメーターおよび信号の特性をデータ オブジェクトを使用して制御するには、データ オブジェクトのプロパティに値を指定します。たとえば、パラメーターと信号のデータ オブジェクトには、ターゲットのブロック パラメーターまたは信号のデータ型を決定する DataType
プロパティがあります。データ クラス定義によって、データ オブジェクトのプロパティの名前、値の型、既定の値および有効な値の範囲が決まります。
モデル エクスプローラーまたは MATLAB コマンドを使用して、データ オブジェクトのプロパティを変更できます。
信号オブジェクトのプロパティの一覧については、Simulink.Signal
を参照してください。パラメーター オブジェクトのプロパティの一覧については、Simulink.Parameter
を参照してください。
モデル エクスプローラーを使ってオブジェクトのプロパティを変更するには、オブジェクトを含むワークスペースをモデル エクスプローラーの [モデルの階層] ペインで選択します。その後、オブジェクトをモデル エクスプローラーの [コンテンツ] ペインで選択します。
モデル エクスプローラーは、オブジェクトのプロパティ ダイアログ ボックスを (ペインが可視である場合) [ダイアログ] ペインに表示します。
モデル エクスプローラーは、[コンテンツ] ペインにオブジェクトの一部またはすべてのプロパティを表示するように構成できます (モデル エクスプローラーを参照)。プロパティを編集するには、[コンテンツ] または [ダイアログ] ペインで値をクリックします。値は、値の変更が可能なコントロールで置き換えられます。
MATLAB コマンドを使用しても、データ オブジェクトのプロパティを取得および設定できます。MATLAB コマンドおよびプログラムで以下のドット表記を使用して、データ オブジェクトのプロパティを取得および設定します。
value = obj.property; obj.property = value;
ここで、
は、オブジェクトが値クラスのインスタンスである場合はそのオブジェクトを、オブジェクトがハンドル クラスのインスタンスである場合はオブジェクトのハンドルを参照する変数で (ハンドルと値のクラスを参照)、obj
PROPERTY
はプロパティ名、VALUE
はプロパティ値です。たとえば、以下の MATLAB コードは、データ型が alias のオブジェクト (すなわち、Simulink.AliasType
のインスタンス) を作成し、その基本データ型を uint8
に設定します。
gain = Simulink.AliasType;
gain.BaseType = 'uint8';
ドット表記を回帰的に使用して、次のように、他のオブジェクトのプロパティの値であるオブジェクトのプロパティを取得または設定することができます。
gain.CoderInfo.StorageClass = 'ExportedGlobal';
Simulink
からのデータ オブジェクトの作成組み込みのパッケージ Simulink
は 2 つのデータ オブジェクト クラス Simulink.Parameter
と Simulink.Signal
を定義します。ユーザー インターフェイスまたはプログラムを使用してこれらのデータ オブジェクトを作成できます。
モデル エクスプローラーの [モデルの階層構造] ペインで、データ オブジェクトを含めるワークスペースを選択します。たとえば、[Base Workspace]
をクリックします。
ツール バーの [パラメーターの追加] または [信号を追加]
の隣の矢印をクリックします。ドロップダウン リストから [Simulink パラメーター] または [Simulink 信号] を選択します。
パラメーターまたは信号オブジェクトがベース ワークスペースに表示されます。新しいパラメーター オブジェクトの既定の名前は Param
です。新しい信号オブジェクトの既定の名前は Sig
です。
さらにオブジェクトを作成するには、[パラメーターの追加] または [信号を追加] をクリックします。
Simulink.LookupTable
オブジェクトと Simulink.Breakpoint
オブジェクトを作成するには、モデル エクスプローラー ツール バーの ボタンを使用します。
% Create a Simulink.Parameter object named myParam whose value is 15.23. myParam = Simulink.Parameter(15.23); % Create a Simulink.Signal object named mySig. mySig = Simulink.Signal;
次のようにして、数値変数を Simulink.Parameter
オブジェクトに変換できます。
/* Define numeric variable in base workspace myVar = 5; /* Create data object and assign variable value myObject = Simulink.Parameter(myVar);
独自のパッケージを作成して Simulink.Parameter
および Simulink.Signal
をサブクラス化するカスタム データ オブジェクト クラスを定義できます。この手法を利用して独自のプロパティとメソッドをデータ オブジェクトに追加できます。Embedded Coder® のライセンスをお持ちの場合は、パッケージの中でストレージ クラスとメモリ セクションを定義できます。データ クラス パッケージの作成についての詳細は、データ クラスの定義を参照してください。
myPackage
という名前のデータ クラス パッケージを定義するとします。このパッケージからデータ オブジェクトを作成する前に、パッケージ フォルダーを格納するフォルダーを MATLAB パスに含めなければなりません。
モデル エクスプローラーの [モデルの階層構造] ペインで、データ オブジェクトを含めるワークスペースを選択します。たとえば、[Base Workspace]
をクリックします。
[パラメーターの追加] または [信号を追加]
の隣の矢印をクリックし、[クラス リストのカスタマイズ] を選択します。
ダイアログ ボックスで目的のクラスの隣のチェック ボックスをオンにします。たとえば、[myPackage.Parameter]
と [myPackage.Signal]
の横にあるチェック ボックスをオンにします。[OK] をクリックします。
[パラメーターの追加] または [信号を追加] の隣の矢印をクリックします。作成するデータ オブジェクトのクラスを選択します。たとえば、[myPackage Parameter] または [myPackage Signal] を選択します。
パラメーターまたは信号オブジェクトがベース ワークスペースに表示されます。新しいパラメーター オブジェクトの既定の名前は Param
です。新しい信号オブジェクトの既定の名前は Sig
です。
パッケージ myPackage
からさらにデータ オブジェクトを作成するには、[パラメーターの追加] または [信号を追加] を再度クリックします。
myPackage
という名前のデータ クラス パッケージを定義するとします。このパッケージからデータ オブジェクトを作成する前に、パッケージ フォルダーを格納するフォルダーを MATLAB パスに含めなければなりません。
% Create a myPackage.Parameter object named % myParam whose value is 15.23. myParam = myPackage.Parameter(15.23); % Create a myPackage.Signal object named mySig. mySig = myPackage.Signal;
[信号プロパティ] ダイアログ ボックス、ブロックのダイアログ ボックスまたはプロパティ インスペクター ([モデル化] タブの [設計] で [プロパティ インスペクター] をクリック) を開くと、信号またはパラメーターのデータ オブジェクトをワークスペースまたはデータ ディクショナリに効率的に作成できます。
ダイアログ ボックスのブロックの数値パラメーターに、データ オブジェクトの名前を指定します。たとえば、名前 myParam
を指定します。
ブロック パラメーターの値の横にあるボタン をクリックします。[作成] を選択します。
[新規データの作成] ダイアログ ボックスで、[値] に Simulink.Parameter
を指定します。
または、作成したデータ クラスの名前を myPackage.Parameter
のように指定することもできます。ドロップダウン リストを使用して利用可能なデータ オブジェクト クラスの一覧から選択することもできます。
[場所] に [ベース ワークスペース]
を指定して [作成] をクリックします。
[場所] オプションを使用して新しいデータ オブジェクトが含まれるワークスペースを選択できます。モデルがデータ ディクショナリにリンクされている場合は、ディクショナリにデータ オブジェクトを作成するように選択できます。
開いたダイアログ ボックスでデータ オブジェクトのプロパティを設定します。[値] ボックスにパラメーターの数値を指定します。[OK] をクリックします。
パラメーター オブジェクト myParam
がベース ワークスペースに表示されます。
[ブロック パラメーター] ダイアログ ボックスで、[OK] をクリックします。
[信号名] ボックスに mySig
のような信号名を指定します。[適用] をクリックします。
[信号名] の値の横にあるボタン をクリックします。[作成と関連付け] を選択します。
[新規データの作成] ダイアログ ボックスで、[値] に Simulink.Signal
を指定します。
または、作成したデータ クラスの名前を myPackage.Signal
のように指定することもできます。さらに、ドロップダウン リストから MATLAB パスに存在するデータ オブジェクト クラスを選択することもできます。
[場所] に [ベース ワークスペース]
を指定して [作成] をクリックします。
[場所] オプションを使用して新しいデータ オブジェクトが含まれるワークスペースを選択できます。モデルがデータ ディクショナリにリンクされている場合は、ディクショナリにデータ オブジェクトを作成するように選択できます。
開いたダイアログ ボックスでデータ オブジェクトのプロパティを設定して [OK] をクリックします。
信号オブジェクト mySig
がベース ワークスペースに表示されます。[信号プロパティ] ダイアログ ボックスで [信号名を Simulink の信号オブジェクトに関連付ける] プロパティが選択されています。
モデル内の信号、パラメーター、状態を表すデータ オブジェクトを作成するために、データ オブジェクト ウィザードを使用できます。このウィザードは、対応するデータ オブジェクトがないモデル内のデータを検出します。
ウィザードはモデル内の指定に基づいてオブジェクトを作成し、次の特性を割り当てます。
信号、パラメーターまたは状態の名前。
パラメーター オブジェクトの数値。
データ型。信号オブジェクトの場合は、Sumlink.AliasType
や Simulink.NumericType
などのエイリアス タイプが含まれます。
Simulink エディターの [モデル化] タブの [設計] で、[データ オブジェクト ウィザード] をクリックします。
[モデル名] ボックスに検索するモデルの名前を入力します。
既定の設定では、ウィザードを開いたモデルの名前がボックスに表示されます。
[オプションの検索] の下で、作成するデータ オブジェクト タイプの隣のチェック ボックスをオンにします。次の表でオプションについて説明します。
オプション | 説明 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
ルート入力 | ルートレベルの Inport ブロックからの名前のついた信号。 | |||||||||
ルート出力 | ルートレベルの Outport ブロックからの名前のついた信号。 | |||||||||
状態 | 次の離散ブロックに関連付けられている状態。
| |||||||||
データ ストア | データ ストア。データ ストアの詳細は、ローカルおよびグローバル データ ストアを参照してください。 | |||||||||
ブロック出力 | 出力元が非ルートレベル ブロックである名前のついた信号。 | |||||||||
パラメーター | ||||||||||
エイリアス タイプ | [コンフィギュレーション パラメーター] 、 [コード生成] 、 [データ型置換] で指定するデータ型置換名。Embedded Coder ライセンスをお持ちの場合、データ オブジェクト ウィザードはこれらのデータ型置換名に対して Simulink.AliasType オブジェクトを作成します。データ型置換の詳細については、Model Configuration Parameters: Code Generation Data Type Replacement (Embedded Coder)を参照してください。 |
[検索] をクリックします。
データ オブジェクト テーブルに推奨されたオブジェクトが表示されます。
(オプション) 既定のクラス以外のデータ クラスからオブジェクトを作成するには、クラスを変更するオブジェクトの隣のチェック ボックスをオンにします。すべてのオブジェクトを選択するには、[すべて選択] をクリックします。[クラスの変更] をクリックします。開いたダイアログ ボックスで、[パラメーター] および [信号] の隣のドロップダウン リストを使用してクラスを選択します。
目的のクラスがドロップダウン リストに表示されない場合は、[クラス リストのカスタマイズ]
を選択します。開いたダイアログ ボックスで、目的のクラスの隣にあるチェック ボックスをオンにして [OK] をクリックします。
ウィザードがオブジェクトの推奨に使用するパラメーターおよび信号の既定のクラスを変更するには、次を行います。
モデル エクスプローラーの [モデルの階層構造] ペインでワークスペースを選択します。たとえば、[Base Workspace] を選択します。
ツール バーの [パラメーターの追加] または [信号を追加]
の隣の矢印をクリックします。
ドロップダウン リストからウィザードで使用するクラスを選択します。たとえば、[myPackage Parameter] または [myPackage Signal] を選択します。
選択したワークスペースにパラメーターまたは信号オブジェクトが表示されます。新しいパラメーター オブジェクトの既定の名前は Param
です。新しい信号オブジェクトの既定の名前は Sig
です。
次回データ オブジェクト ウィザードを使用したときに、ウィザードはモデル エクスプローラーで選択したパラメーターまたは信号のクラスを使用してオブジェクトを推奨します。
作成する推奨オブジェクトの隣のチェック ボックスをオンにします。すべての推奨オブジェクトを選択するには、[すべて選択] をクリックします。
[作成] をクリックします。
ベース ワークスペースにデータ オブジェクトが表示されます。ターゲットのモデルがデータ ディクショナリにリンクされている場合、オブジェクトはディクショナリに表示されます。
ウィザードは、コンフィギュレーション パラメーター ([コンフィギュレーション パラメーター] 、 [診断] 、 [データ有効性] 、 [信号の関連付け]) に従ってモデルの設定を変更します。
このパラメーターを [明示的のみ]
に設定した場合、ウィザードはモデル内の対応する信号および状態を新しい信号オブジェクトに関連付けます。ウィザードは各 [信号プロパティ] ダイアログ ボックスの [信号名を Simulink の信号オブジェクトに関連付ける] と各ブロック ダイアログ ボックスの [状態名を Simulink の信号オブジェクトに関連付ける] のオプションをオンにします。
このパラメーターを [明示的と暗黙的]
または [明示的と暗黙的で警告]
に設定した場合、ウィザードはすべての信号または状態について [信号名を Simulink の信号オブジェクトに関連付ける] または [状態名を Simulink の信号オブジェクトに関連付ける] の設定を変更しません。
関数 disableimplicitsignalresolution
を使用してモデルの信号オブジェクトの暗黙的な関連付けをオフにすることを検討してください。詳細については、明示的または暗黙的な記号関連付けを参照してください。
データ オブジェクト ウィザードは、信号オブジェクトの作成を推奨するため、コード生成のためのモデルをコンパイルします。このため、コード生成について有効でないモデルに対してウィザードを使用できません。
データ オブジェクト ウィザードでは、モデルの次のエンティティについてはデータ オブジェクトの作成は推奨されません。
同じ名前の複数の信号。
ブロック パラメーターで使用されている変数と同じ名前の信号。
連続した単一のソース ブロックがない信号。
ソース ブロックがコメント アウトまたはコメント スルーされている信号。
Variant Source ブロックと Variant Sink ブロックによって非アクティブであるとレンダリングされるデータ項目。ウィザードは、アクティブなブロックと関連付けられているデータ項目に対してのみオブジェクトを推奨します。
モデル コンフィギュレーション パラメーターの [信号の関連付け] を [なし]
に設定した場合の信号および状態。
この例では、スクリプトを使用して外部データ ソース (Microsoft® Excel® ファイルなど) に基づいてデータ オブジェクトを作成する方法について説明します。
新しい MATLAB スクリプト ファイルを作成します。
スクリプト ファイルに、データ オブジェクトに変換する外部ファイル内のデータを記述した情報を配置します。たとえば次の情報は、指定されたプロパティをもつ 2 つの Simulink
データ オブジェクトを作成します。最初のオブジェクトがパラメーター用で 2 番目が信号用です。
% Parameters ParCon = Simulink.Parameter; ParCon.CoderInfo.StorageClass = 'Custom' ParCon.CoderInfo.CustomStorageClass ='Const'; ParCon.Value = 3; % Signals SigGlb = Simulink.Signal; SigGlb.DataType = 'int8';
スクリプト ファイルを実行します。データ オブジェクトが MATLAB ワークスペースに表示されます。
外部ソースからターゲット データをインポートする場合、情報を読み取ってデータ オブジェクトに変換し、オブジェクトをベース ワークスペースに読み込む MATLAB 関数とスクリプトを記述できます。
次の関数を使用して MATLAB の外部のファイルを操作できます。
xmlread
xmlwrite
xlsread
xlswrite
csvread
csvwrite
dlmread
dlmwrite
データ クラスは、それらが定義するオブジェクトを作成および操作するために、「メソッド」と呼ばれる関数を定義します。クラスによって、以下のいずれかのメソッドが定義されている場合があります。
動的メソッドとは、その特性がその名前と最初の引数として明示的または暗示的に指定されているオブジェクトのクラスに依存するメソッドです。関数またはドット表記のいずれかを使用すると、このオブジェクトを指定できます。このオブジェクトは、メソッドを定義するクラスのインスタンス、またはメソッドを定義するクラスのサブクラスのインスタンスである必要があります。たとえば、クラス A
が、A
のインスタンスに名前を割り当てる setName
と呼ばれるメソッドを定義すると仮定します。さらに、MATLAB ワークスペースが変数 obj
に割り当てられた A のインスタンスを含む場合、次のステートメントのいずれかを使って名前 'foo'
を obj
に割り当てることができます。
obj.setName('foo'); setName(obj, 'foo');
クラスは、メソッドのスーパー クラスを使用して定義されるメソッドとして、同じ名前が付けられている一連のメソッドを定義する場合があります。この場合、サブクラスによって定義されるメソッドは、親クラスによって定義されるメソッドの動作をオーバーライドします。Simulink では、最初の引数または暗黙的な引数としてユーザーが指定するオブジェクトのクラスから、実行時にどのメソッドを呼び出すかを判断します。このため、動的メソッドと呼ばれます。
メモ
ほとんどの Simulink データ オブジェクト メソッドは、動的メソッドです。メソッドに関するドキュメンテーションで特に動的でないという記述があるメソッド以外は、すべて動的なメソッドです。
静的メソッドとは、その特性が名前のみに依存するメソッド、つまり、実行時に変化しないメソッドです。静的メソッドを呼び出すには、そのメソッドを定義するクラスの名前およびその名前の後ろに付けられたメソッド自体の名前を含む完全修飾名を使用します。たとえば、Simulink.ModelAdvisor
クラスは、getModelAdvisor
という名前が付けられた静的メソッドを定義します。この静的メソッドの完全修飾名は、Simulink.ModelAdvisor.getModelAdvisor
です。以下の例に、静的メソッドの呼び出しを示します。
ma = Simulink.ModelAdvisor.getModelAdvisor('vdp');
各データ クラスは、そのクラスのインスタンスを作成するためのメソッドを定義します。メソッド名は、クラス名と同じです。たとえば、Simulink.Parameter
クラスのコンストラクター名は、Simulink.Parameter
です。Simulink データ クラスで定義されるコンストラクターは、引数をもちません。
コンストラクターによって出力される値は、コンストラクターのクラスがハンドルのクラスか値のクラスかによって異なります。ハンドルのクラスに対するコンストラクターは、インスタンスのクラスがハンドルのクラスである場合はそれが作成するインスタンスのハンドルを出力します。そうでない場合は、インスタンス自体を出力します(ハンドルと値のクラスを参照)。
データ オブジェクト クラスを含む Simulink クラスは、value クラスと handle クラスという 2 つのカテゴリに分類できます。
value クラスのコンストラクター (コンストラクターを参照) は、クラスのインスタンスを出力し、インスタンスは最初に割り当てられた MATLAB 変数に永久に関連付けられます。変数を再割り当てしたり、関数に渡したりすると、MATLAB によってオリジナルのオブジェクトのコピーが作成され、割り当てられたり、渡されたりします。
たとえば、Simulink.NumericType
は値クラスです。次のステートメント
x = Simulink.NumericType; y = x;
を実行すると、1 つは変数 x
に、もう 1 つは y
に割り当てられた 2 つのクラス Simulink.NumericType
のインスタンスをワークスペースに作成します。
handle クラスのコンストラクターは、ハンドル オブジェクトを返します。ハンドルは、複数の変数に割り当てたり、オリジナル オブジェクトのコピーを作成することなく関数に渡すことができます。たとえば、Simulink.Parameter
クラスは handle クラスです。次のコマンド
x = Simulink.Parameter; y = x;
を実行すると、MATLAB ワークスペース内に Simulink.Parameter
クラスのインスタンスが 1 つだけ作成されます。変数 xと y は、両方ともそのハンドルによってインスタンスを参照します。
プログラムは、参照する変数を修正することによってハンドル クラスのインスタンスを変更することができます。前記の例を続けます。
x.Description = 'input gain';
y.Description
ans = input gain
ほとんどの Simulink データ オブジェクト クラスは、value クラスです。例外には Simulink.Signal
クラスや Simulink.Parameter
クラスがあります。
変数の値がオブジェクト (値クラス) であるかオブジェクトのハンドルであるかを確認するには、オブジェクトがハンドルかどうかの判定を参照してください。
ハンドル オブジェクトのコピー方法でそのオブジェクトのインスタンスのコピーを作成します。たとえば、ConfigSet
は、モデル コンフィギュレーション セットを表すハンドル オブジェクトです。次のコードは、現在のモデルのアクティブなコンフィギュレーション セットのコピーを作成し、それをモデル開発を対象とした別のコンフィギュレーションとしてその現在のモデルに付加しています。
activeConfig = getActiveConfigSet(gcs);
develConfig = copy(activeConfig);
develConfig.Name = 'develConfig';
attachConfigSet(gcs, develConfig);
Simulink データ オブジェクトには、isequal
という名前が付けられたメソッドが用意されています。このメソッドを使用すると、オブジェクト プロパティの値が等価であるかどうかを評価できます。このメソッドは、1 つのオブジェクトのプロパティ値を別のオブジェクトに属しているプロパティ値と比較し、すべての値が等価である場合には true (1
) を、異なる値がある場合には false (0
) を出力します。たとえば、以下のコードでは、2 つの信号オブジェクト (A および B) がインスタンス化され、特定のプロパティに対して値が指定されます。
A = Simulink.Signal; B = Simulink.Signal; A.DataType = 'int8'; B.DataType = 'int8'; A.InitialValue = '1.5'; B.InitialValue = '1.5';
次に、isequal
メソッドを使用して、A と B のオブジェクト プロパティが等価であるかどうかを検証します。
result = isequal(A,B)
result = 1
信号が [信号プロパティ] ダイアログ ボックス内で定義され、同じ名前の信号オブジェクトがコマンド ラインを使用するかモデル エクスプローラー内で定義されている場合は、Simulink エンジンが信号名を表すシンボルを関連付けようとする際に、あいまいさが存在する可能性があります。あいまいさを解決する 1 つの方法は、信号が Simulink.Signal
データ オブジェクトに関連付けられるように指定することです。[信号プロパティ] ダイアログ ボックスで [信号名を Simulink の信号オブジェクトに関連付ける] オプションを選択します。
信号データを構成するには、コード マッピング エディター、またはコード マッピング API を使用して、信号をモデルのコード マッピングに追加し、ストレージ クラスとストレージ クラスのプロパティを設定します。SimulinkCoder™ については、Configure Signal Data for C Code Generation (Simulink Coder)を参照してください。Embedded Coder については、Configure Signal Data for C Code Generation (Embedded Coder)を参照してください。
MATLAB を閉じても持続するようにデータ オブジェクトを保持するには、次を行います。
オブジェクトをデータ ディクショナリまたはモデル ワークスペースに保存します。モデル データを永久的に保存する場所を決定するには、Simulink モデルの変数とオブジェクトの保存場所の決定を参照してください。
save
コマンドを使用して、データ オブジェクトを MAT ファイルに保存します。また、load
コマンドを使用して、そのデータ オブジェクトを同じセッションまたは後のセッションで MATLAB ベース ワークスペースに復元します。モデルを読み込むときに MAT ファイルまたはスクリプト ファイルからオブジェクトを読み込むようにモデルを設定します。
モデルを読み込むときにファイルからデータ オブジェクトを読み込むには、オブジェクトを作成してそのプロパティを設定するスクリプトを記述します。または、オブジェクトを MAT ファイルに保存します。次に、そのオブジェクトを使用するモデルの PreLoadFcn
コールバックルーチンとして、スクリプトまたは load コマンドを使用してください。data_objects.mat
という名前のファイルにデータ オブジェクトを保存し、それを適用するモデルが開かれアクティブな状態にあるとします。コマンド プロンプトで、次のように入力します。
set_param(gcs, 'PreLoadFcn', 'load data_objects');
load data_objects
がモデルのプリロード関数として設定されます。モデルを開くたびにデータ オブジェクトがベース ワークスペースに表示されます。
保存済みのオブジェクトのクラスの定義を復元するには、定義は MATLAB パス上に常駐している必要があります。保存済みのオブジェクトのクラスがオブジェクトの保存後に新しいプロパティを取得した場合、そのオブジェクトの復元バージョンには Simulink によってその新しいプロパティが追加されます。オブジェクトの保存後に、クラスがプロパティを失った場合、残りのプロパティのみが復元されます。
disableimplicitsignalresolution
| Simulink.Breakpoint
| Simulink.LookupTable
| Simulink.Parameter
| Simulink.Signal