Может так попробовать:
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