Иерархия машины состояний
Используйте машину состояний (МС) с вложенными состояниями для создания иерархии в модели:
-
Родительское состояние — это состояние, которое содержит одно или несколько подсостояний, называемых дочерними состояниями. При активации родительского состояния происходит переход по умолчанию для дочерних состояний. Далее дочерние состояния работают по обычной логике до тех пор, пока родительское состояние не перестанет быть активным;
-
Дочернее состояние — это состояние, которое находится внутри родительского состояния.
Состояния можно вкладывать друг в друга, но они не должны перекрываться. При перекрытии выдается ошибка (восклицательный красный знак) о том, что состояния не могут быть наложены друг на друга:
Все вложенные состояния подчиняются следующим правилам:
-
На каждом уровне вложенности может быть переход по умолчанию, но это не обязательное условие. Если состояние единственное, то переход по умолчанию может отсутствовать. Это верно как для верхнего уровня, так и для вложенных состояний.
-
У состояний нет ограничений по глубине вложенности. При входе в состояние Engee автоматически определяет наличие вложенности:
-
Есть вложенные состояния — выполняется переход по умолчанию до дочерних состояний. Далее к дочерним состояниям применяется логика машины состояний до тех пор, пока активно родительское состояние.
-
Нет вложенных состояний — применяется логика машины состояний.
-
Параллельные состояния
Параллельные состояния — это множество состояний конечного автомата, которые, не будучи связаны отношением «родительское-дочернее», могут синхронно активироваться, оставаться активными или деактивироваться в течение одного такта автомата.
Однако, чтобы понять, как такие состояния могут работать параллельно (без связи «родительское-дочернее»), но в рамках одного автомата, то важно рассмотреть концепцию декомпозиции. Декомпозиция состояния позволяет указать стратегию активации, выполнения и деактивации его дочерних состояний:
-
Исключающая (OR) — используется по умолчанию и обозначается сплошной линией границ состояний. В этом режиме в один момент времени (такт автомата) может быть активно только одно дочернее состояние. Например:
Здесь после активации состояния A, автоматически становится активным его дочернее состояние B. При этом состояние C остается неактивным. Если автомат переключается из B в C, то B деактивируется, а C становится активным. Такой механизм удобен для моделирования взаимоисключающих режимов работы, например, «Включено» / «Выключено» или «Нагрев» / «Охлаждение».
-
Параллельная (AND) — обозначается пунктирной границей дочерних состояний и позволяет активировать все вложенные состояния в течение одного такта автомата. При этом состояния выполняют свои действия последовательно, в порядке их нумерации. Например:
Когда активируется состояние A, его дочерние состояния B и C также становятся активными в течение одного такта автомата, выполняя свои действия последовательно, в порядке их нумерации (B первым, С вторым). Они работают независимо друг от друга, что удобно для моделирования параллельных процессов, например, когда одна часть системы управляет температурой, а другая — давлением. Такой подход не требует перехода по умолчанию до дочернего состояния, так как система активирует параллельные состояния в порядке их нумерации.
Когда стоит использовать параллельные состояния? Они полезны, если:
-
Модель конечного автомата должна выполнять несколько независимых процессов одновременно;
-
Нужно упростить структуру модели, разбив ее на отдельные логические части.
Чтобы изменить тип декомпозиции, щелкните правой кнопкой мыши по состоянию и выберите: Декомпозиция → Параллельная/Исключающая:
Уровни декомпозиции
Если в одном состоянии используются и параллельные, и исключающие дочерние состояния, то они образуют разные уровни декомпозиции. Рассмотрим пример:
-
При запуске конечный автомат переходит в состояние A, которое имеет параллельную декомпозицию. Это значит, что оба его дочерних состояния B и C также активируются.
-
Однако состояние C само по себе является родительским для состояний C1 и C2 и образует новый уровень декомпозиции. На этом уровне состояние C уже имеет исключающую (OR) декомпозицию, поэтому в каждый момент времени может быть активно только одно из его дочерних состояний (C1 или C2).
-
Дочерние состояния C1 и C2 в свою очередь снова используют параллельную декомпозицию, поэтому их вложенные состояния активны или неактивны одновременно (с точностью до такта автомата).
Такое чередование уровней может повторяться сколько угодно раз, пока это соответствует логике работы конечного автомата.
Все дочерние состояния одного уровня должны соответствовать декомпозиции родительского состояния. Уровень декомпозиции определяется одной итерацией связи «Родительское состояние — дочернее состояние» на одном иерархическом уровне. |
Нумерация параллельных состояний
Каждое параллельное состояние в конечном автомате получает приоритетный номер, определяющий порядок его выполнения. Чем меньше номер, тем раньше состояние будет выполнено. Номер приоритета отображается в правом верхнем углу каждого параллельного состояния:
Если модель создается с нуля или в ней пока нет параллельных состояний, то система автоматически назначает приоритетные номера в порядке их добавления. Нумерация начинается с первого доступного номера внутри родительского состояния.
Чтобы изменить порядок выполнения параллельного состояния:
-
Щелкните правой кнопкой мыши по параллельному состоянию.
-
Нажмите «Порядок исполнения» и выберите новый номер приоритета.
Ограничения
Хотя параллельные состояния очень полезны, у них есть несколько ограничений:
-
Нет входящих и исходящих переходов — нельзя напрямую создать переход из параллельного состояния или в него;
-
Нет переходов по умолчанию и суперпереходов — переход по умолчанию в параллельных состояниях не используется. Также нельзя создавать суперпереходы[1].
-
Запрещены узлы памяти — узел памяти
(history junction) нельзя размещать непосредственно внутри состояний с параллельной декомпозицией (AND). Это связано с тем, что они работают независимо, и восстановление их предшествующих состояний требует отдельного механизма для каждого из них.