Просмотр полной версии : нужна битовая 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 в первом случае! Надеюсь понятно объяснил, странно слышать такие простые вопросы от программиста высокого уровня?!
При автоматизации оборудования с помощью ПР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 буффер
Цепочка D-триггеров с тактированием работает как FIFO буффер
Регистр сдвига :D однако ,только нужно не забыть о задержках на такт :rolleyes:
Ревака Юрий
23.09.2019, 08:29
Вот таким вариантом пользовался.44724
Powered by vBulletin® Version 4.2.3 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot