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

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

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

#21

Сообщение KeyArduino » 03.11.2019{, 16:44}

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

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

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

#22

Сообщение edyapd » 03.11.2019{, 16:46}

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

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

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

#23

Сообщение KeyArduino » 03.11.2019{, 16:49}

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

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

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

#24

Сообщение Dryundel » 03.11.2019{, 16:51}

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

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

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

#25

Сообщение edyapd » 03.11.2019{, 17:01}

Пожалуй если бы вы нарисовали что-то подобное, а в самом низу то, как это должна отработать система, то было бы намного понятней.
потому как если клапана независимы, то можно ли отрабатывать команды следующей комнаты свободным клапаном, в то время как комната не освободила ещё все клапана.
Вложения
Клапана.jpg

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

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

#26

Сообщение Dryundel » 03.11.2019{, 17:04}

Упс!
Похоже топикстартер не выдержал шквала вопросов. :)
Только бы не сердечный удар!

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

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

#27

Сообщение KeyArduino » 03.11.2019{, 17:08}

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

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

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

#28

Сообщение Dryundel » 03.11.2019{, 17:08}

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

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

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

#29

Сообщение KeyArduino » 03.11.2019{, 17:12}

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

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

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

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

#30

Сообщение Dryundel » 03.11.2019{, 17:21}

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

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

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

#31

Сообщение Rovki » 03.11.2019{, 17:23}

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

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

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

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

#32

Сообщение Dryundel » 03.11.2019{, 17:55}

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

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

ecoins
Полковник
Сообщения: 2932
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

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

#33

Сообщение ecoins » 03.11.2019{, 17:56}

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

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

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

#34

Сообщение Rovki » 03.11.2019{, 18:04}

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

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

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

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

#35

Сообщение edyapd » 03.11.2019{, 18:06}

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

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

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

#36

Сообщение KeyArduino » 03.11.2019{, 18:44}

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

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

Аватара пользователя
rw6cm
Полковник
Сообщения: 2284
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 335
Имя: Владимир

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

#37

Сообщение rw6cm » 03.11.2019{, 19:31}

KeyArduino писал(а):
03.11.2019{, 18:47}
Да, истина где то рядом,
По ходу разрабатывается наливайка на три столика )
Win10-64, FLProg (portable)

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

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

#38

Сообщение Rovki » 03.11.2019{, 19:32}

[/quote]
По ходу разрабатывается наливайка на три столика )
[/quote]
на троих столик :smile171:
Электронщик до мозга костей и не только

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

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

#39

Сообщение Dryundel » 03.11.2019{, 19:36}

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

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

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

#40

Сообщение Rovki » 03.11.2019{, 19:42}

Удивил меня КлючкАрдуино ,что не смог сформулировать четко задачу ,как в своих видео уроках...
Электронщик до мозга костей и не только

Ответить

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