Страница 2 из 5 ПерваяПервая 1234 ... ПоследняяПоследняя
Показано с 11 по 20 из 46

Тема: Что почитать?

  1. #11

  2. #12

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Давайте вы сначала ответите на самый главный вопрос.
    Зачем?
    А какие варианты? Я смотрю статус клавиши. Изменилась с отжатой на нажатую - фиксирую время нажатия. Изменилась с нажатой на отжатую - фиксирую время отжатия. Затем смотрю разницу. Если она меньше 250 мс - это короткий клик, увеличиваю счетчик кликов (потом через CASE пееключу нужный выход). Если 1500 мс - это длинный клик, гашу все выходы. Если после последнего короткого отжатия прошло более 500 мс - переключаю нужный выход.

    Все базируется на трех timestamp: текущее время, время нажатия и время отжатия.

  3. #13
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    6,781

    По умолчанию

    Цитата Сообщение от Stan_1 Посмотреть сообщение
    А какие варианты? Я смотрю статус клавиши. Изменилась с отжатой на нажатую - фиксирую время нажатия. Изменилась с нажатой на отжатую - фиксирую время отжатия. Затем смотрю разницу. Если она меньше 250 мс - это короткий клик, увеличиваю счетчик кликов (потом через CASE пееключу нужный выход). Если 1500 мс - это длинный клик, гашу все выходы. Если после последнего короткого отжатия прошло более 500 мс - переключаю нужный выход.

    Все базируется на трех timestamp: текущее время, время нажатия и время отжатия.
    Ну, например, первый вариант - просто взять готовый блок CLICK_MODE из библиотеки Oscat Building.
    https://ftp.owen.ru/CoDeSys3/04_Libr...ilding.package

    Еще пользователь Cs-Cs когда-то выкладывал свои ФБ для обработки нажатий - я думаю, если он появится в этой теме, то предоставит ссылки.

  4. #14

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Ну, например, первый вариант - просто взять готовый блок CLICK_MODE из библиотеки Oscat Building.
    https://ftp.owen.ru/CoDeSys3/04_Libr...ilding.package
    Прикольная библиотека. Спасибо. Там есть нужные и интересные вещи, но конкретно CLICK_MODE не подходит, увы. Она не позволяет делать тройной клик (а у меня в планах он есть). Плюс мне еще нужна будет возможность управлять от Home Assistant. Подобную логику, которая мне нужна - я уже делал, но на компе, с имитацией нажатия мышкой. А теперь хочу ее перенести на PLC. Поэтому интересно понять именно возможность действовать через измерение времени. Нет ли все-таки возможность получать текущий таймстамп? Причем в режиме симуляции тоже.

  5. #15

    По умолчанию

    Так откройте эту библиотеку, для версии 2 она открытая, и посмотрите, как реализован этот ФБ.

  6. #16

    По умолчанию

    Цитата Сообщение от ASo Посмотреть сообщение
    Так откройте эту библиотеку, для версии 2 она открытая, и посмотрите, как реализован этот ФБ.
    Я могу это сделать. Но у меня уже написана собственная реализация, моделирование которой меня устроило. Если я пойму - что на ПЛК таймстампы невозможны/ограничены, конечно я буду изучать альтернативу. Но пока хотелось бы понять про таймстампы. Пока я в этой теме четкого "нет, таких в ПЛК нет" - не услышал Возможно, я просто использую не те/не то.

  7. #17

    По умолчанию

    Так пишите в переменную текущее время по фронту или спаду.

  8. #18

    По умолчанию

    Цитата Сообщение от ASo Посмотреть сообщение
    Так пишите в переменную текущее время по фронту или спаду.
    Так я так и делаю. Но мой изначальный вопрос - как в режиме симуляции получать значение таймера sysTime - не ноль.

    VAR
    pressedAt: DWORD := 0; // Временная метка последнего нажатия клавиши "вниз"
    sysTimer: SystemTimeDate; // Системный таймер
    END_VAR

    pressedAt := (sysTimer.dwLowMSecs - (sysTimer.dwLowMSecs/1000) * 1000);

  9. #19
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    6,781

    По умолчанию

    Так откройте эту библиотеку, для версии 2 она открытая, и посмотрите, как реализован этот ФБ.
    Для V3.5 тоже открытая, кстати.

    Цитата Сообщение от Stan_1 Посмотреть сообщение
    Так я так и делаю. Но мой изначальный вопрос - как в режиме симуляции получать значение таймера sysTime - не ноль.

    VAR
    pressedAt: DWORD := 0; // Временная метка последнего нажатия клавиши "вниз"
    sysTimer: SystemTimeDate; // Системный таймер
    END_VAR

    pressedAt := (sysTimer.dwLowMSecs - (sysTimer.dwLowMSecs/1000) * 1000);
    Потому что SystemTimeDate - это не системный таймер, а тип данных, который возвращает ФБ для получения системного времени из очень старой библиотеки, которая оставлена для совместимости с проектами, импортированными из CoDeSys V2.3.
    Это можно понять, посмотрев на библиотеку, в которой он объявлен.

    Можно так:

    Код:
    VAR
       pressedAt: TIME; // Временная метка последнего нажатия клавиши "вниз" в миллисекундах
    END_VAR
    
    // тут какие-то условия, по которым выполняется этот код в нужный момент времени
    pressedAt := TIME();
    И лучше использовать не симуляцию, а виртуальный контроллер:
    https://owen.ru/forum/showthread.php...l=1#post296706

  10. #20

    По умолчанию

    Да, TIME() - то, что надо. Спасибо! А не подскажите еще - как выводить что-то в консоль? И есть ли такое понятие? Я нашел вроде пару способов описанных здесь на форуме, но не сработали.

    По поводу виртуального контроллера - я пробовал его несколько дней назад. Но он при update device скинул все настройки PLC Поэтому боюсь делать это опять.

Страница 2 из 5 ПерваяПервая 1234 ... ПоследняяПоследняя

Похожие темы

  1. Посоветуйте что почитать, чтобы научиться программировать
    от OAS1606 в разделе Программируемые реле
    Ответов: 44
    Последнее сообщение: 16.04.2021, 13:17
  2. Что интересного почитать? Канал на Яндекс.Дзен от датчиков ОВЕН!
    от Алексей Сидорцев в разделе Трёп (Курилка)
    Ответов: 0
    Последнее сообщение: 06.12.2019, 21:59
  3. Описание по энкодерам. Где почитать?
    от TV13M в разделе Трёп (Курилка)
    Ответов: 3
    Последнее сообщение: 26.01.2018, 09:02

Ваши права

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