Страница 2 из 3

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

Добавлено: 03 ноя 2019, 16:44
KeyArduino
Dryundel писал(а): 03 ноя 2019, 16:39 След. вопрос.
После закрытия клапана должна быть задержка закрытия? Какая?
Или клапан должен суммировать задержку открытия исходя из суммарной длительности разных нажатия кнопок?
Допустим эти же 3 кнопки нажали 15 раз с разным временем удержания и в разном порядке, клапан должен отработать кажудю кнопку в порядке очереди и ждать следующей команды

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

Добавлено: 03 ноя 2019, 16:46
edyapd
Должна ли быть пауза между комнатами? Я имею ввиду, в первой нажали 1 и 2 держат. Во второй нажали 1 и 3 (при этом я так понял, что они не знают, что система уже занята), подержали скажем 10 и 15 сек на клапан. Должна ли система сделать паузу после того как отработала первую комнату, прежде чем перейти ко второй?
И должна ли система включать клапана сразу же, если она свободна?

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

Добавлено: 03 ноя 2019, 16:49
KeyArduino
edyapd писал(а): 03 ноя 2019, 16:46 Должна ли быть пауза между комнатами? Я имею ввиду, в первой нажали 1 и 2 держат. Во второй нажали 1 и 3 (при этом я так понял, что они не знают, что система уже занята), подержали скажем 10 и 15 сек на клапан. Должна ли система сделать паузу после того как отработала первую комнату, прежде чем перейти ко второй?
И должна ли система включать клапана сразу же, если она свободна?
Без пауз, отрабатывает все поступившие сигналы один за другим, поступило 20 сигналов, отработала в порядке очереди и ждёт следующее поступление

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

Добавлено: 03 ноя 2019, 16:53
Dryundel
KeyArduino писал(а): 03 ноя 2019, 16:44 Допустим эти же 3 кнопки нажали 15 раз с разным временем удержания и в разном порядке, клапан должен отработать кажудю кнопку в порядке очереди и ждать следующей команды
Это понятно уже.
Вы не ответили на след. вопрос.
Dryundel писал(а): 03 ноя 2019, 16:39 След. вопрос.
После закрытия клапана должна быть задержка закрытия? Какая?
Или клапан должен суммировать задержку открытия исходя из суммарной длительности нажатия разных кнопок?
Отправлено спустя 1 минуту 47 секунд:
KeyArduino писал(а): 03 ноя 2019, 16:49 Без пауз, отрабатывает все поступившие сигналы один за другим, поступило 20 сигналов, отработала в порядке очереди и ждёт следующее поступление
Почти ответили. Не понятно - клапан должен закрываться между отработкой нажатий разных кнопок?

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

Добавлено: 03 ноя 2019, 17:01
edyapd
Пожалуй если бы вы нарисовали что-то подобное, а в самом низу то, как это должна отработать система, то было бы намного понятней.
потому как если клапана независимы, то можно ли отрабатывать команды следующей комнаты свободным клапаном, в то время как комната не освободила ещё все клапана.

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

Добавлено: 03 ноя 2019, 17:04
Dryundel
Упс!
Похоже топикстартер не выдержал шквала вопросов. :)
Только бы не сердечный удар!

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

Добавлено: 03 ноя 2019, 17:08
KeyArduino
Dryundel писал(а): 03 ноя 2019, 16:53 Почти ответили. Не понятно - клапан должен закрываться между отработкой нажатий разных кнопок?
Да, должен закрываться, то есть полностью отрабатывать цикл, закрываться и открываться при поступлении следующей задачи или если задачи стоят в очереди. Принял, открылся на энное количество секунд, отработал закрылся, следующая задача

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

Добавлено: 03 ноя 2019, 17:08
Dryundel
KeyArduino писал(а): 03 ноя 2019, 16:49 Без пауз, отрабатывает все поступившие сигналы один за другим, поступило 20 сигналов, отработала в порядке очереди и ждёт следующее поступление
Если клапан при отработке всех задач в очереди не должен закрываться то Вам не нужна очередь.
Надо просто суммировать длительность всех задач на открытие, одновременно уменьшая это время текущим временем.
Такой алгоритм будет гораздо проще очереди, а результат будет тем же.

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

Добавлено: 03 ноя 2019, 17:16
KeyArduino
edyapd писал(а): 03 ноя 2019, 17:01 Пожалуй если бы вы нарисовали что-то подобное, а в самом низу то, как это должна отработать система, то было бы намного понятней.
потому как если клапана независимы, то можно ли отрабатывать команды следующей комнаты свободным клапаном, в то время как комната не освободила ещё все клапана.
отработала команды с одной комнаты, переходит к следующей и т.д., а тем временем с комнат может набиться с десяток а то и больше команд, вот их нужно ставить (записывать) в очередь, и в порядке очереди выполнять

Отправлено спустя 4 минуты 26 секунд:
Dryundel писал(а): 03 ноя 2019, 17:08 Если клапан при отработке всех задач в очереди не должен закрываться то Вам не нужна очередь.
Вот именно что заканчивать задание клапан должен закрытием, отработал одно закрылся, отработал следующее закрылся и т.д. Типа как на конвейере тару наполняют, подъехала тара наполнил закрылся, подъехала следующая, наполнил закрылся

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

Добавлено: 03 ноя 2019, 17:21
Dryundel
KeyArduino писал(а): 03 ноя 2019, 17:08 Да, должен закрываться, то есть полностью отрабатывать цикл, закрываться и открываться при поступлении следующей задачи или если задачи стоят в очереди. Принял, открылся на энное количество секунд, отработал закрылся, следующая задача
В таком случае очередь необходима.
KeyArduino писал(а): 03 ноя 2019, 16:41 Может как то с блоками массивов можно организовать, если кнопками задачи по порядку будут записываться в массив а потом считывать и выполнять по очереди?
Эт я размышляю, на деле не знаю будет ли работать
Мысль верная. Только для решения поставленной задачи в штатных блоках нехватает FIFO.
Это почти то-же самое что и Стек.
С той лишь разницей что в Стеке "последний пришел - первый ушел", а в FIFO «первым пришёл — первым ушёл»
Был бы такой блок все бы упростилось.

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

Добавлено: 03 ноя 2019, 17:27
Rovki
KeyArduino писал(а): 03 ноя 2019, 16:38
Rovki писал(а): 03 ноя 2019, 16:23 По тому как написал схема такая получается и работает
Блоки памяти тут я как понял не используются? Ведь допустим в разных комнатах по нажимали кнопки многократно, на ардуино прилетело допустим 15 команд по открытию клапанов, где, каким блоком она их будет собирать а потом отправлять на выполнение?
В моей схеме этого нет ибо у вас не описано ,что такое команда . У вас было сказано что команда это нажатие кнопки ,а работа клапана по времени равна времени нажатия .Поэтому запоминать кто сколько держал и сколько нажимал не представляеся не возможным ,нужно просто время распределить между пользователями и организовать очередь пользователей для подачи команд управления ,а не запоминать кто когда нажимал и сколько .

Отправлено спустя 4 минуты 31 секунду:
KeyArduino писал(а): 03 ноя 2019, 17:08
Dryundel писал(а): 03 ноя 2019, 16:53 Почти ответили. Не понятно - клапан должен закрываться между отработкой нажатий разных кнопок?
Да, должен закрываться, то есть полностью отрабатывать цикл, закрываться и открываться при поступлении следующей задачи или если задачи стоят в очереди. Принял, открылся на энное количество секунд, отработал закрылся, следующая задача
Если каждый будет нажимать кнопки сколько хочет раз и на любое время ,то как узнать что нужно переходить у другой комнате ???
Вообщем задание сырое и не продуманное .

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

Добавлено: 03 ноя 2019, 17:55
Dryundel
Идея есть. Задействуем стек. Пишем в него время нажатий в миллисекундах. Считываем последнее значение массива.
Ведь я так понял конкретное открытие клапана связывать с конкретной кнопкой не надо. Критично лишь время открытия и последовательность.
Надо как то тактировать постоянное продвижение с в стеке и еще связать это с временем отработки.

Надо пробовать.
Бин! Еще понимать бы для чего это нужно. :)

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

Добавлено: 03 ноя 2019, 17:56
ecoins
Dryundel писал(а): 03 ноя 2019, 16:43 ecoins писал(а): ↑Сегодня{, 13:34}
Это реализовано в библиотеках ecoins - пользовательский блок "Диспетчер задач"
Очень интересно. И как же там организована очередь? Я вроде не заметил там подобия FIFO . А можно поподробней?
Здесь очень живое прикладное обсуждение - напишу об этом в ветке "Разработки ecoins".

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

Добавлено: 03 ноя 2019, 18:04
Rovki
Dryundel писал(а): 03 ноя 2019, 17:55 Идея есть. Задействуем стек. Пишем в него время нажатий в миллисекундах. Считываем последнее значение массива.
Ведь я так понял конкретное открытие клапана связывать с конкретной кнопкой не надо. Критично лишь время открытия и последовательность.
Надо как то тактировать постоянное продвижение с в стеке и еще связать это с временем отработки.

Надо пробовать.
Бин! Еще понимать бы для чего это нужно. :)
Кнопка однозначно связывается с клапаном ...3 кнопки - 3 клапана- 3 комнаты

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

Добавлено: 03 ноя 2019, 18:06
edyapd
KeyArduino писал(а): 03 ноя 2019, 13:19 Если по подробней, то с трёх комнат (три блока управления с тремя кнопками) поступают сигналы на блок управления, который будет отрабатывать эти задачи в порядке поступившей очереди. К блоку выполнения подключены 3 клапана (Всё это представляет из себя ардуино, 9 кнопок (по 3 в каждой комнате) и к ардуино подключены 3 клапана.
Например: Независимо друг от друга на ардуино подаються сигналы с разных комнат (С первой допустим команда включить 2 и 3 клапан (время отработки клапана зависит от времени удержания кнопки), со второй включить 1 и 2 клапан и с третей включить 1 и 3 клапан), клапана всего 3 и нужно собрать поступившие со всех трёх комнат сигналы и выполнить их в порядке поступившей очереди.
Тут посидел, подумал. Наверное стоит сделать в каждой комнате по Ардуино, которое бы обрабатывало нажатия. При этом запрос в очередь выставляло бы только после того, как полностью сформирована команда (отпущена последняя кнопка). Только в таком случаи вы будете знать сколько по времени должен быть открыт клапан.
Ардуино, которое заведует клапанами получает запрос на очередь и помещает его в массив. И отвечает, что запрос на очередь поставлен. Ардуино в комнате должно снять запрос. Когда после отработки очередной команды массив сдвигается вверх и из него берётся номер очередной комнаты. Делается запрос к Ардуино, которая стоит в комнате и та отвечает, сколько и каким клапаном лить.
Тогда Ардуино в комнате может накапливать сколько угодно команд(ограничено памятью). И после формирования команды снова отправлять запрос на очередь.
Как вам такая система?

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

Добавлено: 03 ноя 2019, 18:47
KeyArduino
edyapd писал(а): 03 ноя 2019, 18:06 Тут посидел, подумал. Наверное стоит сделать в каждой комнате по Ардуино, которое бы обрабатывало нажатия. При этом запрос в очередь выставляло бы только после того, как полностью сформирована команда (отпущена последняя кнопка). Только в таком случаи вы будете знать сколько по времени должен быть открыт клапан.
Ардуино, которое заведует клапанами получает запрос на очередь и помещает его в массив. И отвечает, что запрос на очередь поставлен. Ардуино в комнате должно снять запрос. Когда после отработки очередной команды массив сдвигается вверх и из него берётся номер очередной комнаты. Делается запрос к Ардуино, которая стоит в комнате и та отвечает, сколько и каким клапаном лить.
Тогда Ардуино в комнате может накапливать сколько угодно команд(ограничено памятью). И после формирования команды снова отправлять запрос на очередь.
Как вам такая система?
Да, истина где то рядом, спасибо за предложение, буду пробовать!
Всем участникам ветки плюсики в карму! И спасибо Вам большое!!!

Отправлено спустя 3 минуты 38 секунд:
Тему не закрываю до благополучного финала, буду пробовать, а там посмотрим что получится. Всем ещё раз спасибо!!! :smile9:

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

Добавлено: 03 ноя 2019, 19:31
rw6cm
KeyArduino писал(а): 03 ноя 2019, 18:47 Да, истина где то рядом,
По ходу разрабатывается наливайка на три столика )

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

Добавлено: 03 ноя 2019, 19:32
Rovki
[/quote]
По ходу разрабатывается наливайка на три столика )
[/quote]
на троих столик :smile171:

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

Добавлено: 03 ноя 2019, 19:36
Dryundel
Rovki писал(а): 03 ноя 2019, 19:32
По ходу разрабатывается наливайка на три столика )
на троих столик :smile171:
Столик на троих и три напитка. Коктейль будет у каждого свой.
:)

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

Добавлено: 03 ноя 2019, 19:42
Rovki
Удивил меня КлючкАрдуино ,что не смог сформулировать четко задачу ,как в своих видео уроках...