Итак. Код у Вас специфический т.к. NOT - побитовая операция, а автоприведение типов в данном случае не работает.
Рассмотрим поведение кода:
В случае IF NOT MANUAL THEN
Ни присваивания, ни приведения типов нет, т.е. идёт сравнение результата NOT MANUAL с нулём.
Результат NOT MANUAL - число UDINT.
Если MANUAL=0 - результат равен 0xFFFFFFFF
Если MANUAL=1 - результат равен 0xFFFFFFFE
если использовать (NOT MANUAL) в IF - всегда будет TRUE, т.к. FALSE =0, а TRUE - это любое значение, что не FALSE.
Вот и происходит такое поведение.
Что делать?
IF (NOT MANUAL=false) then
Ну Вы это и сами нашли.
Нам тоже есть что поправить чтобы среда предупреждала или сама приводила типы.





