Доступ к объектам в вашей диаграмме Stateflow

Объекты в Stateflow® API представляет графические и неграфические объекты диаграммы Stateflow. Например, API возражает Stateflow.State и Stateflow.Transition представляйте состояния и переходы в диаграмме Stateflow. Для получения дополнительной информации см. Обзор API Stateflow.

Найдите объекты в графике

С find функция, можно определить местоположение объекта API путем определения критериев поиска. Можно объединить критерии, такие как:

  • Тип объекта

  • Имя свойства или функции

  • Имя свойства и значение

Например, эта команда ищет Simulink.Root возразите и возвращает каждый Stateflow.State объект с именем 'On':

onState = find(sfroot,'-isa','Stateflow.State','Name','On')

Если больше чем один объект соответствует критериям поиска, find возвращает массив квалификации объектов. Например, если больше чем один график открыт, эта команда возвращает массив Stateflow.Chart объекты:

chartArray = find(sfroot,'-isa','Stateflow.Chart')

Найдите объекты на определенных уровнях включения

По умолчанию, find функция находит объекты на всех глубинах включения в объекте. Например, предположите тот ch Stateflow.Chart объект, который соответствует этому графику. График содержит родительское состояние A с двумя дочерними состояниями, A1 и A2. Для получения дополнительной информации об этом примере смотрите, Создают Графики при помощи СКРИПТА MATLAB.

Stateflow chart with a hierarchy of states. The outer state is called A. It contains two inner states called A1 and A2.

Вызов find функционируйте, чтобы найти, что все состояния в этом графике возвращают массив с тремя Stateflow.State объекты:

states = find(ch,'-isa','Stateflow.State');
get(states,'Name')
ans =

  3×1 cell array

    {'A'}
    {'A1'}
    {'A2'}

Чтобы ограничить максимальную глубину включения поиска, используйте '-depth' аргумент как часть ваших критериев поиска. Например, чтобы найти единственный Stateflow.State объект на первом уровне включения в ch, Введите:

sA = find(ch,'-isa','Stateflow.State','-depth',1);
sA.Name
ans =

    'A'

Точно так же можно вызвать find функционируйте, чтобы искать состояния на первом уровне включения в Stateflow.State объект sA. В этом случае поиск включает нулевой уровень включения, которое является самим искавшим объектом:

states = find(sA,'-isa','Stateflow.State','-depth',1);
get(states,'Name')
ans =

  3×1 cell array

    {'A'}
    {'A1'}
    {'A2'}

Исключить A состояния от результатов поиска вызовите MATLAB® функция setdiff:

childStates = setdiff(states,sA);
get(childStates,'Name')
ans =

  2×1 cell array

    {'A1'}
    {'A2'}

Переместитесь по иерархии Stateflow

После того, как вы получите доступ к объекту API, можно использовать getChildren и getParent функции, чтобы перейти через иерархию Stateflow и идентифицировать дочерние элементы, которые объект содержит или родительский элемент, который содержит объект.

Найдите дочерние объекты

Чтобы найти дочерние элементы объекта API, вызовите getChildren функция. Например, предположите тот ch Stateflow.Chart объект, который соответствует графику в предыдущем примере. Вызов getChildren функция на ch возвращает массив, который содержит Stateflow.State возразите и Stateflow.Transition объект.

children = getChildren(ch);
arrayfun(@class,children,UniformOutput=false)
ans =

  2×1 cell array

    {'Stateflow.State'     }
    {'Stateflow.Transition'}

Первым элементом в массиве является Stateflow.State объект, который соответствует A состояния.

state = children(1);
state.Name
ans =

    'A'

Вторым элементом в массиве является Stateflow.Transition объект, который соответствует переходу по умолчанию в A состояния.

children(2).Source
ans =

     []
children(2).Destination.Name
ans =

    'A'

Точно так же вызов getChildren функция на состоянии возвращает массив, который содержит два Stateflow.State объекты и два Stateflow.Transition объекты.

grandchildren = getChildren(state);
arrayfun(@class,grandchildren,UniformOutput=false)
ans =

  4×1 cell array

    {'Stateflow.State'     }
    {'Stateflow.State'     }
    {'Stateflow.Transition'}
    {'Stateflow.Transition'}

Первыми и вторыми элементами в этом массиве является Stateflow.State объекты, которые соответствуют состояниям A1 и A2.

grandchildren(1).Name
ans =

    'A1'
grandchildren(2).Name
ans =

    'A2'

Третьи и четвертые элементы в grandchildren Stateflow.Transition объекты, которые соответствуют переходам в состояния A1 и между A1 состояния и A2, соответственно.

grandchildren(3).Source
ans =

     []
grandchildren(3).Destination.Name
ans =

    'A1'
grandchildren(4).Source.Name
ans =

    'A1'
grandchildren(4).Destination.Name
ans =

    'A2'

Найдите родительский объект

Чтобы найти родительский элемент объекта API, вызовите getParent функция. Например, предположите тот sA1 Stateflow.State объект, который соответствует A1 состояния в предыдущем примере. Вызов getParent функция на sA1 возвращает Stateflow.State объект, который соответствует A состояния:

parent = getParent(sA1);
parent.Name
ans =

    'A'

Точно так же вызов getParent функция на parent возвращает Stateflow.Chart объект, который соответствует графику:

grandparent = getParent(parent);
grandparent.Name
ans =

    'Chart'

Получите недавно выбранные объекты

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

Например, предположите, что вы выбираете переход от A1 состояния утверждать A2 в предыдущем примере. Вызов sfgco возвращает соответствующий Stateflow.Transition объект:

tr = sfgco;
str = ['Transition from ' tr.Source.Name ' to ' tr.Destination.Name]
str =

    'Transition from A1 to A2'

Точно так же, если вы одновременно выбираете три состояния в графике, вызывая sfgco возвращает массив Stateflow.State объекты.

states = sfgco;
get(states,'Name')
ans =

  3×1 cell array

    {'A'}
    {'A1'}
    {'A2'}

Примечание

Когда вы используете sfgco чтобы получить доступ к нескольким объектам, порядок объектов в массиве зависит от порядка, в котором вы выбираете объекты.

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

Функции

Объекты

Похожие темы