Буфер FIFO
Правила форума
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
- Dryundel
- Полковник
- Сообщения: 2437
- Зарегистрирован: 22 май 2017, 23:15
- Откуда: Ярославль
- Имя: Андрей
- Благодарил (а): 3 раза
- Поблагодарили: 31 раз
Буфер FIFO
Буфер FIFO v1.1
Очередь обработки данных
. .
Обсуждение на форуме: viewtopic.php?p=78899#p78899
Буфер FIFO подобен СТЕК. Основное отличие в очереди извлечения данных. Если СТЕК работает по принципу "первый пришел - последний ушел", то у FIFO принцип работы - "первый пришел - первый ушел"
С помощью данного блока FIFO v1.1 осуществляется запись переменных в массив и извлечения этих переменных в порядке прямой очереди.
Ассоциативный пример применения
Первый сотрудник (группа сотрудников) вводит номер очередного заказа и кнопкой Insert ставит его в очередь.
Второй сотрудник в процессе отработки заказов, в соответствии с очередью, нажимает кнопку Extract получает номер следующего заказа.
Так же на табло (с помощью выхода Volum ) выводится количество клиентов находящихся в очереди.
Принцип и логика работы:
1. В настройках выставляем размер буфера (массива) - параметр size_fifo. Он определяет сколько переменных сможет вместить блок.
2. Подачей единицы на вход Insert записываем очередную переменную со входа In в буфер (в конец очереди)
3. Подачей единицы на вход Extract извлекаем первую по очереди переменную из буфера (очереди) на выход Out.
4. Подача единицы на вход Clean очищает буфер.
5. По умолчанию при очистке буфера, последняя переменная извлеченная из буфера остается на выходе Out.
6. Для обнуления выхода Out в момент очистки буфера надо установить параметр ResetOut в True.
7. Если в буфере пусто, то на выходе Empty - единица и больше ничего из очереди не извлекается.
8. Если буфер полон то на выходе Full - единица и ничего в очередь больше не ставится.
9. На выход Volum выводится текущее количество переменных хранящихся в буфере. С помощью этого выхода удобно следить за заполненностью буфера.
10. Тип данных буфера можно изменить на (int, long int, unsigned long int, float, char). Для этого требуется изменить тип данных в трех местах - вход In, выход Out, а также в SetupSection.
Входы блока:
Insert - Запись переменной In в буфер
Extract - Извлечение переменной из буфера на выход Out
Clean - Очистка буфера
In -Выход FIFO
Выходы блока:
Full - Индикатор полного буфера
Empty - Индикатор пустого буфера
Volum - Текущее количество переменных в буфере
Out - Выход FIFO
Параметры пользователя:
size_fifo - Размер буфера
ResetOut - Сброс выхода Out в "0" при очистке буфера: (True - сбрасывается, False - не сбрасывается.)
Данный блок не корректно работает с переменными типа String.
Для работы со строками рекомендую это: viewtopic.php?f=85&t=7884
Очередь обработки данных
. .
Обсуждение на форуме: viewtopic.php?p=78899#p78899
Буфер FIFO подобен СТЕК. Основное отличие в очереди извлечения данных. Если СТЕК работает по принципу "первый пришел - последний ушел", то у FIFO принцип работы - "первый пришел - первый ушел"
С помощью данного блока FIFO v1.1 осуществляется запись переменных в массив и извлечения этих переменных в порядке прямой очереди.
Ассоциативный пример применения
Первый сотрудник (группа сотрудников) вводит номер очередного заказа и кнопкой Insert ставит его в очередь.
Второй сотрудник в процессе отработки заказов, в соответствии с очередью, нажимает кнопку Extract получает номер следующего заказа.
Так же на табло (с помощью выхода Volum ) выводится количество клиентов находящихся в очереди.
Принцип и логика работы:
1. В настройках выставляем размер буфера (массива) - параметр size_fifo. Он определяет сколько переменных сможет вместить блок.
2. Подачей единицы на вход Insert записываем очередную переменную со входа In в буфер (в конец очереди)
3. Подачей единицы на вход Extract извлекаем первую по очереди переменную из буфера (очереди) на выход Out.
4. Подача единицы на вход Clean очищает буфер.
5. По умолчанию при очистке буфера, последняя переменная извлеченная из буфера остается на выходе Out.
6. Для обнуления выхода Out в момент очистки буфера надо установить параметр ResetOut в True.
7. Если в буфере пусто, то на выходе Empty - единица и больше ничего из очереди не извлекается.
8. Если буфер полон то на выходе Full - единица и ничего в очередь больше не ставится.
9. На выход Volum выводится текущее количество переменных хранящихся в буфере. С помощью этого выхода удобно следить за заполненностью буфера.
10. Тип данных буфера можно изменить на (int, long int, unsigned long int, float, char). Для этого требуется изменить тип данных в трех местах - вход In, выход Out, а также в SetupSection.
Входы блока:
Insert - Запись переменной In в буфер
Extract - Извлечение переменной из буфера на выход Out
Clean - Очистка буфера
In -Выход FIFO
Выходы блока:
Full - Индикатор полного буфера
Empty - Индикатор пустого буфера
Volum - Текущее количество переменных в буфере
Out - Выход FIFO
Параметры пользователя:
size_fifo - Размер буфера
ResetOut - Сброс выхода Out в "0" при очистке буфера: (True - сбрасывается, False - не сбрасывается.)
Данный блок не корректно работает с переменными типа String.
Для работы со строками рекомендую это: viewtopic.php?f=85&t=7884
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Буфер FIFO
Здравствуйте
Уважаемый Dryundel а сколько максимально переменных int можно положить в буфер?
Уважаемый Dryundel а сколько максимально переменных int можно положить в буфер?
- Dryundel
- Полковник
- Сообщения: 2437
- Зарегистрирован: 22 май 2017, 23:15
- Откуда: Ярославль
- Имя: Андрей
- Благодарил (а): 3 раза
- Поблагодарили: 31 раз
Буфер FIFO
Сколько в параметре size_fifo выставите, столько и можно. Чем больше выставите тем больше памяти зарезервирует контроллер.tolochko писал(а): 07 ноя 2019, 17:13 Здравствуйте
Уважаемый Dryundel а сколько максимально переменных int можно положить в буфер?
Отправлено спустя 40 минут 40 секунд:
Для экономии памяти изменяйте тип переменной "под себя" в редакторе блока.
К сожалению пока настройку такой опции редактор ПБ делать не позволяет.
Для понимания вот таблица.
.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- Dryundel
- Полковник
- Сообщения: 2437
- Зарегистрирован: 22 май 2017, 23:15
- Откуда: Ярославль
- Имя: Андрей
- Благодарил (а): 3 раза
- Поблагодарили: 31 раз
Буфер FIFO
Буфер FIFO v2.1(массив)
. .
С помощью данного блока FIFO v1.1(массив) осуществляется запись пяти-элементного массива int в массив(очередь) и извлечения этих элементов массива int в порядке прямой очереди.
В отличии от версии FIFO v1.1 данный блок создает и обрабатывает очередь 5-элементного массива.
Поданная на входы пятерка переменных в виде массива встает в очередь и извлекается из очереди в том же составе.
[spoiler=Описание:]Принцип и логика работы:
1. В настройках выставляем размер буфера (массива) - параметр size_fifo. Он определяет величину очереди.
2. Подачей единицы на вход Insert записываем очередной массив(№двигателя, время) со входов n_in в буфер (в конец очереди)
3. Подачей единицы на вход Extract извлекаем первый по очереди массив из буфера (очереди) на выходы out_n.
4. Подача единицы на вход Clean очищает буфер.
5. По умолчанию при очистке буфера, последние переменные извлеченные из буфера остается на выходах out_n.
6. Для обнуления выходов out_n в момент очистки буфера надо установить параметр ResetOut в True.
7. Если в буфере пусто, то на выходе Empty - единица и больше ничего из очереди не извлекается.
8. Если буфер полон то на выходе Full - единица и ничего в очередь больше не ставится.
9. На выход Volum выводится текущее количество массивов int хранящихся в буфере. С помощью этого выхода удобно следить за заполненностью буфера.
Входы блока:
Insert - Запись переменной In в буфер
Extract - Извлечение переменной из буфера на выход Out
Clean - Очистка буфера
n_in - Входы очереди
Выходы блока:
Full - Индикатор полного буфера
Empty - Индикатор пустого буфера
Volum - Текущее количество переменных в буфере
out_n - Выходы очереди
Параметры пользователя:
size_fifo - Размер буфера
ResetOut - Сброс выхода Out в "0" при очистке буфера: (True - сбрасывается, False - не сбрасывается.)
[/spoiler]
. .
С помощью данного блока FIFO v1.1(массив) осуществляется запись пяти-элементного массива int в массив(очередь) и извлечения этих элементов массива int в порядке прямой очереди.
В отличии от версии FIFO v1.1 данный блок создает и обрабатывает очередь 5-элементного массива.
Поданная на входы пятерка переменных в виде массива встает в очередь и извлекается из очереди в том же составе.
[spoiler=Описание:]Принцип и логика работы:
1. В настройках выставляем размер буфера (массива) - параметр size_fifo. Он определяет величину очереди.
2. Подачей единицы на вход Insert записываем очередной массив(№двигателя, время) со входов n_in в буфер (в конец очереди)
3. Подачей единицы на вход Extract извлекаем первый по очереди массив из буфера (очереди) на выходы out_n.
4. Подача единицы на вход Clean очищает буфер.
5. По умолчанию при очистке буфера, последние переменные извлеченные из буфера остается на выходах out_n.
6. Для обнуления выходов out_n в момент очистки буфера надо установить параметр ResetOut в True.
7. Если в буфере пусто, то на выходе Empty - единица и больше ничего из очереди не извлекается.
8. Если буфер полон то на выходе Full - единица и ничего в очередь больше не ставится.
9. На выход Volum выводится текущее количество массивов int хранящихся в буфере. С помощью этого выхода удобно следить за заполненностью буфера.
Входы блока:
Insert - Запись переменной In в буфер
Extract - Извлечение переменной из буфера на выход Out
Clean - Очистка буфера
n_in - Входы очереди
Выходы блока:
Full - Индикатор полного буфера
Empty - Индикатор пустого буфера
Volum - Текущее количество переменных в буфере
out_n - Выходы очереди
Параметры пользователя:
size_fifo - Размер буфера
ResetOut - Сброс выхода Out в "0" при очистке буфера: (True - сбрасывается, False - не сбрасывается.)
[/spoiler]
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- Dryundel
- Полковник
- Сообщения: 2437
- Зарегистрирован: 22 май 2017, 23:15
- Откуда: Ярославль
- Имя: Андрей
- Благодарил (а): 3 раза
- Поблагодарили: 31 раз
Буфер FIFO
Думаю что можно сделать и такой блок. Вот только контроль заполненности (Volum) скорее всего не получится в этом случае.aidar_i писал(а): 12 ноя 2019, 05:31 Жаль, что тип данных нельзя поставить строку. Пришлось сделать стек для строки.
-
- Лейтенант
- Сообщения: 516
- Зарегистрирован: 25 фев 2018, 08:48
- Откуда: Оренбург
- Имя: Александр
Буфер FIFO
[ref]Dryundel[/ref], а как записать в очередь 16 однобитовых значений ? В частности интересует отслеживать 16 нажатий кнопок и затем их воспроизведение. Может есть и такой блок ?
- Dryundel
- Полковник
- Сообщения: 2437
- Зарегистрирован: 22 май 2017, 23:15
- Откуда: Ярославль
- Имя: Андрей
- Благодарил (а): 3 раза
- Поблагодарили: 31 раз
Буфер FIFO
Это как?KulibinOrsk писал(а): 26 ноя 2019, 13:01 [ref]Dryundel[/ref], а как записать в очередь 16 однобитовых значений ? В частности интересует отслеживать 16 нажатий кнопок и затем их воспроизведение. Может есть и такой блок ?

Если нажать на кнопку 16 раз то можно к примеру получить 16 единиц в очередь. И что это даст?
Или у Вас 16 кнопок?
Тогда можно зафиксировать их совместное состояние с помощью блоков бит->байт и вот это значение поставить в очередь. А потом обратной операцией восстановить биты.
-
- Лейтенант
- Сообщения: 516
- Зарегистрирован: 25 фев 2018, 08:48
- Откуда: Оренбург
- Имя: Александр
Буфер FIFO
[ref]Dryundel[/ref], да думаю 16 кнопок поставить. Пока планировал делать просто последовательно обрабатывать все кнопки и смотреть была ли она ранее нажата (смотреть флаг)... была мысль использовать ваш блок. Но судя по всему проще будет делать так как ранее думал - с последовательной обработкой.
- Dryundel
- Полковник
- Сообщения: 2437
- Зарегистрирован: 22 май 2017, 23:15
- Откуда: Ярославль
- Имя: Андрей
- Благодарил (а): 3 раза
- Поблагодарили: 31 раз
Буфер FIFO
[ref]KulibinOrsk[/ref], Вы слегка путано объясняете что хотите сделать.
Исходя из всего сумбура сказанного, я понял что кнопки у вас не фиксирующиеся и требуется воспроизвести последовательность их нажатий.
Так?
Если да, возникает вопрос - требуется ли при воспроизведении соблюдать паузы и длительность нажатий? Или надо воспроизвести просто последовательность с максимальной скоростью?
Исходя из всего сумбура сказанного, я понял что кнопки у вас не фиксирующиеся и требуется воспроизвести последовательность их нажатий.
Так?
Если да, возникает вопрос - требуется ли при воспроизведении соблюдать паузы и длительность нажатий? Или надо воспроизвести просто последовательность с максимальной скоростью?
-
- Лейтенант
- Сообщения: 516
- Зарегистрирован: 25 фев 2018, 08:48
- Откуда: Оренбург
- Имя: Александр
Буфер FIFO
[ref]Dryundel[/ref], я Вам можно сказать и не объяснял что планирую попробовать, просто в "общем плане" озвучил без деталей.
Я планировал блок применить у себя, но уже понял что в моем случае лучше оставить как задумал изначально - перебор последовательно по платам и отработка по условиям внутри плат.
Пока вопрос снят, дабы не озадачивать Вас своими мыслями тем более, что рабочий вариант вроде есть в мыслях.
Я планировал блок применить у себя, но уже понял что в моем случае лучше оставить как задумал изначально - перебор последовательно по платам и отработка по условиям внутри плат.
Пока вопрос снят, дабы не озадачивать Вас своими мыслями тем более, что рабочий вариант вроде есть в мыслях.
Буфер FIFO
Не этом блоке возможно реализовать проект бегущие огни из 16 светодиодов на 74hc595, включающиеся через 2 ?
Не могу найти не одного примера, как реализовать на вроде такого переключения, есть только банально простые бегущие в один раяд.
[spoiler]https://youtu.be/GbzrWfCa0vA[/spoiler]
- Dryundel
- Полковник
- Сообщения: 2437
- Зарегистрирован: 22 май 2017, 23:15
- Откуда: Ярославль
- Имя: Андрей
- Благодарил (а): 3 раза
- Поблагодарили: 31 раз
Буфер FIFO
Нет. Этот блок Вам не поможет. Вам в другую тему.uzer писал(а): 20 авг 2020, 22:02 Не этом блоке возможно реализовать проект бегущие огни из 16 светодиодов на 74hc595, включающиеся через 2 ?
А вообще, два рядом бегущих огня - это тройка умножаемая на 2 в цикле, в бинарном формате.
00000011 -3
00000110 -6
00001100 -12
00011000 - 24
и т.д.
Если задача только в этом, Вам помогут операции с битами.
- Dryundel
- Полковник
- Сообщения: 2437
- Зарегистрирован: 22 май 2017, 23:15
- Откуда: Ярославль
- Имя: Андрей
- Благодарил (а): 3 раза
- Поблагодарили: 31 раз
Буфер FIFO
Данный блок не корректно работает с переменными типа String.
Для работы со строками рекомендую это: viewtopic.php?f=85&t=7884
Для работы со строками рекомендую это: viewtopic.php?f=85&t=7884
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя