Показано с 1 по 7 из 7

Тема: Однократное нажатие кнопки

  1. #1

    По умолчанию Однократное нажатие кнопки

    Добрый день!

    Подскажите, пожалуйста, надо на визуализации реализовать простейший счетчик, чтобы при нажатии на кнопку к переменной прибавлялось 1.
    Дело в том, что при нажатие на кнопку BOOL меняется на TRUE и он начинает плюсовать сколькое ему влезет.
    Я обошел это вписав в IF, возврат на FALSE. Но есть ли какие-то более изящные способы настроить кнопку на визуализации так, чтобы она давала разовый сигнал?
    Изображение приложил.

    Безымянный.png

    Спасибо.

  2. #2

    По умолчанию

    Нужно использовать блок R_TRIG в коде. Это блок, который один раз выдаёт на выход TRUE при начале длинного перехода из False в True.

    То есть:
    0) Объявляемя экземпляр R_TRIG в переменных как и другого любого FB
    а) Переменную от кнопки подаём на вход этого экземпляра (IN:=..)
    б) В твой IF подставляем не переменную от кнопки, а выход этого FB (IF ....Q = TRUE)

    Вот тогда код в IF будет выполнен однократно при нажатии на кнопку на UI.
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net

  3. #3

    По умолчанию

    Спасибо.

    Кода стало больше, но я так понимаю это более правильный подход.

    Counter: INT;
    Counter_PLUS: BOOL;
    CounterR : R_TRIG;

    CounterR(CLK:= Counter_PLUS);
    IF CounterR.Q=TRUE
    THEN Counter:=Counter+1;
    END_IF;

  4. #4
    Пользователь
    Регистрация
    31.01.2019
    Адрес
    РФ/РБ
    Сообщений
    917

    По умолчанию

    Counter в Codesys считает только фронт. Зачем тригер еще?
    В трансформаторной будке живет трансформаторная собака (с) Прозрачный гонщик

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

    По умолчанию

    Цитата Сообщение от keysansa Посмотреть сообщение
    Counter в Codesys считает только фронт. Зачем тригер еще?
    Здесь Counter: INT - простая переменная, а не ФБ

    Вариант без IF
    Код:
    VAR
    	Counter: INT;
    	Counter_PLUS: BOOL;
    	CounterR : R_TRIG;
    END_VAR
    
    CounterR(CLK:= Counter_PLUS);
    Counter:=Counter + BOOL_TO_INT(CounterR.Q);
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  6. #6
    Пользователь
    Регистрация
    31.01.2019
    Адрес
    РФ/РБ
    Сообщений
    917

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    Здесь Counter: INT - простая переменная, а не ФБ
    Зачем изобретать велосипед?
    В трансформаторной будке живет трансформаторная собака (с) Прозрачный гонщик

  7. #7

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    Вариант без IF
    Код:
    VAR
    	Counter: INT;
    	Counter_PLUS: BOOL;
    	CounterR : R_TRIG;
    END_VAR
    
    CounterR(CLK:= Counter_PLUS);
    Counter:=Counter + BOOL_TO_INT(CounterR.Q);
    А вот это - изящно!

Похожие темы

  1. тройное нажатие как реализовать?
    от Di3ainlex@gmail.com в разделе Среда программирования OWEN Logic
    Ответов: 8
    Последнее сообщение: 12.01.2021, 09:59
  2. Ответов: 8
    Последнее сообщение: 25.02.2020, 00:03
  3. Ответов: 6
    Последнее сообщение: 19.02.2018, 16:22
  4. Ответов: 3
    Последнее сообщение: 04.12.2013, 09:05
  5. СП270 и двойное нажатие
    от Stenvel в разделе Панели оператора (HMI)
    Ответов: 0
    Последнее сообщение: 20.04.2011, 17:37

Ваши права

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