Принципиальной важно оказалось то, что чтение портов в начале цикла, а запись в порт - в конце!
Не помню точно где, или в документации на ПЛК, или на CoDeSys, но это явно указано. У меня тоже программа написана на st с помощью case, так вот, самые важные датчики обрабатываются в конце каждого цикла, чтобы на выходах установились правильные значения.
ЗЫ SPI на ПЛК - круто!