Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: NewUser от 07 Марта 2024, 05:48:37

Название: Вопрос по таймерам
Отправлено: NewUser от 07 Марта 2024, 05:48:37
Добрый день, в Simple Scada 2 в разедле  Глобальные процедуры и функции > Время и дата есть таймеры. Которые имееют 4 функции.
Не совсем понимаю как ими пользоваться объясните, пожалуйста.
Я создаю переменную  vrTime типа DataTime.  На рабочем простанстве скады создаю кнопку пуск(Butt) и календерь(Cal), а также текстовый объект(Text).
Далее допустим , что функция Now мне возращает (07.03.2024 10:00).
На каледаре(cal) я ручками выставляю (07.03.2024 10:02).
На кнопку Пуск вешаю скрипт.

Код
begin
    vrTime.Value := Cal.Value;
    TimerStart(vrTime,Now);
end.

К объекту текст я привязываю переменную vrTime и делаю 1 скрипт и вешаю его на 2 сигнала ( по нажаю, и изменилась связанная переменная)

Код
var
  I: Integer;
begin
  Text.text := IntToStr(TimerGetState(vrTime));
end.

По нажатаю кнопки Пуск, таймер стартует это можно видеть по объекту текст т.к он показывает 1, но когда время становится больше либо равно 07.03.2024 10:02 ( значению vrTime , т.е занчение в Cal) , таймер все еще показывает 1 и он стопается.
Вопрос он должен выпасть в -1 или в 0, или я должен ручками его сбрасывать?
Название: Re: Вопрос по таймерам
Отправлено: Simple Scada от 07 Марта 2024, 10:27:32
Здравствуйте.

Данные скрипты так, как Вы описали, работать не будут. Таймерные процедуры рассмотрены по ссылке (https://simple-scada.com/help/script/timers.html). Пример работы с таймерами можно найти в демо-проекте -> страница "Скрипты" -> "Простые скрипты (1)" -> пример №3). Если нужно поставить таймер на паузу, то нужно использовать процедуру "TimerPause (https://simple-scada.com/help/script/timerpause.html)". Если сбросить, то "TimerReset (https://simple-scada.com/help/script/timerreset.html)".

Чтобы при достижении значения переменной "vrTime" значения, заданного в календаре "Cal", таймер останавливался или сбрасывался, в скрипт (на событие "OnDataChange" компонента "Текст" с которым связана переменная "vrTime") нужно добавить соответствующую проверку и выполнение процедур "TimerPause" или "TimerReset":
Код: (delphi)
begin
  // если значение таймера >= значение календаря, то ставим таймер на паузу
  if CompareDateTime(vrTime.AsDateTime, Cal.AsDateTime) >= 0 then
    TimerPause(vrTime);

  Text.Text := IntToStr(TimerGetState(vrTime));
end.
Также, в скрипте на кнопку Пуск нужно удалить строку "vrTime.Value := Cal.Value;"

Если не разберетесь, то пришлите для проверки на support@simple-scada.com текущую версию Вашего проекта из директории "..\Simple-Scada 2\Projects\" и укажите скрипты, которые нужно проверить. Опишите подробно, какую именно задачу Вы пытаетесь решить? Если требуется включать/выключать какое-либо оборудование по расписанию, то для этого можно использовать компонент "Расписание (https://simple-scada.com/help/manual/schedule.html)".