Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: ADilet от 21 Октября 2021, 06:22:45

Название: Отчет каждые 20 минут
Отправлено: ADilet от 21 Октября 2021, 06:22:45
Здравствуйте подскажите пожалуйста, как сделать отчет каждые 20 минут

Этот скрипт отсчитывает 20 минут с запуска проекта, а мне надо каждые 20 минут  одного часа, а именно 0 минута, 20 минута и 40 минута 

Код: (delphi)
  INTERVAL = 1200;  // Интервал таймера в секундах
var
  aSeconds: Int64;

 procedure WriteValueToTable;
 var
 aQuery: string;

begin
 aQuery := 'INSERT IGNORE INTO `arr` (`timestamp`, `value`, `avg`, `av`)' +
 'VALUES (' +
   MySQLDateTime(Now, dttFull) + ', ' +  // Конвертирует дату и время в строку в формате MySQL
   QuotedStr(Teg2.AsStr) + ', ' +
   QuotedStr(Teg220.AsStr) + ', ' +
   QuotedStr(Tag230.AsStr) +
 ')';

RunSQL(aQuery, nil, 0);
end;


begin
  { если vrTimer ещё не инициализирована, то инициализируем её и прерываем скрипт }
  if vrTimer.Value < 1 then
    vrTimer.Value := Now;

  { получаем кол-во секунд с последнего срабатывания таймера }
  aSeconds := SecondsBetween(Now, vrTimer.AsDateTime);

  { если прошло больше, чем INTERVAL секунд с последнего срабатывания таймера }
  if aSeconds >= INTERVAL then
  begin
    WriteValueToTable;    // вызываем подпроцедуру вставки в БД
    vrTimer.Value := Now;
  end;

end.
Название: Re: Отчет каждые 20 минут
Отправлено: Timothy Clement от 21 Октября 2021, 08:57:06
Здравствуйте. В том же скрипте "прошла секунда"
Код: (delphi)
var
  currSecond, currMinute : Integer;
begin

  currMinute := MinuteOf(Now);         //Получаем значение текущих минуты
  currSecond := SecondOf(Now);         //и секунды

  if (currMinute=0) or (currMinute=20) or (currMinute=40) then   //Текущая минута 0, 20 или 40
    if currSecond=0 then                                        //Секунда 0 чтобы отчет выполнился 1 раз
      begin
        //------ формирование отчёта
      end;

end.