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