Масштабные функциональные блоки Simulink в подсистемах

Область возможностей Simulink® функция определяется в ее родительской подсистеме в контексте модели. Если вы помещаете функцию в любой Subsystem блок, доступ к функции извне модели по умолчанию запрещен. В обоих случаях параметр Trigger блока Function visibility равен scoped. Блок Simulink Function может быть расположен:

  • В виртуальной подсистеме - вызов функции из содержащей Subsystem иерархии блоков без определения имени функции или вызов функции из-за пределов подсистемы путем определения имени функции с именем блока подсистемы.

  • В атомарной или невирусной подсистеме - вызов функции из содержащей Subsystem иерархии блоков без определения имени функции. Доступ к функции извне подсистемы запрещен.

Решение для функции иерархически

Размещение блока Simulink Function в любом Subsystem блоке (виртуальном или атомарном) ограничивает доступ к функции и удаляет имя функции из глобального пространства имен. Когда вызывающий функцию абонент разрешает функцию иерархически, он ищет функцию с помощью следующих правил:

  • Правило разрешения 1: Используется ли блок Simulink Function в текущем Subsystem блоке с функцией вызывающего абонента?

  • Правило разрешения проблем 2. Если функция scoped не находится в текущей подсистеме, является ли блок Simulink Function scoped в родительском элементе или дедушке Subsystem заблокировать один или несколько уровней выше вызывающего функции или в родительской модели?

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

  • Вызывающий абонент функции находится на том же иерархическом уровне, что и функция. В этом случае вызывающий функцию абонент находит функцию scoped в текущей подсистеме (Правило разрешения проблем 1).

  • Вызывающий функцию абонент, расположенный в Subsystem, блокирует один или несколько Subsystem уровней блоков ниже иерархического уровня Simulink Function блока. Иерархия вызывающих функций не может включать блок Model, так как вызывающий функцию не может пересекать контуры моделей-ссылок. В этом случае вызывающий функцию абонент не нашел функцию scoped в текущей подсистеме, но обнаружил функцию в родительской подсистеме (Правило разрешения проблем 2).

    В этом случае вызывающий функцию не нашел функцию scoped в текущей подсистеме, но нашел функцию в родительской модели (Правило разрешения проблем 2).

  • Можно также вызвать блок Simulink Function в блоке Subsystem без проверки из блока MATLAB Function или Stateflow® график внутри блока.

Разрешение на функцию по проверке

Когда вы помещаете Simulink Function блок в блок виртуального Subsystem, имя функции не отображается за пределами подсистемы. Однако можно вызвать функцию, определив имя функции с Subsystem именем блока. Когда вызывающий функцию абонент разрешается к квалифицированной функции иерархически, он ищет блок виртуального Subsystem, содержащий функцию, используя следующие правила:

  • Правило разрешения проблем 1: Является ли блок виртуального Subsystem в текущем компоненте с вызывающим абонентом функции? Компонент может быть блоком Subsystem или моделью.

  • Правило разрешения проблем 2. Если виртуального Блока Subsystem нет в текущем компоненте, является ли блок виртуального Subsystem в компоненте родительского элемента или бабушки и дедушки на один или несколько уровней выше вызывающего функции?

Если вызывающий функцию абонент разрешает блоку виртуального Subsystem с помощью функции scoped, можно вызвать функцию, определив имя функции:

  • Вызывающий абонент функции расположен вне подсистемы на один иерархический уровень выше функции. В этом случае вызывающий функцию абонент находит блок Subsystem с функцией scoped в текущей модели (Правило разрешения проблем 1).

  • Вызов функции из диаграммы Stateflow вне подсистемы на один иерархический уровень выше функции. В этом случае вызывающий функцию абонент находит блок Subsystem с функцией scoped в текущей модели (Правило разрешения проблем 1).

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

  • Вызывающий функцию абонент находится в другой подсистеме на одном или нескольких уровнях ниже иерархического уровня функции. В этом случае вызывающий функцию абонент не обнаружил блок Subsystem с функцией scoped в текущей подсистеме, но обнаружил блок Subsystem в модели grands и directory (Правило разрешения проблем 2).

    Иерархия вызывающих функций не может включать блок Model, так как вызывающий функцию не может пересекать контуры моделей-ссылок.

См. также

Блоки

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте