Спасибо, проверим в реале.
Вид для печати
Спасибо, проверим в реале.
petera всё правильно написал, но тут нужно не только счётчик получать, но и реагировать на него быстрее, чем ПЛК цикл.
Такой код работает в симуляторе: total := total + WORD_TO_DWORD(newValue - prevValue);
Но это не решает проблему "быстрого управления" -- эта проблема решится PRU программой.
A: WORD;
С: WORD := 65530;
A:=0-C;
Получится "6".
Простой пример
https://www.youtube.com/watch?v=bDNrHoHE73UКод:PROGRAM PLC_PRG
VAR
old: WORD;
curr_count: WORD := 65500;
NOTAL_count: WORD;
PUSK: BOOL;
TON1: TON;
state: INT;
END_VAR
TON1(IN:=NOT TON1.Q , PT:= t#100ms );
CASE state OF
0:
IF PUSK THEN
old:=curr_count;
state:=1;
END_IF
1:
curr_count:=curr_count + BOOL_TO_INT(TON1.Q);
NOTAL_count:=curr_count-old;
IF NOT PUSK THEN
NOTAL_count:=0;
state:=0;
END_IF
END_CASE
Да, в этом виде сломается.
Просто хотел ответить на частный вопрос
И показал, что обнулять счетчик не надо.Цитата:
Если обнулять счетчик в принципе невозможно вообще никак и нигде, то какой смысл в этом счетчике?
Формат регистра счетчика - WORD, т. е. 0…65535 по абсолютному значению, т. е. придется программно учитывать переполнение аппаратного счетчика?
Правильно будет так: total := total + WORD_TO_INT(newValue - prevValue);