У вас ошибка в макросе ищите сами где, у меня в симуляции тоже 2 выдаёт, хотя вы пишите, что в симуляции всё работает.
Зачем вам вообще строка newMode := cMode * 65536 + w;
и SHR на выходе
если вы можете прямо выход задать 1 или 0. Сами себя запутали.
Макрос можно до 1 строки сократить. Без IF.. THEN вообще.
Например так:
Код:
function newMode: bool;
var_input
prevMode : uDint;
Manual,
Auto: bool;
end_var
newMode:= not Auto and manual;
end_function
А на выходе поставить преобразование в UDINT
1 Макрос Тест.jpg