リンク付きブロックのプログラムによる制御
リンク付きブロックのライブラリの詳細の検出と変更
モデルで参照されているライブラリ ブロックに関する情報を取得するには、libinfo
関数を使用します。libinfo
は、モデル内のリンク付きブロックのパス、そのソース ライブラリの名前、ソース ライブラリ内のライブラリ ブロックのパス、およびリンク ステータスを提供します。
モデルを読み込み、モデルで参照されている特定のブロックのライブラリの詳細を取得します。
load_system("sldemo_fuelsys"); linkedBlock = "sldemo_fuelsys/fuel_rate_control/validate_sample_time/CheckRange"; libinfo(linkedBlock)
ans = struct with fields:
Block: 'sldemo_fuelsys/fuel_rate_control/validate_sample_time/CheckRange'
Library: 'simulink'
ReferenceBlock: 'simulink/Model↵Verification/Check ↵Static Range'
LinkStatus: 'resolved'
ReferenceBlock
パラメーターは、CheckRange
ブロックの親ライブラリ ブロックが Simulink® ライブラリの Check ↵Static Range
ブロックであることを示しています。ReferenceBlock
を Check ↵Dynamic Range
に変更するには、set_param
関数を使用します。
set_param(linkedBlock,'ReferenceBlock',... 'simulink/Model Verification/Check Dynamic Range'); libinfo(linkedBlock).ReferenceBlock
ans = 'simulink/Model Verification/Check Dynamic Range'
メモ: 参照ブロックのプロパティを同じブロックのマスク初期化コードまたはコールバック コードで set_param
関数を使用して変更することは推奨されません。そのようなモデル化パターンには、バリアント ブロックを使用するか、参照ブロックの親ブロックのマスク初期化コードまたはコールバック コードで ReferenceBlock
パラメーターを設定できます。
リンク付きブロックのロック
親ライブラリ ブロックとそのリンク付きブロックの間のリンクをロックできます。ライブラリへのリンクをロックすると、モデルで使用されているライブラリ ブロック インスタンスからリンクを編集したり無効にしたりできなくなります。この動作により、意図しない変更を防ぎ、ライブラリ ブロックの保護を強化します。
ライブラリ内のリンク付きブロックのロックまたはロック解除をコマンド ラインから行うには、LockLinksToLibrary
パラメーターを使用します。
リンクをロックするには、以下を使用します。
set_param("MyLibraryName","LockLinksToLibrary","on");
リンクのロックを解除するには、以下を使用します。
set_param("MyLibraryName","LockLinksToLibrary","off");
リンク ステータス
リンク ステータスは、モデル内の参照ブロックとそれに対応するライブラリ内のブロックの間の接続に関する情報を提供します。モデル内のブロックのリンク ステータスは、LinkStatus
パラメーターおよび StaticLinkStatus
パラメーターを使用して取得できます。
StaticLinkStatus
— ブロックのリンク ステータスをリンク付きブロックを更新せずに示します。このパラメーターは、アクティブであるか古くなっているリンク付きブロックのステータスを現在の状態を変更または更新せずにクエリするのに便利です。StaticLinkStatus
を取得するにはget_param(gcb,'StaticLinkStatus')
を使用します。LinkStatus
— リンク付きブロックを更新してブロックのリアルタイムのステータスを反映します。LinkStatus
を取得するにはget_param(gcb,'LinkStatus')
を使用します。
LinkStatus
は次の値のいずれかになります。
LinkStatus の値の取得 | 説明 |
---|---|
none | ブロックがリンク付きブロックでありません。 |
resolved | ライブラリ ブロックへのリンクがアクティブで有効になっています。 |
unresolved | ライブラリ ブロックへのリンクを関連付けることができません。たとえば、ライブラリ ブロックがないかパスが正しくありません。 |
implicit | ブロックがライブラリ ブロック内にあり、ライブラリ ブロック自体への直接のリンクではありません。たとえば、ライブラリ サブシステムに Gain ブロックが含まれていて、このサブシステムにモデル内のリンク付きブロック A がある場合、モデルでブロック A 内の Gain ブロックを選択すると、 |
inactive | ライブラリ ブロックへのリンクが無効になっています。 |
set_param
関数を使用して、LinkStatus
を次の値のいずれかに設定できます。たとえば、ライブラリへのリンクを解除するには set_param(gcb,'LinkStatus','none')
を使用します。
LinkStatus の値の設定 | 説明 |
---|---|
none | ライブラリ ブロックへのリンクを解除します。 |
breakWithoutHierarchy | リンクの入れ子にされた親階層に影響を与えずにリンクを解除します。 |
inactive | ライブラリ ブロックへのリンクを無効にします。 |
restore | ライブラリ ブロックへの非アクティブなリンクを復元し、モデル内のリンク付きブロックのバージョンをライブラリ内のバージョンに置き換えます。 |
propagate | モデル内の非アクティブなリンク付きブロックに加えられた変更を対応するライブラリ ブロックにプッシュし、そのリンクを再確立します。リンクをプッシュすると、ライブラリ内のブロックのバージョンはモデル内のバージョンに置き換えられます。 |
restoreHierarchy | リンク階層内の無効になっているすべてのリンクを対応するライブラリ ブロックに戻し、モデル内のリンク付きブロックのバージョンをライブラリ内のバージョンに置き換えます。階層モードの詳細については、リンクの階層のプッシュまたは復元を参照してください。 |
propagateHierarchy | リンク階層内のリンク付きブロックに加えられたすべての変更を対応するライブラリ ブロックにそれぞれプッシュします。リンクをプッシュすると、ライブラリ内のブロックのバージョンはモデル内のバージョンに置き換えられます。階層モードの詳細については、リンクの階層のプッシュまたは復元を参照してください。 |
リンク付きブロックのリンク ステータスの取得と設定
モデル LibrariesDemo
には 4 つの Subsystem ブロックがあります。
load_system("LibrariesDemo.slx")
Subsystem ブロック Amplifier 1
のリンク ステータスを取得します。Amplifier 1
はリンク付きブロックでありません。
status_1 = get_param("LibrariesDemo/Amplifier 1",'LinkStatus')
status_1 = 'none'
Subsystem ブロック Amplifier 2
のリンク ステータスを取得します。Amplifier 2
はカスタム ライブラリ AmplifierLibrary
からのリンク付きブロックであり、リンク ステータスは 'resolved'
です。
status_2 = get_param("LibrariesDemo/Amplifier 2",'LinkStatus')
status_2 = 'resolved'
Subsystem ブロック Amplifier 3
のリンク ステータスを取得します。Amplifier 3
はカスタム ライブラリ LibA
からのリンク付きブロックであり、リンク ステータスはライブラリが指定のパスにないため 'unresolved'
です。
status_3 = get_param("LibrariesDemo/Amplifier 3",'LinkStatus')
Warning: Cannot find library called 'LibA'.
status_3 = 'unresolved'
Subsystem ブロック Amplifier 4
のリンク ステータスを取得します。Amplifier 4
はカスタム ライブラリ AmplifierLibrary
からのリンク付きブロックであり、リンク ステータスは 'inactive'
です。
status_4 = get_param("LibrariesDemo/Amplifier 4",'LinkStatus')
status_4 = 'inactive'
Amplifier 4
のリンクを復元します。
set_param("LibrariesDemo/Amplifier 4",'LinkStatus','restore') status_4 = get_param("LibrariesDemo/Amplifier 4",'LinkStatus')
status_4 = 'resolved'
Subsystem ブロック Amplifier 2
内の Gain ブロックのリンク ステータスを取得します。この Gain ブロックはライブラリ ブロック内にあり、ライブラリ ブロック自体への直接のリンクではないため、Gain ブロックのリンク ステータスは 'implicit'
になります。
status_5 = get_param("LibrariesDemo/Amplifier 2/Gain",'LinkStatus')
status_5 = 'implicit'
リンク ステータスを取得するときの考慮事項
LinkStatus
パラメーターを使用してブロックのリンク ステータスをクエリすると、古くなったブロックのリンクもすべて関連付けられます。get_param
が子ブロックのコールバック コードで使用されている場合、リンク ステータスのクエリにはStaticLinkStatus
パラメーターを使用することをお勧めします。StaticLinkStatus
は古くなったリンクの関連付けを一切行わないためです。ライブラリ リンク内にあるブロックに対して
get_param
関数を使用すると、必要なすべてのリンクが Simulink® で自動的に関連付けられます。この処理には、ライブラリの一部の読み込みや関連付けられている任意のコールバック関数の実行が含まれることがあります。