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

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

Автор Тема: Расписание.  (Прочитано 704 раз)

matiem

  • Новичок
  • *
  • Сообщений: 8
    • Просмотр профиля
Расписание.
« : 02 Октября 2026, 08:36:21 »
Подскажите, пожалуйста, как элемент расписание 'понимает'  какой сегодня день? Пытаюсь создать форму где будет выведено на экран когда оно выключится (если работает), или когда включится (если не работает). но, пока у меня выводит только первую попавшуюся (понедельник вместо пятницы)

pan2000

  • Постоялец
  • ***
  • Сообщений: 239
    • Просмотр профиля
Re: Расписание.
« Ответ #1 : 04 Октября 2026, 00:31:41 »
  Здравствуйте.

  Интервалы расписания можно рассматривать как двумерный массив с фиксированным числом строк (день расписания) и переменным числом столбцов (интервал расписания). Оба индекса массива начинаются с 0. Из текущей даты функцией DayOfTheWeek(Now) можно получить день недели, но в диапазоне 1 - 7.
  Определить время перехода расписания в противоположное, относительно текущего, состояние можно по анализу интервалов. Для удобства границы интервалов считаются в секундах относительно начала суток вызова скрипта.
  Однако следует учитывать, что интервалы дня не упорядочены и могут перекрываться, т.е. анализ следует вести по всем интервалам расписания, а с учётом цикличности расписания - по сегодня дважды.
  Алгоритм заключается в движении по времени суток временной метки, начиная со времени вызова скрипта и соответствующей состоянию расписания на момент вызова. Все интервалы последовательно (а, для включенного состояния ещё и многократно) сравниваются с временной меткой, и по результатам принимается решение о перемещении метки. По достижении конца суток принимается решение о переходе к следующим суткам или завершении процесса.
  Алгоритм работает как при отсутствии интервалов в расписании, так и полностью "закрашенном" в любом порядке расписанием.
  Пример во вложении.
« Изменён: 04 Октября 2026, 01:16:03 от pan2000 »