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