Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя
Показано с 11 по 20 из 30

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

  1. #11

    По умолчанию

    SA104: Спасибо, за деньги не надо!

  2. #12
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,842

    По умолчанию

    Насколько я понимаю, в таблице для каждого дня первым должно быть событие ВЫКЛ, а вторым ВКЛ?
    Ведь в конструкции "сегодня свет включить в 22-00, в 7-00 выключить" 7-00 относится уже не к сегодня, а к завтра?
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  3. #13
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,254

    По умолчанию

    Цитата Сообщение от KRUPSKIY Посмотреть сообщение
    SA104: Спасибо, за деньги не надо!
    Действительно. На чужом горбу приятней

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

    По умолчанию

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

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

    ЗЫ. Может еще вернется?
    Код:
    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/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  5. #15
    Пользователь
    Регистрация
    09.10.2014
    Адрес
    Киров
    Сообщений
    735

    По умолчанию

    Автор темы хочет бесплатно, а вы ПЛК предлагаете вместо ПР-ки - для всего одной задачи.

  6. #16
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,254

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    Вот как вбивать это расписание? Здесь гораздо интересней задачка.
    Чего там интересного.
    Покласть на ретайн чтоб не стать очередным плакальщиком на форуме.
    При старте прочитать из файла и выложить в модбас-слейв.
    Периодически проверять слейв на изменения, при их наличии (или специальной просьбе от клиента) - сбрасывать в файл.
    Внешним модбас-клиентом менять что-угодно в слейве говоря или нет (все равно обнаружит) об этом
    Или просто тупо перенести файл данных в плк и сказать ему об этом чтоб прочитал.
    Ну и время ему скидывать для синхронизации
    В общем - строк 20..40
    А первоначальные данные - тупо программно заполнить.

    to petera
    А зачем считать дни ?
    .. schedule : array[1..12,1..31,1..2] of tod;
    Первые два индекса правильно возвратит syslibtime )), и дальше без промежуточных переменных
    ..
    stop := schedule[CurSystemTimeDate.Month, CurSystemTimeDate.Day, ..];
    ..
    //какие, блин, длинные имена. Может просто икс ?
    Последний раз редактировалось Валенок; 08.04.2016 в 17:48.

  7. #17
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,842

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    to petera
    А зачем считать дни ?
    .. schedule : array[1..12,1..31,1..2] of tod;
    Первые два индекса правильно возвратит syslibtime )), и дальше без промежуточных переменных
    Красиво,
    но 31 февраля, апреля, июня...?
    уже где-то было...? Почти как 30 Термидора или Брюмера.
    49489233_revolyucionnuyy_kalendar1.jpg
    Год республиканского календаря состоял из 365 или 366 дней, поделённых на 12 месяцев продолжительностью ровно 30 дней, после которых шло подряд 5 или, соответственно, 6 дополнительных дней, которые назывались «санкюлотиды». Название «санкюлотиды» происходит от слова «санкюлоты» — революционно настроенные массы, — и дословно означает «без коротких бархатных брюк» (такую одежду носили буржуазия и дворяне, а городская беднота, разумеется, не могла себе их позволить). Каждый месяц делился на 3 декады по 10 дней. Гражданам предлагалось самим определить, сколько и какие из этих дней будут для них выходными, но для госслужащих устанавливался лишь один выходной день — последний день каждой декады.
    Валенок, Вы наш новый Шарль-Жильбер Ромм!
    Дни считать предлагаю потому, что
    График утвежждается на год местным руководством. В следующем году может поменяться, а может нет. На год я готов помучиться, вручную прописать.
    Хотелось, чтобы "помучился" поменьше и не ошибся в днях года, когда будет "вручную прописывать".
    А с Термидорам или Брюмероми классно бы вышло, только как объяснить начальству, что кроме законных, традиционных каникул в январе, тьфу... в Вандемьере, или вся таки в Нивозе?, еще будут пять санкюлотидов в конце года. Хотя работяги обрадовались бы.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  8. #18

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    Дни считать предлагаю потому, что
    Хотелось, чтобы "помучился" поменьше и не ошибся в днях года, когда будет "вручную прописывать"
    Вы о чём?
    Одно дело перечислять расписание для каждого дня в году (это норм), а другое -- вычислять номер текущего дня в году (это не норм). [1..12, 1..31] -- выглядит вполне разумно.

    Цитата Сообщение от petera Посмотреть сообщение
    но 31 февраля, апреля, июня...?
    А чем мешает 31 февраля?

    Вы бы лучше не о Брюмерах, а о Медведеве подумали: вот снова сделает он летнее время и будет "превед медвед" два раза в год с переводом часов.

  9. #19
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,842

    По умолчанию

    Цитата Сообщение от vladimirisitnikov Посмотреть сообщение
    Вы о чём?
    Одно дело перечислять расписание для каждого дня в году (это норм), а другое -- вычислять номер текущего дня в году (это не норм). [1..12, 1..31] -- выглядит вполне разумно.


    А чем мешает 31 февраля?

    Вы бы лучше не о Брюмерах, а о Медведеве подумали: вот снова сделает он летнее время и будет "превед медвед" два раза в год с переводом часов.
    Летнее время? А что это?

    И чего мне о Медведеве думать? Кто он мне? Никто!
    Мне уж если думать, то о Кобякове Андрее Владимировиче.
    Это он.:
    Последний раз редактировалось petera; 09.04.2016 в 10:20.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  10. #20
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,254

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    Хотелось, чтобы "помучился" поменьше и не ошибся в днях года, когда будет "вручную прописывать".:
    Ну если модбас-клиент пишет, то просто не предлагать ненужные поля
    Да и какая цена ошибки с учетом ручного заполнения а не по восходам-закатам ?
    А для плк 31 февраля просто не наступит - см. сислибтайм

Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя

Похожие темы

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

Ваши права

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