PDA

Просмотр полной версии : ПЛК210 + МВ210-202 + Энкодер



Vadim_71
18.06.2024, 09:01
Коллеги, доброго времени суток!
Опять у меня проблема возникла, прошу подсказки. Счётчик кабеля реализован на энкодере, который подключен к модулю МВ210-202 а модуль к ПЛК210. Вывод информации о количестве импульсов, пересчёт в метры, скорость всё норм. Но вот при отключении системы от питания счёт обнуляется и никак я не пойму как сохранить счёт и потом к нему уже прибавлять новые импульсы?
Попробовал записывать в энергонезависимую память значения импульсов и потом к нему прибавлять новые импульсы, так само по себе потом начинает все прибавляться даже когда счетчик стоит)
Помогите советом

EFrol
18.06.2024, 10:05
Может так попробовать:

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

Vadim_71
19.06.2024, 10:17
Всем привет! Решил проблему с памятью, оказалось всё просто, на всякий случай прикреплю скрин рабочего кода, может кому пригодиться
76719