Страница 1 из 13 12311 ... ПоследняяПоследняя
Показано с 1 по 10 из 126

Тема: Логика: Распознать отдельно короткое и отдельно длинное нажатия (CodeSys v3)

  1. #1

    Question Логика: Распознать отдельно короткое и отдельно длинное нажатия (CodeSys v3)

    Камрады, мне требуется помощь и пинок в нужном направлении в плане логики.
    Я на CodeSys v3 изобретаю диммер под один из своих щитов. И я запутался в логике алгортимов! Но не диммера (эта часть работает у меня нормально), а отслеживания нажатий на аппаратную кнопку.
    Даю вводные:
    а) Кнопка - это вход модуля IO. Модуль опрашивается по Modbus RTU, задержка опроса около 100 мсек.
    б) Логика диммера у меня написана на уровне "If bSinglePress Then..." и "ElsIf bLongPress Then" - тут вопросов нет, и тут всё работает.
    в) До этого у меня были наработки FBшки, которая умела отличать одинарное, двойное и длинные нажатия на кнопку, но делала это на все нажатия подряд, без взаимоисключения: одинарное нажатие всегда выдавалось при нажатии на кнопку.
    Эта логика работала через:
    * Краткие нажатия - через изменение счётчика импульсов модуля. Я сранивал предыдущее считанное значение счётчика импульсов и текущее и решал, сколько нажатий было.
    * Длинное - тупо по TON с заданной выдержкой.

    Ща мне нужна другая логика: чтобы FB умел отличать отдельно короткое нажатие и отдельно длинное.
    Я пошёл по тупому пути:
    а) по TRUE на входе кнопки запускаю TP (интервал времени - на 100 мсек больше, чем у TON из пункта ниже) и в конце интервала TP смотрю на то, нажата ли кнопка. Если всё её нажата - то блокирую короткое нажатие, считая что идёт длинное.
    б) Длинное отслеживаю так же, как и делал - по TON.
    Всё это то работает нормально, а то косячит - иногда после длинного нажатия ловится короткое, а иногда после короткого ситема решает что у неё ещё и длинное пошло.

    Скорее всего путь этот неверный, но я ща оказался пленником этой идеи и мозг не видит альтернатив.
    Короче, как в "истории одного байта" - уже третий день хожу из комнаты в комнату (или даже когда в магазин за едой) и бормочу что-то себе под нос и туплю.

    Может ли кто мне посоветовать другой алгоритм? Я наплодил всяких F_TRIG/R_TRIG, и ещё больше запутался нахрен.
    Может какие-то другие таймеры попробовать?

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

    По умолчанию

    Отслеживайте по заднему фронту, если нажатие длиннее, блокируйте действие короткого нажатия.

    Вообще, вешать такие вещи на модули тот еще изврат, но вы сами это выбрали.
    Последний раз редактировалось melky; 11.12.2020 в 22:29.

  3. #3

    По умолчанию

    capzap У меня есть OSCAT для CodeSys v2. Там в коде такой адский шлак (переменные нормально не названы, комментариев нет), что я его посмотрел и давно закрыл. Стоит ли для CodeSys v3 смотреть?

    melky А в чём изврат? Была бы кнопка на экране - так такой же функционал надо было бы сделать. Один фиг же откуда сигнал идёт: с аппаратного IO или нет.
    А вот туплю я. Ща попробую пересказать. Значит мне нужны:
    а) F_TRIG для заднего фронта.
    б) TON для длинного нажатия.
    По F_TRIG я должен смотреть, работает ли TON, так? Если TON работает - то значит я ещё в длинном нажатии, и на F_TRIG наплевать?
    Ох, туплю. А что тогда будет после длинного нажатия? Вот покрутил я длинным нажатием яркость... отпустил кнопку - и у меня опять получилось по F_TRIG короткое нажатие, которое мне не нужно...

  4. #4
    Пользователь Аватар для rovki
    Регистрация
    03.01.2010
    Адрес
    Чехов
    Сообщений
    12,115

    По умолчанию

    НЕ ожидал от вас .На FDB это делается минуту.
    Изображения Изображения
    Последний раз редактировалось rovki; 11.12.2020 в 23:16.
    электронщик до мозга костей и не только

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

    По умолчанию

    rovki и работать не будет

  6. #6
    Пользователь Аватар для rovki
    Регистрация
    03.01.2010
    Адрес
    Чехов
    Сообщений
    12,115

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    rovki и работать не будет
    Теперь будет! С 3х утра на ногах... Спатьспать,спать...Время можно и 1сек поставить
    Последний раз редактировалось rovki; 11.12.2020 в 23:30.
    электронщик до мозга костей и не только

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

    По умолчанию

    только поправочка, все, что длиннее короткого нажатия, должно быть длинным нажатием.

    и тут стоит задуматься, что есть короткое нажатие ? я должен стоять и держать выключатель строго дольше 100 мс? да фиг вы угадали, человек клацая выключателем не ждет столько и будет дальше так - я сделал короткое нажатие или не сделал ? почему свет не включился ?

  8. #8

    По умолчанию

    Цитата Сообщение от rovki Посмотреть сообщение
    НЕ ожидал от вас .На FDB это делается минуту.
    Ну я же и признался, что запутался, мозг замылился, и я накрутил фиг чего.
    *разводит руками* Вон вчера всё IO перетащил на OCL, накрутил там удобный массив структур IO и кучу всего с указателями, а тут вот запутался, и хоть тресни.

    Ща сделаю прям сначала отдельный FB на CFC, и испытаю и отпишусь!

  9. #9

    По умолчанию

    melky Вот как раз как поймать короткое нажатие в стиле "пришёл злой и тыркнул кнопку" - это я научился делать по счётчику импульсов.
    Задача может крутиться с любой скоростью и IO может хоть на 500 мсек тормозить - я там просто смотрю дельту импульсов с модуля IO, и решаю, сколько нажатий было - одинарное, двойное или (если надо) больше.
    Но тут этот алгоритм не катит (вроде бы...).

    Я забуксовал на взаимной блокировке нажатий пока что. Даже пусть сейчас на 100 мсек придётся кнопку давить для одинарного нажатия - пофиг пока что.

  10. #10
    Пользователь Аватар для rovki
    Регистрация
    03.01.2010
    Адрес
    Чехов
    Сообщений
    12,115

    По умолчанию

    Цитата Сообщение от Cs-Cs Посмотреть сообщение
    Ну я же и признался, что запутался, мозг замылился, и я накрутил фиг чего.
    *разводит руками* Вон вчера всё IO перетащил на OCL, накрутил там удобный массив структур IO и кучу всего с указателями, а тут вот запутался, и хоть тресни.

    Ща сделаю прям сначала отдельный FB на CFC, и испытаю и отпишусь!
    Главное не забудьте про пунктирную связь -задержка на такт!!!!! Время можно и 1сек поставить , все что короче -короткое нажатие , больше -длинное
    Последний раз редактировалось rovki; 11.12.2020 в 23:32.
    электронщик до мозга костей и не только

Страница 1 из 13 12311 ... ПоследняяПоследняя

Похожие темы

  1. отключение звука нажатия СП307
    от vendor в разделе Панели оператора (HMI)
    Ответов: 2
    Последнее сообщение: 25.01.2018, 10:12
  2. Ответов: 5
    Последнее сообщение: 24.07.2017, 12:08
  3. Ответов: 0
    Последнее сообщение: 31.05.2017, 19:40
  4. Подтверждение нажатия
    от Carter в разделе Master SCADA 3
    Ответов: 9
    Последнее сообщение: 14.11.2016, 17:32
  5. Нечеткая логика в CoDeSys
    от Fallensky в разделе ПЛК1хх
    Ответов: 38
    Последнее сообщение: 09.07.2011, 14:01

Ваши права

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