Автономная диаграмма 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