Пока пример кода для реализации "автомата Мили" задерживается, попробую изложить рациональную идею выделения состояний при программировании. Для примера, есть необходимость написать стандартный программный блок для механизма с гидроприводом (электроприводом). Это такой стандартный механизм, каких может быть достаточно много в проекте и программе контроллера. Краткое словесное описание такое:
Гидроцилиндр (эл.двигатель) может перемещать механизм в рабочее положение или в исходное с возможностью промежуточных остановок. Имеются две кнопки без фиксации, чтобы подать команды или "вперед" или "назад". Явной кнопки "стоп" нет. Механизм должен двигаться до крайнего положения или остановиться при нажатии кнопки, противоположной движению, либо от внешних блокировок для каждого направления движения. В крайних положениях имеются конечные выключатели.
Задача "максимум" стоит в том, чтобы сделать такое ядро, вокруг которого можно было бы накрутить множество "примочек" с небольшими внешними настройками. Например, можно было бы использовать в случае постоянного отсутствия какого-либо конечного выключателя, сделать диагностику механических и электрических неисправностей, где-то отображать состояние механизма, логировать последовательность действий.
Именно для понятной записи лога можно назвать устойчивые состояния для движения в каждую сторону: РАЗРЕШЕНИЕ, КОМАНДА ПРИНЯТА, ВЫПОЛНЕНИЕ, ВЫПОЛНЕНО, ОТКАЗ.
В каждом состоянии автомата возможен переход к другому состоянию, которое определяется набором входных сигналов. В каждом состоянии автомата включается свой строго определенный набор выходных сигналов. Таким образом, нет необходимости для каждого выходного сигнала писать длинную цепочку логики, определяя все возможные в любой момент реакции на все входные сигналы.
Вот примерно такой шаблон или идея, которой могли бы придерживаться инженеры-программисты при командной работе. Зная подобный шаблон, легко понять замысел коллеги, если увидишь в программе знакомые слова или названия цепочек.
Да и отладка собственного кода во многом упрощается, если помнишь что в какой последовательности должно пойти.
К шаблонному подходу "старичков" убедить точно не получится
Да реализация шаблона у разных людей может быть очень разная.