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

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

Создайте диаграмму Stateflow

Эта диаграмма Stateflow представляет логику, лежащую в основе выпрямителя половинной волны. График содержит два состояния, маркированные On и Off. В On состояние, выходной сигнал графика y равен входу x. В Off состояние, выходной сигнал устанавливается в нуль. Когда входной сигнал переходит некоторый порог t0график переходит между этими состояниями. Действия в каждом состоянии обновляют значение y на каждом временном шаге симуляции.

Для получения дополнительной информации о симуляции этой диаграммы смотрите Конструкцию и Запуск диаграммы Stateflow.

1. Закройте все модели.

bdclose all

2. Создайте модель Simulink ® под названием rectify который содержит пустой блок Диаграмма Stateflow.

sfnew rectify

Доступ к Chart Объект

Чтобы использовать API Stateflow, вы начинаете с доступа к Simulink.Root объект, который является родительским элементом всех объектов в Stateflow API. Вы используете Simulink.Root объект для доступа к другим объектам API в вашей модели.

1. Используйте функцию sfroot для доступа к Simulink.Root объект.

rt = sfroot;

2. Вызовите find функция для доступа к Stateflow.Chart объект, который соответствует графику в вашей модели.

ch = find(rt,'-isa','Stateflow.Chart');

3. Чтобы открыть график в редакторе Stateflow, вызовите view функция.

view(ch);

4. Чтобы изменить язык действий, измените ActionLanguage свойство графика.

ch.ActionLanguage = 'C';

Добавить состояния

Чтобы создать объект API Stateflow как дочерний объект родительского объекта, используйте родительский объект в качестве входного параметра функции, которая создает дочерний объект. Для получения дополнительной информации см. раздел «Создание и удаление объектов Stateflow».

1. Вызовите Stateflow.State функция для добавления состояния к графику.

s1 = Stateflow.State(ch);

2. Отрегулируйте положение состояния путем изменения Position свойство соответствующего State объект. Задайте новую позицию как вектор с четырьмя элементами, в котором первые два значения являются (x, y) координатами верхнего левого угла состояния, а последние два значения являются шириной и высотой состояния.

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 15];

Добавление данных

Прежде чем вы сможете моделировать график, необходимо задать каждый символ данных, который вы используете на графике, и задать его возможности и тип.

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.

См. также

Блоки

Функции

Объекты

Похожие темы