API Stateflow ® состоит из объектов, представляющих графические и неграфические объекты диаграммы Stateflow. Например, объекты APIStateflow.State и Stateflow.Transition представляют состояния и переходы в диаграмме 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')
После доступа к объекту API можно перемещаться по иерархии Stateflow и находить его дочерние объекты (содержащиеся в нем объекты) или родительские объекты (содержащиеся в нем объекты). Например, на этой диаграмме состояние A является родительским состоянием нижестоящих состояний A1 и A2. Вы можете использовать find и up функции для перехода от диаграммы к состоянию A и его потомков, и обратно из дочерних состояний в родительское состояние и диаграмму. Дополнительные сведения об этом примере см. в разделе Создание диаграмм с помощью сценария MATLAB.

Чтобы найти нижестоящие элементы объекта API, вызовите find функция. По умолчанию find функция находит объекты на всех глубинах оболочки внутри объекта. Например, предположим, что ch является Stateflow.Chart объект, соответствующий диаграмме в предыдущем примере. Вызов find функция для поиска всех состояний в ch возвращает массив с тремя 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'Аналогично, найти все состояния в A, вы можете позвонить find функции на Stateflow.State объект sA. В этом случае поиск включает нулевой уровень содержания, который является самим искомым объектом:
states = find(sA,'-isa','Stateflow.State'); 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, вызовите up функция. Например, предположим, что sA1 является Stateflow.State объект, соответствующий состоянию A1 в предыдущем примере. Вызов up функция на sA1 возвращает значение Stateflow.State объект, соответствующий состоянию A:
parent = up(sA1); parent.Name
ans =
'A'Аналогично, вызов up функция на parent возвращает значение Stateflow.Chart объект, соответствующий диаграмме:
grandparent = up(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 для доступа к нескольким объектам порядок объектов в массиве зависит от порядка выбора объектов.