Доступ к объектам в вашей диаграмме 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.

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

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

| | |

Похожие темы