1

Тема: Подсчёт времени между событиями

Здравствуйте!

Подскажите как составить следующую схему:
Есть событие включения A
Есть событие выключения B

Нужно сделать так что если межу событием А и Б прошло Больше 4 секунд - выполнить событие С. В противном случае ничего не делать.

2

Re: Подсчёт времени между событиями

Если без уточнения, то смотрите ниже. Но мне кажется, в постановке задачи пропущено несколько важных моментов.

Вложений в сообщении

ab.png, 11.17 кб, 788 x 102
ab.png 11.17 кб, скачивался 134 раз, последний раз 2016-03-26 

3

Re: Подсчёт времени между событиями

Константин, CANNY пишет:

Если без уточнения, то смотрите ниже. Но мне кажется, в постановке задачи пропущено несколько важных моментов.

События импульсные - тактовая кнопка, соотвественно после отпускания кнопки А задержка будет неактивна.

4

Re: Подсчёт времени между событиями

SiMuS пишет:

События импульсные - тактовая кнопка, соотвественно после отпускания кнопки А задержка будет неактивна.

На диаграмме задержка выключения, её выход будет активен в течение 4 сек после пропадания сигнала на её входе.

5

Re: Подсчёт времени между событиями

Но если пройдёт больше 4 с то события C не случится?

6

Re: Подсчёт времени между событиями

Воспроизведите диаграмму в CANNY Lab, запустите симулятор и проверьте.

7

Re: Подсчёт времени между событиями

Событие а- сигнал из кан-шины о нажатии кнопки
Событие б- сигнал отпускания этой же кнопки

Надо сделать событие С по долгому (4 с) удержанию кнопки.

То есть событие А запускает событие С через 4 секунды, но если за эти 4 секунды произошло событие Б то событие С не выполняется.

Я представляю как это сделать в С++ но не могу понять как сделать тут sad

8

Re: Подсчёт времени между событиями

Просто используйте блок задержки включения на 4000 мс и все

9

Re: Подсчёт времени между событиями

Сейчас подготовим подробный пример.

10

Re: Подсчёт времени между событиями

Сергей, CANNY пишет:

Просто используйте блок задержки включения на 4000 мс и все

Как  его деактивировать по триггеру Б ?

11

Re: Подсчёт времени между событиями

Давайте интерпретируем событие А как установление в сети "кнопка нажата" логической единицы, а событие B установление в ней логического 0. На выходе блока задержки включения мы получим искомое событие С. То есть согласно http://wiki.canny.ru/index.php?title=%D … 0%B8%D1%8F и прилагаемой диаграммы. событие С наступит если на входе блока задержки, логическая 1 продержится более 4 сек и пропадет при установлении на вх. задержки логического 0.
В прилагаемой диаграмме представлен пример получения данных о нажатии кнопки из CAN шины  (сами данные подставляйте свои) и интересующий Вас алгоритм.
P.S.информацию о работе блоков можно найти  здесь , а по ресурсам контроллера здесь

Вложений в сообщении

Иконка вложения button_hold.cfd 1.01 кб, скачивался 74 раз, последний раз 2016-03-29 

12

Re: Подсчёт времени между событиями

Спасибо, пойду испытывать

13

Re: Подсчёт времени между событиями

Правильно ли я понимаю что для отработки  задержки включения необходимо чтобы на входе на протяжении 4000мс была единица?

14 (29-03-2016 13:24:55 отредактировано SiMuS)

Re: Подсчёт времени между событиями

Приняты единожды пакет через can в предложенной конструкции всегда будет выдавать единицу или  импульсно только в момент регистрации can-пакета?

Проблема в том что нажатие кнопки единаразово инциирует пакет скажем с значением 03 в первом байте
потом во время удержания первый байт меняется на 00 (кнопки не нажаты). В момент отпускания в первом байте проскакивает 04.

15

Re: Подсчёт времени между событиями

SiMuS пишет:

Правильно ли я понимаю что для отработки  задержки включения необходимо чтобы на входе на протяжении 4000мс была единица?

- да все именно так.

SiMuS пишет:

Приняты единожды пакет через can в предложенной конструкции всегда будет выдавать единицу или  импульсно только в момент регистрации can-пакета?

  на выходе триггера (блок 3) данные не изменятся до прихода следующего сообщения из CAN с тем же ID но с другими данными.

SiMuS пишет:

Проблема в том что нажатие кнопки единаразово инциирует пакет скажем с значением 03 в первом байте
потом во время удержания первый байт меняется на 00 (кнопки не нажаты). В момент отпускания в первом байте проскакивает 04.

отредактировал диаграмму (значение ID подставляйте свое).
Т.к. Вы написали, что значение 04 проскакивает, а не держится постоянно для его "отлавливания" необходимо использовать  фильтр ID (WIKI форум)

Вложений в сообщении

Иконка вложения button_hold1.cfd 1.5 кб, скачивался 68 раз, последний раз 2016-03-29 

16

Re: Подсчёт времени между событиями

оба значения 03 и 04  - только проскакивают в момент нажатия, в остальное время шине всегда сохраняется 00

17

Re: Подсчёт времени между событиями

Последний вариант диаграммы учитывает это. Вы его попробовали?

18 (31-03-2016 15:42:04 отредактировано SiMuS)

Re: Подсчёт времени между событиями

Да схема рабочая.

Доработал возможность работы в режиме "переключателя", то есть первое удержание кнопки включает светодиод, второе выключает.

Вложений в сообщении

Иконка вложения 1.png 98.77 кб, скачивался 91 раз, последний раз 2016-03-31 

19

Re: Подсчёт времени между событиями

Мне тоже интересно, как можно зафиксировать время между событиями... только интересен именно общий случай, когда время выполнения одного события неизвестно.
Т.е. событие А длится от 0 до 6 секунд. Это время вычисляется и запускается событие Б той же продолжительностью.
Подскажите пожалуйста как организовать?..

20

Re: Подсчёт времени между событиями

Длительность события можно измерить например так (до 65,5 секунд)

Вложений в сообщении

timecount.png, 71.63 кб, 781 x 207
timecount.png 71.63 кб, скачивался 107 раз, последний раз 2016-10-21 

21

Re: Подсчёт времени между событиями

Константин, CANNY пишет:

Длительность события можно измерить например так (до 65,5 секунд)

А "длительность программного цикла" вообще в симуляторе себя как-то проявляет?.. потому как я уже пробовал что-то аналогичное, но в симуляторе этот регистр у меня всегда имеет значение 0.

22

Re: Подсчёт времени между событиями

Периферия контроллера (регистры) в симуляторе не реализованы. Для проверки диаграммы в симуляторе, зафиксируйте значение регистра через контекстное меню, например установив его =1.

23

Re: Подсчёт времени между событиями

Константин, CANNY пишет:

Периферия контроллера (регистры) в симуляторе не реализованы. Для проверки диаграммы в симуляторе, зафиксируйте значение регистра через контекстное меню, например установив его =1.

Всё ОК!
Благодарю за помощь!)