プロパティ値を有限個のリストに制限
制限された許容値のセットを使用して System object™ プロパティを作成するときには、列挙型またはプロパティ検証のいずれかを使用できます。
Simulink® の MATLAB System ブロックで使用される System object には、列挙型またはプロパティ検証を使用できます。列挙型を使用する場合、列挙型を Simulink.IntEnumType から派生させることもできます。このタイプの列挙型を使用して、カスタム ヘッダーなどの属性を MATLAB System ブロックの入力または出力に追加します。Simulink モデルでの列挙型データの使用 (Simulink)を参照してください。
mustBeMember を使ったプロパティ検証
プロパティ検証を使ってプロパティの値を制限するには、検証関数 mustBeMember を使用します。
この例では、値 solid、dash、または 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 プロパティは、既定値が blue の ColorValues オブジェクトとして定義されています。(1,1) は Color プロパティをスカラーとして定義します。
properties
Color (1, 1) ColorValues = ColorValues.blue
end
Whiteboard System object の作成
この例では、Whiteboard System object™ のクラス定義、2 つのタイプの有限リスト プロパティ、およびオブジェクトの使用法を説明します。Whiteboard オブジェクトは実行するたびにホワイトボードにラインを描画します。
Whiteboard System object の定義
type Whiteboard.mclassdef 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

ホワイトボードをクリアします。
release(greenInk); release(blueInk);

参考
トピック
- プロパティ値の検証
- 列挙
- 列挙型のコードの生成 (MATLAB Coder)