Main Content

プロパティ値を有限個のリストに制限

制限された許容値のセットを使用して System object™ プロパティを作成するときには、列挙型またはプロパティ検証のいずれかを使用できます。

Simulink®MATLAB System ブロックで使用される System object には、列挙型またはプロパティ検証を使用できます。列挙型を使用する場合、列挙型を Simulink.IntEnumType から派生させることもできます。このタイプの列挙型を使用して、カスタム ヘッダーなどの属性を MATLAB System ブロックの入力または出力に追加します。Simulink モデルでの列挙型データの使用 (Simulink)を参照してください。

mustBeMember を使ったプロパティ検証

プロパティ検証を使ってプロパティの値を制限するには、検証関数 mustBeMember を使用します。

この例では、値 soliddash、または dot をもつことができる Style プロパティを定義します。既定値は solid で、(1,1) はプロパティをスカラーとして定義します。

    properties
        Style (1,1) string {mustBeMember(Style, ["solid","dash","dot"])} = "solid";
    end
大文字小文字を区別しない一致をサポートするには、代わりに matlab.system.mustBeMember を使用します。
    properties
        Style (1,:) char {matlab.system.mustBeMember(Style, ["solid","dash","dot"])} = "solid";
    end

列挙型プロパティ

System object で列挙型データを使用するには、列挙型をプロパティとして System object クラス定義内で参照して、列挙型クラスを別のクラス定義ファイルで定義します。

列挙プロパティを作成するには、以下が必要です。

  • 列挙型クラスに設定された System object プロパティ

  • プロパティに指定可能なすべての値を定義する、関連付けられた列挙型クラス定義

この例では、System object の色の列挙型プロパティを定義します。列挙型クラス ColorValues の定義は以下のとおりです。

classdef ColorValues < int32
    enumeration
        blue (0)
        red (1)
        green (2)
    end
end
ColorValues クラスは、コード生成互換のために int32 から継承します。列挙値は有効な MATLAB 識別子でなければなりません。

System object の Color プロパティは、既定値が blueColorValues オブジェクトとして定義されています。(1,1)Color プロパティをスカラーとして定義します。

properties
   Color (1, 1) ColorValues = ColorValues.blue
end

Whiteboard System object の作成

この例では、Whiteboard System object™ のクラス定義、2 つのタイプの有限リスト プロパティ、およびオブジェクトの使用法を説明します。Whiteboard オブジェクトは実行するたびにホワイトボードにラインを描画します。

Whiteboard System object の定義

type Whiteboard.m
classdef Whiteboard < matlab.System
    % Whiteboard Draw lines on a figure window
    %
    
    
    properties(Nontunable)
        Color (1, 1) ColorValues = ColorValues.blue
        Style (1,1) string {mustBeMember(Style, ["solid","dash","dot"])} = "solid";
    end

    methods (Access = protected)
        function stepImpl(obj)
            h = Whiteboard.getWhiteboard();
            switch obj.Style
                case "solid"
                    linestyle = "-";
                case "dash"
                    linestyle = "--";
                case "dot"
                    linestyle = ":";
            end
            plot(h, randn([2,1]), randn([2,1]), ...
                "Color",string(obj.Color), "LineStyle",linestyle);
        end
        
        function releaseImpl(~)
            cla(Whiteboard.getWhiteboard());
            hold on
        end
    end
    
    methods (Static)
        function a = getWhiteboard()
            h = findobj('tag','whiteboard');
            if isempty(h)
                h = figure('tag','whiteboard');
                hold on
            end
            a = gca;
        end
    end
end

System object の構成

greenInk = Whiteboard;
blueInk = Whiteboard; 

色を変更し、青のライン スタイルを設定します。

greenInk.Color = "green";
blueInk.Color = "blue";
blueInk.Style = "dot";

いくつかのラインの描画

for i=1:3
  greenInk();
  blueInk();
end

Figure contains an axes object. The axes object contains 6 objects of type line.

ホワイトボードをクリアします。

release(greenInk);
release(blueInk);

Figure contains an axes object. The axes object is empty.

関連するトピック