Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: kknm от 26 Сентября 2017, 12:13:00

Название: Как изменить время таймера.
Отправлено: kknm от 26 Сентября 2017, 12:13:00
v 2.2.5 Сделал проект с использованием таймера из демо примера. При выходе из програмы надо запомнить его данные и прибавить к новым показаниям при следующем запуске скада. Ввожу в календарь нужные данные, время и сама переменная меняются на календаре, но при следующем запуске таймера переменная и сам календарь сбрасываются . Если таймер стоял на паузе, то сбрасываются к тому времени в котором устанавливалась пауза.

Перефразирую вопрос.
Как сделать приращение ко времени таймера используя переменную таймера ?
 Непонятен механизм переменной таймера. Допустим у таймера есть переменная vrTime  и есть кнопки управления им. Сделаем еще поле и привяжем его к переменной vrTime. Запустим таймер  и затем поставим на паузу . Изменим в поле vrTime  и снова запустим - время сбросится на прежнее время. 
Название: Re: Как изменить время таймера.
Отправлено: Simple-Scada от 27 Сентября 2017, 11:26:50
Здравствуйте.

Цитировать
но при следующем запуске таймера переменная и сам календарь сбрасываются
Конечно сбрасывается, ведь таймер основывается на виртуальной переменной и соответственно хранится в оперативной памяти сервера только во время работы проекта.

Цитировать
Запустим таймер  и затем поставим на паузу . Изменим в поле vrTime  и снова запустим - время сбросится на прежнее время.
Для запуска таймера с какого-то определённого времени у процедуры TimerStart (https://simple-scada.com/help/script/timerstart.html) есть отдельный параметр который задаёт с какого времени таймер будет стартовать. Таким образом Вы можете задать любое время.

Для сохранения значения таймера можно использовать запись в двоичный файл. Для этого можно создать в проекте два скрипта, один на событие "Полностью запущен", второй на событие "Остановка проекта".

Скрипт "Полностью запущен". Загружает сохранённое значение таймера из файла:
Код
begin
  if FileOpen('SaveFile.ssf', '') then
    vrTimer.Value := FileReadDateTime
  else
    vrTimer.Value := 0;
end.

Скрипт "Остановка проекта". Сохраняет значение таймера в файл:
Код
begin
  if FileRecreate('SaveFile.ssf', '') then
    FileWriteDateTime(vrTimer.AsDateTime);
end.

Скрипт для запуска таймера. Стартует таймер с того места на котором остановился:
Код
begin
  TimerStart(vrTimer, vrTimer.AsDateTime); 
end.

Пауза таймера:
Код
begin
  TimerPause(vrTimer);
end.

Сброс таймера:
Код
begin
  TimerReset(vrTimer); 
end.

Но нужно учитывать, что сохранение в файл будет выполняться только при плановой остановке проекта, поэтому в случае аварийного завершения работы сервера-скады, или аварийного выключения компьютера значение таймера не сохранится.
Название: Re: Как изменить время таймера.
Отправлено: kknm от 27 Сентября 2017, 15:58:41
Я то это и подозревал, но в руководстве по скриптам нет прмера с использованием второй переменной.

Тем не менее...
Попробовал по Вашему, но не тут то было... Все происходит как я и писал ранее. Таймер сбрасывается , после правильного прочтения из файла и последующем запуске таймера. Скрипты повесил на кнопки.
Название: Re: Как изменить время таймера.
Отправлено: Simple-Scada от 27 Сентября 2017, 16:23:41
У Вас для запуска таймера используется такой код?

Код
begin
  TimerStart(vrTimer, vrTimer.AsDateTime); 
end.
Название: Re: Как изменить время таймера.
Отправлено: kknm от 27 Сентября 2017, 16:25:37
Я копировал Ваши примеры, только у меня переменная не vrTimer, а vrTime .
Название: Re: Как изменить время таймера.
Отправлено: Simple_Scada от 27 Сентября 2017, 16:30:23
Если хотите, можете прислать Ваш проект на support@simple-scada.com - сделаем пример в нем и вышлем Вам.
Название: Re: Как изменить время таймера.
Отправлено: kknm от 27 Сентября 2017, 16:42:36
Спасибо, разобрался. Оказывется из режима пауза(статус = 0) этот способ не прокатывает. Если устанавливать вторую переменную  при сброшенном таймере (статус= -1) то работает.