Вы управляете объектами Stateflow® API через названные указатели переменных MATLAB®. Если у вас есть указатель на объект API, можно изменить свойства объекта, вызвать методы на объекте и добавить новые объекты в объекте.
Существует несколько способов получить указатели для объектов API в графике. Например, можно использовать find и up методы, чтобы пересечь иерархию Stateflow. Можно также вызвать sfgco функция, чтобы получить последний раз выбранные объекты в графике.
С find метод, вы задаете критерии поиска для объекта API, которого вы хотите определить местоположение. Можно объединить критерии, такие как:
Тип объекта
Имя свойства или метода
Имя свойства и значение
Например, эта команда перерывает Root объект rt и возвращает каждый State объект с именем 'On':
onState = rt.find('-isa','Stateflow.State','Name','On')
Если больше чем один объект соответствует критериям поиска, find возвращает массив квалификации объектов. Например, если больше чем один график открыт, эта команда возвращает массив всего Chart объекты:
chartArray = rt.find('-isa','Stateflow.Chart')
Если у вас есть указатель на объект API, можно перейти через иерархию Stateflow и найти объекты, которые она содержит (ее children) или объект, который содержит ее (ее parent). Например, в этом графике, утвердите A родительское состояние дочернего элемента, утверждает A1 и A2.

Чтобы найти дочерние элементы объекта API, вызовите find метод. По умолчанию, find метод находит объекты на всех глубинах включения в объекте. Например, предположите тот ch указатель на график в предыдущем примере. Вызов find метод, чтобы найти все состояния в ch возвращает вектор из указателей на три состояния:
states = ch.find('-isa','Stateflow.State'); states.get('Name')
ans =
3×1 cell array
{'A'}
{'A1'}
{'A2'}Чтобы ограничить максимальную глубину включения поиска, используйте '-depth' аргумент как часть ваших критериев поиска. Например, чтобы найти единственный State объект на первом уровне включения в ch, Введите:
sA = ch.find('-isa','Stateflow.State','-depth',1); sA.Name
ans =
'A'Точно так же найти все состояния в A, можно вызвать find метод на этом State объект. В этом случае поиск включает нулевой уровень включения, которое является самим искавшим объектом:
states = sA.find('-isa','Stateflow.State'); states.get('Name')
ans =
3×1 cell array
{'A'}
{'A1'}
{'A2'}Исключить A состояния от результатов поиска вызовите функцию MATLAB setdiff:
states = setdiff(states,sA);
states.get('Name')ans =
2×1 cell array
{'A1'}
{'A2'}Чтобы найти родительский элемент объекта API, вызовите up метод. up метод возвращает указатель на объект родительского контейнера объекта. Например, предположите тот sA1 указатель должен утвердить A1 в предыдущем примере. Вызов up метод на sA1 возвращает указатель на A состояния:
pA1 = sA1.up; pA1.Name
ans =
'A'Точно так же вызов up метод на pA1 возвращает указатель на график:
ppA1 = pA1.up; ppA1.Name
ans =
'Chart'
Можно получить последний раз выбранные объекты в графике путем вызова sfgco функция. Эта функция возвращает указатель или вектор из указателей в зависимости от вашего выбора.
Например, рассмотрите график в предыдущем примере. Предположим, что вы выбираете переход от A1 состояния утверждать A2. Вызов sfgco возвращает указатель на соответствующий Transition объект:
tr = sfgco; str = ['Transition from ' tr.Source.Name ' to ' tr.Destination.Name]
str =
'Transition from A1 to A2'Точно так же, если вы одновременно выбираете три состояния в графике, вызывая sfgco возвращает вектор из указателей на соответствующий State объекты.
states = sfgco;
states.get('Name')ans =
3×1 cell array
{'A'}
{'A1'}
{'A2'}Примечание
Порядок State объекты в векторном states зависит от порядка, в котором вы выбираете состояния.