Ребята помогите с алгоритмом

Ответить
yuriy m
Сообщения: 4
Зарегистрирован: 18 сен 2019, 12:19

Ребята помогите с алгоритмом

Сообщение yuriy m »

Доброго времени суток. Сижу с температурой за 38 , сопли (за сутки наверное литр... :evil: ) глаза слезятся, это Ж... какая то. Но самое х...е , мозг просто тупит и отказывается, что либо понимать. Хотя алгоритм,я понимаю не сложный но решить не могу второй день. фигня какая то. При чем подобное решал на Си под STM32. Суть вопроса. Есть конвейер, в начале на просвет,работник отслеживает брак. (обычно на одной какой то позиции , но их несколько) как только он увидел брак, нажимает на кнопку под этой позицией и как только бракованный элемент дойдет до почти конца конвейера, лопатка должна его скинуть в сторону. Длина привязана к датчику импульсов вращения двигателя конвейера. Если брак был бы редко, то проблем вообще не вижу , но тут может возникнуть ситуация ,когда через один или вообще несколько подряд зарегистрировано бракованной продукции. И тут ,чет я в стопоре. Основное на рисунке в файле. Спасибо.
Вложения
111.JPG
111.JPG (72.16 КБ) 1603 просмотра
реализация на СИ
реализация на СИ
2020-03-02_13-24-52.png (20.02 КБ) 1603 просмотра

yuriy m
Сообщения: 4
Зарегистрирован: 18 сен 2019, 12:19

Re: Ребята помогите с алгоритмом

Сообщение yuriy m »

Уважаемые гуру. Есть какие мысли ? Если конечно не тяжко...
Интуитивно понимаю,что нужно массивы или сдвиговые регистры , но нефига не соображаю пока. :(

bayk
Сообщения: 887
Зарегистрирован: 30 май 2015, 21:20

Re: Ребята помогите с алгоритмом

Сообщение bayk »

Вы все правильно думаете. Используйте несколько регистров, данные в которых сдвигайте функцией сдвига влево.еще один регистр в конце сделайте с самосброслм, чтобы он очередь в конце подчищал. В итоге вы энкрдером отслеживание, что нужная деталь находится в зоне контроля. Ели кнопка нажата, то сдвигаете все использованные регистры на 1 бит в лево и запихиваете в первый бит 1 если кнопка не нажата, то там ноль и остаётся. Со следующим сдвигом все повторяется. Дальше вам просто нужно знать смещение до лопатки сброса и обрабатывать по единице в соответствующем месте лопатку сброса. Если шаг деталей на
конвейере одинаковый, а положение точки сброса совпадает в один момент с точкой контроля (например одна бутылка прямо перед контролёром, а та, что через извечное количество бутылок прямо перед лопаткой,) то даже энкодер на выходе не нужен просто лови ноль или 1 в нужном месте последующего регистра и сбрасывай. Ну естественно если до лопатки не 32000 бутылок ;) если всё-таки несимметрично то тут надо просто потупить как отсчитывать точку сброса энкодером. Опять же если деталей до точки сброса не много, то синхронно с регистром битовым сдвигайте регистры по словам, а в соответствующее слово пишите текущее показание энкодера+оффсет до точки сброса. О. Тогда и битовый здвиг может и не нужен. Но тут уже надо подумать в какой момент обнулять счётчик энкодера.

Олег
Сообщения: 795
Зарегистрирован: 18 янв 2011, 23:06

Re: Ребята помогите с алгоритмом

Сообщение Олег »

Да как два пальца об асфальт.
У каждой позиции до сброса есть определённое количество импульсов, зависит от расстояния.
В начале работы, пока конвейер пустой, счётчик импульсов сбросить.
При нажатии на кнопку, к текущему значению счётчика добавить расстояние (импульсы) до точки сброса, то которое соответствует позиции кнопки (изделия). Потом сдвинуть буфер из двойных слов и записать рассчитанное значение в начало буфера.
После каждого нажатия кнопки и сброса изделия, сортируем буфер и ищем минимальное значение (не нулевое), которое в результате сортировки должно оказаться в начале буфера. Это минимальное значение и будет следующей точкой сброса. То что нашли в буфере, обнуляем, и сдвигаем буфер обратно.
Естественно все значения DWORD.
Буфер можно не сдвигать, если найти первое пустое место в этом буфере, и записать в него.
-------------
т.е. набиваем буфер рассчитанными координатами сброса, ищем минимальное значение и используем его для сброса изделия.
-----------
Если расстояние до сброса в 5000 попугаев, то при расстоянии между изделиями в 50 п. буфер должен быть глубиной немного более 100 DWORD.

Ответить