Цитата Сообщение от kondor3000 Посмотреть сообщение
У вас ошибка в макросе ищите сами где, у меня в симуляции тоже 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
Милый Кондор,
если ты не понял зачем я умножаю на 65536 и потом смещаю на 16 бит, то поучись заново, ок?

По сути.
Мой алгоритм подразумевает цикличность программы исполнения, а не то говно, которое ты предоставил публике.

Ещё раз, для тех кто в танке!

ПОСМОТРИТЕ ВИДЕО и ПРОГРАММУ.
если в программе изменить строку
if not Manual then
на
if Manual=false then

то всё работает на железе.

АУ! РАЗРАБОТЧИКИ
ПРОКОММЕНТИРУЙТЕ!


case prevMode of
0:
if manual then
cMode := 1;
end_if;

1:
if not Manual then
cMode := 2;
end_if;

2: cMode := 2; //приехали
end_case;