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