В тему. У меня есть два созданных блока. Как разместить их на форуме в пользовательских блоках?
Если это, каким-то образом, повлияет на решение проблемы, выкладываю один из блоков (блок программы). Это программа подсчета перемещения.
Верхний триггер при включении, отправляет через переменную единицу на вход сброса нижнего триггера. Таким образом, блокируя его работу. До завершения действия (прохода). По завершению действия, на входах приемников обоих направлений движения,устанавливается ноль. Это событие приводит к сбросу обоих триггеров. Аналогично и с проходом в обратном направлении.
Проблема состоит в следующем:
При поступлении сигнала на верхний триггер, программе необходимо время для передачи его на вход сброса нижнего триггера. Если в "железе" скоростью сброса нижнего триггера можно пренебречь, то в программе, от этой скорости зависит качество работы схемы.
Так как объект перемещается с максимальной скоростью (макс 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. Проход вниз всегда устойчивее прохода вверх. При проходе от верхнего датчика к нижнему иногда не успевает установиться сброс на нижнем триггере. При проходе от нижнего к верхнему, такой аномалии не наблюдается.