Stateflow® API состоит из объектов, которые представляют графические и неграфические объекты диаграммы Stateflow. Например, API возражает Stateflow.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 и найти ее children (объекты, которые она содержит), или ее parent (объект, который содержит ее). Например, в этом графике, утвердите 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 чтобы получить доступ к нескольким объектам, порядок объектов в массиве зависит от порядка, в котором вы выбираете объекты.