Объекты в 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.

Вызов 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'}После того, как вы получите доступ к объекту 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 чтобы получить доступ к нескольким объектам, порядок объектов в массиве зависит от порядка, в котором вы выбираете объекты.