Доступ к объектам в вашей диаграмме Stateflow

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.

Stateflow chart with a hierarchy of states. The outer state is called A. It contains two inner states called A1 and A2.

Найдите дочерние объекты

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

Смотрите также

Функции

Объекты

Похожие темы