ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

データ オブジェクト

"データ オブジェクト" を作成して信号、状態、ブロック パラメーターの値、値の範囲、データ型、調整可能性などの特性を指定できます。Simulink® ダイアログ ボックスでオブジェクト名を使用して信号、状態、パラメーターの特性を指定できます。オブジェクトは、ベース ワークスペース、モデル ワークスペース、Simulink データ ディクショナリなどのワークスペースにあります。データ オブジェクトを使用すると、ワークスペース オブジェクトの値を変更するだけで、モデル全体の信号、状態、パラメーターの特性を変更できます。

データ オブジェクトはデータ クラスのインスタンスとして作成します。"データ クラス パッケージ" と呼ばれるメモリ構造体にデータ クラス定義が含まれています。組み込みのパッケージ Simulink によって、データ オブジェクトの作成に使用できる Simulink.SignalSimulink.Parameter の 2 つのデータ クラスが定義されています。ルックアップ テーブル ブロック (n-D Lookup Table など) 間で共有するルックアップ テーブル データを保存するために、Simulink.LookupTable クラスと Simulink.Breakpoint クラスを使用できます。

データ オブジェクトを使用して信号を設定するかどうかを決定する場合は (Inport ブロックと Outport ブロックを含め)、信号の設計属性と状態の保存を参照してください。

組み込みのデータ クラスのサブクラスを定義することによって、データ オブジェクトのプロパティとメソッドをカスタマイズできます。データ クラス パッケージの作成についての詳細は、データ クラスの定義を参照してください。

データ クラスの命名規則

Simulink では、データ クラスの名前付けにドット表記を使用します。

package.class

  • package はクラスの定義を含むパッケージの名前です。

  • class はクラスの名前です。

この表記法により、異なるパッケージに属する個別のクラスを作成および参照することができます。この表記法では、クラス名をパッケージ名で "修飾" します。

クラスとパッケージの名前は大文字、小文字を区別します。たとえば、同じクラスを参照するために MYPACKAGE.MYCLASSmypackage.myclass を置き換えて使用することはできません。

Simulink モデル内のデータ オブジェクトの使用

ワークスペースまたはデータ ディクショナリ内の変数を変更することによって信号、ブロック パラメーター、状態のシミュレーションおよびコード生成のオプションを指定するには、データ オブジェクトを使用します。オブジェクトをモデル ブロック線図内の信号、パラメーターおよび状態と関連付けます。

パラメーター オブジェクトの使用

MATLAB® の数値変数の代わりにパラメーター オブジェクトを使用してブロック パラメーターの値を指定できます。たとえば、Gain ブロックの [ゲイン] パラメーターを指定するために myParam という名前の Simulink.Parameter オブジェクトを作成して使用するには次のようにします。

  1. モデルで [ツール表示][プロパティ インスペクター] を選択します。

  2. モデルでターゲットの Gain ブロックをクリックします。プロパティ インスペクターによってブロックのプロパティとパラメーターが表示されます。

  3. [ゲイン] パラメーターの値を myParam に設定します。

  4. パラメーター値の横にあるアクション ボタン をクリックし、[作成] を選択します。

  5. [新規データの作成] ダイアログ ボックスで、[値]Simulink.Parameter(15.23) に設定して [作成] をクリックします。

    Simulink.Parameter オブジェクト myParam がベース ワークスペースに表示されます。このオブジェクトの [値] プロパティにパラメーター値 15.23 が格納されていることがプロパティ ダイアログ ボックスに表示されます。

  6. プロパティ ダイアログ ボックスを使用してオブジェクトのプロパティを調整することによって、ブロック パラメーターのその他の特性を指定します。たとえば、パラメーターが取ることのできる最小値および最大値を指定するには、[最小値] プロパティと [最大値] プロパティを使用します。

シミュレーション中に、[ゲイン] パラメーターの値として 15.23 が使用されるようになります。

Simulink.LookupTable および Simulink.Breakpoint を使用したルックアップ テーブル データの共有の詳細については、ルックアップ テーブルの共有ブレークポイントとテーブル データのパッケージ化を参照してください。

信号オブジェクトの使用

信号線またはブロックの状態 (Unit Delay ブロックの状態など) を信号オブジェクトに関連付けることができます。

信号の場合-  信号オブジェクトを使用してモデル内の信号の特性を制御するには、ワークスペース内で信号と同じ名前を使用してオブジェクトを作成します。

  1. モデルで、[ツール表示][モデル データ エディター] を選択します。

  2. モデル データ エディターで、[信号] タブを選択します。

  3. モデルでターゲットの信号を選択します。モデル データ エディターによって信号に対応する行が強調表示されます。

  4. モデル データ エディターの [Name] 列で、この信号に mySig などの名前を付けます。

  5. 信号名の横にあるボタン をクリックします。[作成と関連付け] を選択します。

  6. [新規データの作成] ダイアログ ボックスで、[値]Simulink.Signal に設定します。[場所] ドロップダウン リストを使用してオブジェクトを保存するワークスペースを選択します (既定値は [ベース ワークスペース] です)。[作成] をクリックします。

    Simulink.Signal オブジェクトの mySig がターゲット ワークスペースに表示されます。Simulink によって信号のプロパティ [信号名を Simulink の信号オブジェクトに関連付ける] が選択され、モデル内の信号が信号オブジェクトに保存されているプロパティを使用するように強制されます。信号名が信号オブジェクトに解決される仕組みを制御する方法についての詳細は、記号の解釈を参照してください。

    新しいオブジェクトのプロパティ ダイアログ ボックスが開きます。

  7. プロパティ ダイアログ ボックスを使用して信号の特性を指定します。[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 ブロックなどのブロックの状態の特性を制御できます。

  1. モデルで、[ツール表示][モデル データ エディター] を選択します。

  2. モデル データ エディターで、[状態] タブを選択します。

  3. モデル内で、ターゲットの状態を格納するブロックを選択します。モデル データ エディターによって状態に対応する行が強調表示されます。

  4. モデル データ エディターの [Name] 列で、状態に myState などの名前を付けます。

  5. 状態名の横にあるボタン をクリックします。[作成と関連付け] を選択します。

  6. [新規データの作成] ダイアログ ボックスで、[値]Simulink.Signal に設定します。[場所] ドロップダウン リストを使用してオブジェクトを保存するワークスペースを選択します (既定値は [ベース ワークスペース] です)。[作成] をクリックします。

    Simulink.Signal オブジェクトの myState がターゲット ワークスペースに表示されます。Simulink によってブロック パラメーター [状態名を Simulink の信号オブジェクトに関連付ける] が選択され、モデル内の状態が信号オブジェクトに保存されているプロパティを使用するように強制されます。状態名が信号オブジェクトに解決される仕組みを制御する方法の詳細については、記号の解釈を参照してください。

    新しいオブジェクトのプロパティ ダイアログ ボックスが開きます。

  7. プロパティ ダイアログ ボックスを使用して状態の特性を指定します。[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 コマンドを使用しても、データ オブジェクトのプロパティを取得および設定できます。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.ParameterSimulink.Signal を定義します。ユーザー インターフェイスまたはプログラムを使用してこれらのデータ オブジェクトを作成できます。

データ オブジェクトの作成

  1. モデル エクスプローラーの [モデルの階層構造] ペインで、データ オブジェクトを含めるワークスペースを選択します。たとえば、[Base Workspace] をクリックします。

  2. ツール バーの [パラメーターの追加] または [信号の追加] の隣の矢印をクリックします。ドロップダウン リストから [Simulink パラメーター] または [Simulink 信号] を選択します。

    パラメーターまたは信号オブジェクトがベース ワークスペースに表示されます。新しいパラメーター オブジェクトの既定の名前は Param です。新しい信号オブジェクトの既定の名前は Sig です。

  3. さらにオブジェクトを作成するには、[パラメーターの追加] または [信号の追加] をクリックします。

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 パスに含めなければなりません。

  1. モデル エクスプローラーの [モデルの階層構造] ペインで、データ オブジェクトを含めるワークスペースを選択します。たとえば、[Base Workspace] をクリックします。

  2. [パラメーターの追加] または [信号の追加] の隣の矢印をクリックして [クラス リストのカスタマイズ] を選択します。

  3. ダイアログ ボックスで目的のクラスの隣のチェック ボックスをオンにします。たとえば、[myPackage.Parameter][myPackage.Signal] の横にあるチェック ボックスをオンにします。[OK] をクリックします。

  4. [パラメーターの追加] または [信号の追加] の隣の矢印をクリックします。作成するデータ オブジェクトのクラスを選択します。たとえば、[myPackage Parameter] または [myPackage Signal] を選択します。

    パラメーターまたは信号オブジェクトがベース ワークスペースに表示されます。新しいパラメーター オブジェクトの既定の名前は Param です。新しい信号オブジェクトの既定の名前は Sig です。

  5. パッケージ 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;

ダイアログ ボックスから直接データ オブジェクトを作成する

[信号プロパティ] ダイアログ ボックス、ブロックのダイアログ ボックスまたはプロパティ インスペクター ([ツール表示][プロパティ インスペクター]) を開くと、信号またはパラメーターのデータ オブジェクトをワークスペースまたはデータ ディクショナリに効率的に作成できます。

ブロックのダイアログ ボックスからのパラメーター オブジェクトの作成

  1. ダイアログ ボックスのブロックの数値パラメーターに、データ オブジェクトの名前を指定します。たとえば、名前 myParam を指定します。

  2. ブロック パラメーターの値の横にあるボタン をクリックします。[作成] を選択します。

  3. [新規データの作成] ダイアログ ボックスで、[値]Simulink.Parameter を指定します。

    または、作成したデータ クラスの名前を myPackage.Parameter のように指定することもできます。ドロップダウン リストを使用して利用可能なデータ オブジェクト クラスの一覧から選択することもできます。

  4. [場所][ベース ワークスペース] を指定して [作成] をクリックします。

    [場所] オプションを使用して新しいデータ オブジェクトが含まれるワークスペースを選択できます。モデルがデータ ディクショナリにリンクされている場合は、ディクショナリにデータ オブジェクトを作成するように選択できます。

  5. 開いたダイアログ ボックスでデータ オブジェクトのプロパティを設定します。[値] ボックスにパラメーターの数値を指定します。[OK] をクリックします。

    パラメーター オブジェクト myParam がベース ワークスペースに表示されます。

  6. [ブロック パラメーター] ダイアログ ボックスで、[OK] をクリックします。

[信号プロパティ] ダイアログ ボックスでの信号オブジェクトの作成

  1. [信号名] ボックスに mySig のような信号名を指定します。[適用] をクリックします。

  2. [信号名] の値の横にあるボタン をクリックします。[作成と関連付け] を選択します。

  3. [新規データの作成] ダイアログ ボックスで、[値]Simulink.Signal を指定します。

    または、作成したデータ クラスの名前を myPackage.Signal のように指定することもできます。さらに、ドロップダウン リストから MATLAB パスに存在するデータ オブジェクト クラスを選択することもできます。

  4. [場所][ベース ワークスペース] を指定して [作成] をクリックします。

    [場所] オプションを使用して新しいデータ オブジェクトが含まれるワークスペースを選択できます。モデルがデータ ディクショナリにリンクされている場合は、ディクショナリにデータ オブジェクトを作成するように選択できます。

  5. 開いたダイアログ ボックスでデータ オブジェクトのプロパティを設定して [OK] をクリックします。

    信号オブジェクト mySig がベース ワークスペースに表示されます。[信号プロパティ] ダイアログ ボックスで [信号名を Simulink の信号オブジェクトに関連付ける] プロパティが選択されています。

データ オブジェクト ウィザードを使用したモデルのデータ オブジェクトの作成

モデル内の信号、パラメーター、状態を表すデータ オブジェクトを作成するために、データ オブジェクト ウィザードを使用できます。このウィザードは、対応するデータ オブジェクトがないモデル内のデータを検出します。

ウィザードはモデル内の指定に基づいてオブジェクトを作成し、次の特性を割り当てます。

  • 信号、パラメーターまたは状態の名前。

  • パラメーター オブジェクトの数値。

  • データ型。信号オブジェクトの場合は、Sumlink.AliasTypeSimulink.NumericType などのエイリアス タイプが含まれます。

  1. Simulink エディターで、[コード][データ オブジェクト][データ オブジェクト ウィザード] を選択します。

  2. [モデル名] ボックスに検索するモデルの名前を入力します。

    既定の設定では、ウィザードを開いたモデルの名前がボックスに表示されます。

  3. [オプションの検索] の下で、作成するデータ オブジェクト タイプの隣のチェック ボックスをオンにします。次の表でオプションについて説明します。

    オプション説明
    ルート入力 ルートレベルの Inport ブロックからの名前のついた信号。
    ルート出力ルートレベルの Outport ブロックからの名前のついた信号。
    状態

    次の離散ブロックに関連付けられている状態。

    Discrete Filter
    Discrete State-Space
    Discrete-Time Integrator
    Discrete Transfer Fcn
    Discrete Zero-Pole
    Memory
    Discrete-Time PID Controller
    Discrete-Time PID Controller (2DOF)
    Unit Delay
    データ ストアデータ ストア。データ ストアの詳細は、ローカルおよびグローバル データ ストアを参照してください。
    ブロック出力出力元が非ルートレベル ブロックである名前のついた信号。
    パラメーター
    • 数値パラメーター。たとえば、次のブロックのパラメーター。

      Constant
      Gain
      Relay
    • [スコープ]Parameter に設定されている Stateflow® データ。

    エイリアス タイプ[コンフィギュレーション パラメーター][コード生成][データ型置換] で指定するデータ型置換名。Embedded Coder ライセンスをお持ちの場合、データ オブジェクト ウィザードはこれらのデータ型置換名に対して Simulink.AliasType オブジェクトを作成します。データ型置換の詳細については、Model Configuration Parameters: Code Generation Data Type Replacement (Embedded Coder)を参照してください。
  4. [検索] をクリックします。

    データ オブジェクト テーブルに推奨されたオブジェクトが表示されます。

  5. (オプション) 既定のクラス以外のデータ クラスからオブジェクトを作成するには、クラスを変更するオブジェクトの隣のチェック ボックスをオンにします。すべてのオブジェクトを選択するには、[すべて選択] をクリックします。[クラスの変更] をクリックします。開いたダイアログ ボックスで、[パラメーター] および [信号] の隣のドロップダウン リストを使用してクラスを選択します。

    目的のクラスがドロップダウン リストに表示されない場合は、[クラス リストのカスタマイズ] を選択します。開いたダイアログ ボックスで、目的のクラスの隣にあるチェック ボックスをオンにして [OK] をクリックします。

    ウィザードがオブジェクトの推奨に使用するパラメーターおよび信号の既定のクラスを変更するには、次を行います。

    • モデル エクスプローラーの [モデルの階層構造] ペインでワークスペースを選択します。たとえば、[Base Workspace] を選択します。

    • ツール バーの [パラメーターの追加] または [信号の追加] の隣の矢印をクリックします。

    • ドロップダウン リストからウィザードで使用するクラスを選択します。たとえば、[myPackage Parameter] または [myPackage Signal] を選択します。

      選択したワークスペースにパラメーターまたは信号オブジェクトが表示されます。新しいパラメーター オブジェクトの既定の名前は Param です。新しい信号オブジェクトの既定の名前は Sig です。

      次回データ オブジェクト ウィザードを使用したときに、ウィザードはモデル エクスプローラーで選択したパラメーターまたは信号のクラスを使用してオブジェクトを推奨します。

  6. 作成する推奨オブジェクトの隣のチェック ボックスをオンにします。すべての推奨オブジェクトを選択するには、[すべて選択] をクリックします。

  7. [作成] をクリックします。

    ベース ワークスペースにデータ オブジェクトが表示されます。ターゲットのモデルがデータ ディクショナリにリンクされている場合、オブジェクトはディクショナリに表示されます。

    ウィザードは、コンフィギュレーション パラメーター ([コンフィギュレーション パラメーター][診断][データ有効性][信号の関連付け]) に従ってモデルの設定を変更します。

    • このパラメーターを [明示的のみ] に設定した場合、ウィザードはモデル内の対応する信号および状態を新しい信号オブジェクトに関連付けます。ウィザードは各 [信号プロパティ] ダイアログ ボックスの [信号名を Simulink の信号オブジェクトに関連付ける] と各ブロック ダイアログ ボックスの [状態名を Simulink の信号オブジェクトに関連付ける] のオプションをオンにします。

    • このパラメーターを [明示的と暗黙的] または [明示的と暗黙的で警告] に設定した場合、ウィザードはすべての信号または状態について [信号名を Simulink の信号オブジェクトに関連付ける] または [状態名を Simulink の信号オブジェクトに関連付ける] の設定を変更しません。

    関数 disableimplicitsignalresolution を使用してモデルの信号オブジェクトの暗黙的な関連付けをオフにすることを検討してください。詳細については、明示的または暗黙的な記号関連付けを参照してください。

データ オブジェクト ウィザードのトラブルシューティング

データ オブジェクト ウィザードでは、モデルの次のエンティティについてはデータ オブジェクトの作成は推奨されません。

  • 同じ名前の複数の信号。

  • ブロック パラメーターで使用されている変数と同じ名前の信号。

  • 連続した単一のソース ブロックがない信号。

  • ソース ブロックがコメント アウトまたはコメント スルーされている信号。

  • Variant Source ブロックと Variant Sink ブロックによって非アクティブであるとレンダリングされるデータ項目。ウィザードは、アクティブなブロックと関連付けられているデータ項目に対してのみオブジェクトを推奨します。

  • モデル コンフィギュレーション パラメーターの [信号の関連付け][なし] に設定した場合の信号および状態。

プログラムによる外部データ ソースからのデータ オブジェクトの作成

この例では、スクリプトを使用して外部データ ソース (Microsoft® Excel® ファイルなど) に基づいてデータ オブジェクトを作成する方法について説明します。

  1. 新しい MATLAB スクリプト ファイルを作成します。

  2. スクリプト ファイルに、データ オブジェクトに変換する外部ファイル内のデータを記述した情報を配置します。たとえば次の情報は、指定されたプロパティをもつ 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';

  3. スクリプト ファイルを実行します。データ オブジェクトが 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 クラスについて

value クラスのコンストラクター (コンストラクターを参照) は、クラスのインスタンスを出力し、インスタンスは最初に割り当てられた MATLAB 変数に永久に関連付けられます。変数を再割り当てしたり、関数に渡したりすると、MATLAB によってオリジナルのオブジェクトのコピーが作成され、割り当てられたり、渡されたりします。

たとえば、Simulink.NumericType は値クラスです。次のステートメント

x = Simulink.NumericType;
y = x;

を実行すると、1 つは変数 x に、もう 1 つは y に割り当てられた 2 つのクラス Simulink.NumericType のインスタンスをワークスペースに作成します。

handle クラスについて

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 クラスがあります。

変数の値がオブジェクト (値クラス) であるかオブジェクトのハンドルであるかを確認するには、オブジェクトがハンドルかどうかの判定 (MATLAB)を参照してください。

ハンドル クラスのコピー

ハンドル クラスのコピー方法でそのクラスのインスタンスのコピーを作成します。たとえば、Simulink.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 データ オブジェクトに関連付けられるように指定することです。[信号プロパティ] ダイアログ ボックスで [信号名を Simulink の信号オブジェクトに関連付ける] オプションを選択します。[信号プロパティ] ダイアログ ボックスの [コード生成] タブで [ストレージ クラス] プロパティを指定することはできません。

上記の図が示すように、それ自身のストレージ クラスが SinSig Simulink.Signal オブジェクトにより指定されるため、[ストレージ クラス] メニューは無効になります。

信号と信号オブジェクト SinSig の両方とも Model default ストレージ クラスをもっています。そのため、SinSigSinSig 信号オブジェクトに解決されます。

メモ

ブロックの状態/信号オブジェクト間の互換性の規則は、信号/信号オブジェクト間の規則と同一です。

永続的データ オブジェクトの作成

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 によってその新しいプロパティが追加されます。オブジェクトの保存後に、クラスがプロパティを失った場合、残りのプロパティのみが復元されます。

参考

| | | |

関連するトピック