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

Тема: Сброс CLOCK блока BLINK

  1. #11

    По умолчанию

    Цитата Сообщение от amn Посмотреть сообщение
    Я же Вам в 3 посте выложил альтернативный блок.
    Благодарю! Только что попробовал. Моя проблема с стандартным BLINK решена.
    Нужно потестить в моей среде, проверить на подводные камни.

  2. #12
    Пользователь
    Регистрация
    28.08.2011
    Адрес
    Ростов-на-Дону
    Сообщений
    18

    По умолчанию

    Я сталкивался с такой проблемой BLINK-а, выходил из положения просто: блинк ставил как генератор а в CTU делал выход, тем самым увеличил размер временной переменной и стало по барабану как где блин этот застрял.

  3. #13

    По умолчанию

    Только он даже не импортируется.

  4. #14

    По умолчанию

    Цитата Сообщение от Макс13 Посмотреть сообщение
    Только он даже не импортируется.
    Это файл BLNK.EXP для Импорта в среде CoDeSys V2.3, всё импортируется, ниже код
    Скрытый текст:
    Код:
    FUNCTION_BLOCK blnk
    VAR_INPUT
    	start: BOOL;		(*разрешение работы блока*)
    	hi: TIME:=t#3s;	(*продолжительность включенного выхода*)
    	lo: TIME:=t#1s;	(*продолжительность отключенного выхода*)
    END_VAR
    VAR_OUTPUT
    	q: BOOL;	(*выход*)
    END_VAR
    VAR
    	step: BYTE;	(*шаг выполнения блока*)
    	TOF1: TOF;	(*используем один таймер для включенного и отключенного сигнала*)
    	pt: TIME;		(*сюда пишем текущую ставку для таймера*)
    	F_TRIG_start: F_TRIG;	(*отлавливаем отключение блока*)
    END_VAR
    (*  ===================================================  *)
    
    TOF1(IN:=FALSE, PT:= pt);			(*вызываем таймер с нужным временем*)
    F_TRIG_start(CLK:= start, Q=> );	(*отлавливаем отключение блока*)
    IF F_TRIG_start.Q THEN		(*если блок отключили*)
    	pt:=t#0s;				(*обнуляем время для таймера*)
    	q:=FALSE;			(*отключаем выход*)
    	step:=0;	(*переходим к шагу ожидания включения блока*)
    END_IF
    
    CASE step OF
    0:
    	IF start THEN		(*если блок включен*)
    		pt:=hi;					(*выставляем время включенного сигнала для таймера*)
    		TOF1(IN:=TRUE, PT:= pt);	(*включаем таймер*)
    		q:=TRUE;				(*включаем выход*)
    		step:=1;			(*переходим к ожиданию срабатывания таймера*)
    	END_IF
    1:
    	pt:=hi;					(*выставляем время включенного сигнала для таймера*)
    	IF NOT TOF1.Q THEN		(*если таймер отработал*)
    		pt:=lo;						(*выставляем время отключенного сигнала для таймера*)
    		TOF1(IN:=TRUE, PT:= pt);	(*включаем таймер*)
    		q:=FALSE;				(*отключаем выход*)
    		step:=2;			(*переходим к ожиданию срабатывания таймера*)
    	END_IF
    2:
    	pt:=lo;				(*выставляем время отключенного сигнала для таймера*)
    	IF NOT TOF1.Q THEN		(*если таймер отработал*)
    		step:=0;
    	END_IF
    END_CASE
    Последний раз редактировалось kondor3000; 22.02.2026 в 09:51.

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

    По умолчанию

    можно и проще
    Код:
    FUNCTION_BLOCK blnk
    VAR_INPUT
    	start: BOOL;	(*разрешение работы блока*)
    	hi: TIME:=t#3s;	(*продолжительность включенного выхода*)
    	lo: TIME:=t#1s;	(*продолжительность отключенного выхода*)
    END_VAR
    VAR_OUTPUT
    	q: BOOL;	(*выход*)
    END_VAR
    VAR
    	b0,b: BLINK;
    END_VAR
    ------
    b := SEL(start, b0, b);
    b(ENABLE := start, TIMELOW := lo, TIMEHIGH := hi, OUT => q);

  6. #16

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    можно и проще
    Код:
    FUNCTION_BLOCK blnk
    VAR_INPUT
    	start: BOOL;	(*разрешение работы блока*)
    	hi: TIME:=t#3s;	(*продолжительность включенного выхода*)
    	lo: TIME:=t#1s;	(*продолжительность отключенного выхода*)
    END_VAR
    VAR_OUTPUT
    	q: BOOL;	(*выход*)
    END_VAR
    VAR
    	b0,b: BLINK;
    END_VAR
    ------
    b := SEL(start, b0, b);
    b(ENABLE := start, TIMELOW := lo, TIMEHIGH := hi, OUT => q);
    Вроде там в первом посте было про проблему со стандартным блинком при изменении времени его работы...

    PS Хотя судя по комментариям и таймеры оба обнулили и бит включения сбросили...
    Последний раз редактировалось МихаилГл; 22.02.2026 в 20:34.

  7. #17

    По умолчанию

    OSCAT-овский генератор, можно скорректировать под себя:
    Код:
    FUNCTION_BLOCK GEN_PULSE
    VAR_INPUT
        ENQ : BOOL := TRUE;
        PTH : TIME;
        PTL : TIME;
    END_VAR
    VAR_OUTPUT
        Q : BOOL;
    END_VAR
    VAR
        tx: TIME;
        tn: TIME;
        init: BOOL;
    END_VAR
    
    
    (*
    version 1.5    8. apr. 2011
    programmer     hugo
    tested by        oscat
    
    
    GEN_PULSE uses the internal sps timer to generate a continuous output waveform with programmable high and low time.
    the accuracy of gen_pulse is depending on the system timer.
    when time is 0 the high and low times are exactly one cycle.
    ENQ = TRUE will start and ENQ = FALSE will stop the generator.
    
    
    *)
    
    
    IF enq THEN
        tx := TIME();
        IF NOT init THEN init := TRUE; tn := tx; Q := TRUE; END_IF; // можно изменить на нужное состояние Q при запуске
        IF PTL <= t#0s THEN Q := TRUE;
        ELSE
            IF tx - tn >= SEL(Q, PTL, PTH) THEN
                tn := tn + SEL(Q, PTL, PTH);
                Q := NOT Q;
            END_IF;
        END_IF;
    ELSE
        Q := FALSE;
        init := FALSE;
    END_IF;
    
    
    
    
    (* revision history
    hm    29. jun. 2008    rev 1.0
        original version
    
    
    hm    23. nov. 2008    rev 1.1
        set default for enq to be true
    
    
    hm    18. jul. 2009    rev 1.2
        improved performance
    
    
    hm    13. nov. 2009    rev 1.3
        corrected error
    
    
    hm    16. feb. 2011    rev 1.4
        corrected an error when timer overflows
    
    
    hm    8. apr. 2011    rev 1.5
        ptl and pth was exchanged
    
    
    1exan 05042024
        for 0 PTL, Q is on 
    
    
    *)

  8. #18

    По умолчанию

    Цитата Сообщение от amn Посмотреть сообщение
    Для тех, кто не пробовал:
    3. При отключении входа ENABLE выход замораживается в текущем состоянии (может остаться как включенным, так и выключенным).
    это не баг, это фича
    лечится в 2.3 элементарно - на выходе ставится AND и по второму каналу вход БЛИНКА

  9. #19

    По умолчанию

    Цитата Сообщение от In_Da_Cher_A Посмотреть сообщение
    это не баг, это фича
    лечится в 2.3 элементарно - на выходе ставится AND и по второму каналу вход БЛИНКА
    Но ведь это не исцеление - после прихода разрешения Enable=true включение произойдёт с произвольного первого состояния на произвольную длительность.

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

    По умолчанию

    Цитата Сообщение от FPavel Посмотреть сообщение
    Но ведь это не исцеление - после прихода разрешения Enable=true включение произойдёт с произвольного первого состояния на произвольную длительность.
    Поэтому в этой некротеме самое надежное лечение - ампутация всего:
    Код:
    VAR
    	b0,b: BLINK;
    ------
    b := SEL(start, b0, b);
    ...

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

Похожие темы

  1. Секундомер на основе блока BLINK
    от a_gricaj в разделе СПК1xx (архив)
    Ответов: 6
    Последнее сообщение: 24.02.2016, 10:56
  2. ПР114 Clock проблема
    от Kris в разделе Программируемые реле
    Ответов: 15
    Последнее сообщение: 22.11.2013, 17:39
  3. ФБ CLOCK в МОДУС 5680 v.2.86 с OwenLogic 1.7beta50
    от Elka в разделе Модус 5680
    Ответов: 4
    Последнее сообщение: 31.05.2013, 14:22
  4. Ответов: 8
    Последнее сообщение: 19.01.2009, 15:28
  5. Где blink?
    от Дитрих в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 26.11.2008, 09:32

Ваши права

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