В этом примере показано, как создать график Stateflow® при помощи прикладного программного интерфейса (API) Stateflow. API Stateflow является инструментом, чтобы создать или изменить диаграммы Stateflow посредством команд MATLAB®. Для получения дополнительной информации см. Обзор API Stateflow.
Эта диаграмма Stateflow представляет логику, лежащую в основе полупериодного выпрямителя. График содержит два состояния, пометил On
и Off
. В On
состояние, выходной сигнал графика y
равно входу x
. В Off
состояние, выходной сигнал обнуляется. Когда входной сигнал пересекает некоторый порог t0
, переходы графика между этими состояниями. Действия в каждом состоянии обновляют значение y
на каждом временном шаге симуляции.
Для получения дополнительной информации о симуляции этого графика смотрите Построение и Запуск диаграмма Stateflow.
1. Закройте все модели.
bdclose all
2. Создайте модель Simulink® под названием rectify
это содержит пустой блок Stateflow Chart.
sfnew rectify
к Chart
ОбъектЧтобы использовать API Stateflow, вы начинаете путем нахождения указателя на Root
объект, который является родительским элементом всех объектов в API Stateflow. Если у вас есть Root
указатель на объект, можно найти указатель на объекты API, которые соответствуют объектам Stateflow, с которыми вы хотите работать.
1. Используйте функциональный sfroot
получить указатель на Root
объект.
rt = sfroot;
2. Вызовите find
метод, чтобы получить указатель на Chart
объект, который соответствует графику в вашей модели.
ch = rt.find('-isa','Stateflow.Chart');
3. Чтобы открыть график в редакторе Stateflow, вызовите его view
метод.
ch.view;
4. Чтобы изменить язык действия, измените ActionLanguage
свойство графика.
ch.ActionLanguage = 'C';
Чтобы создать объект Stateflow API, вызовите метод конструктора, который соответствует объекту. Каждый метод конструктора берет родительский объект в качестве входа и возвращает указатель на новый объект. Для получения дополнительной информации смотрите, Создают и Уничтожают Объекты Stateflow.
1. Вызовите метод конструктора Stateflow.State
добавить состояние в график.
s1 = Stateflow.State(ch);
2. Отрегулируйте положение состояния путем изменения Position
свойство соответствующего State
объект.
s1.Position = [30 30 90 60];
3. Задайте имя и метку для состояния путем изменения LabelString
свойство, как описано во Вводят Многострочные Метки в состояния и Переходы.
s1.LabelString = ['On',10,'y = x;'];
4. Создайте второе состояние. Отрегулируйте его положение и задайте его имя и метку.
s2 = Stateflow.State(ch); s2.Position = [230 30 90 60]; s2.LabelString = ['Off',10,'y = 0;'];
Когда вы добавляете переход, вы задаете его источник и место назначения путем изменения его Source
и Destination
свойства. Для перехода по умолчанию вы задаете место назначения, но никакой источник.
1. Вызовите метод конструктора Stateflow.Transition
добавить переход к графику.
t1 = Stateflow.Transition(ch);
2. Установите источник перехода и место назначения.
t1.Source = s1; t1.Destination = s2;
3. Отрегулируйте положение перехода путем изменения его SourceOClock
свойство.
t1.SourceOClock = 2.1;
4. Задайте метку перехода и ее положение путем изменения LabelString
и LabelPosition
свойства.
t1.LabelString = '[x<t0]';
t1.LabelPosition= [159 23 31 16];
5. Создайте второй переход. Задайте его источник, место назначения и метку.
t2 = Stateflow.Transition(ch);
t2.Source = s2;
t2.Destination = s1;
t2.SourceOClock = 8.1;
t2.LabelString = '[x>=t0]';
t2.LabelPosition= [155 81 38 16];
6. Добавьте переход по умолчанию к On
состояния. Чтобы сделать вертикальный переход, измените значения
SourceEndpoint
и Midpoint
свойства. Для получения дополнительной информации смотрите, Создают Объекты перехода По умолчанию.
t0 = Stateflow.Transition(ch); t0.Destination = s1; t0.DestinationOClock = 0; t0.SourceEndpoint = t0.DestinationEndpoint-[0 30]; t0.Midpoint = t0.DestinationEndpoint-[0 30];
Прежде чем можно будет симулировать график, необходимо задать каждый символ данных, который вы используете в графике и задаете его осциллограф и тип.
1. Вызовите метод конструктора Stateflow.Data
добавить объект данных, который представляет вход графику.
x = Stateflow.Data(ch);
2. Задайте имя объекта данных как 'x'
и его осциллограф как 'Input'
.
x.Name = 'x'; x.Scope = 'Input';
3. Указывать что вход x
имеет вводят double
, установите его Props.Type.Method
свойство к 'Built-in'
. Встроенным типом данных по умолчанию является 'double'
.
x.Props.Type.Method = 'Built-in';
x.DataType
ans = 'double'
4. Добавьте объект данных, который представляет выход для графика. Задайте его имя как 'y'
и его осциллограф как 'Output'
.
y = Stateflow.Data(ch); y.Name = 'y'; y.Scope = 'Output';
5. Чтобы указать, что выход y имеет, вводят single
, установите его Props.Type.Method
свойство к 'Built-in'
и его DataType
свойство к 'single'
.
y.Props.Type.Method = 'Built-in'; y.DataType = 'single'; y.DataType
ans = 'single'
6. Добавьте объект данных, который представляет порог перехода в графике. Задайте его имя как 't0'
и его осциллограф как 'Constant'
. Установите его начальное значение к 0.
t0 = Stateflow.Data(ch); t0.Name = 't0'; t0.Scope = 'Constant'; t0.Props.InitialValue = '0';
7. Указывать что порог t0
имеет тип данных с фиксированной точкой, установите его Props.Type.Method
свойство к 'Fixed-point'
. Затем задайте значения Props.Type
свойства, которые применяются к данным фиксированной точки.
t0.Props.Type.Method = 'Fixed point'; t0.Props.Type.Signed = true; t0.Props.Type.WordLength = '5'; t0.Props.Type.Fixpt.ScalingMode = 'Binary point'; t0.Props.Type.Fixpt.FractionLength = '2'; t0.DataType
ans = 'fixdt(1,5,2)'
Чтобы сохранить модель, которая содержит ваш завершенный график, вызовите sfsave
функция.
sfsave
Чтобы симулировать график, соедините его с другими блоками в модели Simulink через порты ввода и вывода.
Для получения дополнительной информации смотрите, Симулируют График как блок Simulink.
Chart | Stateflow.Data
| Stateflow.State
| Stateflow.Transition
| bdclose
| find
| sfnew
| sfroot
| sfsave
| view