Показано с 1 по 10 из 194

Тема: СП310+пр200

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    Спасибо. Работает.
    Т.Е. надо просто в отсутствии strt устантвить state 0 (первая ступень цикла) и присвоить t : SYS.TON; логический 0.
    А что в таком случае будет происходить при переполнении get_time()? Или при использовании SYS.TON это не важно?

    мне кажется имеет смысл к этому коду добавить ловлю фронта старта, чтоб если это первый запуск начинать с кейса №1 как просил вопрашающий
    Да, неплохо бы. Хотя после снятия сигнала со входа ПР цикл и так начинается сначала. Что было бы полезнее - это по заднему фронту strt делать паузу и потом возобновление процесса с того же момента. А вообще в проекте на стандартных ФБ в Овенлоджике у меня сделано три кнопки старт, пауза и стоп и по передним фронтам от их нажатия осуществляется управление. Но наверное это сильно здесь всё усложнит.
    Буду думать .
    Спасибо за подсказки.

    Что мне интересно - это как вот здесь t(I:=true, T := t#1s); менять время t с входной переменной.
    Последний раз редактировалось Viktor D; 18.10.2024 в 08:27.

  2. #2

    По умолчанию

    Цитата Сообщение от Viktor D Посмотреть сообщение
    Спасибо. Работает.
    Т.Е. надо просто в отсутствии strt устантвить state 0 (первая ступень цикла) и присвоить t : SYS.TON; логический 0.
    А что в таком случае будет происходить при переполнении get_time()? Или при использовании SYS.TON это не важно?
    Если Вы используете SYS.TON, то get_time() - не нужен и наоборот.
    Попробуйте понять как работает этот вариант, где нет ни того ни другого:

    Код:
    function_block DRV
    
        var_input
           Start : bool;
           Stop : bool;
           tStart : udint;
           tStop : udint;
        end_var
    
        var_output
           FW : bool;
           RW : bool;
        end_var
    
        var
            btn : SYS.RS;
            bl : SYS.BLINK;
            st : SYS.CTN;
        end_var
    
        btn(S := Start, R := Stop);
        bl(I := btn.Q, Th := udint_to_time(tStart), Tl := udint_to_time(tStop));
        st(U := bl.Q, R := st.Q = 2);
        FW := (st.Q = 0) and bl.Q;
        RW := (st.Q = 1) and bl.Q;
    
    end_function_block
    capzap предложил Вам добавить в код:
    Код:
      if strt then OnOff := true; end_if        // Фиксируем состояние входа "Старт"
      if stop then OnOff := false; end_if      // Но "Стоп" является приоритетом, но тогда...
    
      if OnOff then // вместо if strt then
    Некоторые пишут так:
    Код:
      OnOff := (OnOff or strt) and not stop;

    Можно входные переменные вставлять в параметры других блоков, например:
    Код:
      t(I:=true, T:=udint_to_time(ust_p)); // где ust_p задается в миллисекундах!!!
    Последний раз редактировалось EFrol; 18.10.2024 в 08:50.

  3. #3

    По умолчанию

    Ну я так и пытаюсь делать.

    Непонятно как работает во эта строка
    st(U := bl.Q, R := st.Q = 2); // Счетчик вращений от 0 до 1

    конкретно
    R := st.Q = 2 - это что делает?
    Последний раз редактировалось Viktor D; 18.10.2024 в 09:52. Причина: добавил мысли

  4. #4

    По умолчанию

    Цитата Сообщение от Viktor D Посмотреть сообщение
    Ну я так и пытаюсь делать.

    Непонятно как работает во эта строка
    st(U := bl.Q, R := st.Q = 2); // Счетчик вращений от 0 до 1

    конкретно
    R := st.Q = 2 - это что делает?
    Счетчик сбрасывается в 0 при R = true, т.е. как только он досчитает до 2, то на следующем цикле счетчик сбросится.

    Счетчик можно заменить на направление вращения:
    Код:
    function_block DRV
    
        var_input
           Start : bool;
           Stop : bool;
           tStart : udint;
           tStop : udint;
           tWork : udint;   // Время работы блока
        end_var
    
        var_output
           FW : bool;
           RW : bool;
        end_var
    
        var
            bl : SYS.BLINK; // Генератор времени работы и паузы
            tW : SYS.TON;   // Таймер работы блока
            tr : SYS.FTRIG; // Переход на паузу
            dir : bool;     // Направление вращения
            OnOff : bool;   // Кнопка
        end_var
    
        OnOff := (OnOff or Start) and not (Stop or tW.Q);
        tW(I := OnOff, T := udint_to_time(tWork));
        bl(I := OnOff, Th := udint_to_time(tStart), Tl := udint_to_time(tStop));
        tr(I := bl.Q); if tr.Q then dir := not dir; end_if
        FW := not dir and bl.Q;
        RW := dir and bl.Q;
    
    end_function_block
    Последний раз редактировалось EFrol; 18.10.2024 в 10:08.

Похожие темы

  1. Не получается опросить пр200 панелью сп310
    от дск в разделе Панели оператора (HMI)
    Ответов: 20
    Последнее сообщение: 24.01.2023, 10:13
  2. Подключение СП310 к пр200
    от Jakan в разделе Панели оператора (HMI)
    Ответов: 3
    Последнее сообщение: 22.08.2019, 23:23
  3. ПР200+СП310 в качестве МПР51
    от mouc1k в разделе Среда программирования OWEN Logic
    Ответов: 3
    Последнее сообщение: 25.12.2018, 11:30
  4. СП310 Сервер по Модбас ТСР + СП310 Слейв по Модбас RTU
    от Global в разделе Панели оператора (HMI)
    Ответов: 7
    Последнее сообщение: 19.04.2018, 11:16
  5. пр200+сп310
    от zamnarzanom в разделе Программируемые реле
    Ответов: 5
    Последнее сообщение: 10.10.2016, 09:13

Ваши права

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