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

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

Автор Тема: Как сделать запуск кода по расписанию допустим в 12-30  (Прочитано 1523 раз)

spkzl

  • Новичок
  • *
  • Сообщений: 8
    • Просмотр профиля
День добрый.
Мне осталось из переменной DataTime вытащить часы и минуты есть оператор который это сделает или пользоваться преобразованием строки?
« Изменён: 27 Января 2023, 12:03:52 от spkzl »

ART63

  • Постоялец
  • ***
  • Сообщений: 151
    • Просмотр профиля
Функции HourOf(Var TDateTime) и MinuteOf(Var TDateTime)

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1365
    • Просмотр профиля
Здравствуйте.

Если требуется включать/выключать какое-либо оборудование по расписанию, то для этого можно использовать компонент "Расписание". Если нужно выполнять какие-либо действия из скрипта через заданный интервал времени(по таймеру), то пример такого скрипта можно найти по ссылке. Если требуется выполнять скрипт в какое-то заданное время(например в 12-30), то можно использовать скрипт с типом события "Прошла секунда", в котором сравнивать текущее время с заданным:
Код: (delphi)
begin
  // если сейчас 12:30
  if (HourOf(Now) = 12) and (MinuteOf(Now) = 30) then
  // , то выполнить какое-то действие
end.
Если нужно выполнять скрипт в начале заданного часа, то используйте скрипт с типом события "Прошел час".

Цитировать
Мне осталось из переменной DataTime вытащить часы и минуты есть оператор который это сделает или пользоваться преобразованием строки?
Методы для работы с датой/временем можно найти в руководстве по ссылке. Функция HourOf - возвращает час дня. Функция MinuteOf - возвращает минуты. Для сравнения значений даты/времени можно использовать функцию CompareDateTime.

PavelSh

  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Если требуется выполнять скрипт в какое-то заданное время(например в 12-30), то можно использовать скрипт с типом события "Прошла секунда", в котором сравнивать текущее время с заданным:
Я верно понимаю, что он успеет выполниться 60 раз, пока время не будет 12-31?
« Изменён: 30 Января 2023, 16:49:30 от Simple-Scada »

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1365
    • Просмотр профиля
Да, забыли об этом упомянуть. Проще всего в код, который идет после условия добавить проверку вида: если требуемое действие не выполнено, то выполнить его. Или можно создать внутреннюю переменную с типом Word для хранения прошлой минуты (в примере vrLastMinute) и использовать такой скрипт:
Код: (delphi)
begin
  // если сейчас 12:30
  if (HourOf(Now) = 12) and (MinuteOf(Now) = 30) and (vrLastMinute.AsInt <> MinuteOf(Now)) then
  begin
    // , то выполнить какое-то действие
  end;
  vrLastMinute.Value := MinuteOf(Now);
end.

spkzl

  • Новичок
  • *
  • Сообщений: 8
    • Просмотр профиля
Спасибо. все получилось.