PDA

Просмотр полной версии : нужна битовая FIFO на Owen Logic



Dias2004
20.09.2019, 11:11
При автоматизации оборудования с помощью ПР110 столкнулся с необходимостью создания очереди FIFO. На языке высокого уровня её создать для меня не затруднительно, а вот на логических элементах - не умею. Не хочется для простой задачи переходить на ПЛК и Codesys.
Может кто помочь? Есть ли похожие наработки в библиотеках?

Физически задача состоит в чтении кода сортировки (направо/налево), нанесённого на движущееся по конвейеру изделие, и управлении собственно сортировкой (направо/налево). Очередь нужна в связи с большим расстоянием между местом чтения кода и стрелкой - на нём может находиться одновременно до 8 изделий, код которых был ранее прочитан, соответственно его нужно помнить в порядке расстановки изделий.

Для этого нужна битовая очередь FIFO длиной 8. По фронту одного сигнала (в моём случае - это будет датчик на сканере кода) в неё заносится значение кода true или false, по фронту другого сигнала (это будет датчик перед стрелкой) очередь должна проталкиваться и очередное значение должно выставляться на выходе.

Ревака Юрий
20.09.2019, 11:26
При автоматизации оборудования с помощью ПР110 столкнулся с необходимостью создания очереди FIFO. На языке высокого уровня её создать для меня не затруднительно, а вот на логических элементах - не умею. Не хочется для простой задачи переходить на ПЛК и Codesys.
Может кто помочь? Есть ли похожие наработки в библиотеках?

Физически задача состоит в чтении кода сортировки (направо/налево), нанесённого на движущееся по конвейеру изделие, и управлении собственно сортировкой (направо/налево). Очередь нужна в связи с большим расстоянием между местом чтения кода и стрелкой - на нём может находиться одновременно до 8 изделий, код которых был ранее прочитан, соответственно его нужно помнить в порядке расстановки изделий.

Для этого нужна битовая очередь FIFO длиной 8. По фронту одного сигнала (в моём случае - это будет датчик на сканере кода) в неё заносится значение кода true или false, по фронту другого сигнала (это будет датчик перед стрелкой) очередь должна проталкиваться и очередное значение должно выставляться на выходе.

Когда-то решал подобную задачу, для конвейера флаконов, там максимум до 16 в очереди было, но из-за нехватки времени реализовали на ПЛК, в идеальны условиях все работало, на объекте периодически происходили сбои, что соответственно тянуло за собой всю последовательность. Если найду макрос, прикреплю.

Сергей0308
20.09.2019, 11:31
При автоматизации оборудования с помощью ПР110 столкнулся с необходимостью создания очереди FIFO. На языке высокого уровня её создать для меня не затруднительно, а вот на логических элементах - не умею. Не хочется для простой задачи переходить на ПЛК и Codesys.
Может кто помочь? Есть ли похожие наработки в библиотеках?

Физически задача состоит в чтении кода сортировки (направо/налево), нанесённого на движущееся по конвейеру изделие, и управлении собственно сортировкой (направо/налево). Очередь нужна в связи с большим расстоянием между местом чтения кода и стрелкой - на нём может находиться одновременно до 8 изделий, код которых был ранее прочитан, соответственно его нужно помнить в порядке расстановки изделий.

Для этого нужна битовая очередь FIFO длиной 8. По фронту одного сигнала (в моём случае - это будет датчик на сканере кода) в неё заносится значение кода true или false, по фронту другого сигнала (это будет датчик перед стрелкой) очередь должна проталкиваться и очередное значение должно выставляться на выходе.

В целочисленной переменной биты сдвигайте, там 32 бита.
Есть функция записи бита, назначаете в какой бит писать(на входе), есть функция чтения бита, назначаете какой бит читать(на выходе), есть функции сдвига влево-вправо, сдвигаете через детектор переднего фронта, чтобы по каждому импульсу на один разряд сдвигалось, всё!

44700

https://owen.ru/forum/showthread.php?t=12691&page=51

Вот, специально для Вас, дополнил отдельными входами для записи и сдвига:

44701

Можно ещё без проблем и реверс добавить, но Вам, как я понял, он не нужен!

Dias2004
20.09.2019, 20:00
В целочисленной переменной биты сдвигайте, там 32 бита.
Есть функция записи бита, назначаете в какой бит писать(на входе), есть функция чтения бита, назначаете какой бит читать(на выходе), есть функции сдвига влево-вправо, сдвигаете через детектор переднего фронта, чтобы по каждому импульсу на один разряд сдвигалось, всё!

44700

https://owen.ru/forum/showthread.php?t=12691&page=51

Вот, специально для Вас, дополнил отдельными входами для записи и сдвига:

44701

Можно ещё без проблем и реверс добавить, но Вам, как я понял, он не нужен!

А кто же будет назначать, в какой бит писать, и из какого читать? Я изучу схему... а пока мне удалось решить проблему - оказалось, не так страшна логика... Создал буфер на D-триггерах, начало и конец буфера на независимых счётчиках. Буфер кольцевой, т.к. счётчики с самосбросом. По фронту датчика на входе происходит запись очередного бита в "голову", Датчик на выходе читает бит в "хвосте".
44702

Сергей0308
20.09.2019, 23:45
А кто же будет назначать, в какой бит писать, и из какого читать? Я изучу схему... а пока мне удалось решить проблему - оказалось, не так страшна логика... Создал буфер на D-триггерах, начало и конец буфера на независимых счётчиках. Буфер кольцевой, т.к. счётчики с самосбросом. По фронту датчика на входе происходит запись очередного бита в "голову", Датчик на выходе читает бит в "хвосте".
44702

Во втором варианте, с раздельными входами записи и сдвига я уже назначил что значение со входа будет писаться в нулевой бит переменной, чтобы получить очередь из 8 бит, надо читать 7 бит. максимально возможная длина 32 бита, будет при читаемом бите равном 31! В первом варианте значение со входа будет сразу писаться в назначенный бит, допустим это будет нулевой, тогда чтобы получить туже длину очереди в 8 бит, надо читать 8 бит! И если нужен выход от каждого разряда можно поставить 8 функций чтения бита с соответствующим диапазоном 0-7 во втором случае и 1-8 в первом случае! Надеюсь понятно объяснил, странно слышать такие простые вопросы от программиста высокого уровня?!

игорь68
22.09.2019, 14:08
При автоматизации оборудования с помощью ПР110 столкнулся с необходимостью создания очереди FIFO. На языке высокого уровня её создать для меня не затруднительно, а вот на логических элементах - не умею. Не хочется для простой задачи переходить на ПЛК и Codesys.
Может кто помочь? Есть ли похожие наработки в библиотеках?

Физически задача состоит в чтении кода сортировки (направо/налево), нанесённого на движущееся по конвейеру изделие, и управлении собственно сортировкой (направо/налево). Очередь нужна в связи с большим расстоянием между местом чтения кода и стрелкой - на нём может находиться одновременно до 8 изделий, код которых был ранее прочитан, соответственно его нужно помнить в порядке расстановки изделий.

Для этого нужна битовая очередь FIFO длиной 8. По фронту одного сигнала (в моём случае - это будет датчик на сканере кода) в неё заносится значение кода true или false, по фронту другого сигнала (это будет датчик перед стрелкой) очередь должна проталкиваться и очередное значение должно выставляться на выходе.

Было в старой ветке о ПР110. Делал макрос ROVKI. Но увы возможно был убит на серваке(была отака на сервак овен). Часть макросов так и не вернулись.

Сергей0308
22.09.2019, 14:26
Было в старой ветке о ПР110. Делал макрос ROVKI. Но увы возможно был убит на серваке(была отака на сервак овен). Часть макросов так и не вернулись.

А мой чем не устраивает? Мне кажется, как минимум, на порядок проще и функциональней, чем на Д-триггерах, это как в ракетно-ядерный век искать потерянное копьё(мечтать о копье и мече)!

Филоненко Владислав
22.09.2019, 21:11
При автоматизации оборудования с помощью ПР110 столкнулся с необходимостью создания очереди FIFO. На языке высокого уровня её создать для меня не затруднительно, а вот на логических элементах - не умею. Не хочется для простой задачи переходить на ПЛК и Codesys.
Может кто помочь? Есть ли похожие наработки в библиотеках?

Физически задача состоит в чтении кода сортировки (направо/налево), нанесённого на движущееся по конвейеру изделие, и управлении собственно сортировкой (направо/налево). Очередь нужна в связи с большим расстоянием между местом чтения кода и стрелкой - на нём может находиться одновременно до 8 изделий, код которых был ранее прочитан, соответственно его нужно помнить в порядке расстановки изделий.

Для этого нужна битовая очередь FIFO длиной 8. По фронту одного сигнала (в моём случае - это будет датчик на сканере кода) в неё заносится значение кода true или false, по фронту другого сигнала (это будет датчик перед стрелкой) очередь должна проталкиваться и очередное значение должно выставляться на выходе.

Цепочка D-триггеров с тактированием работает как FIFO буффер

rovki
22.09.2019, 21:14
Цепочка D-триггеров с тактированием работает как FIFO буффер

Регистр сдвига :D однако ,только нужно не забыть о задержках на такт :rolleyes:

Ревака Юрий
23.09.2019, 08:29
Вот таким вариантом пользовался.44724