Доступ к существующим объектам Stateflow

Об указателях на объект Stateflow

Создание объектов Stateflow® через API Stateflow дает вам мгновенный указатель на недавно созданные объекты (см., Создают Объекты Stateflow). Можно также соединиться с объектами Stateflow, которые уже существуют, для которого у вас нет текущего указателя API.

Найдите объекты и свойства

Существует несколько методов объекта, которые вы используете, чтобы пересечь иерархию Stateflow, чтобы определить местоположение существующих объектов. Например, можно использовать find метод.

С find метод, вы задаете, что искать путем определения комбинаций этих типов информации:

  • Тип объекта найти

  • Имя свойства объекта найти и его значение

Этот пример перерывает Объект модели m возвратить каждый объект State с именем 'On'.

onState = m.find('-isa','Stateflow.State','-and','Name','On');

Если find команда находит больше чем один объект, который соответствует его спецификациям, это возвращает массив квалификации объектов. Этот пример возвращает массив всех графиков в вашей модели:

chartArray = m.find('-isa','Stateflow.Chart');

Используйте индексацию массива, чтобы получить доступ к отдельным свойствам и методам для графика. Например, если предыдущая команда возвращает три графика, эта команда возвращает свойство Name второго найденного графика:

name2 = chartArray(2).Name;

Совет

Чтобы получить доступ к свойству объекта Stateflow в соединенном графике библиотеки, выполнить одно из следующих действий:

  • Откройте модель библиотеки явным образом.

  • Просмотрите соединенную подсистему или блок в основной модели.

  • Скомпилируйте или симулируйте модель.

Выполнение одного из тех шагов загружает модель библиотеки в рабочую область Simulink®. Только открытие основной модели, которая относится к соединенной диаграмме Stateflow, не гарантирует, что API Stateflow может найти соединенный график.

По умолчанию, find команда находит объекты на всех глубинах включения в объекте. Это включает нулевой уровень включения, которое является самим искавшим объектом. Например, предположите тот A состояния, который соответствует объекту State sA, содержит два состояния, A1 и A2. Используйте find команда, которая находит все состояния в A:

states= sA.find('-isa','Stateflow.State');

Предыдущая команда находит три состояния: A, A1, и A2.

Примечание

Будьте осторожны при определении объектов, которые вы хотите найти с find метод для Корневого объекта или Объекта модели. Используя find метод для этих объектов может возвратить объекты Simulink, совпадающие с аргументами, которые вы задаете. Например, если rt указатель на Корневой объект, команда find('Name', 'ABC') может возвратить Подсистему Simulink или блокироваться, назвал ABC. Смотрите ссылку для find метод для полного описания метода и его параметров.

Найдите объекты на разных уровнях включения

Если вы находите конкретный объект в диаграмме Stateflow ее именем или другим свойством, вы можете хотеть найти объекты, которые оно содержит (дочерние элементы) или объект, который содержит его (родительский элемент). Чтобы найти дочерние объекты, используйте find метод. Чтобы найти родительский объект, используйте метод up.

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

find метод находит объекты на глубине включения в объекте, который вы задаете. Если вы хотите ограничить глубину поиска включения с find команда, используйте depth переключатель. Например, чтобы найти все объекты в объекте State sA на первом уровне включения используйте эту команду:

objArray = sA.find('-depth', 1);

Не забывайте, однако, что find команда всегда включает нулевой уровень включения, которое является самим объектом. Так, предыдущая команда также включает состояние в список найденных объектов. Однако можно исключить состояние из вектора объектов в objArray с MATLAB® функционируют setdiff можно следующим образом:

objArray = setdiff(objArray, sA);

Эта команда возвращает набор всех соединений на первом уровне включения в состоянии, который представлен объектом State sA:

juncArray = sA.find('-isa','Stateflow.Junction','-depth',1);

Эта команда возвращается, массив всех переходов в утверждают на всех уровнях включения:

transArray = sA.find('-isa','Stateflow.Transition');

Найдите родительский объект

up метод находит объект родительского контейнера любого данного объекта. Предположим, что у вас есть график, где состояние A содержит состояния A1 и A2. Кроме того, A1 состояния содержит A11 состояния. В примере sA11 является указателем на A11 состояния. Это означает это

>> pA11 = sA11.up;
>> pA11.Name

ans =

A1

возвращает указатель pA11 к A1 состояния, родительскому элементу A11 состояния, и

>> ppA11 = pA11.up;
>> ppA11.Name

ans =

A

возвращает указатель ppA11 к состоянию A, родительский элемент A1 состояния.

Получите недавно выбранные объекты

Можно получить последний раз выбранные объекты в графике при помощи sfgco функция. Эта функция возвращает указатели на объект или вектор указателей в зависимости от этих условий:

Если...Затем sfgco возвращается...
Нет никаких открытых графиковПустая матрица
Нет никакого списка выбораПо указателю графика последний раз кликают
Вы выбираете один объект в графикеОбработайте к выбранному объекту
Вы выбираете несколько объектов в графикеВектор указателей для выбранных объектов
Вы выбираете объекты в нескольких графикахУказатели последний раз выбранных объектов в последний раз выбранной диаграмме

Например, предположите, что вы запускаете sf_boiler модель и открытый Bang-Bang Controller график. Если вы выбираете Off состояние в графике, sfgco возвращается:

ans =
 
               Path: 'sf_boiler/Bang-Bang Controller/Heater'
                 Id: 20
            Machine: [1x1 Stateflow.Machine]
               Name: 'Off'
        Description: ''
        LabelString: [1x27 char]
           FontSize: 12
          ArrowSize: 8
          TestPoint: 0
              Chart: [1x1 Stateflow.Chart]
    BadIntersection: 0
          Subviewer: [1x1 Stateflow.Chart]
           Document: ''
                Tag: []
    RequirementInfo: ''
     ExecutionOrder: 0
      HasOutputData: 0
           Position: [31.7440 40.9730 214.1807 88.1000]
      Decomposition: 'EXCLUSIVE_OR'
               Type: 'OR'
         IsSubchart: 0
          IsGrouped: 1
              Debug: [1x1 Stateflow.StateDebug]

Доберитесь и набор свойства объектов

Если вы получаете конкретный объект, можно получить доступ к его свойствам непосредственно или через get метод. Например, вы получаете описание для объекта State s с одной из этих команд:

  • od = s.Description;

  • od = s.get('Description');

  • od = get(s, 'Description');

Вы изменяете свойства объекта непосредственно или через set метод. Например, вы изменяете описание объекта State s с одной из этих команд:

  • s.Description = 'This is the On state.';

  • s.set('Description', 'This is the On state.');

  • set(s, 'Description', 'This is the On state.');

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте