Re:"Можно написать magnet_S=MOTOR_STATE2" Я делал так, чтобы снизить вероятность таких ошибок: Состояния РАЗНЫХ автоматов енумятся в ОДНОМ енуме. Обработка состояний в массиве функций по индексу. Тогда биг луп для трех автоматов выглядит так:
for (;;)
{ function[state1];
function[state2];
function[state3];
}
По крайней мере не будет вызвана функция вне диапазона.
Ну и с учетом использования мной X-макросов для генерации enumов и массивов Так получается прозрачнее.