Чтобы объединить преимущества программирования конечных машин с полной функциональностью MATLAB ®, создайте автономную диаграмму Stateflow ® вне модели Simulink ®. Сохранение автономной диаграммы с расширением.sfx и выполните его как объект MATLAB. Уточните дизайн с помощью анимации диаграммы и графических инструментов отладки.
С помощью автономных диаграмм можно создавать приложения MATLAB, такие как:
Пользовательские интерфейсы MATLAB App Designer, использующие логику режима для управления поведением виджетов. См. раздел Конструирование логики человеко-машинного интерфейса с использованием диаграмм статусов.
Протоколы связи и приложения для обработки потоков данных, использующие последовательную логику. См. раздел Моделирование коммуникационного протокола с использованием объектов диаграммы.
Toolbox™ сбора данных или управление приборами Toolbox™ приложения, использующие логику на основе таймера для контроля и управления внешними задачами. См. раздел Реализация финансовой стратегии с использованием потока состояний.
Эти приложения могут совместно использоваться и выполняться без использования лицензии Stateflow. Дополнительные сведения см. в разделе Совместное использование автономных диаграмм.
Чтобы создать автономную диаграмму Stateflow, откройте редактор Stateflow с помощью edit функция. Например, в окне команд MATLAB введите:
edit chart.sfxchart.sfx не существует, редактор Stateflow открывает пустую диаграмму с именем chart. В противном случае редактор откроет диаграмму, определенную sfx файл.После сохранения автономной диаграммы help отображает информацию о выполнении в MATLAB:
help chart.sfxЧтобы закрыть автономную диаграмму из окна команд MATLAB, используйте sfclose функция:
sfclose chartЧтобы выполнить автономную диаграмму в MATLAB, сначала создайте объект диаграммы Stateflow. Используйте имя sfx для автономной диаграммы как функции. Укажите начальные значения данных как пары имя-значение. Например, эта команда создает объект диаграммы chartObject, инициализирует data1 и data2и выполняет переход по умолчанию:
chartObject = chart('data1',value1,'data2',value2)
Для отображения данных диаграммы, таких как синтаксис выполнения, значения данных диаграммы и список активных состояний, используйте disp функция:
disp(chartObject)
После определения объекта диаграммы Stateflow можно выполнить автономную диаграмму, вызвав step функция (со значениями данных, при необходимости):
step(chartObject,'data1',value1,'data2',value2)
Кроме того, можно вызвать одну из функций ввода событий:
event_name(chartObject,'data1',value1,'data2',value2)
В любом случае значения присваиваются локальным данным перед выполнением диаграммы.
Если диаграмма имеет графические функции или функции MATLAB, их можно вызвать непосредственно в окне команд MATLAB. Вызов функции диаграммы не выполняет автономную диаграмму.
function_name(chartObject,u1,u2)
Примечание
Если вы используете nargin в графической функции или функции MATLAB на диаграмме, nargin считает объект диаграммы в качестве одного из входных аргументов. Значение nargin аналогично вызову функции из диаграммы или из окна команд MATLAB.
Автономную диаграмму можно выполнить без открытия редактора Stateflow Editor. Если диаграмма открыта, редактор Stateflow выделяет активные состояния и переходы с помощью анимации диаграммы.
Для отладки и модульного тестирования можно выполнить автономную диаграмму непосредственно из редактора Stateflow Editor. Во время выполнения из пользовательского интерфейса вводятся значения данных и широковещательные события. Дополнительные сведения см. в разделе Выполнение и проверка состояния объектов диаграммы.
Автономную диаграмму можно выполнить из сценария MATLAB, модели Simulink или пользовательского интерфейса App Designer. Дополнительные сведения см. в разделе:
Чтобы остановить выполнение диаграммы, удалите объект диаграммы, вызвав delete функция:
delete(chartObject)
После удаления объекта диаграммы все дескрипторы объекта диаграммы остаются в рабочей области, но становятся недействительными. Чтобы удалить недопустимый дескриптор из рабочей области, используйте команду clear:
clear chartObjectЕсли очистить допустимый дескриптор объекта диаграммы, а к тому же объекту диаграммы имеются другие дескрипторы, объект диаграммы не будет уничтожен. Например, при выполнении диаграммы редактор Stateflow Editor содержит внутренние дескрипторы объекта диаграммы. Удаление дескриптора объекта диаграммы из рабочей области не приводит к уничтожению объекта диаграммы или удалению выделения анимации диаграммы в редакторе. Чтобы сбросить подсветку анимации, щелкните правой кнопкой мыши холст диаграммы и выберите «Удалить подсветку».
Автономные диаграммы можно совместно использовать с сотрудниками, не имеющими лицензии Stateflow.
Если сотрудники имеют ту же или более позднюю версию MATLAB, они могут выполнять автономные диаграммы как объекты MATLAB без открытия редактора Stateflow. Анимация и отладка диаграммы не поддерживаются. Сообщения об ошибках времени выполнения не связаны с состоянием или переходом на диаграмме, где произошла ошибка.
Примечание
Для выполнения автономных диаграмм, сохраненных в R2019a или R2019b, сотрудники должны иметь ту же версию MATLAB.
Если сотрудники имеют более раннюю версию MATLAB, экспортируйте автономную диаграмму в формат, который они могут использовать. Экспорт возможен только в R2019a и более поздние версии. Для завершения процесса экспорта необходим доступ к версиям Stateflow, из которых и в которые выполняется экспорт.
Используя более позднюю версию Stateflow, откройте автономную диаграмму.
На вкладке Диаграмма состояния выберите Сохранить > Предыдущая версия.
В диалоговом окне «Экспорт в предыдущую версию» укажите имя файла для экспортируемой диаграммы.
В списке Сохранить как тип выберите более раннюю версию для экспорта диаграммы.
Нажмите кнопку Сохранить.
Используя более раннюю версию Stateflow, откройте и сохраните экспортированную диаграмму.
Для экспорта диаграммы из окна команд MATLAB вызовите функцию Stateflow exportToVersion. Дополнительные сведения см. в разделе Экспорт диаграммы в более раннюю версию MATLAB.
Примечание
Попытка выполнить экспортированную диаграмму перед ее повторным сохранением приведет к ошибке.
Объект диаграммы Stateflow инкапсулирует данные и операции в единую структуру, обеспечивая:
Частные свойства, содержащие внутренние переменные состояния для автономной диаграммы.
A step функция, вызывающая различные операции, реализующие семантику диаграммы.
Объект диаграммы может иметь другие свойства и функции, которые соответствуют различным элементам, присутствующим в диаграмме.
| Автономные элементы диаграммы | Элементы объекта диаграммы |
|---|---|
| Локальные и постоянные данные | Общественные свойства |
| Входные события | Функции, выполняющие диаграмму |
| Графические функции и функции MATLAB | Функции, которые можно вызвать из окна команд MATLAB |
При создании объекта диаграммы можно задать поведение диаграммы, включив эти опции конфигурации в качестве пар имя-значение.
| Опция конфигурации | Описание | Пример |
|---|---|---|
-animationDelay | Укажите задержку, используемую анимацией диаграммы для выделения каждого сегмента перехода. Значение по умолчанию: 0.01 секунд. Чтобы создать диаграмму без задержек анимации, установите нулевое значение. | Создайте объект диаграммы с медленной анимацией, указав задержки в одну секунду. chartObject = chart('-animationDelay',1) |
-enableAnimation | Включить анимацию диаграммы и инструментарий отладки. Значение по умолчанию: true. | Создайте объект диаграммы, для которого отключены инструменты анимации и отладки. chartObject = chart('-enableAnimation',false) |
-eventQueueSize | Укажите размер очереди, используемой для событий и операций временной логики. Значение по умолчанию: 20. Чтобы отключить постановку событий в очередь, установите нулевое значение. Дополнительные сведения см. в разделе События в автономных диаграммах. | Создайте объект диаграммы, который игнорирует все события без предупреждения, если они происходят при обработке диаграммы другой операции. chartObject = chart('-eventQueueSize',0) |
-executeInitStep | Включите начальное выполнение переходов по умолчанию. Значение по умолчанию: true. | Создайте объект диаграммы, но не выполняйте переход по умолчанию. chartObject = chart('-executeInitStep',false) |
-warningOnUninitializedData | Включить предупреждение о пустых данных диаграммы после инициализации объекта диаграммы. Значение по умолчанию: true. | Устраните предупреждение при создании объекта диаграммы. chartObject = chart('-warningOnUninitializedData',false) |
В редакторе Stateflow можно использовать панель Символы (Symbols), чтобы указать начальные значения для данных диаграммы. При создании объекта диаграммы данные диаграммы инициализируются в алфавитном порядке в соответствии с ее областью действия. Сначала инициализируются постоянные данные. Локальные данные инициализированы последними.
Если для указания начального значения используется выражение, диаграмма пытается разрешить выражение следующим образом:
Использование значений других данных на диаграмме.
Вызов функций на пути поиска.
Например, предположим, что для локальных данных указано начальное значение x с помощью выражения y. Затем:
Если диаграмма имеет константу с именем y, y инициализирован до x. Локальные данные x присваивается то же начальное значение, что и y.
Если диаграмма содержит локальные данные с именем y, x инициализирован до y. Локальные данные x назначается пустому массиву. Если опция конфигурации -warningOnUninitializedData имеет значение true, появляется предупреждение.
Если диаграмма не содержит данных с именем y, x инициализируется вызовом функции y. Если файл y.m отсутствует в пути поиска, возникает следующая ошибка:
Undefined function or variable 'y'.
Stateflow не выполняет поиск в рабочей области MATLAB для разрешения начальных значений, поэтому эта ошибка возникает, даже если существует переменная с именем y в рабочей области MATLAB.
Классическая семантика диаграммы с MATLAB в качестве языка действий. Можно использовать все функциональные возможности MATLAB, включая функции, ограниченные для генерации кода в Simulink. См. раздел Выполнение объектов диаграммы Stateflow через сценарии и модели.
Примечание
В автономных диаграммах Stateflow символ команды операционной системы ! не поддерживается. Для выполнения команд операционной системы используйте функцию system.
Разложение состояний Exclusive (OR) и Parallel (AND) с иерархией. См. раздел Декомпозиция состояний и иерархия состояний.
Блок-схемы, графические функции и функции MATLAB. См. раздел Повторно используемые компоненты в диаграммах.
Преобразование кода MATLAB в графические функции с помощью мастера шаблонов. См. раздел Преобразование кода MATLAB в блок-схемы потока состояний.
Отображение локальных и постоянных данных без ограничений по типу. См. раздел Выполнение и единичное тестирование объектов диаграммы состояния потока.
Входные события. См. раздел Конструирование логики человеко-машинного интерфейса с использованием диаграмм статусов.
Операторы hasChanged, hasChangedFrom, и hasChangedTo которые обнаруживают изменения в значениях локальных данных.
Примечание
Автономные диаграммы Stateflow не поддерживают обнаружение изменений для элемента матрицы или поля в структуре.
Операторы временной логики:
after, at, и every оперировать количеством входных событий, вызовами диаграммы (tick) и абсолютное время (sec). Использовать эти операторы в состоянии on действия и как триггеры перехода.
count оперирует по количеству вызовов диаграммы (tick).
temporalCount работает по абсолютному времени (sec, msec, и usec).
elapsed работает по абсолютному времени (sec).
Автономные диаграммы определяют временную логику абсолютного времени в терминах времени настенных часов, которое ограничено точностью 1 миллисекунда.
Функция getActiveStates для доступа к состояниям, которые активны во время выполнения диаграммы. Для сохранения активных состояний в виде массива ячеек введите:
states = getActiveStates(chartObject)
Функция потока состояний exportAsClass которая экспортирует автономную диаграмму в качестве эквивалентного класса MATLAB. Эта функция используется для отладки ошибок времени выполнения, которые в противном случае трудно диагностировать. Например, предположим, что при выполнении диаграммы Stateflow, управляющей приложением MATLAB, возникает ошибка. При экспорте диаграммы в файл класса MATLAB можно заменить диаграмму классом в приложении и диагностировать ошибку с помощью отладчика MATLAB. Экспорт диаграммы chart.sfx как файл класса chart.m, введите:
Stateflow.exportAsClass('chart.sfx')Содержимое, специфичное для Simulink:
Семантика времени выборки и непрерывного времени.
Язык действий C.
Функции Simulink и подсистемы Simulink в виде состояний.
Входные, выходные и параметрические данные.
Данные памяти хранилища данных.
Выходные и локальные события.
Входные, выходные и локальные сообщения.
Другие ограничения:
Нет семантики Мили или Мура.
Нет таблиц перехода состояний.
Нет функций таблицы истинности.
Нет зависимых от состояния локальных данных или функций.
Нет действий перехода (действия, которые выполняются после выхода из исходного состояния перехода, но до ввода конечного состояния).
disp | edit | exportAsClass | exportToVersion | help | sfclose