Цитата Сообщение от Евгений Пашигоров Посмотреть сообщение
Пунктом "Очистить все" действительно, я не пользуюсь (даже не знаю, что он делает). Всегда делаю "Компилировать все".

Все изменения команды на вход делаются выше по коду. Потом один раз вызывается этот ФБ.
Мне тоже непонятно ваше высказывание. Пришла команда отработать цилиндру - включить таймер, надо считать время работы цилиндра.
А CASE и IF вообще братья-близнецы. CASE только намного лучше читается.

Непонятная мне необходимость в указателях! А зачем они вам?

Это точно. Ошибку не нашел.
1) Полностью очищает папку с проектом и при следующей компиляции происходит полная "сборка проекта" с нуля - онлайн изменения при этом невозможны. Пару раз встречалась такая ситуация. Если у вас не было ошибок в коде 100% должно было бы помочь.
2) Про таймеры встречал что-то наподобие такого кода и потом люди удивлялись почему выход на таймере выдаёт TRUE. (Там было нечто похожее только IF'ов было больше человек потерялся).
VAR
x: BOOL:=TRUE;
tTON: TON;
END_VAR
IF x THEN
tTON(IN:=x, PT:=T#10s);
x:=FALSE;
END_IF
tTON();
3) Про Case по мне так не очень читабельно получилось - но тут дело каждого.
4) При опросе устройств с Modbus, нестандартными протоколами приходит ответ, который зачастую нужно разбирать и переставлять байты чтобы получить значение. Можно передавать указатель на структуру в которой хранятся нужные данные для ФБ и т.д. Уменьшает количество кода и вероятнее скорость обработки данных, но это лишь моё предположение)