Skip to main content

Сложные конечные автоматы

ЗАЧЕМ ЭТО НУЖНО? 🎯

Суть проблемы: простые системы имеют 2-3 состояния, но реальные устройства требуют сложных многоуровневых поведений с множеством переходов!

Ключевые концепции:

  • Иерархические автоматы - состояния внутри состояний
  • Приоритеты событий - какие события прерывают текущие процессы
  • Временные ограничения - тайминги в разных режимах работы
  • Модальность - разные “миры” поведения системы

Олимпиадная ценность: обучение проектированию сложных систем управления, как в реальных олимпиадных заданиях с многорежимной работой!


КАК ИЗУЧАЕМ? 🚀

Без кода - только логика:

Простой автомат: [КРАСНЫЙ] → [ЗЕЛЕНЫЙ] → [ЖЕЛТЫЙ]
Сложный автомат: [НОРМАЛЬНЫЙ_РЕЖИМ] → [КРАСНЫЙ] → [АВАРИЙНЫЙ_РЕЖИМ] → [МИГАЮЩИЙ]

Приоритеты:
Экстренная кнопка > Смена режима > Нормальная работа

Методика обучения:

  1. “Слои состояний” - основные режимы и подсостояния внутри них
  2. “Матрица переходов” - таблица “из какого состояния куда можно перейти”
  3. “Таймеры и события” - что запускается по времени, что по внешним сигналам
  4. “Восстановление состояния” - как вернуться к прерванному процессу

Критические концепции:

// Иерархическая структура состояний
enum MainMode { NORMAL, NIGHT, EMERGENCY, PEAK };
enum TrafficState { RED, RED_YELLOW, GREEN, YELLOW };

struct SystemState {
  MainMode mainMode;
  TrafficState trafficState;
  unsigned long stateStartTime;
  bool emergencyActive;
};