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

Stateflow® API состоит из объектов, которые представляют графические и неграфические объекты диаграммы Stateflow. Для примера объекты API Stateflow.State и Stateflow.Transition представление состояний и переходов на диаграмме Stateflow.

Поиск объектов на графике

С find вы задаете критерии поиска для объекта API, который хотите найти. Можно объединить такие критерии, как:

  • Тип объекта

  • Имя свойства или функции

  • A имени свойства и значение

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

См. также

Функции

Объекты

Похожие темы