PDA

Просмотр полной версии : Сохранить параметры накопителя



Anders
19.02.2019, 14:31
Добрый день!

В MS4 сделал программку, в ней есть время наработки. Данные (часы, минуты) накапливаются пока работает оборудование. Но встал вопрос - если питание контроллера исчезнет, то при его включении все данные слетят и копить надо будет с нуля, т. к. генератор времени (ФБ ONTIME) начнет работать с нуля и ноль передаст в сохраняемый параметр.
Как можно выходной параметр отправить в буфер, а при включении контроллера к текущему накоплению прибавилась бы величина из буфера, т. е. продолжилось бы накопление? Пробовал на ФБ и на ST. Не получилось, не могу сообразить.

KrAssor
20.02.2019, 15:40
Из хелпника:

Стандартный таймер

Значение стандартного таймера – целое 32-разрядное число миллисекунд. т.е. максимальное значение составляет (232 - 1) мс = t#49d17h02m47s295ms, после чего таймер начинает новый цикл отсчета с 0 (т.н. переполнение таймера). При переполнении разность timeN()-timeN-1() отрицательна (N – номер цикла, на котором возникло переполнение). Для корректного вычисления длины временного интервала (что требуется, например, при интегрировании) нужно использовать предварительный перевод значений функции time() в тип данных DWORD (см. Особенности битовых строк). Следующий код корректно вычисляет длительность цикла deltaT:

var deltaT, T_current, T_last:TIME; end_var

T_current:=time();

deltaT:=dword_to_time(time_to_dword(T_current)-time_to_dword(T_last));

T_last:=T_current;

в конце добавляете Sum := sum + deltaT; , перед вычислением дельты ставить if конструкцию для проверки вашего контрольного сигнала. У параметра Sum свойство "Сохранять = да". Можно тоже самое переписать под GET_UTC_TIME() вместо time() и значение наработки хранить в формате Date_and_time (мне кажется так удобнее для дальнейшего вывода в окно).