1

Тема: Как отследить изменение индекса в коммутаторе?

Здравствуйте
Столкнулся с такой проблемкой. Имеется необходимость передачи сообщений по UART (организовал на коммутаторах, выбор по индексу).

http://i.piccy.info/i9/541f50d5e9c4a2526b6612dbcd5bdca2/1576759776/104545/1353031/Bezymiannyi_800.jpghttp://i.piccy.info/a3/2019-12-19-12-49/i9-13561236/800x461-r/i.gif

В таком решении, все работает более менее нормально до тех пор, пока на входы коммутаторов 2:1 поступает короткий импульс (например, сформированный детектором переднего фронта). Но как только на вход индекса блоков 3-4-5-8 приходит долгий сигнал - на выходе блока 2 получается генератор и импульсы отправки сообщений следуют постоянно.
Если разорвать соединение между блоками 2 и 9 - все ок. Но задача блока 9 и 10 - посылать сообщение, которое очищает экран после каждого (любого) ранее выведенного текста.

Как иначе можно решить задачу с запуском передачи UART по факту изменения индекса на входе коммутатора 8:1? При этом индексы могут как отличаться так и повторяться.
Как организовать после успешной отправки сообщения с текстом, обязательную отправку сообщения очистки экрана (через определенное время)?


Буду премного благодарен за подсказки.

2

Re: Как отследить изменение индекса в коммутаторе?

Группа коммутаторов 3,4,5,8 - это присвоение константы по условию с приоритетом, при этом событие "text3" имеет наивысший приоритет, а событие "clear" - наинизший.
Если значения на входах коммутаторов 3,4,5,8 будут появляться не импульсно, то значение на входах "Индекс" коммутаторов "8-в-1" будут устанавливаться в соответствии с приоритетом и будут оставаться неизменными, пока события продолжают сохранять свои значения. При этом, возможно, не всегда все события будут отсутствовать, т.е. на выход блока №8 будет не часть попадать значение "0" (с входа 0 коммутатора №3), а тогда условие отправки не будет выполняться вообще (блок №1).

Как организовать после успешной отправки сообщения с текстом, обязательную отправку сообщения очистки экрана (через определенное время)?

Нужно дать событию "clear" наивысший приоритет, т.е. поставить его вместо события "text3".
Если нужен детектор изменения значения то можно использовать такое решение.
Также можно попробовать такой конвейер. В нем не теряются события, т.е. если оно произошло, то все равно попадет на обработку после отработки событий с высшими приоритетами, даже если само событие уже прошло.

3 (20-12-2019 10:55:30 отредактировано alex_engine)

Re: Как отследить изменение индекса в коммутаторе?

Спасибо огромное. Буду пробовать

По поводу детектора изменения значения - я верно понял, что если сообщение передается одно и то же (индекс не меняется, а повторяется), то это решение неприменимо?

Конвейер, похоже, больше подойдет под именно мою задачу. Если вставить в разрыв входов R триггеров  блоки задержки включения - получится регулировать время между передачей событий на обработку?

4

Re: Как отследить изменение индекса в коммутаторе?

alex_engine пишет:

По поводу детектора изменения значения - я верно понял, что если сообщение передается одно и то же (индекс не меняется, а повторяется), то это решение неприменимо?

Да, это решение не подойдет.

alex_engine пишет:

Если вставить в разрыв входов R триггеров  блоки задержки включения - получится регулировать время между передачей событий на обработку?

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