Область возможностей 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, так как вызывающий функцию не может пересекать контуры моделей-ссылок.