Задачи в очередь

На этом форуме Вы можете задать вопросы знатокам программы и автору.
Аватара пользователя
Phazz
Полковник
Сообщения: 2552
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 367
Откуда: Сургут
Имя: Анатолий

Задачи в очередь

#41

Сообщение Phazz » 04.11.2019{, 10:26}

KeyArduino, Мой вариант, кнопки 3 (лень было добавлять больше) добавить можно сколько угодно. Запоминает 100 нажатий, это тоже можно увеличить.
viewtopic.php?p=78977#p78977
Последний раз редактировалось Phazz 05.11.2019{, 21:28}, всего редактировалось 1 раз.

Аватара пользователя
KeyArduino
Сержант
Сообщения: 130
Зарегистрирован: 21.07.2019{, 19:16}
Репутация: 125
Имя: Дмитрий
Контактная информация:

Задачи в очередь

#42

Сообщение KeyArduino » 04.11.2019{, 21:14}

Rovki писал(а):
03.11.2019{, 19:42}
Удивил меня КлючкАрдуино ,что не смог сформулировать четко задачу ,как в своих видео уроках...
1000 извинений Анатолий, не хочу озвучивать идею, если всё получится, то видос отсниму, а пока привёл приблизительно нужную логику, извиняюсь что так расплывчато получилось, я сам это почувствовал.

Отправлено спустя 12 минут 43 секунды:
Phazz писал(а):
04.11.2019{, 10:26}
KeyArduino, Мой вариант, кнопки 3 (лень было добавлять больше) добавить можно сколько угодно. Запоминает 100 нажатий, это тоже можно увеличить.
Спасибо конечно, но что то у меня ничего не работает, подключил кнопки и светодиоды, и тишина, на нажатие кнопок нет реакции на светодиодах. Но всё равно спасибо за старание и потерянное время! :smile9:

Аватара пользователя
Rovki
Полковник
Сообщения: 4873
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 269
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Задачи в очередь

#43

Сообщение Rovki » 04.11.2019{, 21:30}

KeyArduino писал(а):
04.11.2019{, 21:14}
Rovki писал(а):
03.11.2019{, 19:42}
Удивил меня КлючкАрдуино ,что не смог сформулировать четко задачу ,как в своих видео уроках...
1000 извинений Анатолий, не хочу озвучивать идею, если всё получится, то видос отсниму, а пока привёл приблизительно нужную логику, извиняюсь что так расплывчато получилось, я сам это почувствовал.
Без проблем :) . В личку бы написали ,давно бы уже сделали :smile469:
Электронщик до мозга костей и не только

Аватара пользователя
KeyArduino
Сержант
Сообщения: 130
Зарегистрирован: 21.07.2019{, 19:16}
Репутация: 125
Имя: Дмитрий
Контактная информация:

Задачи в очередь

#44

Сообщение KeyArduino » 04.11.2019{, 21:48}

Rovki писал(а):
04.11.2019{, 21:30}
Без проблем . В личку бы написали ,давно бы уже сделали
Вот в это посте подскажите по возможности viewtopic.php?f=18&t=5815&p=78857#p78857
Вроде что то элементарное, а что то догнать не могу

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Задачи в очередь

#45

Сообщение Dryundel » 05.11.2019{, 02:21}

KeyArduino, Вот Вам блок FIFO
.
FIFO.jpg
FIFO.jpg (5.61 КБ) 921 просмотр
FIFO_(CODE).ubi
(145.94 КБ) 60 скачиваний
.
В железе не тестировал, но в протеусе работает. Описания внутри пока нет. Доделаю - выложу.
Логика такая:
1. В настройках выставляем размер буфера (массива) - в вашем случае очереди.
2. Подачей единицы на вход Insert записываем очередную переменную со входа In в буфер (в конец очереди)
3. Подачей единицы на вход Extract извлекаем первую по очереди переменную из буфера (очереди) на выход Out
4. Если в буфере пусто, то на выходе Void - единица и больше ничего из очереди не извлекается.
5. Если буфер полон (см. размер массива) то на выходе Full - единица и ничего в очередь больше не ставится.

Ну а нажатия с со счетчиками (таймерами) надеюсь сообразишь как сделать. :)

Ждем обещанный видос!!! :smile9:

Отправлено спустя 9 часов 2 минуты 42 секунды:
Вот есть один маленький нюанс в этом блоке FIFO
Когда извлекаем из буфера последнюю переменную и буфер опустошается, то на выходе Out повисает эта последняя переменная. Больше ведь ничего не извлекается т.к. буфер пуст.
Вопрос в том, надо ли сделать так, что бы при пустом буфере и при очередном сигнале на входе Extract переменная на выходе Out обнулялась?
Не знаю будет ли это правильно. Ведь если в буфер записывается следующая переменная, то получится что на выходе между этими двумя переменными окажется "0", а это ведь тоже значение.

Вопрос ко всем не равнодушным. :) Как сделать? С обнулением или без?

Gordon0007
Сержант
Сообщения: 138
Зарегистрирован: 19.04.2018{, 13:37}
Репутация: 13
Имя: Павел

Задачи в очередь

#46

Сообщение Gordon0007 » 05.11.2019{, 11:50}

Добрый день, хотел узнать не поможете ли вы мне с задачей.
Я делаю прошивку для дозатора жидкостей, логику работы одного насоса по таймеру я отработал, меню час дописываю, но в скором времени я дойду до пункта когда потребуется ставить их в очередь на выполнение.
По сути для запуска нужно всего лишь номер насоса и время в миллисекундах сколько подавать и команда на запуск (Ртриг), проблема в том что на одно время может быть задано не одно а несколько задач и они должны отработать и стереться и списка задач.
Всего 6 насосов, одновременно может работать только один насос, включатся на определенное время.
Может быть кто подскажет как это реализовать?

edyapd
Капитан
Сообщения: 768
Зарегистрирован: 20.09.2019{, 11:38}
Репутация: 65
Имя: Эдуард

Задачи в очередь

#47

Сообщение edyapd » 05.11.2019{, 13:24}

Dryundel писал(а):
05.11.2019{, 11:23}
Как сделать? С обнулением или без?
Как по мне, так стоит ориентироваться на два верхних выхода, прежде чем что-то записывать или считывать. Поэтому без разницы, что будет на выходе "Out". Если блок будет быстрее работать без обнуления, то так и оставить.
Не по теме
СпойлерПоказать
Не сочтите за придирку, но мне кажется empty будет более правильно, чем void, в данном значении. an empty array, an empty line.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Задачи в очередь

#48

Сообщение Dryundel » 05.11.2019{, 14:08}

edyapd писал(а):
05.11.2019{, 13:24}
Не сочтите за придирку, но мне кажется empty будет более правильно, чем void, в данном значении. an empty array, an empty line.
Возможно Вы и правы. Пожалуй так и сделаю когда блок оформлю.
И незачем так стесняться своего мнения. :)
Здоровая критика всегда приветствуется.

Аватара пользователя
AlexCrane
Капитан
Сообщения: 895
Зарегистрирован: 20.10.2017{, 13:22}
Репутация: 294
Откуда: Ульяновск
Имя: Александр

Задачи в очередь

#49

Сообщение AlexCrane » 05.11.2019{, 14:54}

Dryundel, Текущее количество переменных в буфере можно вывести?
Если не знаю, то не скажу. Если скажу, то сначала проверю...
Если нет возможности отблагодарить материально, хотя бы оцени пост....

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Задачи в очередь

#50

Сообщение Dryundel » 05.11.2019{, 15:07}

AlexCrane писал(а):
05.11.2019{, 14:54}
Dryundel, Текущее количество переменных в буфере можно вывести?
Не помню. Сейчас копну библиотеку. Если есть такая функция, добавлю.

Отправлено спустя 4 минуты 52 секунды:
Хотя можно ведь и ...
Ща попробуем.
:)

Аватара пользователя
Phazz
Полковник
Сообщения: 2552
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 367
Откуда: Сургут
Имя: Анатолий

Задачи в очередь

#51

Сообщение Phazz » 05.11.2019{, 18:35}

KeyArduino писал(а):
04.11.2019{, 21:27}
Спасибо конечно, но что то у меня ничего не работает
Немного забыл логику работы Стэка ))). Оказалось он совсем не подходит.
Исправил, проверил - все работает.
очередь_2.flp
(461.37 КБ) 68 скачиваний

KulibinOrsk
Лейтенант
Сообщения: 515
Зарегистрирован: 25.02.2018{, 08:48}
Репутация: 21
Откуда: Оренбург
Имя: Александр

Задачи в очередь

#52

Сообщение KulibinOrsk » 05.11.2019{, 18:41}

Phazz, а если бы еще на стабильной версии сделать (интересно взглянуть на ход мыслей) то совсем было бы хорошо. А делать и показывать на бета версиях ...

Аватара пользователя
Phazz
Полковник
Сообщения: 2552
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 367
Откуда: Сургут
Имя: Анатолий

Задачи в очередь

#53

Сообщение Phazz » 05.11.2019{, 18:47}

KulibinOrsk, ну нужно на чем-то обкатывать ). Позже сделаю.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Задачи в очередь

#54

Сообщение Dryundel » 05.11.2019{, 20:23}

AlexCrane писал(а):
05.11.2019{, 14:54}
Dryundel, Текущее количество переменных в буфере можно вывести?
Пользуйтесь. :)
.
FIFO V1.0.jpg
FIFO V1.0.jpg (6.56 КБ) 805 просмотров
Буфер_FIFO_v1.0_(CODE).ubi
(160.62 КБ) 67 скачиваний
ОписаниеПоказать
Буфер FIFO подобен СТЕК. Основное отличие в очереди извлечения данных. Если СТЕК работает по принципу "первый пришел - последний ушел", то у FIFO принцип работы - "первый пришел - первый ушел"

С помощью данного блока FIFO v1.0 осуществляется запись целочисленных переменных в массив и извлечения этих переменных в порядке очереди.

Принцип и логика работы:
1. В настройках выставляем размер буфера (массива) - параметр size_fifo. Он определяет сколько переменных сможет вместить блок.
2. Подачей единицы на вход Insert записываем очередную переменную со входа In в буфер (в конец очереди)
3. Подачей единицы на вход Extract извлекаем первую по очереди переменную из буфера (очереди) на выход Out.
4. Если в буфере пусто, то на выходе Empty - единица и больше ничего из очереди не извлекается.
5. Если буфер полон то на выходе Full - единица и ничего в очередь больше не ставится.
6. На выход Volum выводится текущее количество переменных хранящихся в буфере. С помощью этого выхода удобно следить за заполненностью буфера.

Аватара пользователя
Phazz
Полковник
Сообщения: 2552
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 367
Откуда: Сургут
Имя: Анатолий

Задачи в очередь

#55

Сообщение Phazz » 05.11.2019{, 20:54}

KulibinOrsk писал(а):
05.11.2019{, 18:41}
Phazz, а если бы еще на стабильной версии сделать (интересно взглянуть на ход мыслей) то совсем было бы хорошо. А делать и показывать на бета версиях ...
Для 5.3.0
очередь(5.3).flp
(358.85 КБ) 66 скачиваний

Gordon0007
Сержант
Сообщения: 138
Зарегистрирован: 19.04.2018{, 13:37}
Репутация: 13
Имя: Павел

Задачи в очередь

#56

Сообщение Gordon0007 » 07.11.2019{, 11:59}

Дозатор для дозирования жидкостей, задаешь номер насоса от 1 до 6, количество в миллилитрах (миллисекунды*коэфф), время и дни недели показания сравниваются с часами, все сохраняется в ЕЕПРОМ. Если время совпадает, то включается № насос на заданное время.
Всего можно сохранить 100 таймеров, и время может совпадать (допустим на насос 2 и 4 нужно подать в одно и тоже время 100мл (1мл примерно 1 секунда, тем самым 100х2=200сек) и сравнение проходить только для насос №2 срабатывает, а насос №6 не срабатывает так как во время сравнение времени работал насос №2 и время в часах уже поменялось. А может и больше насосов сработать одновременно, требуется создать определенную очередь срабатывания (определенный буфер).
Я это вижу так, идет постоянное сравнение и если происходит совпадений сохраненного времени то записывается некий список в конец очереди и после исполнения этой задачи удалялся из списка.
Если это можно сделать стандартными блоками было бы еще лучше

Отправлено спустя 39 секунд:
Может кто помощь с этой задачей?

Ответить

Вернуться в «Спросить у знатоков»