Показано с 1 по 10 из 30

Тема: реализация годового графика включения/выключения

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #14
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    4,110

    По умолчанию

    А вопрос еще актуальный?

    Хотя, посмотрел, что ТС больше не появлялся
    Наверно обиделся

    ЗЫ. Может еще вернется?
    Код:
    PROGRAM PLC_PRG
    VAR RETAIN PERSISTENT
        Schedule: ARRAY [1..366, 1..2] OF TOD; (* Расписание: Время Откл, Время Вкл. в формате Time Of Date*)
    END_VAR
    VAR CONSTANT
        dpm: ARRAY [1..12] OF INT := 31, 28, 31,30, 31, 30, 31, 31, 30, 31, 30, 31; (*Чисол дней в месяце*)
        nulldt: SystemTimeDate;    (*нужна для обнуления параметров*)
    END_VAR
    VAR
        CurTimeExInst: CurTimeEx;
        CurSystemTimeDate: SystemTimeDate;
        CurSysTime64: SysTime64;
        year: INT;
        second: INT;
        day: INT;
        hour: INT;
        minute: INT;
        month: INT;
        LEAP_YEAR: BOOL;        (*Флаг високосного года*)
        Curr_DAY: INT;        (*Номер дня в году*)
        i: INT;
        Now: TOD;        (*Текущее время*)
        Stop: TOD;        (*Время выключения*)
        Start: TOD;        (*Время включения*)
        Light: BOOL;        (*Освещение вкл.*)
    END_VAR
    CurSystemTimeDate:=nulldt;
    CurTimeExInst(TimeDate := CurSystemTimeDate, SystemTime := CurSysTime64);
        year :=CurSystemTimeDate.Year;
        month :=CurSystemTimeDate.Month;
        day :=CurSystemTimeDate.Day;
        hour :=CurSystemTimeDate.Hour;
        minute :=CurSystemTimeDate.Minute;
        second :=CurSystemTimeDate.Second;
    (*------------------------------------------------------------------------*)
    LEAP_YEAR := SHL(year,14) = 0; (*Проверить високосный год*)
    
    (*номер дня в году*)
    Curr_DAY:=day + BOOL_TO_INT(month > 2 AND LEAP_YEAR);
    FOR i:=1 TO 12 DO
        IF i < month THEN Curr_DAY:=Curr_DAY + dpm[i] ; END_IF
    END_FOR
    (*------------------------------------------------------------------------*)
    
    Now := DWORD_TO_TOD( INT_TO_DWORD(SECOND)*1000+ INT_TO_DWORD(MINUTE) * 60000 + INT_TO_DWORD(HOUR) * 3600000);
    
    (*Вкл/Выкл здесь*)
    Stop:=Schedule[Curr_DAY, 1];
    Start:=Schedule[Curr_DAY, 2];
    IF stop < start THEN
        Light := start <= Now OR Now < stop;
    ELSE
        Light := start <= Now AND Now < stop;
    END_IF;
    Бесплатно!
    Вот как вбивать это расписание? Здесь гораздо интересней задачка.
    Последний раз редактировалось petera; 08.04.2016 в 14:20.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Мой канал на РУТУБЕ
    https://rutube.ru/channel/23641433/
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

Похожие темы

  1. Ответов: 21
    Последнее сообщение: 26.05.2016, 19:02
  2. Ответов: 4
    Последнее сообщение: 12.07.2015, 11:48
  3. Ответов: 4
    Последнее сообщение: 28.03.2014, 14:51
  4. Ответов: 6
    Последнее сообщение: 06.02.2014, 15:31
  5. УТ1 с коррекцией выключения по восходу
    от Юрий_Уфа в разделе Эксплуатация
    Ответов: 1
    Последнее сообщение: 22.03.2012, 12:28

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •