Показано с 1 по 6 из 6

Тема: Недельный таймер для CDS2.3

  1. #1
    Пользователь Аватар для Сема
    Регистрация
    17.12.2011
    Адрес
    Армавир
    Сообщений
    567

    По умолчанию Недельный таймер для CDS2.3

    Добрый день, уважаемые коллеги, есть какой-нибудь готовый недельный таймер, задаёшь дни недели и время (часы минуты) включения и выключения, есть что-то готовое, не охота пилить??
    kipiaplc.ru - приходите, будет интересно...

  2. #2
    Пользователь Аватар для DIPHENHYDRAMINE
    Регистрация
    14.01.2018
    Адрес
    Воскресенск
    Сообщений
    38

    По умолчанию

    petera выкладывал тут.... напиши ему в личку

  3. #3

    По умолчанию

    Посмотрите на это. Выполнено на Beckhoff, поделюсь, если это то, что нужно

    csc2sx61l0ett69t5z9vt013zyf6pddi.png


    https://fast-project.ru/articles/ezh...egulyator.html
    +79104444236
    С уважением,
    Лапшин Вячеслав

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

    По умолчанию

    Цитата Сообщение от DIPHENHYDRAMINE Посмотреть сообщение
    petera выкладывал тут.... напиши ему в личку
    где-то был пост...

    Захват-01.png

    Код:
    FUNCTION_BLOCK clock_week
    (*включение и отключение выхода по времени с недельной маской разрешения включения.
    Блок использует ФБ real_time, который надо вызывать в начале основной программы*)
    VAR_INPUT
    	on_Hour: WORD;		(*время включения: часы*)
    	on_Minute: WORD;	(*время включения: минуты*)
    	on_Second: WORD;	(*время включения: секунды*)
    
    	of_Hour: WORD;		(*время выключения: часы*)
    	of_Minute: WORD;	(*время выключения: минуты*)
    	of_Second: WORD;	(*время выключения: секунды*)
    
    	en_SU: BOOL;		(*разрешить в восскресение*)
    	en_MO: BOOL;		(*разрешить в понедельник*)
    	en_TU: BOOL;		(*разрешить во вторник*)
    	en_WE: BOOL;		(*разрешить в среду*)
    	en_TH: BOOL;		(*разрешить в четверг*)
    	en_FR: BOOL;		(*разрешить в пятницу*)
    	en_SA: BOOL;		(*разрешить в субботу*)
    END_VAR
    VAR_OUTPUT
    	q: BOOL;	(*выход*)
    END_VAR
    VAR CONSTANT
        nulldt: SystemTimeDate;	(*нужна для обнуления параметров*)
    END_VAR
    VAR
    	uptime: SysTime64;
    	datetime: SystemTimeDate;
    	clock: CurTimeEx;
    	time_on:DWORD;			(*время включения в секундах*)
    	time_of:DWORD;			(*время отключения в секундах*)
    	current_time:DWORD;	(*текущее время в секундах*)
    	on: TIME;
    	cur: DWORD;
    	enable: BOOL;	(*разрешение на включение по маске дней недели*)
    
    END_VAR
    datetime := nulldt;(*обнуляем переменные времени*)
    clock(SystemTime := uptime,		(*текущее время в микросекундах*)
    	TimeDate := datetime);		(*текущее время и дата в развернутом формате*)
    
    (*собираем часы, минуты и секунды в одну кучу - в секунды*)
    time_on:=(on_Hour * 60 + on_Minute) * 60 + on_Second;	(*время включения*)
    time_of:=(of_Hour * 60 + of_Minute) * 60 + of_Second;		(*время отключения*)
    current_time:=(datetime.Hour * 60 + datetime.Minute) * 60 + datetime.Second;	(*текущее время*)
    
    (*Если бит маски установлен, то разрешение для включения получено*)
    CASE datetime.DayOfWeek OF	(*получаем или не получаем разрешение по значению из маски дней недели*)
    0:	(*воскресенье *)
    	enable:=en_SU;
    1:	(*понедельник *)
    	enable:=en_MO;
    2:	(*вторник *)
    	enable:=en_TU;
    3:	(*среда *)
    	enable:=en_WE;
    4:	(*четверг *)
    	enable:=en_TH;
    5:	(*пятница *)
    	enable:=en_FR;
    6:	(*суббота *)
    	enable:=en_SA;
    END_CASE
    
    CASE BOOL_TO_INT(time_on <= time_of) OF
    0:	q:=enable AND NOT(current_time >= time_of AND current_time < time_on);
    1:	q:=enable AND current_time >= time_on AND current_time < time_of;
    END_CASE
    
    (*Или такой вариант
    IF	time_on <= time_of THEN
    	q:=enable AND current_time >= time_on AND current_time < time_of;
    ELSE
    	q:=enable AND NOT(current_time >= time_of AND current_time < time_on);
    END_IF
    *)
    Вложения Вложения
    Последний раз редактировалось petera; 27.01.2023 в 18:28.

  5. #5
    Пользователь Аватар для Сема
    Регистрация
    17.12.2011
    Адрес
    Армавир
    Сообщений
    567

    По умолчанию

    О, спасибо за помощь. А в чем между ними отличие?
    kipiaplc.ru - приходите, будет интересно...

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

    По умолчанию

    Цитата Сообщение от Сема Посмотреть сообщение
    О, спасибо за помощь. А в чем между ними отличие?
    Тот который "n" ( код в моем посте выше), правильно работает даже если время включения больше, чем время выключения. Например включить 20:00, а выключить в 8:00, т.е. включить сегодня, а выключить завтра
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

Похожие темы

  1. недельный таймер. как реализовать?.
    от Алексей Архангельский в разделе Программируемые реле
    Ответов: 4
    Последнее сообщение: 18.01.2021, 10:11
  2. Ответов: 9
    Последнее сообщение: 29.08.2019, 20:03
  3. Недельный таймер
    от Jakan в разделе Программируемые реле
    Ответов: 1
    Последнее сообщение: 13.05.2019, 22:58
  4. Ответов: 3
    Последнее сообщение: 20.09.2017, 10:22
  5. Ответов: 2
    Последнее сообщение: 29.08.2016, 11:15

Ваши права

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