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

Разрешить библиотечному блоку изменять его содержимое

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

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

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

Создайте самомодифицирующиеся маски для библиотечных блоков

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

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

  • Варьируйте количество портов в мультипортовом блоке S-Function, который находится в библиотеке.

Simulink® запускает код инициализации маски для самостоятельно изменяемого библиотечного блока при загрузке блока. Если код инициализации маски управляет количеством входных/выходных портов для блока, отметьте блок как самомодифицируемый. В противном случае код маски-инициализации не будет выполняться и не будет устанавливать нужное количество портов, что отсоединит блок.

Создание самомодифицирующихся масок с помощью редактора масок

Чтобы создать самомодифицирующуюся маску с помощью редактора масок:

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

  2. Выберите блок в библиотеке.

  3. На вкладке Block, в группе Mask, нажмите Edit Mask. Откроется Редактор маски.

  4. На панели Initialization Редактор выберите опцию Allow library block to modify its contents.

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

    Не вводите код, который структурно изменяет маскированную подсистему в диалоговом коллбэке параметра (см. «Добавление кода маски»). Это приводит к ошибке при редактировании параметра.

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

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

Создание самомодифицируемых масок из командной строки

Чтобы создать самомодифицирующуюся маску из командной строки:

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

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

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

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

    где block_name - полный путь к блоку в библиотеке.

Создайте самомодифицирующуюся маску

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

  1. В окне Library, на вкладке Library, нажмите Locked Library, чтобы разблокировать библиотеку.

  2. На вкладке Subsystem Block, в группе Mask, нажмите Edit Mask. Откроется Редактор маски.

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

  4. Чтобы разрешить правильную работу коллбэка в диалоговом окне, на панели Initialization редактора масок выбрана опция Allow library block to modify its contents. Если эта опция не выбрана, копия библиотечного блока не может изменить ее структурное содержимое. Кроме того, изменение выбора в списке Number of inports приведет к ошибке.

Передача значений параметров маски из родительской подсистемы в дочерний блок

Можно передать значения параметров маски от родительской подсистемы дочернему блоку тремя способами:

  • Использование продвижения параметра.

  • Использование кода инициализации маски. Это делается при помощи set_param команда на дочернем блоке.

  • Если параметры дочерних блоков ссылаются на имя родительского параметра маски. Это применимо только к параметрам редактирования.

Похожие темы