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

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

Автор Тема: Отчет каждые 20 минут  (Прочитано 1167 раз)

ADilet

  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Отчет каждые 20 минут
« : 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.
« Изменён: 21 Октября 2021, 09:47:56 от Simple_Scada »

Timothy Clement

  • Постоялец
  • ***
  • Сообщений: 149
  • ОАО Борисовский завод "Металлист"
    • Просмотр профиля
    • Полымя
Re: Отчет каждые 20 минут
« Ответ #1 : 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.