メインコンテンツ

マスク パラメーターのカスタム制約

マスクには、ユーザー入力値を受け入れるパラメーターを含めることができます。マスク ダイアログ ボックスを使用して、マスク パラメーターの入力値を指定できます。マスク パラメーターの制約ではマスク パラメーターに対する検証を作成することができ、独自の検証コードを記述する必要はありません。制約により、マスク パラメーターの入力値が必ず制約に関連付けられたルールを満たすようになります。たとえば、Subsystem ブロックのマスクについて考えます。入力値が偶数でなければならないという制約を設定できます。偶数でない入力を提供すると、エラーが表示されます。指定するルールが属性の 1 つとして存在していない場合は、スカラーを返す MATLAB® 式を指定できます。リテラル編集パラメーターを制約に関連付けることもできます。制約は、使用可能な属性で指定されたルールか、MATLAB 式のいずれかです。

モデルの確認

モデル例には、ブロック パラメーター evenNoParam1evenNoParam2 が偶数でなければならないサブシステム ブロックが含まれています。指定するルールが属性の 1 つとして存在していないため、MATLAB 式を使用して制約をカスタマイズします。

open_system("slexMaskConstraints.slx");

カスタム制約の作成およびマスク パラメーターへの関連付け

モデル例のカスタム制約のセクションを参照してください。

カスタム制約を作成するには、以下を行います。

1. サブシステム ブロックにマスクを作成します。

2. マスク エディターで、[制約][パラメーター] を選択します。

a. 制約の名前を「evenNumberConstraint」と入力します。

b. [MATLAB 式] を「mod(value,2)==0」と入力します。

メモ: 値トークンを使用して式をパラメーター化できます。これは、制約を複数のパラメーターに割り当てるのに役立ちます。検証中に、パラメーターの評価値で値トークンが置き換えられます。たとえば、制約の MATLAB 式が value > 100 で、エディット タイプのマスク パラメーター Parameter1 と関連付けられている場合、MATLAB 式は Parameter1 > 100 として評価されます。これにより、制約を複数のパラメーターに割り当てることができます。

c. [エラー メッセージ] に「The value of the parameter must be even number」と入力します。マスクを保存します。

マスク パラメーターへのカスタム制約の関連付け

制約をマスク パラメーターに関連付ける必要があります。同じ制約を複数のマスク パラメーターに関連付けることができます。

1. マスク エディターで [パラメーターとダイアログ] タブをクリックします。

2. マスク パラメーターをクリックします。

3. [プロパティ エディター] で、[属性] セクションに移動し、[制約] から制約を選択します。

メモ: 同じ制約を複数のマスク パラメーターに関連付けることができます。制約の管理には [拘束ブラウザー] が役立ちます。複数のパラメーターを含む制約を作成する場合は、カスタム制約の代わりにクロスパラメーター制約を使用します。

制約の検証

関連付けられた制約にパラメーターが従っているかどうかを確認するには、以下を実行します。

1. マスク エディターに移動し、パラメーターを選択します。

2. [プロパティ エディター] で、関連付けられた制約で指定されている範囲外の入力値を指定します。エラーが表示されます。

制約の定義およびマスク リテラル編集パラメーターへの関連付け

制約をリテラル編集パラメーターに関連付けることができます。[評価] オプションが選択されていない場合、Simulink® はマスク パラメーターのダイアログ ボックスで入力された入力エントリをリテラルとしてそのまま読み取ります。たとえば、IP アドレスをリテラル編集パラメーターに保存し、カスタム ルールに対して検証できます。

モデル例では、「制約の定義およびマスク リテラル編集パラメーターへの関連付け」セクションを参照してください。

カスタム制約を作成するには、以下を行います。

1. サブシステム ブロックにマスクを作成します。

2. 編集パラメーター IPAddress を作成します。[属性] セクションの [評価] オプションをクリアして、パラメーター IPAddress のリテラル値を保存します。

3. マスク エディターで、[制約][パラメーター] を選択します。

a. 制約の名前を「IPAddressConstraint」と入力します。

b. [MATLAB 式]slexMaskIsValidIPAddress(value) として指定します。

slexMaskIsValidIPAddress.m ファイルに格納されている関数 slexMaskIsValidIPAddress は、IPAddress が有効な IP アドレスかどうかをチェックします。この関数は、IPAddress が有効な IP アドレスの場合は true を返し、それ以外の場合は false を返します。

function out = slexMaskIsValidIPAddress(addr)
out = true;
    if ~isempty(regexp(strtrim(addr), '^\d{1,3}(\.\d{1,3}){3}$', 'once'))
        ipVec = sscanf(addr, ['%u' '.' '%u' '.' '%u' '.' '%u']);
         if ~all(ipVec <= 255)
             out = false;
        end
    else
         out = false;
    end
 end

マスク リテラル編集パラメーターへの制約の関連付け

1. マスク エディターで [パラメーターとダイアログ] タブをクリックします。

2. マスク パラメーターをクリックします。

3. [プロパティ エディター] ペインの [属性] セクションで [制約] から制約 IPAddressConstraint を選択します。

制約の検証

制約にパラメーターが従っているかどうかを確認するには、以下を実行します。

1. Constraint on literal edit parameter サブシステム ブロックをダブルクリックします。

2. マスク ダイアログ ボックスに無効な IP アドレスを入力し、[OK] をクリックします。

3. 次のエラー メッセージが表示されます。

参考

トピック