メインコンテンツ

リンク付きブロックのプログラムによる制御

リンク付きブロックのライブラリの詳細の検出と変更

モデルで参照されているライブラリ ブロックに関する情報を取得するには、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 ブロックであることを示しています。ReferenceBlockCheck ↵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 ブロックを選択すると、get_param(gcb,'LinkStatus') 関数は LinkStatusimplicit として返します。

inactive

ライブラリ ブロックへのリンクが無効になっています。

set_param 関数を使用して、LinkStatus を次の値のいずれかに設定できます。たとえば、ライブラリへのリンクを解除するには set_param(gcb,'LinkStatus','none') を使用します。

LinkStatus の値の設定説明
none

ライブラリ ブロックへのリンクを解除します。

breakWithoutHierarchy

リンクの入れ子にされた親階層に影響を与えずにリンクを解除します。

inactive

ライブラリ ブロックへのリンクを無効にします。

restore

ライブラリ ブロックへの非アクティブなリンクを復元し、モデル内のリンク付きブロックのバージョンをライブラリ内のバージョンに置き換えます。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® で自動的に関連付けられます。この処理には、ライブラリの一部の読み込みや関連付けられている任意のコールバック関数の実行が含まれることがあります。

参考

関数

ツール

トピック