Цитата Сообщение от melky Посмотреть сообщение
Так вот именно, что вы решили маааааленький кусочек логики, не думая о том, что будет дальше, и как, ограничившись этой логикой, будете строить дальнейшие алгоритмы.
Я в вашей же логике показал на элементарном примере, что свалившись в ошибку, вы тут же теряете два состояния. Вы не ответили на вопрос, как вы их скопируете для остальных?
То есть банально, алгоритм далее должен знать при каком направлении движения произошла ошибка?

И ещё момент, вы не учитываете архитектуру ПР200, Тут на каждые ваши 2 бита вы будете тратить 4 байта, спрашивается где плюшки?
Я сейчас не понимаю в чём вопрос...
Есть входные переменные (события), которые логически объединяются и формируют (состояние), и это не просто состояния, а логические состояния
IF DI1=1 or DI2=1 or (DI3=0 and DI4=0) Then
VAR1=0 //состояние (стоп)
END
IF DI5=1 or DI6=1 or (DI7=0 and DI8=0) Then
VAR1=1 //состояние (движение +)
END
IF DI1=1 and DI2=1 Then
VAR1=2 //состояние (движение -)
END
IF DI5=1 and DI6=1 Then
VAR1=3 //состояние (авария)
END

По такому же принципу можно сформировать дополнительные условия перехода из одного состояния в другое
1. состояния могут изменяться в зависимости от входных сигналов (событий)
2. состояния могут изменяться в зависимости от изменения состояния других "объектов"

Состояния могут взаимодействовать как через логические функции AND4, OR4, NOT4, так и через операторы IF, CASE и т.д.

В результате получается логика более высокого уровня, которая так же может быть реализована аппаратно и имеет свою математику !
Логические законы работают на уровне состояний !!!

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