Конечный автомат (finite state machine (FSM)) - вариант управляемой событиями (реактивной) системы. Управляемая событиями система переходит из одного состояния (режима) в другое предписанное состояние в том случае, если условие, определяющее изменение, истинно.
Например, можно использовать конечный автомат, чтобы описать автоматическую передачу автомобиля. Передача имеет ряд состояний: парковка, нейтраль, движение, реверс и т. д. Система переходит из одного состояния в другое, когда водитель перемещает рычаг из одной позиции в другую, например, из позиции парковка в нейтральное положение.
Представления конечного автомата (FSM )
Традиционно проектировщики использовали таблицы истинности, чтобы представить отношения между вводами, выводами и состояниями FSM. Результирующая таблица описывает логику поведения системы. Другой подход к проектированию управляемых событиями систем состоит в том, чтобы моделировать поведение системы, описывая его в терминах переходов между состояниями. Переход состояния в активную фазу определяется наступлением событий при наличии некоторых условий. Диаграммы переходов (state-transition diagrams (STDs)) и пузырьковые диаграммы (bubble diagrams) - графические представления, основанные на этом подходе.
Stateflow представление
Stateflow использует вариант системы обозначений конечного автомата, предложенный Дэвидом Харелом [D. Harel Statecharts: A Visual Formalism for Complex Systems," (Диаграммы состояний: визуальный формализм для комплексных систем) Science of Computer Programming 8, 1987, pages 231-274]. Используя Stateflow (state - состояние, flow - поток), Вы создаете Stateflow диаграммы. Диаграмма Stateflow - графическое представление конечного автомата, где состояния и переходы формируют базовые конструктивные блоки системы. Вы можете также представлять потоковые (не имеющие состояний) диаграммы с использованием Stateflow. Stateflow образует блоки, которые Вы включаете в модель Simulink. Совокупность Stateflow блоков в модели Simulink - Stateflow машина.
Дополнительно Stateflow допускает в представлении иерархию, параллелизм и хронологию (history). Иерархия дает возможность Вам организовать комплексные системы, определяя структуру объекта в виде " родители / потомки ". Т.е. вы можете организовать состояния внутри других состояний высшего уровня. Система с параллелизмом может иметь два или больше активных состояний в одно и то же время. Хронология обеспечивает средства, чтобы определить состояние - адресата для некоторого перехода, основываясь на предшествующей информации. Эти свойства расширяют полезность данного подхода и отсутствуют в STDs и пузырьковых диаграммах.
Система обозначений
Система обозначений определяет набор объектов и правил, которые управляют отношениями между этими объектами. Stateflow система обозначений обеспечивает позволяет разработать проект в полном соответствии с диаграммой Stateflow.
Stateflow система обозначений состоит из:
Семантика
Семантика описывает, как система обозначений интерпретируется и осуществляется. Законченная диаграмма Stateflow иллюстрирует, как система будет вести себя. Диаграмма Stateflow содержит действия, связанные с переходами и состояниями. Семантика описывает, в какой последовательности эти действия имеют место в ходе выполнения диаграммы Stateflow.
Знание семантики особенно важно для обеспечения правильных проектных решений Stateflow диаграмм при генерации объектного кода. Различное использование системы обозначений приводит к различному порядку выполнения сгенерированного кода.
Simulink модель и Stateflow машина
Stateflow машина - совокупность Stateflow блоков в модели Simulink. Simulink модель и Stateflow машина работают совместно. Запуск моделирования автоматически запускает выполнение как Simulink, так и Stateflow частей модели.
Модель Simulink может состоять из комбинаций Simulink блоков, дополнительных блоков из комплектов инструментов и Stateflow блоков (Stateflow диаграмм). Stateflow диаграмма (Stateflow chart) состоит из набора графических (состояния, переходы, соединения (узлы), хронологические соединения) и неграфических (события, данные, программные коды) объектов.
Имеется взаимно однозначное соответствие между моделью Simulink и Stateflow машиной. Каждый блок Stateflow в модели Simulink представлен в Stateflow отдельной диаграммой (Stateflow диаграмма). Каждая Stateflow машина имеет собственную иерархию объектов. Stateflow машина - самый высокий уровень в Stateflow иерархии. Ниже в объектной иерархии Stateflow машины находится комбинация графических и неграфических объектов. Словарь данных - архив для всех объектов Stateflow.
Stateflow правила обзора данных диктуют, где в иерархии могут существовать конкретные типы неграфических объектов. Например, данные и события могут порождаться машиной, Stateflow диаграммой или состоянием. Программные коды могут порождаться только машиной. Как только родитель для объекта выбран, объект известен в иерархии от родителя вниз (включая потомков родителя). Например, объект данные, порожденный машиной, доступен этой машине, любыми диаграммами в пределах этой машины и любыми состояниям в пределах этой машины. Вы управляете иерархией неграфических объектов посредством Обозревателя (Explorer) или меню Add графического редактора. Что касается иерархии графических объектов, то она автоматически обрабатывается графическим редактором.
Определение Stateflow интерфейса
Каждый блок Stateflow соответствует единственной диаграмме Stateflow. Блок Stateflow связывает с моделью Simulink с помощью интерфейса. С помощью интерфейса блок Stateflow подключается к источникам, поступающим от модели Simulink (данные, события, код пользователя).
Stateflow диаграммы управляются событиями. События могут быть локальными для блока Stateflow или могут поступать к и от модели Simulink и источников кода, внешних к Simulink. Данные также могут быть локальными для блока Stateflow или могут поступать к и от модели Simulink и источников кода, внешних к Simulink.
Вы должны определить интерфейс для каждого блока Stateflow. Определение интерфейса для блока Stateflow может включать некоторые или все из эти задач:
В рассмотренном ранее примере Simulink модель состоит из Simulink блока - источника Sine Wave (Синусоида), Simulink блока - приемника Scope (Осциллограф) и единственного блока Stateflow с названием On_off.
Объекты Stateflow диаграммы
Далее приводится пример Stateflow диаграммы, в которой используются основные графические компоненты. Кроме того, детально описываются эти графические компоненты, а также некоторые неграфические объекты и связи между ними.
Состояние (State)
Состояние описывает режим управляемой событиями системы. Динамические переходы состояний от активности к неактивности базируются на событиях и условиях. Каждое состояние имеет родителя. В диаграмме Stateflow, состоящей из единственного состояния, родитель состояния - непосредственно диаграмма Stateflow (также называемая корнем диаграммы Stateflow). Вы можете размещать состояния в пределах других состояний высшего уровня. На рисунке StateA1 - потомок в иерархии по отношению к StateA.
Состояние также имеет хронологию. Хронология обеспечивает эффективные средства базирования будущего действия на прошлом действии.
Состояния имеют метки, которые могут определить действия, выполненные в последовательности, основанной на типе действия. Типы действия - entry (на входе), during (в течение), exit (на выходе) и on event_name (в случае события с именем _).
В примере автоматическй передачи, передача может быть в нейтральном положении или включена в работу. Два состояния этой системы - neutral (нейтраль) и engaged (включена).
Stateflow обеспечивает два типа состояний: параллельный (И) и исключительный (ИЛИ) тип состояния. Параллелизм представлен И (параллельными) состояниями. Автоматическая передача - пример исключительного (ИЛИ) состояния. Исключительные (ИЛИ) состояния используются, чтобы описать режимы, которые являются взаимоисключающими. Система находится либо в нейтральном состоянии, либо во включенном состоянии в каждый момент времени.
Переходы (Transitions)
Переход - графический объект, который в большинстве случаев связывает один объект с другим. Один конец перехода приложен к объекту-источнику, а другой конец - к объекту-адресату. Источник - то место, где переход начинается, а адресат - то место, где переход заканчиваются. Метки переходов описывают обстоятельства, под действием которых система переходит из одного состояния к другому. Эти обстоятельства - наступление некоторых событий, которые заставляют переход совершаться. На рисунке переход от StateA1 к StateA2 помечен событием transitionA1_A2, которое заставляет переход произойти.
Рассмотрим снова автоматическую передачу. Clutch_engaged (включение передачи) - событие, которое требуется, чтобы осуществить переход из нейтрального положения в состояние "включено".
События (Events)
События управляют выполнением диаграммы Stateflow, но являются неграфическими объектами и таким образом не представлены непосредственно в диаграмме Stateflow. Все события, которые имеют отношение к диаграмме Stateflow, должны быть определены. Наступление события заставляет статус состояния (активно - неактивно) в диаграмме Stateflow изменяться. Наступление события может запускать переход, и тогда он происходит, или может запускать действие, и тогда оно выполняется. События наступают по-нисходящей, начиная от родителя события в иерархии.
События создаются и изменяются при помощи Stateflow Explorer (Stateflow проводника). События могут быть созданы на любом уровне иерархии. Событие имеет такое свойство, как видимость. Видимость определяет, является ли событие
Данные (Data)
Объекты-данные используются, чтобы хранить числовые значения для применения в диаграмме Stateflow. Они являются неграфическими объектами и таким образом не представлены непосредственно в диаграмме Stateflow.
Данные создаются и изменяются в Stateflow Explorer. Они могут быть созданы на любом уровне иерархии. Данные имеют такое свойство, как видимость. Видимость определяет для объектов-данных одну из следующих возможностей:
Иерархия
Иерархия дает возможность организовать сложные системы, определяя предка и структуру объектов-потомков. Иерархически построенный проект обычно сокращает число переходов и приводит к четким, понятным диаграммам. Stateflow поддерживает иерархическую организацию как для диаграмм, так и для состояний. Диаграммы могут существовать внутри других диаграмм. Диаграмма, которая существует в другой диаграмме, называется поддиаграммой.
Точно так же состояния могут существовать внутри других состояний. Stateflow представляет иерархию состояний с суперсостояниями и подсостояниями. Например, эта диаграмма Stateflow имеет суперсостояние, которое содержит два подсостояния.
Суперсостояние engaged (передача включена) содержит подсостояния first (первая передача) и second (вторая передача). Суперсостояние engaged - предок в иерархии по отношению к состояниям first и second. Когда событие clutch_engaged происходит, система переходит из нейтрального состояния к суперсостоянию "включено". Переходы внутри суперсостояния преднамеренно опущены в этом примере для простоты.
Выход из состояния высшего уровня или суперсостояния также подразумевает выход из любых активных подсостояний этого суперсостояния. Переходы могут пересекать границы суперсостояния, чтобы достичь подсостояния-адресата. Если подсостояние активно, его родительское состояние (суперсостояние) также активно.
Условия (Conditions)
Условие - булево выражение, определяющее, что переход происходит, если указанное выражение является истинным. На рисунке компонента Stateflow диаграммы [condition1] представляет булево выражение, которое должно быть истинным, чтобы переход произошел.
В автоматической коробке передач переход с первой скорости ко второй происходит, если булево условие [speed > threshold] ([скорость > пороговое_значение]) истинно.
Хронологические соединения (History Junction)
Хронология - средство для определения подсостояния-адресата перехода по предыстории. Если суперсостояние с исключительной (ИЛИ) декомпозицией имеет хронологическое соединение, подсостоянием-адресатом при переходе будет подсостояние, посещенное до этого последним. Хронологическое соединение применяется к тому уровню иерархии, в котором присутствует. Хронологическое соединение отменяет любые переходы по умолчанию. На рисунке хронологическое соединение в StateA1 указывает, что, когда переход к StateA1 происходит, становится активным то из подсостояний (StateA1a, StateA1b или StateA1c), которое было активным в последнюю очередь.
В автоматической передаче хронология указывает, что, когда clutch_engaged вызывает переход от нейтрали до суперсостояния включено, становится активным то подсостояние (первая или вторая скорость), которое было активным в последнюю очередь.
Действия (Actions)
Действия - это результат выполнения какой-либо части диаграммы Stateflow. Действие может быть выполнено в результате перехода от одного состояния к другому. Действие может быть также реакцией на состояние. На рисунке сегмент перехода от StateA1b до соединения помечен действием func1() условия condition 1, а сегмент перехода от соединения до StateA1c помечен действием func2() перехода. Семантика действий будет рассмотрена позднее.
Переход, заканчивающийся в состоянии, может иметь действие условия (condition action) и действие перехода (transition action), как рассмотрено ниже. Однако переходы, которые заканчиваются в соединениях, могут иметь только действия условий (не допускаются действия переходов).
Состояния могут иметь действия have entry (на входе), during (в течение), exit (на выходе) и on event_name (в случае события с именем _ ). Например,
Язык действий определяет типы действий, которые Вы можете использовать и связанные с ними системы обозначений. Действием может быть обращение к функции, наступление события, присвоение некоторого значения переменной и т.д.
Stateflow поддерживает парадигмы моделирования конечного автомата Мура и Мили. В Мили модели действия связаны с переходами, в то время как в Мура модели они связаны с состояниями. Stateflow поддерживает действия состояний, действия переходов и действия условий.
Параллелизм
Система с параллелизмом имеет два или больше состояний, которые могут быть активны в одно и то же время. Действия каждого параллельного состояния по существу независимы от других состояний. На рисунке 2-1 StateA2a и StateA2b - параллельные (И) состояния. StateA2 имеет параллельную (И) декомпозицию состояния.
Например, эта диаграмма Stateflow имеет параллельную декомпозицию суперсостояния.
Передача (Transmission), обогрев (Heat) и осветительные приборы (Lights) - параллельные подсистемы в автомобиле. Они существуют параллельно и физически независимы от друг друга. Имеется много других параллельных компонентов в автомобиле, например подсистема торможения и подсистема очистки ветрового стекла.
Вы представляете параллелизм в Stateflow, задавая параллельную (И) декомпозицию. Параллельные (И) состояния отображены обведенными штриховой линией областями.
Переходы по умолчанию (Default Transitions)
Переходы по умолчанию определяют, какое из нескольких исключительных (ИЛИ) состояний должно быть активным, когда имеется неопределенность между двумя или более исключительными (ИЛИ) состояниями на одном уровне в иерархии.
Например на рисунке 2-1 переход по умолчанию к StateA1 разрешает неоднозначность, которая существует в отношении того, какое из подсостояний, StateA1 или StateA2, должно быть активным, когда суперсостояние StateA становится активным. В этом случае, когда StateA активно, по умолчанию StateA1 также активно.
В следующей подсистеме Lights (Осветительные приборы) переход по умолчанию к подсостоянию Lights.Off (Осветительные приборы.выключены) указывает, что, когда суперсостояние Lights становится активным, Lights.Off подсостояние становится активным по умолчанию.
Обратите внимание! Хронологические соединения отменяют переходы по умолчанию в суперсостояниях с исключительными (ИЛИ) декомпозициями.
Обратите внимание! В параллельных (И) состояниях переходы по умолчанию всегда должны присутствовать, чтобы указать, какие из его исключительных (ИЛИ) состояний активны, когда параллельное состояние становится активным.
Соединения (Connective Junctions)
Соединения - точки принятия решений в системе. Соединение - графический объект, который упрощает Stateflow схематические представления и облегчает порождение эффективного кода. Соединения обеспечивают альтернативные способы представить желаемое поведение системы. На представленной выше Stateflow диаграмме соединение используется как точка принятия решения для двух сегментов перехода, завершающихся в состоянии StateA1c.
Следующий пример показывает, как соединения (отображаемые в виде окружностей) используются для конструкции if.
Этот фрагмент выполняется следующим образом: