Simple-Scada forum
Simple-Scada 2 => Ваши вопросы => Тема начата: matiem от 02 Октября 2026, 08:36:21
-
Подскажите, пожалуйста, как элемент расписание 'понимает' какой сегодня день? Пытаюсь создать форму где будет выведено на экран когда оно выключится (если работает), или когда включится (если не работает). но, пока у меня выводит только первую попавшуюся (понедельник вместо пятницы)
-
Здравствуйте.
Интервалы расписания (https://simple-scada.com/help/script/tmschedule.html) можно рассматривать как двумерный массив с фиксированным числом строк (день расписания) и переменным числом столбцов (интервал расписания). Оба индекса массива начинаются с 0. Из текущей даты функцией DayOfTheWeek(Now) (https://simple-scada.com/help/script/dayoftheweek.html) можно получить день недели, но в диапазоне 1 - 7.
Определить время перехода расписания в противоположное, относительно текущего, состояние можно по анализу интервалов. Для удобства границы интервалов считаются в секундах относительно начала суток вызова скрипта.
Однако следует учитывать, что интервалы дня не упорядочены и могут перекрываться, т.е. анализ следует вести по всем интервалам расписания, а с учётом цикличности расписания - по сегодня дважды.
Алгоритм заключается в движении по времени суток временной метки, начиная со времени вызова скрипта и соответствующей состоянию расписания на момент вызова. Все интервалы последовательно (а, для включенного состояния ещё и многократно) сравниваются с временной меткой, и по результатам принимается решение о перемещении метки. По достижении конца суток принимается решение о переходе к следующим суткам или завершении процесса.
Алгоритм работает как при отсутствии интервалов в расписании, так и полностью "закрашенном" в любом порядке расписанием.
Пример во вложении.