Main Content

动态封装子系统

允许库模块修改其内容

仅当封装子系统位于库中时,才会启用此复选框。选中此选项将允许模块初始化代码修改封装子系统的内容(即,它允许代码添加或删除模块以及设置这些模块的参数)。否则,当封装库模块尝试以任何方式修改其内容时,将会生成错误。要在 MATLAB® 提示符下设置此选项,请选择自修改模块并输入以下命令。

set_param(gcb, 'MaskSelfModifiable', 'on');

然后保存模块。

为库模块创建自修改封装

您可以创建能修改其结构性内容的封装库模块。这些自修改封装使您能够:

  • 基于封装对话框中的参数,或者在最初将子系统从库拖到新的模型中时,修改封装子系统的内容。

  • 改变位于库中的多端口 S-Function 模块上的端口数目。

在您加载模块时,Simulink® 对可自修改的库模块运行封装初始化代码。如果封装初始化代码控制模块的输入/输出端口数目,请将该模块标记为可自修改。否则,封装初始化代码将不会执行,也不会设置正确的端口数目数量,这将断开模块连接。

使用封装编辑器创建自修改封装

要使用封装编辑器创建自修改封装:

  1. 解锁库(请参阅锁定和解锁库)。

  2. 选择库中的模块。

  3. 模块选项卡的封装组中,点击编辑封装。封装编辑器随即打开。

  4. 在封装编辑器的代码窗格中,选择允许库模块修改其内容选项。

  5. 在封装的初始化窗格中输入用于修改封装子系统的代码。

    不要在对话框参数回调中输入会修改封装子系统结构的代码(请参阅添加封装代码)。在您编辑该参数时,执行此操作会触发错误。

  6. 点击应用以应用更改或点击确定以应用更改并关闭封装编辑器。

  7. 锁定库。

从命令行创建自修改封装

要从命令行创建自修改封装:

  1. 使用以下命令解锁库:

    set_param(gcs,'Lock','off')

  2. 使用以下命令指定模块是自修改模块:

    set_param(block_name,'MaskSelfModifiable','on')

    其中 block_name 是库中模块的完整路径。

创建自修改封装

selfModifying_example 包含一个封装子系统,该子系统基于子系统封装对话框中的所选内容修改其输入端口数目。

  1. 在“库”窗口中,在选项卡上,点击锁定的库以解锁库。

  2. Subsystem 模块选项卡上的封装组中,点击编辑封装。封装编辑器随即打开。

  3. 封装编辑器的参数和对话框窗格中定义了一个参数 numIn,用于存储输入端口数选项的值。此封装对话框回调将基于输入端口数列表中的所选内容,在封装子系统内添加或删除输入端口。

  4. 为了让对话框回调正常工作,选择了封装编辑器代码窗格上的允许库模块修改其内容选项。如果不选择此选项,库模块副本将无法修改其结构性内容。此外,更改输入端口数列表中的所选内容也会出现错误。

将封装参数值从父级子系统传递给子模块

您可以通过三种方式将封装参数值从父级子系统传递给子模块:

  • 使用参数提升。

  • 使用封装初始化代码。这是通过对子模块使用 set_param 命令来完成的。

  • 让子模块参数引用父封装参数名称。这仅适用于编辑参数。

相关主题