Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя
Показано с 21 по 30 из 40

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

  1. #21

    По умолчанию

    Доработал чуток...
    вот что получилось.

    Так и не могу понять почему циклы не запускаются....
    Объясните пожалуйста в чем ошибка?

    R_TRIG_START.CLK:=FALSE;

    IF PWR THEN

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

    ADSL:=Cicle.CicleON AND NOT switch;
    ADSR:=Cicle.CicleON AND switch;

    // Отдувка в работе
    IF Timer_SDUV.CicleON THEN RL1:=FALSE; RL2:=FALSE; RL3:=FALSE; RL4:=FALSE; RL5:=FALSE; RL6:=FALSE; RL7:=TRUE;
    END_IF

    // Правое направление в работе
    IF ADSR THEN RL1:=FALSE; RL2:=TRUE; RL3:=TRUE; RL4:=FALSE; RL5:=FALSE; RL6:=TRUE; RL7:=TRUE;
    END_IF

    // Левое направление в работе
    IF ADSL THEN RL1:=TRUE; RL2:=FALSE; RL3:=FALSE; RL4:=TRUE; RL5:=TRUE; RL6:=FALSE; RL7:=TRUE;
    END_IF

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

    END_IF
    Последний раз редактировалось Ger4sim; 28.06.2016 в 22:03.

  2. #22

    По умолчанию

    Я понял. Циклы не меняются, потому что на вход подается сигнал и исчезает, соответственно когда таймер заканчивается, нет сигнала на выходе из ФБ...

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

    По умолчанию

    Cамый дельный совет - п#8

  4. #24

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Cамый дельный совет - п#8
    Переведите пожалуйста...

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

    По умолчанию

    Пост нумер 8
    Цитата Сообщение от krollcbas Посмотреть сообщение
    На мой личный взгляд - проще использовать автомат состояний..На CASE..

  6. #26

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Пост нумер 8
    сегодня 3-й день как я начал заниматься программированием в CodeSys... Пока пишу на ST (ввиду прошлых знаний "ТурбоПаскаль").

    Но я все сделал!!! Все работает как часы!!!!
    Screenshot_3.jpg Screenshot_4.jpg Screenshot_5.jpg Screenshot_6.jpg
    Последний раз редактировалось Ger4sim; 28.06.2016 в 23:56.

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

    По умолчанию

    Что сделал - молодец. Касаемо ТР, так КДС2 - брат ТР5.5
    Чисто для справки :

    Необходимо чтобы при включении питания сработал таймер включающий функцию отдувки на заданное время.
    По окончании данного цикла, включилась левая сторона, по окончании работы левой стороны включился цикл отдувки, затем правая сторона и т.д. (главное чтобы после каждого цикла отдувки включались разные стороны
    Код:
    var_input
      питание : bool;
      ...
    end_var
    var_output
      выход_влево, //выходы для примера
      выход_вправо,
      выход_отдувалки : bool;
    end_var
    var
      шаг : (нету_питания, отдув_перед_вправо, вправо, отдув_перед_влево, влево);
      t : ton;
    end_var
    
    ------------
    
    if нет питание then
      шаг := нету_питания;
    end_if
    
    case шаг of
      нету_питания:
        if питание then
          t(in := false);
          шаг :=  отдув_перед_вправо;
        end_if
    
      отдув_перед_вправо:
        t(in:=true, pt := ...); //время хоть для каждого шага свое
        if t.q then
          t(in := false);
          шаг := вправо;
        end_if
      
      вправо:
        t(in:=true, pt := ...);
        if t.q then
          t(in := false);
          шаг := отдув_перед_влево;
        end_if
      
      отдув_перед_влево:
        t(in:=true, pt := ...);
        if t.q then
          t(in := false);
          шаг := влево;
        end_if
      
      вправо:
        t(in:=true, pt := ...);
        if t.q then
          t(in := false);
          шаг :=  отдув_перед_вправо;
        end_if
    end_case
    
    //по автомату - выставляем выходы, например
    выход_вправо := шаг = вправо;
    выход_влево := шаг = влево;
    выход_отдувалки := шаг = отдув_перед_вправо or шаг = отдув_перед_влево;
    Немного громоздко - но на порядок читаемей и модифицируемей. А после свернуть в трубочку можно что угодно.
    Например вышеизложенное - с той же автоматной логикой :

    Код:
    t(in := питание, pt := mux(шаг, t#0s, .....));  
    if нет питание then
      шаг := нету_питания;
    end_if
    
    if t.q then //вот тут весь кейс
      t(in := false);
      шаг := mux(шаг, отдув_перед_вправо, вправо, отдув_перед_влево, влево, отдув_перед_вправо);
    end_if
    
    ... //установка выходов
    Последний раз редактировалось Валенок; 28.06.2016 в 23:54.

  8. #28

    По умолчанию

    Вот ФБ и программа:

    FUNCTION_BLOCK Timer_CCL
    VAR_INPUT
    Start:BOOL;
    Interval:TIME;
    SwitchIN:BOOL;
    END_VAR
    VAR_OUTPUT
    CicleON:BOOL;
    SwitchOUT:BOOL;
    TimeSee:REAL;
    END_VAR
    VAR
    //Таймер 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; (*Сигнал пока таймер работает*)
    ____________________________________________

    Тело программы

    IF PWR THEN

    IF START THEN Timer_SDUV(Start:=PWR, Interval:=REAL_TO_TIME(TimeInSduv*1000),CicleON=>S ignalC);;
    SignalO:=PWR; START:=FALSE;
    END_IF;

    Timer_SDUV(Start:=NOT SignalO, Interval:=REAL_TO_TIME(TimeInSduv*1000), CicleON=>SignalC, TimeSee=>TimeSeeSduv);

    Cicle(Start:=NOT SignalC, Interval:=REAL_TO_TIME(TimeInCicle*1000), SwitchIN:=Switch, CicleON=>SignalO, SwitchOUT=>Switch, TimeSee=>TimeSeeCicle);

    Otduv:=Timer_SDUV.CicleON;
    ADSL:=SignalO AND NOT switch;
    ADSR:=SignalO AND switch;

    // Отдувка в работе
    IF Otduv THEN RL1:=FALSE; RL2:=FALSE; RL3:=FALSE; RL4:=FALSE; RL5:=FALSE; RL6:=FALSE; RL7:=TRUE;
    END_IF

    // Правое направление в работе
    IF ADSR THEN RL1:=FALSE; RL2:=TRUE; RL3:=TRUE; RL4:=FALSE; RL5:=FALSE; RL6:=TRUE; RL7:=TRUE;
    END_IF

    // Левое направление в работе
    IF ADSL THEN RL1:=TRUE; RL2:=FALSE; RL3:=FALSE; RL4:=TRUE; RL5:=TRUE; RL6:=FALSE; RL7:=TRUE;
    END_IF

    ELSE Otduv:=FALSE; SignalO:=FALSE; SignalC:=FALSE; ADSR:=FALSE; ADSL:=FALSE;
    RL1:=FALSE; RL2:=FALSE; RL3:=FALSE; RL4:=FALSE; RL5:=FALSE; RL6:=FALSE; RL7:=FALSE;

    END_IF

  9. #29

    По умолчанию

    Исходил из того, что усложнял первые попытки работать с таймерами и закладывал базу на доп. направления через ФБ (если понадобится).
    Не судите строго пожалуйста!
    Первый блин всегда комом...
    В моей программе для добавления направления, достаточно создать еще один вызов ФБ... и т.д.

    А Вашу программу сейчас изучу.
    Последний раз редактировалось Ger4sim; 29.06.2016 в 00:09.

  10. #30

    По умолчанию

    Вам всем - Огромная благодарность за помощь и советы!

Страница 3 из 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

Ваши права

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