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