Создание объектов 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.');