А вот ты ж пишешь так:
Код:
ftrigIsClosed: F_TRIG; //триггер спада
rtrigIsClosed: F_TRIG; //триггер фронта
Это не ошибка?

Про логику - я про этот код говорю:
Код:
//если ворота выключены, то остальные сигналы также false
xgpioButtonEnabled:=xButtonEnabled AND xEnabled;
xOpen:=xOpen AND xEnabled AND NOT xManual;
xClose:=xClose AND xEnabled AND NOT xManual;
Почему у тебя он в начале стоит? Я не весь код смотрел, но не получается ли так, что ты по xEnabled выставил xOpen/xClose в FALSE, а потом поменял их?