Выяснить асинхронный в производственной линии - PullRequest
0 голосов
/ 16 ноября 2018

На производственной линии установлены 2 камеры Cam1 и Cam2.Они снабжены датчиками, которые сигнализируют мою программу, когда продукт касается одного из них.Эти камеры расположены одна за другой.

После Cam2 весы B установлены и снабжены также датчиком.Когда продукт прибудет туда, продукт будет взвешен и сообщит мою программу с весом.Тогда моя программа должна выполнить оценку для этого продукта на основе двух захваченных изображений и данных, полученных из B (вес).

На самом деле, один / два продукта могут поместиться между Cam1 и Cam2.а также один / два продукта могут поместиться между Cam2 и B.

Я столкнулся с некоторыми трудностями при поиске стабильного алгоритма, чтобы выяснить, принадлежат ли изображения и вес одному и тому же продукту.Есть некоторые жесткие условия, которые нельзя изменить на заводе:

  1. Неопределенная скорость для линии.(линия может быть остановлена ​​по любой причине в любое время, она может ускориться / ускориться, рабочие могут перемещать ее туда, ...)
  2. продукт может быть удален после Cam1:
    • между Cam1 и Cam2 ==> захватывается только Cam1, НО нет изображения с Cam2 и нет данных от B
    • между Cam2 и B ==> захватывается Cam2 и Cam1, НО нет данных с B
  3. нет способа прикрепить такой читаемый чип к уникальному номеру, чтобы мы могли прочитать на Cam2 & B, чтобы убедиться в синхронности.

Эта проблема должна быть решена 1024 * программно *.У фабрики есть все препятствия, которые не позволяют мне вносить какие-либо изменения.

Мое первоначальное решение - назначить FIFO для каждой камеры, FIFO_Cam1 и FIFO_Cam2.Как только моя программа получает сигнал от одной из камер, FIFO помещает в журнал захваченное изображение продукта.Затем, когда я получаю сигнал от B, я снимаю верхнее изображение с каждого FIFO и считаю, что они принадлежат одному и тому же продукту, который имеет вес, полученный с последним сигналом.

К сожалению, мое рассмотрение может решить толькопроблема скорости (Nr. 1), но не во всех случаях (Nr. 2).

Я попытался сделать порог, когда количество продуктов, сохраненных в FIFO_Cam1, превышает 5, я сообщу строку с DESYNCHно не работает должным образом и не может решить большинство случаев.

Любая помощь или идея будут оценены!

Спасибо.

1 Ответ

0 голосов
/ 16 ноября 2018

Вам нужен сигнал, чтобы вы знали, что линия резко остановилась или замедлилась.

Поэтому, чтобы позаботиться о пропавших товарах, я бы сохранил метку времени, когда был сделан снимок / измерение.

Если линия движется с одинаковой скоростью, вы всегда должны видеть одинаковую разницу во времени между событиями.Если продукт пропадает, то следующее измерение будет примерно в 2 раза больше требуемого времени, так что вы можете посмотреть в своем fifo на предмет, который бы соответствовал ожидаемой дельте времени.Вы также можете отслеживать последовательные метки времени в одной и той же очереди.Он также скажет вам, сколько товаров, вероятно, было пропущено.

Чтобы обеспечить некоторое изменение скорости линии, вы должны обновлять дельту времени на постоянной основе (последние X успешных элементов).Очевидно, что если линия останавливается, вам нужно учитывать остановленное время (поэтому вам нужен сигнал для этого, я предполагаю, что будет проще пометить каждый продукт).Если бы вы могли измерить скорость линии, это было бы еще лучше, если бы вы могли более точно настроить ожидаемые отклонения.

Это все еще несколько приблизительное решение.Убедитесь, что вы допускаете некоторые ошибки в измерениях.Если скорость линии резко меняется или количество удаленных продуктов слишком велико, это может не сработать.Например, первая камера отсканировала 10 продуктов, затем линия на некоторое время остановилась, затем начинает работать с другой скоростью, кто-то выбросил 8 продуктов с линии, и теперь вы получаете следующие 2 изображения.Невозможно точно сказать, как соединить более поздние изображения с первыми.

...