Может так попробовать:
dwOldLength - предыдущее значение
dwLength - текущее значение от МВ210-202
diTotalLength - накопленное энергонезависимое
ton - таймер обновления
Код:ton(IN := TRUE, PT := T#1s); IF ton.Q THEN IF dwLength - dwOldLength > 0 THEN // Счет вперед IF dwLength - dwOldLength > 4000000000 THEN // Переполнение при счете назад diTotalLength := diTotalLength - (4294967295 - dwLength + dwOldLength); ELSE diTotalLength := diTotalLength + (dwLength - dwOldLength); // Накапливаем END_IF ELSE IF dwOldLength - dwLength > 0 THEN // Счет назад IF dwOldLength - dwLength > 4000000000 THEN // Переполнение при счете вперед diTotalLength := diTotalLength + (4294967295 - dwOldLength + dwLength); ELSE diTotalLength := diTotalLength - (dwOldLength - dwLength); // Накапливаем END_IF END_IF dwOldLength:=dwLength; // Сохраним текущую позицию ton(IN:=FALSE); // Перезапустим таймер END_IF




Ответить с цитированием