Закройте все модели.
Введите функциональный sfnew
чтобы создать новую, неназванную модель с новым Stateflow® строят диаграмму в нем.
MATLAB® является языком действия по умолчанию графика, который вы создаете с sfnew
. Чтобы открыть новый график C или изменить язык действия по умолчанию, смотрите, Изменяют Язык Действия для Графика.
У вас есть только одна модель Simulink® в памяти. Не открывайте график. Можно теперь получить доступ к API Machine
объект, который представляет саму модель.
к Machine
ОбъектВ API Stateflow каждая модель вы создаете или загружаете в память, представлен объектом типа Machine
. Прежде, чем получить доступ к диаграмме Stateflow вы создали в предыдущем разделе, необходимо сначала соединиться с его Machine
объект. Однако в API Stateflow, всем Machine
объекты содержатся в API Stateflow Root
объект, таким образом, необходимо использовать Root
объект возвращен функциональным sfroot
получить доступ к Machine
объект:
Используйте эту команду, чтобы получить указатель на Root
объект:
rt = sfroot;
Используйте указатель на Root
объект, rt
, найти Machine
объект, представляющий вашу новую неназванную модель Simulink и присвоение это указатель m
в этой команде:
m = rt.find('-isa','Stateflow.Machine');
Если вместо одной модели существует несколько открытых моделей, эта команда возвращает массив различного Machine
объекты, к которым можно получить доступ посредством индексации (m(1)
, m(2)
, и т.д.), можно идентифицировать определенный Machine
объект с помощью свойств каждой модели, особенно Name
свойство, которое является именем модели. Например, можно использовать Name
свойство найти Machine
возразите названному myMachine
с этой командой:
m = rt.find('-isa', 'Stateflow.Machine', '-and', ... 'Name', 'myMachine');
Однако, поскольку у вас теперь есть только одна загруженная модель, указатель на объект m
в команде для шага 2 возвращает Machine
объект для модели, которую вы только создали. Вы теперь готовы использовать m
получить доступ к пустому графику так, чтобы можно было начать заполнять его объектами Stateflow.
В доступе к Объекту Машины вы получили доступ к Machine
объект, содержащий ваш новый график, чтобы возвратить указатель на Machine
возразите для своей новой модели, m
. Выполните эти шаги, чтобы получить доступ к новому графику:
Доступ к новому Chart
объект и присвоение это к переменной ch
рабочей области можно следующим образом:
ch = m.find('-isa','Stateflow.Chart');
В предыдущей команде, find
метод Machine
объект m
возвращает массив всех графиков, принадлежащих той модели. Поскольку вы создали только один график, результатом этой команды является график, который вы создали. Если вы создали несколько графиков, find
метод возвращает массив графиков, к которым вы могли получить доступ посредством индексации (например, ch(1)
, ch(2)
, и так далее).
Можно также использовать обозначение стандартной функции вместо записи через точку для предыдущей команды. В этом случае первым аргументом является Machine
указатель на объект, m
.
ch = find(m, '-isa','Stateflow.Chart');
Откройте диаграмму Stateflow с этой командой API:
ch.view;
Предыдущая команда вызывает view
метод Chart
возразите, чьим указателем является ch
. Заданный график появляется. Другие объекты API Stateflow имеют view
методы также.
В предыдущем разделе вы создали указатель на новый Chart
объект, ch
. Продолжите путем создания новых объектов для графика с помощью этих шагов:
Создайте новое состояние в Chart
объект ch
с этой командой:
sA = Stateflow.State(ch);
Эта команда является конструктором API Stateflow для нового состояния в который Stateflow.State
тип объекта для состояния, ch
переменная рабочей области, содержащая указатель на вышестоящую диаграмму нового состояния и sA
рабочая область является переменной, чтобы получить возвращенный указатель на новое состояние.
Пустое состояние теперь появляется в верхнем левом угле графика.
Используйте ch.view
команда, чтобы принести график к переднему плану для просмотра.
Присвойте имя и положение к новому состоянию путем присвоения значений свойствам нового State
объект можно следующим образом:
sA.Name = 'A'; sA.Position = [50 50 310 200];
Создайте новые состояния, A1 и A2 в утверждают A и присваивают их свойства с этими командами:
sA1 = Stateflow.State(ch); sA1.Name = 'A1'; sA1.Position = [80 120 90 60]; sA2 = Stateflow.State(ch); sA2.Name = 'A2'; sA2.Position = [240 120 90 60];
Эти команды создают и используют переменные sA
рабочей области,
sA1
, и sA2
как обрабатывает к новым состояниям, которые теперь появляются следующими.
Создайте переход от 3-часового положения (правая сторона) A1 состояния к 9-часовой позиции (левая сторона) A2 состояния с этими командами:
tA1A2 = Stateflow.Transition(ch); tA1A2.Source = sA1; tA1A2.Destination = sA2; tA1A2.SourceOClock = 3; tA1A2.DestinationOClock = 9;
Переход теперь появляется как показано.
Добавьте метку E1
к переходу от A1
состояния утверждать
A2
с этой командой:
tA1A2.LabelPosition = [180 140 0 0]; tA1A2.LabelString = 'E1';
График теперь выглядит так:
Состояние и метки перехода в этом графике являются простыми короткими метками. Чтобы ввести более комплексные многострочные метки, смотрите, Вводят Многострочные Метки в состояния и Переходы. Метки для переходов также имеют LabelPosition
свойство можно использовать, чтобы переместить метки в лучшие местоположения.
Используйте эти команды, чтобы переместить метку для перехода от A1 до A2 направо на 5 пикселей:
pos = tA1A2.LabelPosition; pos(1) = pos(1)+5; tA1A2.LabelPosition = pos;
Закончите свой новый график путем добавления переходов по умолчанию к состояниям A и A1 с исходными точками на 20 пикселей выше и 10 пикселей слева от главной средней точки каждого состояния:
% Add a default transition to state A dtA = Stateflow.Transition(ch); dtA.Destination = sA; dtA.DestinationOClock = 0; xsource = sA.Position(1)+sA.Position(3)/2; ysource = sA.Position(2)-30; dtA.SourceEndPoint = [xsource ysource]; dtA.MidPoint = [xsource ysource+15]; % Add a default transition to state A1 dtA1 = Stateflow.Transition(ch); dtA1.Destination = sA1; dtA1.DestinationOClock = 0; xsource = sA1.Position(1)+sA1.Position(3)/2; ysource = sA1.Position(2)-30; dtA1.SourceEndPoint = [xsource ysource]; dtA1.MidPoint = [xsource ysource+15];
Ваш полный график выглядит так:
Сохраните модель с новым графиком к текущей папке как myModel
:
sfsave(m.Name, 'myModel');
Эта команда использует Name
свойство Объекта модели m
для сохранения модели под новым именем.
Stateflow.State
| Stateflow.Transition
| find
| sfroot
| sfsave
| view