Автономный график Stateflow® является классом MATLAB®, который задает поведение конечного автомата. Автономные графики реализуют классическую семантику графика с MATLAB как язык действия. Можно программировать график при помощи полной функциональности MATLAB, включая те функции, которые ограничиваются для генерации кода в Simulink®. Для получения дополнительной информации смотрите, Создают диаграммы Stateflow для Выполнения как Объекты MATLAB.
В этом примере показано, как выполнить автономную диаграмму Stateflow при помощи скрипта MATLAB или модели Simulink.
Файл sf_change.sfx задает автономную диаграмму Stateflow, которая считает количество способов внести изменение для данной суммы денег. График содержит эти объекты данных:
x сумма денег должна измениться. Значение по умолчанию равняется 100.
coinValues вектор наименований монеты, расположенных в увеличивающемся порядке. coinNames массив соответствующих имен монеты. Значения по умолчанию представляют стандартные американские монеты (пенсы, пятицентовые монеты, десять центов и четверти).
tally количество допустимых настроек изменения.
tabula массив, содержащий различные допустимые настройки изменения.
chgсделанныйi, и n локальные данные, используемые считающим изменение алгоритмом.
textWidth и quietMode локальные данные, которые управляют, как график отображает свои результаты.

График начинается с потенциальной настройки изменения, состоящей полностью из монет самого низкого значения, заданных индексом 1. На каждом шаге выполнения, exchange состояния изменяет эту настройку одним из двух способов:
move_up подсостояния обмены некоторые монеты самого низкого значения для монеты с более высоким значением, заданным индексом i.
move_down подсостояния обмены все монеты со значением, заданным индексом i для монет самого низкого значения. Затем move_up обмены некоторые монеты самого низкого значения для монеты со значением, заданным индексом i+1 или выше.
Потенциальная настройка изменения допустима, когда количество центов, представленных монетами самого низкого значения, является делимым значением того типа монеты. Когда график сталкивается с новой допустимой настройкой, он постепенно увеличивает tally и добавляет новую настройку к tabula.
Когда больше обменов монеты не возможно, stop состояния становится активным. Это состояние распечатывает результаты расчета, преобразовывает содержимое tabula к таблице, и устанавливает значение done к true.
Чтобы запустить считающий изменение алгоритм к завершению, необходимо выполнить автономный график многократно. Например, sf_change_script.m скрипта MATLAB создает объект диаграммы chartObj и инициализирует значение локальных данных x к 27. Параметр конфигурации '-warningOnUninitializedData', который скрипт устанавливает на false, устраняет предупреждение что tabula пустой массив в новом объекте диаграммы. while цикл выполняет график до локальных данных done становится true. Наконец, скрипт отображает значение tabula.
chartObj = sf_change('x',27,'--warningOnUninitializedData',false); while ~chartObj.done step(chartObj); end disp(chartObj.tabula)
sf_change_script
.............
There are 13 ways to make change for 27 cents.
Pennies Nickels Dimes Quarters
_______ _______ _____ ________
27 0 0 0
22 1 0 0
17 2 0 0
12 3 0 0
7 4 0 0
2 5 0 0
17 0 1 0
12 1 1 0
7 2 1 0
2 3 1 0
7 0 2 0
2 1 2 0
2 0 0 1
Чтобы определить количество способов внести изменение для различной суммы или использовать различную систему валюты, изменяют значения x и coinValues. Например, чтобы использовать британскую валюту, инициализируйте coinValues к [1 2 5 10 20 25 50].
Можно выполнить автономную диаграмму Stateflow из модели Simulink. Например, модель sf_change_model содержит две диаграммы Stateflow, которые используют автономный график sf_change считать количество способов внести изменение за 27 центов в двух различных валютных системах. Можно симулировать модель, но функции, которые выполняют автономный график, не поддерживают генерацию кода.

Каждый график содержит эти состояния:
Initialize создает локальный объект диаграммы chartObj это реализует считающий изменение алгоритм для входного значения x.
Execute вызывает step функция, чтобы выполнить автономный график и хранилища результат как выходные данные tally.
Finish отображает результаты алгоритма в окне Diagnostic Viewer и устанавливает значение выходных данных done к true.
Когда оба графика достигают своего соответствующего Finish состояние, симуляция остановок модели и блоков Отображения показывают окончательные значения двух счетов.
Выполнение Используя MATLAB как язык действия
График MATLAB syntax использование MATLAB как язык действия. Чтобы выполнить автономную диаграмму Stateflow, этот график должен следовать этим инструкциям:
Локальная переменная chartObj это содержит указатель на объект диаграммы, имеет, вводят Inherit: From definition in chart.
Прежде, чем создать объект диаграммы, Initialize утвердите вызывает coder.extrinsic функция, чтобы объявить sf_change как внешняя функция, которая ограничивается для генерации кода в Simulink. Смотрите функции MATLAB Значения внешних параметров Вызова в диаграммах Stateflow.
Execute и Finish состояния получают доступ к локальным данным для автономного графика путем вызова get функция.

Когда вы симулируете этот график с входом x = 27, блок Display Olde English показывает счет 4. Окно Diagnostic Viewer показывает эти результаты:
Pennies Shillings Florins
_______ _________ _______
27 0 0
15 1 0
3 2 0
3 0 1Выполнение Используя C как язык действия
График C syntax использование C как язык действия. Чтобы выполнить автономную диаграмму Stateflow, этот график должен следовать этим инструкциям:
Локальная переменная chartObj это содержит указатель на объект диаграммы, имеет, вводят ml.
Initialize утвердите вызывает ml функция, чтобы создать объект диаграммы.
Execute и Finish состояния используют ml оператор пространства имен, чтобы получить доступ к stepполучение, и displ функции, чтобы выполнить автономный график, получите доступ к его локальным данным и отобразите результаты алгоритма.
Для получения дополнительной информации смотрите доступ к функциям MATLAB и Данным о Рабочей области в Графиках C.

Когда вы симулируете этот график с входом x = 27, блок Display Modern American показывает счет 13. Окно Diagnostic Viewer показывает эти результаты:
Safety FieldGoal TouchDown
______ _________ _________
12 1 0
9 3 0
6 5 0
3 7 0
0 9 0
10 0 1
7 2 1
4 4 1
1 6 1
5 1 2
2 3 2
3 0 3
0 2 3