以编程方式控制链接模块
查找和修改链接模块的库详细信息
使用 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 参数表示来自 Simulink® 库的 Check ↵Static Range 是 CheckRange 模块的父级库模块。要将 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 函数更改同一引用模块的属性。对于此类建模模式,您可以使用 Variant 模块或在引用模块的父模块的封装初始化代码或回调代码中设置 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 | 将链接层次结构中所有禁用的链接还原到其对应的库模块,并将模型中链接模块的版本替换为库中的版本。有关层次结构模式的详细信息,请参阅Pushing or Restoring Link Hierarchies。 |
propagateHierarchy | 将对链接层次结构中的链接模块所做的所有更改推送回其各自的库模块。推送链接会将库中的模块版本替换为模型中的版本。有关层次结构模式的详细信息,请参阅Pushing or Restoring Link Hierarchies。 |
获取和设置链接模块的链接状态
一个模型 LibrariesDemo 有四个 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 是链接状态为 'unresolved' 的自定义库 LibA 中的链接模块,因为该库不在指定的路径中。
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 模块的链接状态为 'implicit',因为 Gain 模块位于库模块内,并且不直接链接到库模块本身。
status_5 = get_param("LibrariesDemo/Amplifier 2/Gain",'LinkStatus')
status_5 = 'implicit'
获取链接状态时的注意事项
当您使用
LinkStatus参数查询模块的链接状态时,任何过时的模块链接也会被解析。在子模块的回调代码中使用
get_param时,推荐使用StaticLinkStatus参数来查询链接状态,因为StaticLinkStatus不会解析任何过时的链接。如果对位于库链接内的模块使用
get_param函数,Simulink® 会自动解析任何必要的链接。此过程可能涉及加载部分库和执行任何相关联的回调函数。