Страница 2 из 4 ПерваяПервая 1234 ПоследняяПоследняя
Показано с 11 по 20 из 40

Тема: Переключатель по заданному времени

  1. #11

    По умолчанию

    Цитата Сообщение от Ger4sim Посмотреть сообщение
    Все написал, все работает как часы! Еще раз огромная благодарность всем!

    Прошу Подсказать еще один вопрос. Ввод времени я сделал через REAL_TO_TIME*1000. (получил 1000 х Миллисекунд). Как мне вывести на панель показание прошедшего времени?
    Т.е. есть функция TimeSee:=TON_gen.ET - как ее показания вывести на панель?
    От я балбес! тоже самое!
    Объявляем TimeSee:REAL а не TIME
    Конвертируем TimeSee:=TIME_TO_REAL (TON_gen.ET/1000)...

  2. #12

    По умолчанию

    Создал программу как функциональный блок.
    добавил в тело программы входы и выходы - не работает.
    Подскажите балбесу - что не так?
    FUNCTION_BLOCK Cicle_TiMeR
    VAR_INPUT
    start: BOOL;
    interval: TIME;
    END_VAR
    VAR_OUTPUT
    //Прошедшее время таймера - индикация
    Time_See:TIME;
    // Выход 1
    OUT1:BOOL;
    // Выход 2
    OUT2: BOOL;

    END_VAR
    VAR
    TON_gen: TON;
    switch: BOOL;
    R_TRIG_start: R_TRIG;
    END_VAR
    _______________________
    R_TRIG_start(CLK:= start);
    IF R_TRIG_start.Q THEN
    TON_gen(IN:= FALSE);
    switch:=FALSE;
    END_IF
    TON_gen(IN:= NOT TON_gen.Q, PT:= interval);
    IF TON_gen.Q THEN
    switch:=NOT switch;
    END_IF
    OUT1:=start AND NOT switch;
    OUT2:=start AND switch;
    Time_See:=TON_gen.ET;
    ______________________________

    Программа

    ADSL:=Timer1.OUT1;
    ADSR:=Timer1.OUT2;
    Timer1.interval:=REAL_TO_TIME (TimeIn)*1000;

    Timer1.start:=TRUE;

    // Вывод пройденого времени
    TimeSee:=TIME_TO_REAL(Timer1.Time_see/1000);

    // Правое направление в работе
    IF ADSR=TRUE THEN RL1:=FALSE;
    END_IF
    // Левое направление в работе
    IF ADSL=TRUE THEN RL1:=TRUE;
    END_IF

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

    По умолчанию

    Цитата Сообщение от Ger4sim Посмотреть сообщение
    Создал программу как функциональный блок.
    добавил в тело программы входы и выходы - не работает.
    Подскажите балбесу - что не так?
    FUNCTION_BLOCK Cicle_TiMeR
    VAR_INPUT
    start: BOOL;
    interval: TIME;
    END_VAR
    VAR_OUTPUT
    //Прошедшее время таймера - индикация
    Time_See:TIME;
    // Выход 1
    OUT1:BOOL;
    // Выход 2
    OUT2: BOOL;

    END_VAR
    VAR
    TON_gen: TON;
    switch: BOOL;
    R_TRIG_start: R_TRIG;
    END_VAR
    _______________________
    R_TRIG_start(CLK:= start);
    IF R_TRIG_start.Q THEN
    TON_gen(IN:= FALSE);
    switch:=FALSE;
    END_IF
    TON_gen(IN:= NOT TON_gen.Q, PT:= interval);
    IF TON_gen.Q THEN
    switch:=NOT switch;
    END_IF
    OUT1:=start AND NOT switch;
    OUT2:=start AND switch;
    Time_See:=TON_gen.ET;
    ______________________________

    Программа

    ADSL:=Timer1.OUT1;
    ADSR:=Timer1.OUT2;
    Timer1.interval:=REAL_TO_TIME (TimeIn)*1000;

    Timer1.start:=TRUE;

    // Вывод пройденого времени
    TimeSee:=TIME_TO_REAL(Timer1.Time_see/1000);

    // Правое направление в работе
    IF ADSR=TRUE THEN RL1:=FALSE;
    END_IF
    // Левое направление в работе
    IF ADSL=TRUE THEN RL1:=TRUE;
    END_IF
    Прежде чем обращаться к переменным ФБ, нужно это ФБ вызвать на выполнение, т.е.
    сначала
    Timer1();
    и только потом
    ADSL:=Timer1.OUT1;
    ADSR:=Timer1.OUT2;
    TimeSee:=TIME_TO_REAL(Timer1.Time_see/1000);

    Кое что можно совместить, например
    Timer1(start:= TRUE, interval:=REAL_TO_TIME (TimeIn)*1000 , OUT1=>ADSL , OUT2=>ADSR );
    Захват-1.png

    Все в точности как Вы делаете при использовании ФБ из библиотек
    Сначала Вы вызываете ФБ
    R_TRIG_start(CLK:= start);

    А уже затем анализируете выход ФБ
    IF R_TRIG_start.Q THEN
    ..........
    Последний раз редактировалось petera; 28.06.2016 в 11:27.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  4. #14

    По умолчанию

    Понял! Все заработало.
    Огромная благодарность!

  5. #15

    По умолчанию

    Насколько я понял - данная реализация переключения построена на изменении "ЗНАКА" переменной, посредством подачи сигнала на запуск таймера TON, а затем, как только (через заданный интервал) на выходе Q таймера TON появляется сигнал, происходит сброс входа IN и происходит смена "знака" переменной. И мгновенно снова подается сигнал на вход таймера TON. и так цикл повторяется. Все верно я понял?

  6. #16

    По умолчанию

    Усложнил задачу.
    Ситуация следующая:
    Необходимо чтобы при включении питания сработал таймер включающий функцию отдувки на заданное время. По окончании данного цикла, включилась левая сторона, по окончании работы левой стороны включился цикл отдувки, затем правая сторона и т.д. (главное чтобы после каждого цикла отдувки включались разные стороны.
    ЧТО я опять сделал неправильно и наверное через Ж... реализовал задачу???


    Вот функц. блок таймера:
    ____________________________
    FUNCTION_BLOCK Timer_CCL
    VAR_INPUT
    Start:BOOL;
    Interval:TIME;
    SwitchIN:BOOL;
    END_VAR
    VAR_OUTPUT
    Signal:BOOL;
    CicleON:BOOL;
    SwitchOUT:BOOL;
    TimeSee:REAL;
    END_VAR
    VAR
    //Триггер
    R_TRIG_start: R_TRIG;
    //Таймер TON
    TON_GEN:TON;
    END_VAR
    _____________________________
    TON_gen(IN:= Start, PT:= interval);
    IF TON_gen.Q THEN (*если пришел импульс от таймера*)
    Start:=FALSE;
    SwitchOUT:=NOT SwitchIN; (* Переключение входной функции на противоположный знак*)
    END_IF
    // Вывод пройденного времени
    TimeSee:=TIME_TO_REAL(TON_gen.ET/1000);
    //Включение Цикла во время работы таймера
    CicleON:=start AND NOT TON_gen.Q; (*Сигнал пока таймер работает*)
    //Подача сигнала из выхода таймера на вывод "Signal" из блока
    Signal:=TON_GEN.Q;
    ______________________________

    Само тело программы


    IF PWR THEN
    IF Start=FALSE THEN Timer_SDUV(Start:=NOT Start, Interval:=REAL_TO_TIME(TimeInSduv*1000), SwitchIN:=Start, Signal=>SignalC, CicleON=>Otduv, SwitchOUT=>Start, TimeSee=>TimeSeeSduv);

    ELSE
    Cicle(Start:=SignalC, Interval:=REAL_TO_TIME(TimeInCicle*1000), SwitchIN:=Switch, Signal=>SignalO, CicleON=>ADS, SwitchOUT=>Switch, TimeSee=>TimeSeeCicle);
    Timer_SDUV(Start:=SignalO, Interval:=REAL_TO_TIME(TimeInSduv*1000), Signal=>SignalC, CicleON=>Otduv, TimeSee=>TimeSeeSduv);
    END_IF
    ADSL:=ADS AND switch;
    ADSR:=ADS AND NOT switch;

    ELSE START:=FALSE; RL1:=FALSE; RL2:=FALSE; RL3:=FALSE; RL4:=FALSE; RL5:=FALSE; RL6:=FALSE; RL7:=FALSE;
    END_IF

    _____________________________

  7. #17
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,243

    По умолчанию

    так подойдет?
    Вложения Вложения
    • Тип файла: rar MCOMM.rar (2.3 Кб, Просмотров: 13)
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  8. #18

    По умолчанию

    Заменил в теле программы "IF PWR THEN
    IF Start=FALSE THEN Timer_SDUV(Start:=NOT Start, Interval:=REAL_TO_TIME(TimeInSduv*1000), SwitchIN:=Start, Signal=>SignalC, CicleON=>Otduv, SwitchOUT=>Start, TimeSee=>TimeSeeSduv);

    на
    R_TRIG_START.CLK:=FALSE;

    IF PWR THEN
    R_TRIG_START(CLK:=PWR, Q=>SignalC);
    Cicle(Start:=SignalC, Interval:=REAL_TO_TIME(TimeInCicle*1000), SwitchIN:=Switch, Signal=>SignalO, CicleON=>ADS, SwitchOUT=>Switch, TimeSee=>TimeSeeCicle);
    Timer_SDUV(Start:=SignalO, Interval:=REAL_TO_TIME(TimeInSduv*1000), Signal=>SignalC, CicleON=>Otduv, TimeSee=>TimeSeeSduv);

    ADSL:=ADS AND NOT switch;
    ADSR:=ADS AND switch;

    ENF_IF
    ....
    Все равно циклы не запускаются....
    Последний раз редактировалось Ger4sim; 28.06.2016 в 21:26.

  9. #19

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    так подойдет?
    Не могу импортировать - пишет "Недопустимые данные на корневом уровне., строка 3, позиция 1."

  10. #20
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,243

    По умолчанию

    в простом редакторе откройте
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

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

Похожие темы

  1. Переключатель режима
    от ALEXSP в разделе Master SCADA 3
    Ответов: 4
    Последнее сообщение: 04.12.2015, 15:33
  2. О времени
    от olegV в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 31.12.2010, 14:12
  3. переключатель
    от Gerkules в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 21.04.2009, 17:57
  4. Tpm138 переключатель каналов
    от Tcom в разделе Эксплуатация
    Ответов: 3
    Последнее сообщение: 28.08.2007, 17:36

Ваши права

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