Создайте графики при помощи API Stateflow

В этом примере показано, как создать график Stateflow® при помощи прикладного программного интерфейса (API) Stateflow. API Stateflow является инструментом, чтобы создать или изменить диаграммы Stateflow посредством команд MATLAB®. Для получения дополнительной информации см. Обзор API Stateflow.

Создайте диаграмму 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.

Смотрите также

| | | | | | | | |

Похожие темы