Что-то мне подсказывает, линейная логика вроде "нажал на кнопку и все сразу выполнилось" для автоуправления просто не подходит
На мой взгляд, подход может быть таким:
- есть система (описанная схемой и объектами схемы: локомотивы, стрелки, блоки, датчики ОС, интерфейсы, шины и т.д.)
- у каждого описанного объекта есть некий статус (например, локомотив: направление движения, скорость, статусы функций). Статусы используются для анализа и для визуализации.
- система управляется и управляет "событиями" и только ими
- события можно разделить на входящие и наоборот, выходящие
- входящие события: сработки датчиков ОС, нажатия пользователем кнопок/вращение "крутилки"/тумблеры на пультах, и т.д.
- выходящие события: команды локам, стрелкам, другим декодерам и т.д.
- по сути программа автоуправления - это "черный" ящик, который получает "входящие" события, очень быстро их обрабатывает (принимает правильное решение) и выдает "выходящие", управляющие события в шины (DCC, Xnet, Loconet, USB и т.д.).
- "внутрях" черного ящика это выглядит как скоростной анализ (циклы исключить по макс., например, пожертвовав памятью в счет макс. "ссылочности" объектов друг на друга) ) и принятие решение по совокупности критериев: входной команды, текущих статусов объектов и их взаимосвязей.
Например..
- сработал датчик 1.
- датчик 1 ссылается на блок А, событие "вход", для маршрута Х (или маска на маршрут) (>>нет ссылки датчика вообще не на что - игнорим событие)
- далее, блок А ссылается на то, что его занял лок М62, который идет маршрутом Х (>> нет ссылки, что блок кем то занят - ошибка и выкл рельсов; блок в статус "Глюк")
- переходим к локу М62. если он действительно идет маршрутом Х, то все совпало и пока все идет нормально - решение: снизить скорость лока М62, сменить статус блока А (>> если не совпало - ошибка "обнаружен поезд-призрак"; выкл питания рельс; блок в статус "Глюк")
С другой стороны, есть старый добрый релейный подход для автодвижения. Возможно его запрограммировать будет легче, но тут я не могу помочь, т.к. просто не знаю принципов. И непонятно как ее визуализировать для человека, чтобы было понятен смысл происходящего.