メインコンテンツ

get_param

パラメーターの名前と値の取得

説明

value = get_param(object,parameter) は、object で指定されたターゲット オブジェクトについて、指定されたパラメーター parameter の値 value を返します。ターゲット オブジェクトは、パスまたはハンドルとして指定されたモデル、サブシステム、ライブラリ、ブロック、ライン、端子、またはバス要素端子の要素のいずれかになります。

この関数を呼び出す前に、関連する Simulink® のモデル、サブシステム、またはライブラリを開くか読み込んでおきます。

すべて折りたたむ

次の入力引数を指定して関数 get_param を使用することで、ブロック パラメーターの値を取得できます。

  • ブロック ハンドル、またはブロック名を含む絶対ブロック パス (たとえば、'myModel/mySubsystem/myblock')

  • パラメーター名

ブロックのハンドルとパスの詳細については、Get Handles and Pathsを参照してください。

この例では、Alpha-sensor Low-pass Filter という名前の Transfer Function ブロックで指定されている伝達関数の係数を取得します。

  • ブロックは、slexAircraftExample モデルの Controller サブシステムにあります。

  • 伝達関数の分子の係数は、Numerator パラメーターに保存されます。伝達関数の分母の係数は、Denominator パラメーターに保存されます。

例を開きます。次に、slexAircraftExample モデルを読み込みます。

mdl = 'slexAircraftExample';
load_system(mdl)

伝達関数の係数を取得します。

path = [mdl,'/Controller/Alpha-sensor Low-pass Filter'];
num = get_param(path,'Numerator')
num = 
'[1]'
denom = get_param(path,'Denominator')
denom = 
'[Tal,1]'

ブロック パスが長く、複数のパラメーターを取得する場合は、ブロック ハンドルの使用を検討してください。

次の入力引数を指定して関数 get_param を使用することで、ブロック パラメーターの値を取得できます。

  • ブロック ハンドル、またはブロック名を含む絶対ブロック パス (たとえば、'myModel/mySubsystem/myblock')

  • パラメーター名

この例では、Alpha-sensor Low-pass Filter という名前の Transfer Function ブロックで指定されている伝達関数の係数を取得します。

  • ブロックは、slexAircraftExample モデルの Controller サブシステムにあります。

  • 伝達関数の分子の係数は、Numerator パラメーターに保存されます。伝達関数の分母の係数は、Denominator パラメーターに保存されます。

例を開きます。次に、関数 getSimulinkBlockHandle を使用してブロック ハンドルを取得します。ブロック ハンドルの取得とモデルの読み込みを同時に行うには、関数 getSimulinkBlockHandle の 2 番目の引数に true を指定します。

path = 'slexAircraftExample/Controller/Alpha-sensor Low-pass Filter';
h = getSimulinkBlockHandle(path,true)
h = 
490.0016

パラメーター値を取得するには、ハンドルを使用してブロックを指定します。ハンドルの値を手動で入力しないでください。MATLAB® コマンド ウィンドウで関数 getSimulinkBlockHandle によって出力された値は、丸めのため、ハンドル値に一致しないことがあります。代わりにハンドルを変数に代入し、その変数の名前を使用してブロックを指定します。この例では、h という名前の変数に値を代入しています。

num = get_param(h,'Numerator')
num = 
'[1]'
denom = get_param(h,'Denominator')
denom = 
'[Tal,1]'

次の入力引数を指定して関数 get_param を使用することで、ブロック パラメーターの値を取得できます。

  • ブロック ハンドル、またはブロック名を含む絶対ブロック パス (たとえば、'myModel/mySubsystem/myblock')

  • パラメーター名

この例では、パラメーター名を取得する方法を示します。

slexAircraftExample モデルの Alpha-sensor Low-pass Filter という名前の Transfer Function ブロックの伝達関数の係数を取得するとします。これを行うには、伝達関数の係数を格納しているパラメーターの名前を取得する必要があります。

例を開きます。

Alpha-sensor Low-pass Filter という名前の Transfer Function ブロックのハンドルを取得します。ブロック ハンドルの取得とモデルの読み込みを同時に行うには、関数 getSimulinkBlockHandle の 2 番目の引数に true を指定します。

path = 'slexAircraftExample/Controller/Alpha-sensor Low-pass Filter';
h = getSimulinkBlockHandle(path,true);

関数 get_param を使用して Alpha-sensor Low-pass Filter という名前の Transfer Function ブロックのすべてのブロック パラメーターの名前を取得します。

get_param(h,'DialogParameters')
ans = struct with fields:
                    Numerator: [1×1 struct]
                  Denominator: [1×1 struct]
          ParameterTunability: [1×1 struct]
            AbsoluteTolerance: [1×1 struct]
    ContinuousStateAttributes: [1×1 struct]

伝達関数の係数が Numerator パラメーターおよび Denominator パラメーターを使用して指定されていることが出力に示されます。これらのパラメーター名を使用して、伝達関数の分子と分母の係数を取得します。

num = get_param(h,'Numerator');
denom = get_param(h,'Denominator')
denom = 
'[Tal,1]'

次の入力引数を指定して関数 get_param を使用することで、ブロック パラメーターの値を取得できます。

  • ブロック ハンドル、またはブロック名を含む絶対ブロック パス (たとえば、'myModel/mySubsystem/myblock')

  • パラメーター名

この例では、モデル内の名前に特定のキーワードを含むすべてのブロックの絶対ブロック パスを取得する方法を示します。ブロック パスを取得する方法の詳細については、Get Handles and Pathsを参照してください。

slexAircraftExample モデル内のフィルターとして動作するすべての Transfer Function ブロックの伝達関数の係数を取得するとします。

例を開きます。次に、slexAircraftExample モデルを読み込みます。

mdl = 'slexAircraftExample';
load_system(mdl)

find_system 関数を使用して、slexAircraftExample モデル内の名前に filter という語を含むすべてのブロックのパスを取得します。正規表現を使用し、検索を大文字小文字の区別なしにし、検索をブロックに制限します。正規表現を使用するには、Regexp パラメーターの値を 'on' に設定します。検索を大文字小文字の区別なしにするには、CaseSensitive パラメーターの値を 'off' に設定します。検索をブロックに制限するには、Type パラメーターの値を 'Block' に設定します。.

paths = find_system(mdl,Regexp='on',CaseSensitive='off',Type='Block',Name='.*filter.*')
paths = 3×1 cell
    {'slexAircraftExample/Controller/Alpha-sensor↵Low-pass Filter'}
    {'slexAircraftExample/Controller/Pitch Rate↵Lead Filter'      }
    {'slexAircraftExample/Controller/Stick↵Prefilter'             }

検索の深さを指定しない場合、find_system 関数はモデルの階層構造の指定したレベル、および指定したレベルに含まれているすべての下位レベルですべてのブロックを検索します。slexAircraftExample はモデルの階層構造の最上位であるため、モデルの階層構造のすべてのレベルにあるすべてのブロックがコマンドで返されます。

ブロック パスを使用して伝達関数の係数を取得します。たとえば、以下のコマンドを使用して Alpha-sensor Low-Pass フィルターの伝達関数の係数を取得します。

num = get_param(paths{1},'Numerator')
num = 
'[1]'
denom = get_param(paths{1},'Denominator')
denom = 
'[Tal,1]'

vdp モデルのブロックのタイプのリストを取得します。

例を開きます。次に、vdp モデルを読み込みます。

load_system('vdp')

vdp モデルのブロックのパスと名前のリストを取得します。

blockpaths = find_system('vdp','Type','Block');

vdp モデルのブロックごとに BlockType パラメーターの値を取得します。

blocktypes = get_param(blockpaths,'BlockType')
blocktypes = 12×1 cell
    {'CustomCallbackButton'}
    {'Constant'            }
    {'SubSystem'           }
    {'Product'             }
    {'Scope'               }
    {'Math'                }
    {'Sum'                 }
    {'Sum'                 }
    {'Integrator'          }
    {'Integrator'          }
    {'Outport'             }
    {'Outport'             }

次の入力引数を指定して関数 get_param を使用することで、モデル パラメーターの値を取得できます。

  • モデル名

  • モデル パラメーター名

IntegerOverflowMsg パラメーターの値はモデルが整数オーバーフローを処理する方法を示します。モデルはメッセージを出力しないか、警告メッセージを出力するか、エラー メッセージを出力する場合があります。

2 つのモデルの IntegerOverflowMsg パラメーターの値を比較するとします。

例を開きます。次に、vdp モデルおよび f14 モデルを読み込みます。

load_system({'vdp','f14'})

vdp モデルと f14 モデルの IntegerOverflowMsg パラメーターの値を取得します。

vdpval = get_param('vdp','IntegerOverflowMsg');
f14val = get_param('f14','IntegerOverflowMsg');

整数オーバーフローが発生すると、vdp モデルは警告を出力しますが、f14 モデルは何もメッセージを出力しません。

関数 strcmp を使用して 2 つのパラメーター値を比較します。

strcmp(vdpval,f14val)
ans = logical
   0

関数 strcmp0 を出力します。これは、2 つのモデルで IntegerOverflowMsg パラメーターに異なる値が含まれていることを示しています。

次の入力引数を指定して関数 get_param を使用することで、モデル パラメーターの値を取得できます。

  • モデル名

  • モデル パラメーター名

2 つのモデルのメッセージ パラメーター値を比較して、メッセージなし、警告メッセージ、エラー メッセージで処理される状況の観点から一貫性を確保したいとします。ただし、すべてのメッセージ パラメーターの名前がわかっているわけではありません。

例を開きます。次に、vdp モデルおよび f14 モデルを読み込みます。

load_system({'vdp','f14'})

すべてのモデル パラメーターのリストを取得します。

params = get_param('vdp','ObjectParameters');

この関数は構造体を返します。モデル パラメーター名を含む cell 配列を作成します。

names = fieldnames(params);

メッセージ パラメーターの末尾は略語 Msg です。略語 Msg を含むすべてのモデル パラメーター名を取得します。

msgnames = names(contains(names,'Msg'));

vdp モデルと f14 モデルのメッセージ パラメーター値を比較します。値が異なっているパラメーターの名前を出力します。

vdpval = cell(1,length(msgnames));
f14val = vdpval;

for i=1:length(msgnames)
    vdpVal{i} = get_param('vdp',msgnames{i});
    f14Val{i} = get_param('f14',msgnames{i});
    if(strcmp(vdpVal{i},f14Val{i})<1)
        disp(msgnames{i})
    end
end
IntegerOverflowMsg
IntegerSaturationMsg

2 つのメッセージ パラメーターに異なる値が含まれています。

次のいずれかのオプションのリストを取得するには、キーワード options を指定して関数 get_param を使用します。

  • ブロック パラメーター

  • モデル パラメーター

  • オブジェクト プロパティ (たとえば、注釈用の水平方向の配置オプション)

この例では、ブロック パラメーター、マスク パラメーター、およびモデル パラメーターのオプションのリストを取得する方法を説明します。

ブロック パラメーターのオプションのリストの取得

例を開きます。次に、vdp モデルを読み込みます。

load_system('vdp')

Square ブロックの Output signal type パラメーターのオプションのリストを取得します。

funcoptions = get_param('vdp/Square','options@OutputSignalType')
funcoptions = 1×3 cell
    {'auto'}    {'real'}    {'complex'}

マスク サブシステム パラメーターのオプションのリストの取得

Mu という名前のマスク Subsystem ブロックの Read/Write permissions パラメーターのオプションのリストを取得します。

get_param('vdp/Mu','options@Permissions')
ans = 1×3 cell
    {'ReadWrite'}    {'ReadOnly'}    {'NoReadOrWrite'}

モデル パラメーターのオプションのリストの取得

AlgebraicLoopMsg という名前のモデル パラメーターのオプションのリストを取得します。

get_param('vdp','options@AlgebraicLoopMsg')
ans = 1×3 cell
    {'none'}    {'warning'}    {'error'}

注釈のオプションのリストの取得

vdp モデル内の注釈を検索します。

h = find_system(gcs,'FindAll','on','Type','annotation');

行列 h 内のハンドルに対応している注釈テキストを出力します。

get_param(h,'PlainText')
ans = 3×1 cell
    {'Copyright 2004-2024 The MathWorks, Inc.'}
    {'Van der Pol Equation'                   }
    {'x_1' =x_2↵↵x_2' =µ(1-x_1^2) x_2 - x_1'  }

タイトル注釈 'Van der Pol Equation' の水平方向の配置用のオプションのリストを取得します。

get_param(h(2),'options@HorizontalAlignment')
ans = 1×3 cell
    {'left'}    {'center'}    {'right'}

関数 get_param でキーワード value を使用して、マスク ブロック パラメーターの値にアクセスできます。

例を開きます。次に、vdp モデルを開きます。

open_system('vdp')

Mu という名前のマスク Subsystem ブロックの gain パラメーターの値を取得します。

get_param('vdp/Mu','value@gain')
ans = 
2

モデルでブロックをダブルクリックします。

マスクで、gain パラメーターを変更するスライダーを移動します。

gain パラメーターの値を再度取得します。

get_param('vdp/Mu','value@gain')
ans = 
2

グローバル パラメーターの名前と値を取得します。

グローバル パラメーター名のリストの取得

Simulink® ルート パラメーター名とモデル パラメーター名の差異を探して、グローバル パラメーター名のリストを取得できます。

例を開きます。次に、vdp モデルを読み込みます。

load_system('vdp')

すべてのモデル パラメーターの名前を取得します。

modelparamnames = fieldnames(get_param('vdp','ObjectParameters'));

Simulink ルート パラメーター名のリストを取得します。

rootparamnames = fieldnames(get_param(0,'ObjectParameters'));

ルート パラメーター名とモデル パラメーター名のリストの差異を探してグローバル パラメーターの名前を取得します。

globalparamnames = setdiff(rootparamnames,modelparamnames);

グローバル パラメーター値の取得

グローバル パラメーターの値を取得します

globalparamval = get_param(0,'CurrentSystem')
globalparamval = 
'vdp'

入力引数

すべて折りたたむ

オブジェクトの名前、パス、ハンドル、またはルート。文字ベクトル、文字ベクトルの cell 配列、string 配列、数値スカラー、または 0 として指定します。

ターゲット オブジェクトを指定する方法はタイプによって異なります。

  • モデル — モデルの名前またはハンドル。

  • サブシステム — サブシステムの名前またはハンドル。

  • ライブラリ — ライブラリの名前またはハンドル。

  • ブロック — ブロックのパスまたはハンドル。

  • ライン — ラインのハンドル。

  • 端子 — 端子のハンドル。

  • 端子の要素 — モデルの名前かサブシステム ブロックのパス、スラッシュ、および端子の名前かバス要素のパスで構成されるパス。バス要素端子の場合、最上位のバスからターゲットの要素までの階層をバス要素のパスとして指定します。階層の各名前はドットで区切ります。

ハンドルとパスを取得する方法の詳細については、Get Handles and Pathsを参照してください。

0 を指定して、現在の Simulink セッションのグローバル パラメーターおよびモデル パラメーターなどの、ルート パラメーター名を取得します。

  • グローバル パラメーターにはエディターの基本設定と Simulink Coder™ パラメーターが含まれます。

  • モデル パラメーターには、コンフィギュレーション パラメーター、Simulink Coder パラメーターおよび Simulink Code Inspector™ パラメーターが含まれます。

例: 'vdp/Mu'

例: 'mymodel/Subsystem1/Out1.nonsinusoidal.saw'

ヒント

  • 同じブロックに対する get_param を複数回呼び出す場合は、数値ハンドルを使用してブロックを指定します。この方法は、get_param でブロックの絶対パスを使用するよりも効率的です。getSimulinkBlockHandle を使用してブロック ハンドルを取得します。

  • 通常 MATLAB® に表示されるよりも多くの桁を指定しなければならないため、ハンドルの数値 (5.007 など) を手動で指定しようとしないでください。ハンドルを変数に代入し、その変数の名前を使用します。

データ型: char | string | double

パラメーター、プロパティ、または属性の名前。文字ベクトルまたは string スカラーとして指定します。一部の名前では大文字と小文字が区別されます。

次の表に特殊なケースを示します。

指定したパラメーター結果
'ObjectParameters'

指定したオブジェクトのパラメーター名を個別のフィールドとする構造体配列。

'DialogParameters'

ブロック ダイアログ ボックスのパラメーター名を個別のフィールドとする構造体配列。ブロックにマスクがある場合は代わりにマスク パラメーターを返します。

'ParameterStruct'

マスク ブロックのパラメーター名とその現在の値を含む構造体。

パラメーター、プロパティ、または属性の詳細については、対応するリファレンス ページのプログラムでの使用に関する情報を参照してください。以下に例を示します。

  • モデル — コンフィギュレーション パラメーターのリファレンス ページを参照してください。

  • ブロック — 共通ブロック プロパティおよびブロックのリファレンス ページを参照してください。

  • 端子 — 信号プロパティツールのリファレンス ページを参照してください。

  • 端子の要素 — In Bus Element ブロックおよび Out Bus Element ブロックのリファレンス ページを参照してください。

例: 'ObjectParameters'

例: 'Solver'

例: 'SimulationCommand'

例: 'Position'

例: 'NameLocation'

データ型: char | string

出力引数

すべて折りたたむ

パラメーターの値。パラメーター タイプで決まる形式で返されます。複数のオブジェクトを指定する場合、出力は cell 配列になります。

次の表に特殊なケースを示します。

指定したパラメーター結果
'ObjectParameters'

指定したオブジェクトのパラメーター名を個別のフィールドとする構造体配列。

'DialogParameters'

ブロック ダイアログ ボックスのパラメーター名を個別のフィールドとする構造体配列。ブロックにマスクがある場合は代わりにマスク パラメーターを返します。

get_param(0,'ObjectParameters') を指定してルート パラメーターを取得すると、出力 value はルート パラメーター名を構造体内の個別のフィールドとする構造体配列になります。各パラメーター フィールドは次のフィールドを含む構造体です。

  • Type — パラメーター タイプの値。'boolean''string''int''real''point''rectangle''matrix''enum''ports'、または 'list' です。

  • Enum — 列挙文字ベクトル値の cell 配列。'enum' のパラメーター タイプにのみ適用されます。

  • Attributes — パラメーターの属性を定義する文字ベクトルの cell 配列。値は 'read-write''read-only''read-only-if-compiled''write-only''dont-eval' 'always-save''never-save''nondirty'、または 'simulation' です。

バージョン履歴

R2006a より前に導入