Давайте вы сначала ответите на самый главный вопрос.
Зачем?И хочу фиксировать время нажатия и отжатия клавиши в виде временной метки - timestamp в мс.
Давайте вы сначала ответите на самый главный вопрос.
Зачем?И хочу фиксировать время нажатия и отжатия клавиши в виде временной метки - timestamp в мс.
СODESYS V3.5: Repository Archive V3.5 SP4 (необходим для старых СПК) / Раздел CDS V3.5 на сайте
Форум: Вопросы и ответы / Визуализация / Настройка обмена с другими устройствами
Web-панель ВП110 / Modbus-индикатор СМИ2-М
Telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | oscat.ru | Как обратиться в техподдержку?
Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | XY problem | Как правильно задавать вопросы | AnyDesk
А какие варианты? Я смотрю статус клавиши. Изменилась с отжатой на нажатую - фиксирую время нажатия. Изменилась с нажатой на отжатую - фиксирую время отжатия. Затем смотрю разницу. Если она меньше 250 мс - это короткий клик, увеличиваю счетчик кликов (потом через CASE пееключу нужный выход). Если 1500 мс - это длинный клик, гашу все выходы. Если после последнего короткого отжатия прошло более 500 мс - переключаю нужный выход.
Все базируется на трех timestamp: текущее время, время нажатия и время отжатия.
Ну, например, первый вариант - просто взять готовый блок CLICK_MODE из библиотеки Oscat Building.
https://ftp.owen.ru/CoDeSys3/04_Libr...ilding.package
Еще пользователь Cs-Cs когда-то выкладывал свои ФБ для обработки нажатий - я думаю, если он появится в этой теме, то предоставит ссылки.
СODESYS V3.5: Repository Archive V3.5 SP4 (необходим для старых СПК) / Раздел CDS V3.5 на сайте
Форум: Вопросы и ответы / Визуализация / Настройка обмена с другими устройствами
Web-панель ВП110 / Modbus-индикатор СМИ2-М
Telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | oscat.ru | Как обратиться в техподдержку?
Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | XY problem | Как правильно задавать вопросы | AnyDesk
Прикольная библиотека. Спасибо. Там есть нужные и интересные вещи, но конкретно CLICK_MODE не подходит, увы. Она не позволяет делать тройной клик (а у меня в планах он есть). Плюс мне еще нужна будет возможность управлять от Home Assistant. Подобную логику, которая мне нужна - я уже делал, но на компе, с имитацией нажатия мышкой. А теперь хочу ее перенести на PLC. Поэтому интересно понять именно возможность действовать через измерение времени. Нет ли все-таки возможность получать текущий таймстамп? Причем в режиме симуляции тоже.
Так откройте эту библиотеку, для версии 2 она открытая, и посмотрите, как реализован этот ФБ.
Я могу это сделать. Но у меня уже написана собственная реализация, моделирование которой меня устроило. Если я пойму - что на ПЛК таймстампы невозможны/ограничены, конечно я буду изучать альтернативу. Но пока хотелось бы понять про таймстампы. Пока я в этой теме четкого "нет, таких в ПЛК нет" - не услышал Возможно, я просто использую не те/не то.
Так пишите в переменную текущее время по фронту или спаду.
Так я так и делаю. Но мой изначальный вопрос - как в режиме симуляции получать значение таймера sysTime - не ноль.
VAR
pressedAt: DWORD := 0; // Временная метка последнего нажатия клавиши "вниз"
sysTimer: SystemTimeDate; // Системный таймер
END_VAR
pressedAt := (sysTimer.dwLowMSecs - (sysTimer.dwLowMSecs/1000) * 1000);
Для V3.5 тоже открытая, кстати.Так откройте эту библиотеку, для версии 2 она открытая, и посмотрите, как реализован этот ФБ.
Потому что SystemTimeDate - это не системный таймер, а тип данных, который возвращает ФБ для получения системного времени из очень старой библиотеки, которая оставлена для совместимости с проектами, импортированными из CoDeSys V2.3.
Это можно понять, посмотрев на библиотеку, в которой он объявлен.
Можно так:
И лучше использовать не симуляцию, а виртуальный контроллер:Код:VAR pressedAt: TIME; // Временная метка последнего нажатия клавиши "вниз" в миллисекундах END_VAR // тут какие-то условия, по которым выполняется этот код в нужный момент времени pressedAt := TIME();
https://owen.ru/forum/showthread.php...l=1#post296706
Последний раз редактировалось Евгений Кислов; 25.04.2021 в 12:45.
СODESYS V3.5: Repository Archive V3.5 SP4 (необходим для старых СПК) / Раздел CDS V3.5 на сайте
Форум: Вопросы и ответы / Визуализация / Настройка обмена с другими устройствами
Web-панель ВП110 / Modbus-индикатор СМИ2-М
Telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | oscat.ru | Как обратиться в техподдержку?
Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | XY problem | Как правильно задавать вопросы | AnyDesk
Да, TIME() - то, что надо. Спасибо! А не подскажите еще - как выводить что-то в консоль? И есть ли такое понятие? Я нашел вроде пару способов описанных здесь на форуме, но не сработали.
По поводу виртуального контроллера - я пробовал его несколько дней назад. Но он при update device скинул все настройки PLC Поэтому боюсь делать это опять.