1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Организация очереди при помощи ПЛК

Модератор: Глоб.модераторы

Ответить
Аватара пользователя

Автор темы
megavolt86
эксперт
эксперт
Сообщения: 1172
Зарегистрирован: 14 ноя 2013, 20:35
Имя: Анатолий Сергеевич
Страна: Россия
город/регион: Башкортостан
Благодарил (а): 13 раз
Поблагодарили: 68 раз

Организация очереди при помощи ПЛК

Сообщение megavolt86 »

Здравствуйте, коллеги!
Может кто сталкивался с похожей задачкой:
Допустим имеется абстрактная установка с н-ным количеством клапанов, работающих в один коллектор, пропускная способность которого допускает одновременную работу всего двух клапанов. Каждый клапан открывается только по достижении максимального уровня в своей емкости. Но при этом очередность открытия должна соответствовать очередности сработки уровней...
Как можно оптимально по ресурсу памяти и с более менее оптимизированым кодом решить эту задачупри помощи ПЛК? 🙄
Допустим через цикл я могу составить очередь, но как заставить ее подвинуться вперед, когда первый вышел из очереди...
Видимо сказывается ограниченость фантазии...
:ext_secret:

winb
освоился
освоился
Сообщения: 248
Зарегистрирован: 31 янв 2017, 08:44
Имя: Маркушин Андрей Геннадьевич
Страна: Россия
город/регион: Нижегородская обл., Выкса
Благодарил (а): 19 раз
Поблагодарили: 64 раза

Организация очереди при помощи ПЛК

Сообщение winb »

1. Определить очередь в виде массива в DB + BLKMOV для сдвига - для симатиков. Элементы массива - номера клапанов.
2. Разработать блок управления очередью (сдвиг очереди и прочее), лучше на ST-языках (работать с массивами легче)
3. Опять-таки для симатиков - использовать стандартные блоки работы с таблицами (FC85 - FIFO, FC87 - LIFO)

Eugene Sergejev
освоился
освоился
Сообщения: 237
Зарегистрирован: 28 июл 2008, 15:40
Имя: Сергеев Евгений Викторович
Страна: Karjala/Suomi
город/регион: Petroskoi/Helsinki
Благодарил (а): 3 раза
Поблагодарили: 3 раза

Организация очереди при помощи ПЛК

Сообщение Eugene Sergejev »

Всё достаточно просто - заводите блок данных с массивом.
Ну, типа Очередь: ARRAY 1..100 OF INT;
Заводите две переменные - НачалоОчереди и КонецОчереди.
При инициализации обе они равны нулю ( не обязательно, просто должны быть одинаковыми ).
Дальше будут какие-то обработчики событий от каждого, гм, юнита что-ли, не знаю, что у вас там.
У меня это кнопки ( нажал - поставил устр-во в очередь на обработку ) и датчики наличия продукта в бункере ( насыпало туда продукту - эмулируем нажатие той же кнопки ).
Обработчик смотрит - ага, кнопку нажали. Он смотрит, что в переменной КонецОчереди, пихает по ссылке номер юнита в массив Очередь и увеличивает на единицу переменную КонецОчереди.
Дальше, должен быть обработчик очереди. Он смотрит - НачалоОчереди <> КонецОчереди. Что-то обработать надо. Он достаёт из массива по индексу, содержащемуся в КонецОчереди номер юнита и вызывает подпрограмму обработки, в которую передаёт оный номер в кач-ве аргумента. Когда эта подпрограмма сообщит ему, что обработка закончена, он уменьшает переменную КонецОчереди на единицу.
Вот, собственно, и всё.
По вкусу можно добавить приоритеты юнитам, тогда, если попадается высокий приоритет события массив Очередь сдвигают на шаг вниз, и вверх очереди пихают номер уст-ва с высоким приоритетом.
Так-же читать можно не верх очереди, а низ; сортировать очередь согласно каким-то критериям, добавлять в неё разные поля - если нужна разная обработка для разных категорий юнитов этцетера. Штука гибкая, сами сообразите, как пользоваться.
пдпс скрщна по трбвнию мдратра
Ответить

Вернуться в «ПЛК SIMATIC (S7-200, S7-1200, S7-300, S7-400, S7-1500, ET200)»