Динамическая подсистема маскированная

Позвольте блоку библиотеки изменять свое содержимое

Этот флажок включен, только если подсистема маскированная находится в библиотеке. Проверка этой опции позволяет блочному коду инициализации изменять содержимое подсистемы маскированной (то есть, это позволяет коду добавить или удалить блоки и установить параметры тех блоков). В противном случае ошибка сгенерирована, когда блок библиотеки маскированный пытается изменить свое содержимое в любом случае. Чтобы установить эту опцию в подсказке MATLAB®, выберите блок самоизменения и введите следующую команду.

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

Затем сохраните блок.

Создайте маски самоизменения для блоков библиотеки

Можно создать замаскированные блоки библиотеки, которые могут изменить их структурное содержимое. Эти маски самоизменения позволяют вам:

  • Измените содержимое подсистемы маскированной на основе параметров в диалоговом окне маски или когда подсистема будет первоначально перетащена из библиотеки в новую модель.

  • Отличайтесь количество портов на многопортовом Блоке s-function, который находится в библиотеке.

Создание самоизменения масок Используя редактор маски

Создать маску самоизменения с помощью Редактора Маски:

  1. Разблокируйте библиотеку (см. Блокировку и Разблокируйте Библиотеки).

  2. Щелкните правой кнопкой по блоку по библиотеке.

  3. Выберите Mask> Edit Mask. Редактор Маски открывается.

  4. В редакторе Инитиэлизэйшне Маски панель выберите блок библиотеки Allow, чтобы изменить его опцию содержимого.

  5. Введите код, который изменяет подсистему маскированную в панели Инициализации маски.

    Не вводите код, который структурно изменяет подсистему маскированную в диалоговом обратном вызове параметра (см., Добавляет Код Маски). Выполнение так инициировало ошибку, когда вы редактируете параметр.

  6. Нажмите Apply, чтобы применить изменение или OK, чтобы применить изменение и закрыть Редактор Маски.

  7. Заблокируйте библиотеку.

Создание самоизменения масок из командной строки

Создать маску самоизменения из командной строки:

  1. Разблокируйте библиотеку с помощью следующей команды:

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

  2. Укажите, что блок самоизменяет при помощи следующей команды:

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

    где block_name является полным путем к блоку в библиотеке.

Создайте маску самоизменения

Библиотека selfModifying_example содержит подсистему маскированную, которая изменяет ее количество входных портов на основе выбора, сделанного в диалоговом окне маски подсистемы.

  1. Нажмите Diagram> Unlock Library.

  2. Щелкните правой кнопкой по подсистеме и выберите Mask> Edit Mask. Редактор Маски открывается.

  3. Панель Mask Editor Parameters & Dialog задает параметр numIn, который хранит значение для Количества опции импорта. Этот обратный вызов диалогового окна маски добавляет или удаляет Входные порты в подсистеме маскированной на основе выбора, сделанного в Количестве списка импорта.

  4. Чтобы позволить обратному вызову диалогового окна функционировать правильно, блок библиотеки Allow, чтобы изменить его опцию содержимого на редакторе Инитиэлизэйшне Маски, панель выбрана. Если эта опция не выбрана, копия блока библиотеки не могла бы изменить их структурное содержимое. Кроме того, изменение выбора в Количестве списка импорта произвело бы ошибку.

Оцените блоки при самоизменении маски

Этот пример показывает, как обеспечить Simulink®, чтобы оценить блоки в самоизменении масок.

Simulink оценивает элементы моделей, содержащих маски в следующем порядке:

  1. Диалоговое окно Mask

  2. Код инициализации маски

  3. Блоки или замаскированные подсистемы под маской

Предположим блок под названием myBlock в подсистеме, которую mySubsys, замаскированный маской самоизменения, зависит от параметра маски myParam, чтобы обновить сам.

myParam представлен пользователю через диалоговое окно Mask Parameters. mySubsys обновляется через код MATLAB, написанный в панели Инициализации Маски.

В этой модели последовательность обновлений следующие:

  1. Вы изменяете myParam через диалоговое окно маски.

  2. Код инициализации маски получает это изменение и изменяет mySubsys под маской.

  3. myBlock, который находится под mySubsys, изменяет себя на основе изменения в myParam.

В этой последовательности Simulink не оценивает myBlock, который находится под mySubsys, когда код инициализации маски выполняется. Вместо этого Simulink только оценивает и обновляет подсистему маскированную mySubsys. Между тем myBlock остается неизмененным.

Можно обеспечить Simulink, чтобы оценить такие блоки ранее при помощи метода Simulink.Block.eval в коде инициализации подсистемы маскированной.

Simulink.Block.eval('mySubsys/myBlock');

Смотрите также

| | | |

Была ли эта тема полезной?