Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: Как изменить время таймера.  (Прочитано 6420 раз)

kknm

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

Перефразирую вопрос.
Как сделать приращение ко времени таймера используя переменную таймера ?
 Непонятен механизм переменной таймера. Допустим у таймера есть переменная vrTime  и есть кнопки управления им. Сделаем еще поле и привяжем его к переменной vrTime. Запустим таймер  и затем поставим на паузу . Изменим в поле vrTime  и снова запустим - время сбросится на прежнее время. 
« Изменён: 27 Сентября 2017, 08:29:35 от kknm »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3214
    • Просмотр профиля
    • Simple-Scada
Re: Как изменить время таймера.
« Ответ #1 : 27 Сентября 2017, 11:26:50 »
Здравствуйте.

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

Цитировать
Запустим таймер  и затем поставим на паузу . Изменим в поле vrTime  и снова запустим - время сбросится на прежнее время.
Для запуска таймера с какого-то определённого времени у процедуры TimerStart есть отдельный параметр который задаёт с какого времени таймер будет стартовать. Таким образом Вы можете задать любое время.

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

Скрипт "Полностью запущен". Загружает сохранённое значение таймера из файла:
Код
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.

Но нужно учитывать, что сохранение в файл будет выполняться только при плановой остановке проекта, поэтому в случае аварийного завершения работы сервера-скады, или аварийного выключения компьютера значение таймера не сохранится.

kknm

  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Re: Как изменить время таймера.
« Ответ #2 : 27 Сентября 2017, 15:58:41 »
Я то это и подозревал, но в руководстве по скриптам нет прмера с использованием второй переменной.

Тем не менее...
Попробовал по Вашему, но не тут то было... Все происходит как я и писал ранее. Таймер сбрасывается , после правильного прочтения из файла и последующем запуске таймера. Скрипты повесил на кнопки.
« Изменён: 27 Сентября 2017, 16:07:58 от kknm »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3214
    • Просмотр профиля
    • Simple-Scada
Re: Как изменить время таймера.
« Ответ #3 : 27 Сентября 2017, 16:23:41 »
У Вас для запуска таймера используется такой код?

Код
begin
  TimerStart(vrTimer, vrTimer.AsDateTime); 
end.

kknm

  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Re: Как изменить время таймера.
« Ответ #4 : 27 Сентября 2017, 16:25:37 »
Я копировал Ваши примеры, только у меня переменная не vrTimer, а vrTime .

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1400
    • Просмотр профиля
Re: Как изменить время таймера.
« Ответ #5 : 27 Сентября 2017, 16:30:23 »
Если хотите, можете прислать Ваш проект на support@simple-scada.com - сделаем пример в нем и вышлем Вам.
« Изменён: 27 Сентября 2017, 16:30:39 от Simple-Scada »

kknm

  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Re: Как изменить время таймера.
« Ответ #6 : 27 Сентября 2017, 16:42:36 »
Спасибо, разобрался. Оказывется из режима пауза(статус = 0) этот способ не прокатывает. Если устанавливать вторую переменную  при сброшенном таймере (статус= -1) то работает.