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