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

Дополнительные сведения о моделировании этой диаграммы см. в разделах Конструирование и выполнение диаграммы статофлоу.
1. Закройте все модели.
bdclose all2. Создание модели Simulink ® с именемrectify содержит пустой блок диаграммы Stateflow.
sfnew rectifyChart ОбъектЧтобы использовать API Stateflow, начните с доступа к Simulink.Root , который является родительским для всех объектов в API Stateflow. Вы используете 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 в качестве дочернего объекта родительского объекта, используйте родительский объект в качестве входного аргумента функции, создающей дочерний объект. Дополнительные сведения см. в разделе Создание и удаление объектов потока состояний.
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.DataTypeans = '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 через порты ввода и вывода.

Дополнительные сведения см. в разделе Моделирование диаграммы как блока симулятора.