Страница 12 из 20 ПерваяПервая ... 21011121314 ... ПоследняяПоследняя
Показано с 111 по 120 из 194

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

  1. #111

    По умолчанию

    По аналогии с предложенными вариантами получилось вот так - см аттач.
    В else закоментированные строки выдают ошибку, но работает и без них. Что то я не понимаю, но что не понимаю - не понимаю. Подправьте как должно быть. И пару слов пояснений если не затруднит.
    Вложения Вложения
    Последний раз редактировалось Viktor D; 18.10.2024 в 06:54.

  2. #112

    По умолчанию

    Цитата Сообщение от Viktor D Посмотреть сообщение
    По аналогии с предложенными вариантами получилось вот так - см аттач.
    В else закоментированные строки выдают ошибку, но работает и без них. Что то я не понимаю, но что не понимаю - не понимаю. Подправьте как должно быть. И пару слов пояснений если не затруднит.
    Код:
    function_block DRIVER_drm //имя функционального блока.
    
        var_input //объявление входных переменных
             strt : bool;//старт
             stop : bool;//стоп
             pause : bool;//пауза
        end_var
    
        var_output //объявление выходных переменных
            rt_fw : bool;//вращение вперёд
            rt_bw : bool;//вращение назад
        end_var   
    
        var //объявление локальных переменных
            State : udint;   // Текущее состояние
            t : SYS.TON;        // Метка времени события
        end_var
    
       //CODE
         
       if strt then
           
           case State of
               
               0: t(I:=true, T := t#1s);
                        if t.Q then State := 1; t(I := false); end_if
                   
               1: t(I:=true, T := t#3s);
                        if t.Q then State := 2; t(I := false); end_if
                            
               2: t(I:=true, T := t#1s);
                        if t.Q then State := 3; t(I := false); end_if
                            
               3: t(I:=true, T := t#3s);
                        if t.Q then State := 0; t(I := false); end_if     
    
           end_case   
    
           rt_fw := State = 1;
           rt_bw := State = 3;
    
       else
           State := 0;
           t(I := false);
           rt_fw := false;
           rt_bw := false;
                  
       end_if
       
    end_function_block

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

    По умолчанию

    Цитата Сообщение от 1exan Посмотреть сообщение
    Код:
    function_block DRIVER_drm //имя функционального блока.
    
        var_input //объявление входных переменных
             strt : bool;//старт
             stop : bool;//стоп
             pause : bool;//пауза
        end_var
    
        var_output //объявление выходных переменных
            rt_fw : bool;//вращение вперёд
            rt_bw : bool;//вращение назад
        end_var   
    
        var //объявление локальных переменных
            State : udint;   // Текущее состояние
            t : SYS.TON;        // Метка времени события
        end_var
    
       //CODE
         
       if strt then
           
           case State of
               
               0: t(I:=true, T := t#1s);
                        if t.Q then State := 1; t(I := false); end_if
                   
               1: t(I:=true, T := t#3s);
                        if t.Q then State := 2; t(I := false); end_if
                            
               2: t(I:=true, T := t#1s);
                        if t.Q then State := 3; t(I := false); end_if
                            
               3: t(I:=true, T := t#3s);
                        if t.Q then State := 0; t(I := false); end_if     
    
           end_case   
    
           rt_fw := State = 1;
           rt_bw := State = 3;
    
       else
           State := 0;
           t(I := false);
           rt_fw := false;
           rt_bw := false;
                  
       end_if
       
    end_function_block
    мне кажется имеет смысл к этому коду добавить ловлю фронта старта, чтоб если это первый запуск начинать с кейса №1 как просил вопрашающий
    Цель моих действий сделать ФБ который будет осуществлять следующий алгоритм: вращение вперёд-пауза-вращение назад и всё это повторять в течении определённого времени.
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  4. #114

    По умолчанию

    Спасибо. Работает.
    Т.Е. надо просто в отсутствии 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.

  5. #115

    По умолчанию

    Цитата Сообщение от 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.

  6. #116

    По умолчанию

    Насколько я понял на входе детектор переднего фронта, далее имеем генератор который выдаёт импульсы длительность которых задаётся соответствующими входными переменными и наконец счётчик всё считает и по его результату переключаются входы.
    Правильно я понял?

    На стандартных ФБ я так примерно и делал, только там BLINK выдавал импульсы в 1 сек, а счётчик их считал (сколько задано по входной переменной). В таком варианте поставив BLINK на паузу (сняв входной сигнал) весь процесс становиться на паузу и продолжается с того же места.

    Остальное (как отловить входной фронт и вставить переменную в ФБ) вроде понятно. Надо будет попробовать применить на практике.

    Для меня сложно угадать правильный синтаксис. С вашими примерами многое становиться понятно.

    Спасибо за подсказки.
    Последний раз редактировалось Viktor D; 18.10.2024 в 09:02.

  7. #117

    По умолчанию

    Добавлен автостоп по истечении tWork:
    Код:
    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
            btn : SYS.RS;   // Кнопка фиксирующая Start/Stop
            bl : SYS.BLINK; // Генератор времени вращения и паузы
            st : SYS.CTN;   // Переключатель направления вращения
            tW : SYS.TON;   // Таймер работы блока
        end_var
    
        btn(S := Start, R := Stop or tW.Q);  // Кнопка которая фиксирует Start и сбрасывает по Stop или по таймеру tW
        tW(I := btn.Q, T := udint_to_time(tWork));  // Таймер, который работает пока кнопка в состоянии Start
        bl(I := btn.Q, Th := udint_to_time(tStart), Tl := udint_to_time(tStop)); // Переключатель Вращение/Пауза
        st(U := bl.Q, R := st.Q = 2); // Счетчик вращений от 0 до 1
        FW := (st.Q = 0) and bl.Q;   // Счетчик и переключатель определяют состояние выходов
        RW := (st.Q = 1) and bl.Q;
    end_function_block
    Самый лучший способ научиться - это читать чужой код (только хороший код - это проблема).
    Профи не любят им делиться - хлеб свой отдавать кому-то, но очень любят стебаться над новичками (даже здесь есть дедовщина).
    Последний раз редактировалось EFrol; 18.10.2024 в 09:29.

  8. #118

    По умолчанию

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

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

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

  9. #119

    По умолчанию

    Цитата Сообщение от 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.

  10. #120

    По умолчанию

    То есть когда Q = 2 тогда происходит R - reset и опять на входе 0.

Страница 12 из 20 ПерваяПервая ... 21011121314 ... ПоследняяПоследняя

Похожие темы

  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

Ваши права

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