Проблемы с задержками при создании проекта
Проблемы с задержками при создании проекта
Друзья!
Здравствуйте!
Столкнулся с такой проблемой: спроектировал свое устройства контроля и подсчета передвижения. Схема содержит созданные мной блоки, один - включает два лазерных дальномера VL53LOX и второй - блок свч-сенсора rcwl05-16.
Оба блока работают безукоризненно. Кроме блоков датчиков проект содержит схему, состоящую из нескольких схем, отвечающих за выполнение конкретных задач. Каждая из них работала, как часы, пока я их не связал в единую схему.
Проблема возникла с работой таймеров и генераторов. Скорость этих блоков потеряла любое логическое обоснование. Таймеры и генераторы перестали адекватно работать. При задании на входе генератора частоты в 1мкс, он достигает значения 1023 примерно за 5 секунд. Смена значений не влияет на скорость генератора. То же происходит и с таймерами. Каждую из схем я укомпоновал в отдельный блок. Для удобства. Вначале подумал, что это и есть причина. К сожалению, Сергей Глушенко не показал правило применения нескольких пользовательских блоков в программе. Порядок, и расположение на рабочем столе программы. Двигал блоки в разных направлениях. Безрезультатно.
После, плюнул, и создал весь проект без блоков. Последовательно расположил все компоненты схемы, по связям. Эффект тот же. Каждая из схем работает безукоризненно. Вместе, перестают работать счетчики и таймеры, а переменные дают большую задержку реакции. Использую контроллер ESP8266 D1 mini.
Может, кто знает решение проблемы?
Здравствуйте!
Столкнулся с такой проблемой: спроектировал свое устройства контроля и подсчета передвижения. Схема содержит созданные мной блоки, один - включает два лазерных дальномера VL53LOX и второй - блок свч-сенсора rcwl05-16.
Оба блока работают безукоризненно. Кроме блоков датчиков проект содержит схему, состоящую из нескольких схем, отвечающих за выполнение конкретных задач. Каждая из них работала, как часы, пока я их не связал в единую схему.
Проблема возникла с работой таймеров и генераторов. Скорость этих блоков потеряла любое логическое обоснование. Таймеры и генераторы перестали адекватно работать. При задании на входе генератора частоты в 1мкс, он достигает значения 1023 примерно за 5 секунд. Смена значений не влияет на скорость генератора. То же происходит и с таймерами. Каждую из схем я укомпоновал в отдельный блок. Для удобства. Вначале подумал, что это и есть причина. К сожалению, Сергей Глушенко не показал правило применения нескольких пользовательских блоков в программе. Порядок, и расположение на рабочем столе программы. Двигал блоки в разных направлениях. Безрезультатно.
После, плюнул, и создал весь проект без блоков. Последовательно расположил все компоненты схемы, по связям. Эффект тот же. Каждая из схем работает безукоризненно. Вместе, перестают работать счетчики и таймеры, а переменные дают большую задержку реакции. Использую контроллер ESP8266 D1 mini.
Может, кто знает решение проблемы?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- Phazz
- Полковник
- Сообщения: 3120
- Зарегистрирован: 17 окт 2016, 15:38
- Откуда: Сургут
- Имя: Анатолий
- Благодарил (а): 232 раза
- Поблагодарили: 113 раз
Проблемы с задержками при создании проекта
Димеру желателен отдельный контроллер. Он работает на прерываниях и поэтому вся остальная программа ждёт пока он выполнит свою задачу.
Проблемы с задержками при создании проекта
Главная проблема в самом димере. Именно в нем находится генератор, задающий счетчику частоту ШИМ. Причем, как я писал выше, частота генератора и таймеров резко падает при обрисовке схемы. как с блоками. так и развернутой в программе. для второго контроллера места нет. Если предположить, что на работу влияет время цикла программы, все равно остается загадкой, при чем здесь генераторы и таймеры? Программа обратилась к генератору и задала частоту. Частота, каким-то образом связана с внутренними часами контроллера? Было бы хорошо,если бы был блок генератора на аппаратном уровне.Phazz писал(а): 11 апр 2020, 22:03 Димеру желателен отдельный контроллер. Он работает на прерываниях и поэтому вся остальная программа ждёт пока он выполнит свою задачу.
Кроме отдельного процессора, мыслей никаких? Две недели решаю проблему. А истина, где-то рядом. Кто бы путь указал


- Phazz
- Полковник
- Сообщения: 3120
- Зарегистрирован: 17 окт 2016, 15:38
- Откуда: Сургут
- Имя: Анатолий
- Благодарил (а): 232 раза
- Поблагодарили: 113 раз
Проблемы с задержками при создании проекта
Кстати дальномеры тоже неплохо потребляют процесорного времени к тому же работа wifi тоже занимает время. И в итоге программа начинает тормозить.
Отправлено спустя 2 минуты 6 секунд:
Про димер я ошибся. Димер у вас я так понимаю просто плавно увеличивает скованность ШИМ?
Отправлено спустя 2 минуты 6 секунд:
Про димер я ошибся. Димер у вас я так понимаю просто плавно увеличивает скованность ШИМ?
Проблемы с задержками при создании проекта
Аномально работают все устройства, зависящие от времени: генераторы, таймеры, таблица состояний, триггеры, переменные. Я полагаю, что это проявление недоработки компиляции программы.
P/S Вынес генератор счетчика димера в отдельный блок. И расположил его перед димером. Нарушились связи. Причем счет вверх счетчика стал происходить быстрее, а счет вниз, совершенно "потух"
P/S Вынес генератор счетчика димера в отдельный блок. И расположил его перед димером. Нарушились связи. Причем счет вверх счетчика стал происходить быстрее, а счет вниз, совершенно "потух"
-
- Полковник
- Сообщения: 4005
- Зарегистрирован: 12 фев 2016, 11:40
- Откуда: Шатура
- Имя: Энвер
- Благодарил (а): 137 раз
- Поблагодарили: 153 раза
Проблемы с задержками при создании проекта
Проблемы в заведомо в неверном подходе к созданию проекта...
И Вы не выложили сам проект.
И Вы не выложили сам проект.
Проблемы с задержками при создании проекта
В тему. У меня есть два созданных блока. Как разместить их на форуме в пользовательских блоках?
Если это, каким-то образом, повлияет на решение проблемы, выкладываю один из блоков (блок программы). Это программа подсчета перемещения.
Верхний триггер при включении, отправляет через переменную единицу на вход сброса нижнего триггера. Таким образом, блокируя его работу. До завершения действия (прохода). По завершению действия, на входах приемников обоих направлений движения,устанавливается ноль. Это событие приводит к сбросу обоих триггеров. Аналогично и с проходом в обратном направлении.
Проблема состоит в следующем:
При поступлении сигнала на верхний триггер, программе необходимо время для передачи его на вход сброса нижнего триггера. Если в "железе" скоростью сброса нижнего триггера можно пренебречь, то в программе, от этой скорости зависит качество работы схемы.
Так как объект перемещается с максимальной скоростью (макс 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. Проход вниз всегда устойчивее прохода вверх. При проходе от верхнего датчика к нижнему иногда не успевает установиться сброс на нижнем триггере. При проходе от нижнего к верхнему, такой аномалии не наблюдается.
Если это, каким-то образом, повлияет на решение проблемы, выкладываю один из блоков (блок программы). Это программа подсчета перемещения.
Верхний триггер при включении, отправляет через переменную единицу на вход сброса нижнего триггера. Таким образом, блокируя его работу. До завершения действия (прохода). По завершению действия, на входах приемников обоих направлений движения,устанавливается ноль. Это событие приводит к сбросу обоих триггеров. Аналогично и с проходом в обратном направлении.
Проблема состоит в следующем:
При поступлении сигнала на верхний триггер, программе необходимо время для передачи его на вход сброса нижнего триггера. Если в "железе" скоростью сброса нижнего триггера можно пренебречь, то в программе, от этой скорости зависит качество работы схемы.
Так как объект перемещается с максимальной скоростью (макс 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. Проход вниз всегда устойчивее прохода вверх. При проходе от верхнего датчика к нижнему иногда не успевает установиться сброс на нижнем триггере. При проходе от нижнего к верхнему, такой аномалии не наблюдается.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось Arkan 12 апр 2020, 18:55, всего редактировалось 3 раза.
Проблемы с задержками при создании проекта
Выложены схемы. Это описание работы. В двух словах:av писал(а): 12 апр 2020, 17:40 [ref]Arkan[/ref], Вы уж извините, но читать написанный вами алгоритм очень сложно ! Вы бы как нибудь разбили его по обзацам. Пока читал несколько раз потерялся в тексте. Разбейте по действиям.
При движении объекта в одном направлении, счетчик увеличивает значение на 1 вверх. При движении в обратном направлении - на 1 вниз. При изменении направления движения объектом до фиксации окончания действия, счетчик не меняет значения.
Отправлено спустя 31 минуту 57 секунд:
Виноват. Исправился. Разбил.av писал(а): 12 апр 2020, 17:40 [ref]Arkan[/ref], Вы уж извините, но читать написанный вами алгоритм очень сложно ! Вы бы как нибудь разбили его по обзацам. Пока читал несколько раз потерялся в тексте. Разбейте по действиям.
Проблемы с задержками при создании проекта
Датчик видит объект на расстоянии до 2-х метров по даташит. Реально 1,5-1,8 м. При обнаружении объекта показывает расстояние до него в мм.av писал(а): 12 апр 2020, 18:49 [ref]Arkan[/ref], попытался разобраться в алгоритме блока. Есть вопросы по логике ! Много не нужных операций. Для начала опишите работу узла выделенного красным.[spoiler]Логика.png[/spoiler]
Отправлено спустя 4 минуты 9 секунд:
И опишите как работает датчик. Не имел с такими дело.
Я сделал блок для 2-х датчиков. Вложил в сообщении. Хотелось бы выложить на форуме в блоках пользователей. Но, есть нюанс. Не могу установить вход для переменной, определяющей в функции присвоения адреса номер выхода контроллера. Очень неудобно при смене контролшеров. Нужно входить в редактирование и изменять номера выходов.
А, так, блок работает на "ура".
Датчики в нейтральной ситуации (нет в зоне видимости объекта) иногда дают ложные срабатывания.1-3 ложных импульса. Когда "сбоит" один датчик, это не криминально. Ситуацию решает инвертируемый ноль. т.е. после ложной установки 1 на любом из триггеров, в момент восстановления состояния покоя, сбрасываются все триггеры.
Дело обстоит иначе, когда сбоят одновременно оба датчика. Тогда может возникнуть событие ложного срабатывания счетчика.
После выхода датчиков я установил фильтр (на схеме красным), поглощающий ложные срабатывания.
dist1 и dist2 - входы для выходов датчиков 1 и 2.
range - установка расстояния обнаружения датчиком объекта в мм
"Много не нужных операций. ". Если можно - конкретно.
Последний раз редактировалось Arkan 12 апр 2020, 19:20, всего редактировалось 3 раза.
Проблемы с задержками при создании проекта
Специально для вас дополнил сообщениеav писал(а): 12 апр 2020, 19:11 [ref]Arkan[/ref], а вы не задавались вопросом почему есть сбои. Была такая ситуация с ультразвуковыми датчиками если в настройках установить максимальную длину замера, то сбои были регулярными. Вы так и не объяснили как работает датчик ? Инфа нужна для того чтобы самому обмазговать алгоритм. По алгоритму созданному другим человеком трудно понимать что у него там в голове.
Отправлено спустя 52 секунды:
Конкретизируйте, пожалуйста. Сбои с чем?av писал(а): 12 апр 2020, 19:11 [ref]Arkan[/ref], а вы не задавались вопросом почему есть сбои. Была такая ситуация с ультразвуковыми датчиками если в настройках установить максимальную длину замера, то сбои были регулярными. Вы так и не объяснили как работает датчик ? Инфа нужна для того чтобы самому обмазговать алгоритм. По алгоритму созданному другим человеком трудно понимать что у него там в голове.
Отправлено спустя 7 минут 35 секунд:
Не нужно устанавливать пороговые значения. Это не профессионально.av писал(а): 12 апр 2020, 19:11 [ref]Arkan[/ref], а вы не задавались вопросом почему есть сбои. Была такая ситуация с ультразвуковыми датчиками если в настройках установить максимальную длину замера, то сбои были регулярными.
Проблемы с задержками при создании проекта
К любым насильственным действиям отношусь крайне недружелюбно. Из меня ничего не нужно тащить! Ни клещами, ни чем иным!av писал(а): 12 апр 2020, 19:26 [ref]Arkan[/ref], а как датчик выдает импульсы ? Если смотреть по схеме из первого поста выходы у него с типом integer. Какие значения он выдает и в какой последовательности ?
Пока писал вы уже вопросами насыпали.
С значениями на выходе датчика. Они скакали как та лошадь.
[ref]Arkan[/ref], вам нужна помощь ? Если да так помогите мне понять как это лучше всего сделать ! Из вас клещами нужно тащить нужную информацию. Пожалуйста объясните как работает датчик ! Какой выход выдает первым значения, какие значения, разница между значениями.
Показания датчика меня не интересуют! Если вы "прочитали" схему. Он априори выдает значения расстояния. Значит, априори integer.
На выход датчика установлен компаратор. На второй вход, которого присваивается значение допустимой величины расстояния. На схеме у меня 600. Так, как датчик выдает расстояние до объекта в мм, то расстояние реакции, в моем случае 600 мм, т.е. 60 см. Компаратор выдаст 1 при обнаружении датчиком объекта в пределах установленной видимости - от 0 до 600 мм.
Описание работы датчика в посте 12
Проблемы с задержками при создании проекта
Спасибо за ответ!av писал(а): 12 апр 2020, 20:21 [ref]Arkan[/ref], все хорошо не волнуйтесь. Попробую описать что я понял, если не прав поправите !
Есть два датчика которые объеденены в один блок. Датчики расположены на определенном расстоянии друг от друга (не напротив друг друга) допустим 50 см. Вам нужно отследить перемещение некоего предмета через виртуальные ворота и не только отследить но и определить в каком направлении предмет двигался. На выходе блока сигналы - значение счетчика достигли ноль и текущее значение счетчика. Начальное значение счетчика равны нулю, так же иметь возможность сбросить его. Вот такой алгоритм вам нужен ?
Если где ошибся поправьте.
В общем все ни туда, и ни оттуда! Без обид.
Два датчика расположены на расстоянии 5 см друг от друга. Направлены в одну сторону. В сторону передвижений объектов. Датчики работают по принципу ультразвукового датчика, так вам будет понятнее, но вместо звуковой волны используется световой луч. Отражаясь от объекта, он возвращается в датчик. И периферия просчитывает время посылки приема луча, относительно скорости света. Объяснять работу лазерного дальномера в этой теме не представляется возможным. Google - лучший помощник. В отличие от звукового, в лазерном датчике нет надобности в отправке сигнала. Он сам отправляет сигнал и сам принимает. При возникновении препятствия, обрабатывает скорость возврата луча, и выдает расстояние до объекта. Пишу уже, по моему, в третий раз!
Мне нужно определить направление движения объекта, и подсчитать количество объектов, прошедших в ту или иную сторону.
Вопрос темы был в следующем: работа всех компонентов программы, зависящих от скорости обработки данных, передачи информации, компиляции в arduino IDE, : генераторы, таймеры, переменные, триггеры. И, как бороться с проявлениями аномалий в иерархии установленных компонентов.
Хотелось бы услышать, где вы нашли изъяны в схеме? И, как решить поставленные вопросы?
С благодарностью приму обоснованные замечания!
-
- Капитан
- Сообщения: 708
- Зарегистрирован: 06 фев 2016, 11:01
- Откуда: Ярославль
- Имя: Сергей
Проблемы с задержками при создании проекта
av писал(а): 12 апр 2020, 20:21 Вам нужно отследить перемещение некоего предмета через виртуальные ворота и не только отследить но и определить в каком направлении предмет двигался.
Arkan писал(а): 12 апр 2020, 21:06 В общем все ни туда, и ни оттуда! Без обид.
Мне нужно определить направление движения объекта, и подсчитать количество объектов, прошедших в ту или иную сторону.

Уже непонятно, кто кому хочет помочь...
[ref]Arkan[/ref], Вам же уважаемый [ref]av[/ref], написал выше что,
Чтобы понять, где кроется ошибка в Вашем проекте, нужно сначала понять как то работает вообще и как нужно чтобы работало у Вас....av писал(а): 12 апр 2020, 19:11 Инфа нужна для того чтобы самому обмазговать алгоритм. По алгоритму созданному другим человеком трудно понимать что у него там в голове.
Проблемы с задержками при создании проекта
С значениями на выходе датчика. Они скакали как та лошадь

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

Проблемы с задержками при создании проекта
Уважаемые господа-товарищи!
Ко всем с искренним уважением!
Если хотите о чем-то спросить - задавайте вопросы конкретно.
Очень хочу услышать ответы на СВОИ вопросы, а не отвечать по несколько раз на не относящиеся к моей теме другие вопросы.
Меня уже в который раз, безосновательно, упрекнули в том, что я не даю схем. Дал два своих блока. Один блок - двух дальномеров (пока, единственный в FlProg), второй - непосредственно схема проекта.
Дал полнейшее описание работы схемы. Дал описание работы датчиков. Дал описание взаимодействия датчиков со схемой. Дал алгоритм работы устройства.
Если у кого возникают вопросы, пожалуйста, конкретизируйте!
С уважением, Аркадий
Отправлено спустя 3 минуты 17 секунд:
Отправлено спустя 16 минут 34 секунды:
Стоит объекту отступить назад, как счетчик получит законченный импульс. И посчитает +1?
Или я не внимательно посмотрел? Щас пересмотрю.
Ко всем с искренним уважением!
Если хотите о чем-то спросить - задавайте вопросы конкретно.
Очень хочу услышать ответы на СВОИ вопросы, а не отвечать по несколько раз на не относящиеся к моей теме другие вопросы.
Меня уже в который раз, безосновательно, упрекнули в том, что я не даю схем. Дал два своих блока. Один блок - двух дальномеров (пока, единственный в FlProg), второй - непосредственно схема проекта.
Дал полнейшее описание работы схемы. Дал описание работы датчиков. Дал описание взаимодействия датчиков со схемой. Дал алгоритм работы устройства.
Если у кого возникают вопросы, пожалуйста, конкретизируйте!
С уважением, Аркадий
Отправлено спустя 3 минуты 17 секунд:
Спасибо большое за схему. Сейчас посмотрю. Но, сходу вопрос, поставленный мной в начале темы: не успевает переменная присваиваться нижнему триггеру от верхнего за время движения сверху вниз. Если снизу вверх - все хорошоav писал(а): 12 апр 2020, 21:51 [ref]Arkan[/ref], жесть. При таком расстоянии друг от друга различие во времени сработки датчиков в моем понимании ничтожно мало. Возможно и ошибаюсь. Алгоритма блока переделал.
Логический смысл таков:
При срабатывании одного датчика первым блокируется второй датчик на выдачу сигнала к счетчику обратной связью через переменную.
Сигнал с сработавшего датчика поступает на вход счетчика увеличение или уменьшение (в зависимости какой датчик сработал первым).
Далее второй датчик так же срабатывает, но с опозданием и его сигнал блокирован первым. При дальнейшем передвижении объекта датчик который сработал первым изменяет свое значение в большую сторону, так как луч лазера не фиксирует препятствие. В этот момент F триггер своим сигналом с выхода блока сравнения сбрасывает RS триггер второго датчика который заблокирован ( на всякий случай).
Теперь ожидаем когда второй датчик зафиксирует отсутствие препятствия при дальнейшем передвижении объекта. Как только это произойдет с выхода второго блока сравнения второй F триггер сбросит RS триггер в начальное положение. Этот алгоритм работает в обе стороны. Вся логика завязана на различии работы Rtrig и Ftrig, первый срабатывает по переднему фронту сигнала второй по спаду этого фронта.
Опять пока писал вы уже написали ответ
В этом случае нужно применить другой знак блока сравнения. Я применил знак "<=".
[spoiler]Алгоритм.png[/spoiler]
Отправлено спустя 16 минут 34 секунды:
Сходу первое замечание. При попадании объекта в зону видимости верхнего датчика на верхнем триггере устанавливается единица, Она приходит на вход счетчика счет вверх.av писал(а): 12 апр 2020, 21:51 [ref]Arkan[/ref], жесть. При таком расстоянии друг от друга различие во времени сработки датчиков в моем понимании ничтожно мало. Возможно и ошибаюсь. Алгоритма блока переделал.
Логический смысл таков:
При срабатывании одного датчика первым блокируется второй датчик на выдачу сигнала к счетчику обратной связью через переменную.
Сигнал с сработавшего датчика поступает на вход счетчика увеличение или уменьшение (в зависимости какой датчик сработал первым).
Далее второй датчик так же срабатывает, но с опозданием и его сигнал блокирован первым. При дальнейшем передвижении объекта датчик который сработал первым изменяет свое значение в большую сторону, так как луч лазера не фиксирует препятствие. В этот момент F триггер своим сигналом с выхода блока сравнения сбрасывает RS триггер второго датчика который заблокирован ( на всякий случай).
Теперь ожидаем когда второй датчик зафиксирует отсутствие препятствия при дальнейшем передвижении объекта. Как только это произойдет с выхода второго блока сравнения второй F триггер сбросит RS триггер в начальное положение. Этот алгоритм работает в обе стороны. Вся логика завязана на различии работы Rtrig и Ftrig, первый срабатывает по переднему фронту сигнала второй по спаду этого фронта.
Опять пока писал вы уже написали ответ
В этом случае нужно применить другой знак блока сравнения. Я применил знак "<=".
[spoiler]Алгоритм.png[/spoiler]
Стоит объекту отступить назад, как счетчик получит законченный импульс. И посчитает +1?
Или я не внимательно посмотрел? Щас пересмотрю.
Проблемы с задержками при создании проекта
Схема не работаетav писал(а): 12 апр 2020, 21:51 [ref]Arkan[/ref], жесть. При таком расстоянии друг от друга различие во времени сработки датчиков в моем понимании ничтожно мало. Возможно и ошибаюсь. Алгоритма блока переделал.
Проблемы с задержками при создании проекта
Не работает вообще.av писал(а): 12 апр 2020, 23:03 [ref]Arkan[/ref], будем думать дальше. Выход есть всегда !
Отправлено спустя 22 минуты 24 секунды:
[ref]Arkan[/ref], уточните где пошло не так ?
Если из за этого:То это можно решить. А если полностью весь алгоритм нужно попытаться выстроить порядок выполнения блоков всякими ухищрениями типа разделить этот алгоритм на отдельные секции.Arkan писал(а): 12 апр 2020, 22:15 Стоит объекту отступить назад, как счетчик получит законченный импульс. И посчитает +1?
при 1 на входе fтриггера, на его выходе 0?
Проблемы с задержками при создании проекта
Вот так получается при получении сигнала от верхнего датчика?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Проблемы с задержками при создании проекта
Спсаибо! До завтраav писал(а): 12 апр 2020, 23:56 [ref]Arkan[/ref], попробуйте еще вот такой вариант. Если не получится то завтра на свежую голову еще подумаем, алгоритмы в Протеусе просимулирую может что получится. Сегодня уже устал нужно отдыхать.
Отправлено спустя 29 секунд:
Алгоритм.png
Отправлено спустя 1 минуту 30 секунд:
Только нижний компаратор поставьте правильно знак, уже глючу![]()

Отправлено спустя 2 часа 28 минут 50 секунд:
Схема работает. Но есть нюансы. Первое: счетчик считает, когда проход отменен. Второе: остались те же глюки, что и в моей схеме. "Провалы" в счете. Проход был. Счета не было. 2-3 сбоя из 10 проходов. Мне нужно добиться 0 из всех.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей