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

Вы управляете объектами Stateflow® API через названные указатели переменных MATLAB®. Если у вас есть указатель на объект API, можно изменить свойства объекта, вызвать методы на объекте и добавить новые объекты в объекте.

Существует несколько способов получить указатели для объектов API в графике. Например, можно использовать find и up методы, чтобы пересечь иерархию Stateflow. Можно также вызвать sfgco функция, чтобы получить последний раз выбранные объекты в графике.

Найдите указатели на объекты API

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

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

| | |

Похожие темы