PDA

Просмотр полной версии : Вопрос по алгоритму



MasterZ
09.09.2008, 15:56
Как реализовать последовательное включение до 3-5 устройств с задержкой на пару секунд в произвольном порядке? Хотя бы приблизительный пример. Или на словах. Неделю ломаю голову - не выходит!

magirus
10.09.2008, 13:08
а поподробнее , что именно требуется?
какие устройства, как включать?
в сеть чтоли?
или в опрос?

MasterZ
10.09.2008, 13:54
Если конкретнее, то сразу все двигатели (мощные) включать нельзя. А только последовательно. И в произвольном порядке, т.е. не обязательно все, а в разное время разное количество. В визуализации кнопками определяю путь движения продукта и после нажатия кнопки "старт" они должны последовательно с задержкой включаться. В пути может быть различное количество двигателей. В чём и трудность. Привязать переменную к какому-то определённому двигателю невозможно. Я, вообще стал сомневаться что это возможно.

Сергей71
10.09.2008, 15:33
Решение простое.
1. Перед выходом упраления на каждый двг. повесить свой таймер с задержкой на включение.

2. Макс. число двиг. - это число N от 1 до Макс.

Выбрал путь и порядок пример из 10 двиг.

Тогда таймеру ставишь:
первый (10-1) =9 сек
второй (10-2)= 8 сек
.....
и последний (10-10) = 0 сек. Включить сразу первым.

И даешь команду ПУСК.

MasterZ
10.09.2008, 16:00
Похоже на вариант. Спасибо! Обмозгую - доложу результат.

magirus
11.09.2008, 10:36
И в произвольном порядке, т.е. не обязательно все, а в разное время разное количество.
выделенное немного сбивает с толку...
у любой установки есть алгоритм работы...
распиши для себя в какой момент времени какие двигатели должны работать :
шаг1: двиг 1,3,7
шаг2: А, В, С,
...
шаг последний ....
шаг1: двиг 1,3,7
тебе самому проще станет.

MasterZ
11.09.2008, 13:21
Именно в том и суть, что не конкретный двигатель должен в определённый момент включиться, а произвольно выбранный. Например: включаю дв.1 и 8. Первый включится через 2 секунды после старта, а второй 8х2 - через 16 сек. Это если привязать каждому двигателю задержку. Нужно так:выбрал 2 и 5. Включился (можно сразу) 2-й, через 2 сек 5-й. Выбрал 1, 3, 8 - включился 1-й, через 2 сек 3-й, через 2 сек 8-й. Есть и другие условия, например, в порядке возрастания, но это решается.

Rand0m
11.09.2008, 14:48
если не критично разное время между включениями двигателей то можно предложить такое решение на плк.
простая программа на Sfc с количеством шагов равным количеству двигателей +1. в начале каждого шаге включаем или не включаем один двигатель, в свойствах шага задаем необходимое время.

MasterZ
11.09.2008, 15:00
Принципиально не критично, но не хочу идти по облегчённому пути в ущерб логике. С программой в будущем будут работать наладчики, операторы и т.д. Народец достаточно придирчивый. Да и если логика безупречная, легче усваивается и более надёжная.

Rand0m
11.09.2008, 15:16
ну если совсем по сложному то в начале формируем маску для необходимых двигателей например 1,3,7-101000010,
далее анализируя каждый бит по порядку включаем двигатель, затем если он был включен выжидаем паузу в х секунд, если не включаем то соответственно паузу не делаем. но это получается громоздкая конструкция :)

пы.сы. только что дошло, по первому варианту чтобы не ждать пустые шаги, для каждого шага делается альтернативный пустой с нулевым временем исполнения. т.е. если в предидущем шаге двигатель не включался то переход на следующий шаг выполняется мгновенно

Gans
11.09.2008, 16:28
По идее должна быть переменна означающая, что на текущий момент времени нельзя включать двигатели. Например: выход TON или TOF с задержкой 20 сек. При пуске очередного двигателя обнулить таймер и опять блокировать включение всех остальных двигателей (кроме включенных).
На мой взгляд должно это должно выглядеть примерно так: создается функциональный блок у которого 10 входов и 10 выходов команда на включение двигателей дается срузу на все что надо, а функциональный блок сам включит двигатели по очереди.

Gans
12.09.2008, 09:10
Импортируй в проект и если мало входов выходов у функционального блока дорисуй сам или отпишись я тоже смогу дорисовать :-)

MasterZ
16.09.2008, 09:03
Работает отлично, как надо. Можно адаптировать к моему проекту. Но пробую перевести в FBD - не получается. Это не обязательно, но зациклился не могу оторваться.
Спасибо всем за толковые советы!