ドキュメンテーション

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

データ クラスの定義

この例では、Simulink® データ クラスをサブクラス化する方法を示します。

MATLAB® クラス構文を使用して、パッケージにデータ クラスを作成します。必要に応じて、データ クラスにプロパティを割り当て、カスタム ストレージ クラスを定義します。

例を使用したデータ クラスの定義

  1. フォルダー matlabroot/toolbox/simulink/simdemos/dataclasses にある +SimulinkDemos データ クラス パッケージを表示します (開く)。

    このパッケージには定義済みのデータ クラスが含まれています。

  2. データ クラスを定義する場所にフォルダーをコピーします。

  3. フォルダー +mypkg の名前を変更して、その親フォルダーを MATLAB パスに追加します。

  4. データ クラス定義を変更します。

手動によるデータ クラスの定義

  1. パッケージ フォルダー +mypkg を作成して、その親フォルダーを MATLAB パスに追加します。

  2. +mypkg の内部にクラス フォルダー @Parameter および @Signal を作成します。

      メモ:   Simulink では、データ クラスは +Package/@Class フォルダー内に定義する必要があります。

  3. @Parameter フォルダー内に MATLAB ファイル Parameter.m を作成して編集のために開きます。

  4. MATLAB クラス構文を使用して Simulink.Parameter のサブクラスであるデータ クラスを定義します。

    classdef Parameter < Simulink.Parameter
       
    end % classdef
    

Parameter または Signal 以外のカスタム クラス名を使用するには、カスタム名を使用してクラス フォルダーに名前をつけます。たとえば、クラス mypkg.myParameter を定義するには次を行います。

  • Simulink.Parameter または Simulink.Signal のサブクラスとしてデータ クラスを定義します。

    classdef myParameter < Simulink.Parameter
       
    end % classdef
    

  • クラス定義で、コンストラクター メソッドに myParameter または mySignal という名前をつけます。

  • クラス定義を含むクラス フォルダーに @myParameter または @mySignal という名前をつけます。

オプション: プロパティをデータ クラスに追加する

propertiesend のキーワードは、プロパティ定義ブロックを囲んでいます。

classdef Parameter < Simulink.Parameter
	properties % Unconstrained property type
		Prop1 = [];
	end

	properties(PropertyType = 'logical scalar')
		Prop2 = false;
	end

	properties(PropertyType = 'char')
		Prop3 = '';
	end

	properties(PropertyType = 'char',...
      AllowedValues = {'red'; 'green'; 'blue'})
		Prop4 = 'red';
	end
end % classdef

    メモ:   MATLAB エディターは、PropertyType 属性および AllowedValues 属性を認識しませんが、これは Simulink データ クラスに対してのみ定義されるためです。これらの認識されない属性に関する mlint の警告を非表示にするには、MATLAB エディターでその属性名を右クリックして、["属性名 '<属性名>' が不明..." を非表示にする][このファイルで] を選択します。

Simulink.ParameterSimulink.Signal または Simulink.CustomStorageClassAttributes のサブクラスにプロパティを追加する場合、以下のプロパティ タイプを指定できます。

プロパティ タイプ構文
double 型properties(PropertyType = 'double scalar')
int32 型properties(PropertyType = 'int32 scalar')
論理型properties(PropertyType = 'logical scalar')
文字列 (char)properties(PropertyType = 'char')
制限された一連の可能な値をもつ文字列properties(PropertyType = 'char', AllowedValues = {'a', 'b', 'c'})

オプション: データ クラスに初期化コードを追加する

データ クラス内にコンストラクターを追加すると、クラスがインスタンス化されるときに初期化処理を実行できます。

この例では、コンストラクターはオプションの入力引数に基づいてオブジェクトの値 obj を初期化します。

classdef Parameter < Simulink.Parameter
	methods
		function obj = Parameter(optionalValue)
			if (nargin == 1)
				obj.Value = optionalValue;
			end
		end
	end % methods
end % classdef

オプション: カスタム ストレージ クラスの定義

setupCoderInfo メソッドを使用して、クラスの CoderInfo オブジェクトを設定します。次に、useLocalCustomStorageClasses メソッドへの呼び出しを作成して、カスタム ストレージ クラス デザイナーを開きます。

  1. データ クラス内のコンストラクターで useLocalCustomStorageClasses メソッドを呼び出します。

    classdef Parameter < Simulink.Parameter
    	methods
    		function setupCoderInfo(obj)
    			useLocalCustomStorageClasses(obj, 'mypkg');
    			
    			obj.CoderInfo.StorageClass = 'Custom';
    		end
    	end % methods
    end % classdef
    
  2. パッケージに対するカスタム ストレージ クラス デザイナーを開きます。

    cscdesigner('mypkg')
  3. カスタム ストレージ クラスを定義します。

オプション: カスタム ストレージ クラスのカスタム属性の定義

  1. MATLAB ファイル myCustomAttribs.m を作成して編集用に開きます。このファイルを +mypkg/@myCustomAttribs フォルダーに保存します。ここで、+mypkg@Parameter フォルダーと @Signal フォルダーを含むフォルダーです。

  2. MATLAB クラス構文を使用して Simulink.CustomStorageClassAttributes のサブクラスを定義します。たとえば、元の識別子を使用してデータを定義しながら、生成コード内でデータの代わりの名前を与えるカスタム ストレージ クラスを考えてみます。

    classdef myCustomAttribs < Simulink.CustomStorageClassAttributes
    	properties(PropertyType = 'char')
    		AlternateName = '';
    	end
    end % classdef
    

  3. isAddressable メソッドの既定の実装をオーバーライドして、カスタム ストレージ クラスを書き込み可能にするかどうかを決定します。

    classdef myCustomAttribs < Simulink.CustomStorageClassAttributes
    		properties(PropertyType = 'logical scalar')
    			IsAlternateNameInstanceSpecific = true;
    		end
    		
    		methods
    			function retVal = isAddressable(hObj, hCSCDefn, hData)
    				retVal = false;
    			end
    		end % methods
    end % classdef
    
  4. getInstanceSpecificProps メソッドの既定の実装をオーバーライドします。

    例については、フォルダー matlabroot\toolbox\simulink\simulink\dataclasses\+Simulink\@CSCTypeAttributes_FlatStructureCSCTypeAttributes_FlatStructure.m を参照してください (開く)。

      メモ:   これはオプションの手順です。既定の設定では、すべてのカスタム属性がインスタンス固有で、データ オブジェクトごとに変更できます。ただし、どのプロパティをインスタンス固有になるように許可するかは制限できます。

  5. getIdentifiersForInstance メソッドの既定の実装をオーバーライドして、データ クラスのオブジェクトの識別子を定義します。

      メモ:   既定の実装では、このメソッドはデータ オブジェクトの名前または識別子をクエリし、生成コードでその識別子を使用します。このメソッドをオーバーライドすることで、生成コード内のデータ オブジェクトの識別子を制御できます。

    classdef myCustomAttribs < Simulink.CustomStorageClassAttributes
    	properties(PropertyType = 'char')
    		GetFunction = '';
    		SetFunction = '';
    	end
     
    	methods
    		function retVal = getIdentifiersForInstance(hCSCAttrib,...
     hCSCDefn, hData, identifier)
    			retVal = struct('GetFunction',...
     hData.CoderInfo.CustomAttributes.GetFunction, ...
    			'SetFunction', hData.CoderInfo.CustomAttributes.SetFunction);
    		end%
    	end % methods
    end % classdef
  6. グループ化されたカスタム ストレージ クラスを使用する場合は、getIdentifiersForGroup メソッドの既定の実装をオーバーライドして、生成コード内のグループの識別子を指定します。

    例については、フォルダー matlabroot\toolbox\simulink\simulink\dataclasses\+Simulink\@CSCTypeAttributes_FlatStructureCSCTypeAttributes_FlatStructure.m を参照してください (開く)。

関連する例

この情報は役に立ちましたか?