Проблемы с задержками при создании проекта

На этом форуме Вы можете задать вопросы знатокам программы и автору.
Arkan
Рядовой
Сообщения: 72
Зарегистрирован: 16.04.2019{, 14:16}
Репутация: -1
Имя: Аркадий

Проблемы с задержками при создании проекта

#1

Сообщение Arkan » 11.04.2020{, 21:37}

Друзья!
Здравствуйте!
Столкнулся с такой проблемой: спроектировал свое устройства контроля и подсчета передвижения. Схема содержит созданные мной блоки, один - включает два лазерных дальномера VL53LOX и второй - блок свч-сенсора rcwl05-16.
Оба блока работают безукоризненно. Кроме блоков датчиков проект содержит схему, состоящую из нескольких схем, отвечающих за выполнение конкретных задач. Каждая из них работала, как часы, пока я их не связал в единую схему.
Проблема возникла с работой таймеров и генераторов. Скорость этих блоков потеряла любое логическое обоснование. Таймеры и генераторы перестали адекватно работать. При задании на входе генератора частоты в 1мкс, он достигает значения 1023 примерно за 5 секунд. Смена значений не влияет на скорость генератора. То же происходит и с таймерами. Каждую из схем я укомпоновал в отдельный блок. Для удобства. Вначале подумал, что это и есть причина. К сожалению, Сергей Глушенко не показал правило применения нескольких пользовательских блоков в программе. Порядок, и расположение на рабочем столе программы. Двигал блоки в разных направлениях. Безрезультатно.
После, плюнул, и создал весь проект без блоков. Последовательно расположил все компоненты схемы, по связям. Эффект тот же. Каждая из схем работает безукоризненно. Вместе, перестают работать счетчики и таймеры, а переменные дают большую задержку реакции. Использую контроллер ESP8266 D1 mini.
Может, кто знает решение проблемы?
для форума.jpg

Аватара пользователя
Phazz
Полковник
Сообщения: 2553
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 367
Откуда: Сургут
Имя: Анатолий

Проблемы с задержками при создании проекта

#2

Сообщение Phazz » 11.04.2020{, 22:03}

Димеру желателен отдельный контроллер. Он работает на прерываниях и поэтому вся остальная программа ждёт пока он выполнит свою задачу.

Arkan
Рядовой
Сообщения: 72
Зарегистрирован: 16.04.2019{, 14:16}
Репутация: -1
Имя: Аркадий

Проблемы с задержками при создании проекта

#3

Сообщение Arkan » 11.04.2020{, 22:37}

Phazz писал(а):
11.04.2020{, 22:03}
Димеру желателен отдельный контроллер. Он работает на прерываниях и поэтому вся остальная программа ждёт пока он выполнит свою задачу.
Главная проблема в самом димере. Именно в нем находится генератор, задающий счетчику частоту ШИМ. Причем, как я писал выше, частота генератора и таймеров резко падает при обрисовке схемы. как с блоками. так и развернутой в программе. для второго контроллера места нет. Если предположить, что на работу влияет время цикла программы, все равно остается загадкой, при чем здесь генераторы и таймеры? Программа обратилась к генератору и задала частоту. Частота, каким-то образом связана с внутренними часами контроллера? Было бы хорошо,если бы был блок генератора на аппаратном уровне.
Кроме отдельного процессора, мыслей никаких? Две недели решаю проблему. А истина, где-то рядом. Кто бы путь указал :smile37: :D

Аватара пользователя
Phazz
Полковник
Сообщения: 2553
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 367
Откуда: Сургут
Имя: Анатолий

Проблемы с задержками при создании проекта

#4

Сообщение Phazz » 11.04.2020{, 23:05}

Кстати дальномеры тоже неплохо потребляют процесорного времени к тому же работа wifi тоже занимает время. И в итоге программа начинает тормозить.

Отправлено спустя 2 минуты 6 секунд:
Про димер я ошибся. Димер у вас я так понимаю просто плавно увеличивает скованность ШИМ?

Arkan
Рядовой
Сообщения: 72
Зарегистрирован: 16.04.2019{, 14:16}
Репутация: -1
Имя: Аркадий

Проблемы с задержками при создании проекта

#5

Сообщение Arkan » 11.04.2020{, 23:41}

Аномально работают все устройства, зависящие от времени: генераторы, таймеры, таблица состояний, триггеры, переменные. Я полагаю, что это проявление недоработки компиляции программы.
P/S Вынес генератор счетчика димера в отдельный блок. И расположил его перед димером. Нарушились связи. Причем счет вверх счетчика стал происходить быстрее, а счет вниз, совершенно "потух"

ecoins
Полковник
Сообщения: 2932
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Проблемы с задержками при создании проекта

#6

Сообщение ecoins » 12.04.2020{, 00:36}

Проблемы в заведомо в неверном подходе к созданию проекта...
И Вы не выложили сам проект.

Iqubik
Сержант
Сообщения: 147
Зарегистрирован: 20.01.2020{, 06:10}
Репутация: 20
Откуда: Ставрополь
Имя: Николай

Проблемы с задержками при создании проекта

#7

Сообщение Iqubik » 12.04.2020{, 03:51}

И ничего не изменилось. Всё тот же подход.

viewtopic.php?f=68&t=5431&p=86739#p86713

Arkan
Рядовой
Сообщения: 72
Зарегистрирован: 16.04.2019{, 14:16}
Репутация: -1
Имя: Аркадий

Проблемы с задержками при создании проекта

#8

Сообщение Arkan » 12.04.2020{, 17:26}

В тему. У меня есть два созданных блока. Как разместить их на форуме в пользовательских блоках?
Если это, каким-то образом, повлияет на решение проблемы, выкладываю один из блоков (блок программы). Это программа подсчета перемещения.
Верхний триггер при включении, отправляет через переменную единицу на вход сброса нижнего триггера. Таким образом, блокируя его работу. До завершения действия (прохода). По завершению действия, на входах приемников обоих направлений движения,устанавливается ноль. Это событие приводит к сбросу обоих триггеров. Аналогично и с проходом в обратном направлении.
Проблема состоит в следующем:
При поступлении сигнала на верхний триггер, программе необходимо время для передачи его на вход сброса нижнего триггера. Если в "железе" скоростью сброса нижнего триггера можно пренебречь, то в программе, от этой скорости зависит качество работы схемы.
Так как объект перемещается с максимальной скоростью (макс 15 км/ч - 4м/с - 4см/10мс. , а расстояние между двумя датчиками макс - 5см, то скорость прохода сигнала от обнаружения объекта первым датчиком, до обнаружения объекта вторым датчиком не должна превышать 10мс.
Принимая во внимание, что вся схема превращается в скомпилированную программу, необходимо учитывать скорость выполнения одного цикла программы, скорость доступа к данным и скорость обмена. Все эти процедуры занимают определенное время, Это время я не могу рассчитать, не будучи программистом. В этом заключается проблема работы моей схемы.
Возвращаясь к описанию работы компонентов, наблюдаю следующее:
Основными компонентами схемы являются логические "и" отвечающие за формирование импульса для счетчика, имеющие по три входа: первый - инвертируемый ноль сигнала от обоих датчиков, второй - сигнал от соответствующего датчика, и третий, определяющий направление счета - от соответствующего триггера.
На входе схемы стоят фильтры - защита от случайных (ложных) срабатываний датчиков. На выходах блоков фильтров присутствует логический ноль. Он инвертируется, и превращается в логическую 1, управляющую сбросом триггеров и подтверждением окончания действия.
При пересечении объектом границы верхнего датчика (движение вверх), единица устанавливается на входе логической "и" движение вниз, и на вход верхнего триггера, устанавливая на его выходе логическую 1.
В свою очередь, верхний триггер устанавливает 1 на соответствующем входе логической "И" движение вверх, и присваивает 1 переменной "reset down" (rd).
rd устанавливает логическую 1 на входе сброса нижнего триггера,
На выходе нижнего триггера устанавливается 0, поступающий на вход логической "И" нижнего счетчика, и блокируя работу счетчика в направлении "вниз".
При дальнейшем движении объекта, он пересекает зону видимости нижнего датчика.
На вход нижнего триггера устанавливается 1. Но, так, как на его rd - 1, на выходе - 0.
1 от нижнего датчика поступает на логическую " и" "движения вверх".
При дальнейшем движении объекта в одном направлении, он выходит из зоны видимости верхнего датчика.
На входе верхнего триггера и на логической "и" "движения низ" устанавливается 0. Но, так как на rd верхнего триггера 0, то на выходе остается 1.
При выходе объекта из зоны видимости обоих датчиков, на инверторе ноля, формируется 1, поступающая на логические "И" движения в обоих направлениях.
Таким образом, состояние входов "И" "движения вверх" :1-1-1, формирует импульс на вход "вверх" счетчика движения.
На входах "И" "движения вниз" 1-0-0. На выходе 0.
После времени задержки таймера на включение, 1 с инверсного выхода ноля устанавливается на входах сброса обоих триггеров (сбрасывает все установки). Проход в одном направлении завершен. Вся схема обнулена.
Время задержки таймера на включение "ноля" должно быть достаточным для установки всех значений 1 на логических "и" движений в обоих направлениях, но меньше времени прохода объекта от зоны видимости одного датчика до зоны видимости другого датчика.
Это необходимо для "отмены" действия программы, в случае изменения направления движения объекта в момент пересечения им зон видимости обоих датчиков. т.е. меньше 10мс.
Таким образом проход считается законченным при следующей схеме видимости объекта датчиками: 10-01-00 в одном направлении, и 01-10-00 в другом направлении. все другое - от лукавого, и не засчитывается:)
Вот, в принципе, и все.
Проблема заключается во времени задержки таймеров, времени "прохода" импульсов и формирования логических значений. Формирование значений от нижнего к верхнему происходит значительно быстрее, нежели от верхнего к нижнему. никак не удается достигнуть паритета.
Какие вырастают проблемы в работе схемы:
1. Проходы могут быть засчитаны. А могут случиться "провал".
2. При нескольких последовательных проходах в одном направлении, может не сработать проход в обратном направлении. (срабатывают оба триггера одновременно).
3. Проход вниз всегда устойчивее прохода вверх. При проходе от верхнего датчика к нижнему иногда не успевает установиться сброс на нижнем триггере. При проходе от нижнего к верхнему, такой аномалии не наблюдается.

Счетчик_движенияD1_2_(FBD).ubi
(1.29 МБ) 58 скачиваний
vl53l0xD1_(CODE).ubi
(1017.98 КБ) 69 скачиваний
Последний раз редактировалось Arkan 12.04.2020{, 18:55}, всего редактировалось 3 раза.

Arkan
Рядовой
Сообщения: 72
Зарегистрирован: 16.04.2019{, 14:16}
Репутация: -1
Имя: Аркадий

Проблемы с задержками при создании проекта

#9

Сообщение Arkan » 12.04.2020{, 18:11}

av писал(а):
12.04.2020{, 17:40}
Arkan, Вы уж извините, но читать написанный вами алгоритм очень сложно ! Вы бы как нибудь разбили его по обзацам. Пока читал несколько раз потерялся в тексте. Разбейте по действиям.
Выложены схемы. Это описание работы. В двух словах:
При движении объекта в одном направлении, счетчик увеличивает значение на 1 вверх. При движении в обратном направлении - на 1 вниз. При изменении направления движения объектом до фиксации окончания действия, счетчик не меняет значения.

Отправлено спустя 31 минуту 57 секунд:
av писал(а):
12.04.2020{, 17:40}
Arkan, Вы уж извините, но читать написанный вами алгоритм очень сложно ! Вы бы как нибудь разбили его по обзацам. Пока читал несколько раз потерялся в тексте. Разбейте по действиям.
Виноват. Исправился. Разбил.

Arkan
Рядовой
Сообщения: 72
Зарегистрирован: 16.04.2019{, 14:16}
Репутация: -1
Имя: Аркадий

Проблемы с задержками при создании проекта

#10

Сообщение Arkan » 12.04.2020{, 19:03}

av писал(а):
12.04.2020{, 18:49}
Arkan, попытался разобраться в алгоритме блока. Есть вопросы по логике ! Много не нужных операций. Для начала опишите работу узла выделенного красным.
СпойлерПоказать
Логика.png
Отправлено спустя 4 минуты 9 секунд:
И опишите как работает датчик. Не имел с такими дело.
Датчик видит объект на расстоянии до 2-х метров по даташит. Реально 1,5-1,8 м. При обнаружении объекта показывает расстояние до него в мм.
Я сделал блок для 2-х датчиков. Вложил в сообщении. Хотелось бы выложить на форуме в блоках пользователей. Но, есть нюанс. Не могу установить вход для переменной, определяющей в функции присвоения адреса номер выхода контроллера. Очень неудобно при смене контролшеров. Нужно входить в редактирование и изменять номера выходов.
А, так, блок работает на "ура".
Датчики в нейтральной ситуации (нет в зоне видимости объекта) иногда дают ложные срабатывания.1-3 ложных импульса. Когда "сбоит" один датчик, это не криминально. Ситуацию решает инвертируемый ноль. т.е. после ложной установки 1 на любом из триггеров, в момент восстановления состояния покоя, сбрасываются все триггеры.
Дело обстоит иначе, когда сбоят одновременно оба датчика. Тогда может возникнуть событие ложного срабатывания счетчика.
После выхода датчиков я установил фильтр (на схеме красным), поглощающий ложные срабатывания.
dist1 и dist2 - входы для выходов датчиков 1 и 2.
range - установка расстояния обнаружения датчиком объекта в мм
"Много не нужных операций. ". Если можно - конкретно.
Последний раз редактировалось Arkan 12.04.2020{, 19:20}, всего редактировалось 3 раза.

Arkan
Рядовой
Сообщения: 72
Зарегистрирован: 16.04.2019{, 14:16}
Репутация: -1
Имя: Аркадий

Проблемы с задержками при создании проекта

#11

Сообщение Arkan » 12.04.2020{, 19:16}

av писал(а):
12.04.2020{, 19:11}
Arkan, а вы не задавались вопросом почему есть сбои. Была такая ситуация с ультразвуковыми датчиками если в настройках установить максимальную длину замера, то сбои были регулярными. Вы так и не объяснили как работает датчик ? Инфа нужна для того чтобы самому обмазговать алгоритм. По алгоритму созданному другим человеком трудно понимать что у него там в голове.
Специально для вас дополнил сообщение

Отправлено спустя 52 секунды:
av писал(а):
12.04.2020{, 19:11}
Arkan, а вы не задавались вопросом почему есть сбои. Была такая ситуация с ультразвуковыми датчиками если в настройках установить максимальную длину замера, то сбои были регулярными. Вы так и не объяснили как работает датчик ? Инфа нужна для того чтобы самому обмазговать алгоритм. По алгоритму созданному другим человеком трудно понимать что у него там в голове.
Конкретизируйте, пожалуйста. Сбои с чем?

Отправлено спустя 7 минут 35 секунд:
av писал(а):
12.04.2020{, 19:11}
Arkan, а вы не задавались вопросом почему есть сбои. Была такая ситуация с ультразвуковыми датчиками если в настройках установить максимальную длину замера, то сбои были регулярными.
Не нужно устанавливать пороговые значения. Это не профессионально.

Arkan
Рядовой
Сообщения: 72
Зарегистрирован: 16.04.2019{, 14:16}
Репутация: -1
Имя: Аркадий

Проблемы с задержками при создании проекта

#12

Сообщение Arkan » 12.04.2020{, 20:06}

av писал(а):
12.04.2020{, 19:26}
Arkan, а как датчик выдает импульсы ? Если смотреть по схеме из первого поста выходы у него с типом integer. Какие значения он выдает и в какой последовательности ?

Пока писал вы уже вопросами насыпали :D .
Arkan писал(а):
12.04.2020{, 19:17}
Конкретизируйте, пожалуйста. Сбои с чем?
С значениями на выходе датчика. Они скакали как та лошадь :smile171: .

Arkan, вам нужна помощь ? Если да так помогите мне понять как это лучше всего сделать ! Из вас клещами нужно тащить нужную информацию :yes: . Пожалуйста объясните как работает датчик ! Какой выход выдает первым значения, какие значения, разница между значениями.
К любым насильственным действиям отношусь крайне недружелюбно. Из меня ничего не нужно тащить! Ни клещами, ни чем иным!
Показания датчика меня не интересуют! Если вы "прочитали" схему. Он априори выдает значения расстояния. Значит, априори integer.
На выход датчика установлен компаратор. На второй вход, которого присваивается значение допустимой величины расстояния. На схеме у меня 600. Так, как датчик выдает расстояние до объекта в мм, то расстояние реакции, в моем случае 600 мм, т.е. 60 см. Компаратор выдаст 1 при обнаружении датчиком объекта в пределах установленной видимости - от 0 до 600 мм.
Описание работы датчика в посте 12

Arkan
Рядовой
Сообщения: 72
Зарегистрирован: 16.04.2019{, 14:16}
Репутация: -1
Имя: Аркадий

Проблемы с задержками при создании проекта

#13

Сообщение Arkan » 12.04.2020{, 21:06}

av писал(а):
12.04.2020{, 20:21}
Arkan, все хорошо не волнуйтесь. Попробую описать что я понял, если не прав поправите !

Есть два датчика которые объеденены в один блок. Датчики расположены на определенном расстоянии друг от друга (не напротив друг друга) допустим 50 см. Вам нужно отследить перемещение некоего предмета через виртуальные ворота и не только отследить но и определить в каком направлении предмет двигался. На выходе блока сигналы - значение счетчика достигли ноль и текущее значение счетчика. Начальное значение счетчика равны нулю, так же иметь возможность сбросить его. Вот такой алгоритм вам нужен ?

Если где ошибся поправьте.
Спасибо за ответ!
В общем все ни туда, и ни оттуда! Без обид.
Два датчика расположены на расстоянии 5 см друг от друга. Направлены в одну сторону. В сторону передвижений объектов. Датчики работают по принципу ультразвукового датчика, так вам будет понятнее, но вместо звуковой волны используется световой луч. Отражаясь от объекта, он возвращается в датчик. И периферия просчитывает время посылки приема луча, относительно скорости света. Объяснять работу лазерного дальномера в этой теме не представляется возможным. Google - лучший помощник. В отличие от звукового, в лазерном датчике нет надобности в отправке сигнала. Он сам отправляет сигнал и сам принимает. При возникновении препятствия, обрабатывает скорость возврата луча, и выдает расстояние до объекта. Пишу уже, по моему, в третий раз!
Мне нужно определить направление движения объекта, и подсчитать количество объектов, прошедших в ту или иную сторону.
Вопрос темы был в следующем: работа всех компонентов программы, зависящих от скорости обработки данных, передачи информации, компиляции в arduino IDE, : генераторы, таймеры, переменные, триггеры. И, как бороться с проявлениями аномалий в иерархии установленных компонентов.
Хотелось бы услышать, где вы нашли изъяны в схеме? И, как решить поставленные вопросы?
С благодарностью приму обоснованные замечания!

SSSergeich
Капитан
Сообщения: 708
Зарегистрирован: 06.02.2016{, 11:01}
Репутация: 37
Откуда: Ярославль
Имя: Сергей

Проблемы с задержками при создании проекта

#14

Сообщение SSSergeich » 12.04.2020{, 21:19}

av писал(а):
12.04.2020{, 20:21}
Вам нужно отследить перемещение некоего предмета через виртуальные ворота и не только отследить но и определить в каком направлении предмет двигался.
Arkan писал(а):
12.04.2020{, 21:06}
В общем все ни туда, и ни оттуда! Без обид.

Мне нужно определить направление движения объекта, и подсчитать количество объектов, прошедших в ту или иную сторону.
:smile453:

Уже непонятно, кто кому хочет помочь...

Arkan, Вам же уважаемый av, написал выше что,
av писал(а):
12.04.2020{, 19:11}
Инфа нужна для того чтобы самому обмазговать алгоритм. По алгоритму созданному другим человеком трудно понимать что у него там в голове.
Чтобы понять, где кроется ошибка в Вашем проекте, нужно сначала понять как то работает вообще и как нужно чтобы работало у Вас....

Arkan
Рядовой
Сообщения: 72
Зарегистрирован: 16.04.2019{, 14:16}
Репутация: -1
Имя: Аркадий

Проблемы с задержками при создании проекта

#15

Сообщение Arkan » 12.04.2020{, 21:30}

Arkan писал(а):
12.04.2020{, 19:17}
Конкретизируйте, пожалуйста. Сбои с чем?
С значениями на выходе датчика. Они скакали как та лошадь :smile171: .

[/quote]

Примерно так. Компаратор реагирует и выдает 1, когда датчик обнаружит в зоне видимость объект на расстоянии меньшем, нежели установленное в компараторе. У меня 600мм. Датчик - железяка. Ему все равно. Он постоянно лупит лучом в прямом направлении. У данного датчика мощность луча не большая, поэтому ее хватает только на макс 2 метра отраженного сигнала.
Когда компаратор принимает от датчика числа от 0 до 600. на его выходе 1. Пока никого нет перед датчиком,он выдает значение своего ноля - 8100. Могу ошибиться. Это виртуальное значение. Оно сообщает, что еа горизонте все чисто.
Но, вот произошел сбой в прерывании процессора, в питании самого датчика, муха пролетела, и он без появления реального объекта внезапно выдал вместо 8100 - 120, или 3. Это в пределах диапазона, на который реагирует компаратор. И компаратор реагирует единицей на своем выходе. И, понеслось.
Так, что, как кони, или, как блохи, это вопрос к разработчику устройства. :D

Arkan
Рядовой
Сообщения: 72
Зарегистрирован: 16.04.2019{, 14:16}
Репутация: -1
Имя: Аркадий

Проблемы с задержками при создании проекта

#16

Сообщение Arkan » 12.04.2020{, 21:56}

Уважаемые господа-товарищи!
Ко всем с искренним уважением!

Если хотите о чем-то спросить - задавайте вопросы конкретно.
Очень хочу услышать ответы на СВОИ вопросы, а не отвечать по несколько раз на не относящиеся к моей теме другие вопросы.
Меня уже в который раз, безосновательно, упрекнули в том, что я не даю схем. Дал два своих блока. Один блок - двух дальномеров (пока, единственный в FlProg), второй - непосредственно схема проекта.
Дал полнейшее описание работы схемы. Дал описание работы датчиков. Дал описание взаимодействия датчиков со схемой. Дал алгоритм работы устройства.
Если у кого возникают вопросы, пожалуйста, конкретизируйте!
С уважением, Аркадий

Отправлено спустя 3 минуты 17 секунд:
av писал(а):
12.04.2020{, 21:51}
Arkan, жесть. При таком расстоянии друг от друга различие во времени сработки датчиков в моем понимании ничтожно мало. Возможно и ошибаюсь. Алгоритма блока переделал.

Логический смысл таков:
При срабатывании одного датчика первым блокируется второй датчик на выдачу сигнала к счетчику обратной связью через переменную.
Сигнал с сработавшего датчика поступает на вход счетчика увеличение или уменьшение (в зависимости какой датчик сработал первым).

Далее второй датчик так же срабатывает, но с опозданием и его сигнал блокирован первым. При дальнейшем передвижении объекта датчик который сработал первым изменяет свое значение в большую сторону, так как луч лазера не фиксирует препятствие. В этот момент F триггер своим сигналом с выхода блока сравнения сбрасывает RS триггер второго датчика который заблокирован ( на всякий случай :smile171: ).

Теперь ожидаем когда второй датчик зафиксирует отсутствие препятствия при дальнейшем передвижении объекта. Как только это произойдет с выхода второго блока сравнения второй F триггер сбросит RS триггер в начальное положение. Этот алгоритм работает в обе стороны. Вся логика завязана на различии работы Rtrig и Ftrig, первый срабатывает по переднему фронту сигнала второй по спаду этого фронта.

Опять пока писал вы уже написали ответ :D
Arkan писал(а):
12.04.2020{, 21:40}
Примерно так. Компаратор реагирует и выдает 1
В этом случае нужно применить другой знак блока сравнения. Я применил знак "<=".
СпойлерПоказать
Алгоритм.png
Спасибо большое за схему. Сейчас посмотрю. Но, сходу вопрос, поставленный мной в начале темы: не успевает переменная присваиваться нижнему триггеру от верхнего за время движения сверху вниз. Если снизу вверх - все хорошо

Отправлено спустя 16 минут 34 секунды:
av писал(а):
12.04.2020{, 21:51}
Arkan, жесть. При таком расстоянии друг от друга различие во времени сработки датчиков в моем понимании ничтожно мало. Возможно и ошибаюсь. Алгоритма блока переделал.

Логический смысл таков:
При срабатывании одного датчика первым блокируется второй датчик на выдачу сигнала к счетчику обратной связью через переменную.
Сигнал с сработавшего датчика поступает на вход счетчика увеличение или уменьшение (в зависимости какой датчик сработал первым).

Далее второй датчик так же срабатывает, но с опозданием и его сигнал блокирован первым. При дальнейшем передвижении объекта датчик который сработал первым изменяет свое значение в большую сторону, так как луч лазера не фиксирует препятствие. В этот момент F триггер своим сигналом с выхода блока сравнения сбрасывает RS триггер второго датчика который заблокирован ( на всякий случай :smile171: ).

Теперь ожидаем когда второй датчик зафиксирует отсутствие препятствия при дальнейшем передвижении объекта. Как только это произойдет с выхода второго блока сравнения второй F триггер сбросит RS триггер в начальное положение. Этот алгоритм работает в обе стороны. Вся логика завязана на различии работы Rtrig и Ftrig, первый срабатывает по переднему фронту сигнала второй по спаду этого фронта.

Опять пока писал вы уже написали ответ :D
Arkan писал(а):
12.04.2020{, 21:40}
Примерно так. Компаратор реагирует и выдает 1
В этом случае нужно применить другой знак блока сравнения. Я применил знак "<=".
СпойлерПоказать
Алгоритм.png
Сходу первое замечание. При попадании объекта в зону видимости верхнего датчика на верхнем триггере устанавливается единица, Она приходит на вход счетчика счет вверх.
Стоит объекту отступить назад, как счетчик получит законченный импульс. И посчитает +1?
Или я не внимательно посмотрел? Щас пересмотрю.

Arkan
Рядовой
Сообщения: 72
Зарегистрирован: 16.04.2019{, 14:16}
Репутация: -1
Имя: Аркадий

Проблемы с задержками при создании проекта

#17

Сообщение Arkan » 12.04.2020{, 22:36}

av писал(а):
12.04.2020{, 21:51}
Arkan, жесть. При таком расстоянии друг от друга различие во времени сработки датчиков в моем понимании ничтожно мало. Возможно и ошибаюсь. Алгоритма блока переделал.
Схема не работает

Arkan
Рядовой
Сообщения: 72
Зарегистрирован: 16.04.2019{, 14:16}
Репутация: -1
Имя: Аркадий

Проблемы с задержками при создании проекта

#18

Сообщение Arkan » 12.04.2020{, 23:15}

av писал(а):
12.04.2020{, 23:03}
Arkan, будем думать дальше. Выход есть всегда !

Отправлено спустя 22 минуты 24 секунды:
Arkan, уточните где пошло не так ?

Если из за этого:
Arkan писал(а):
12.04.2020{, 22:15}
Стоит объекту отступить назад, как счетчик получит законченный импульс. И посчитает +1?
То это можно решить. А если полностью весь алгоритм нужно попытаться выстроить порядок выполнения блоков всякими ухищрениями типа разделить этот алгоритм на отдельные секции.
Не работает вообще.
при 1 на входе fтриггера, на его выходе 0?

Arkan
Рядовой
Сообщения: 72
Зарегистрирован: 16.04.2019{, 14:16}
Репутация: -1
Имя: Аркадий

Проблемы с задержками при создании проекта

#19

Сообщение Arkan » 12.04.2020{, 23:44}

av писал(а):
12.04.2020{, 23:24}
Arkan писал(а):
12.04.2020{, 23:15}
Не работает вообще.
при 1 на входе fтриггера, на его выходе 0?
Так и должно быть единица на выходе появится на время одного цикла программы только после снятия 1 с входа Ftrig.
Вот так получается при получении сигнала от верхнего датчика?
Схема счетчика чужая2.jpg

Arkan
Рядовой
Сообщения: 72
Зарегистрирован: 16.04.2019{, 14:16}
Репутация: -1
Имя: Аркадий

Проблемы с задержками при создании проекта

#20

Сообщение Arkan » 13.04.2020{, 00:00}

av писал(а):
12.04.2020{, 23:56}
Arkan, попробуйте еще вот такой вариант. Если не получится то завтра на свежую голову еще подумаем, алгоритмы в Протеусе просимулирую может что получится. Сегодня уже устал нужно отдыхать.

Отправлено спустя 29 секунд:
Алгоритм.png

Отправлено спустя 1 минуту 30 секунд:
Только нижний компаратор поставьте правильно знак, уже глючу :smile171:
Спсаибо! До завтра :)

Отправлено спустя 2 часа 28 минут 50 секунд:
av писал(а):
12.04.2020{, 23:56}
Arkan, попробуйте еще вот такой вариант...
Схема работает. Но есть нюансы. Первое: счетчик считает, когда проход отменен. Второе: остались те же глюки, что и в моей схеме. "Провалы" в счете. Проход был. Счета не было. 2-3 сбоя из 10 проходов. Мне нужно добиться 0 из всех.

Ответить

Вернуться в «Спросить у знатоков»