Непосильная задача для логического реле | ПЛК и АСУТП

Логические реле принципиально отличаются от ПЛК только степенью сложности программы. Главное- почувствовать, с какой задачей справится и ЛР, а с какой только ПЛК. Не всегда это выходит.

Вот и я едва не просчитался. Где-то в марте ко мне подошел некий начальник отдела и спросил, какое оборудование нужно для реализации простенькой задачи. Задачу тут же объяснил на пальцах. Не особо вникнув в суть, я ответил, что для такого ерундового дела хватит и ЛР. Сошлись на Zelio. С тем мой заказчик и удалился.

Уже летом разговор мне припомнили и дали тех.задание. А оборудование уже купили и смонтировали.

Вот это ТЗ:

На РОФ-1 запроектировали компрессорную (давление воздуха в сети 3атм), сжатый воздух которой используется для выгрузки пыли из бункеров фильтров ГОУ-1…ГОУ-10 (10 шт).
Компрессорная расчитана на расход воздуха для выгрузки пыли из одной ГОУ.
В компрессорной установлен шкаф контроля давления воздуха, а в нем находится
модульное интеллектуальное реле, управляющее процессом выгрузки пыли из бункеров фильтров ГОУ-1…ГОУ-10.
Необходимо запрограммировать реле таким образом, чтобы выгрузка пыли из
бункеров ГОУ-1…ГОУ-10 происходила в порядке поступления сигналов верхнего уровня пыли в бункере фильтра ГОУ-1…ГОУ-10, т.е. соблюдалась очередность
выгрузки.

В данном случае не важно, что такое ГОУ и РОФ, суть простая:

У ЛР 10 дискретных входов(DI1…DI10) и 10 дискретных выходов(DQ1…DQ10).
Есть 10 бункеров, в которые попадает пыль от фильтров.
DIx=1 при максимальном уровне пыли в соответствующем бункере, DIx=0 при минимальном уровне пыли. Что бы выдуть пыль из бункера, нужно включить продувку соответствующего бункера(DQx=1) при появлении сигнала DIx=1.
После выдува всей пыли сигнал на входе становится равен DIx=0, выдув прекращается(DQx=0) и в случае необходимости, чистится другой бункер.
Одновременно можно продувать только 1 бункер(только один DQx=1), хотя одновременно могут быть забиты пылью несколько бункеров(несколько DIx=1).
Нужно запоминать порядок появления сигналов о заполнении пылью бункеров и продувать их от оной по этому порядку.

Ничего сложного. Фактически нужно реализовать очередь, а это задача для первого семестра по программированию в техникуме.

Но для Zelio я смог реализовать эту задачу только частично, «соблюсти очередность» у меня так и не получилось. Я просто не смог это сделать ни кубиками FBD, ни тем более на языке LD.

Бункера у меня очищаются не в порядке заполнения(порядке поступления сигналов DIx=1), а в случайном порядке. С этим заказчик согласился, но если бы требование «очередности» было принципиальным, тогда было бы очень худо.

Получилась такая программа:

rof-01

rof-02

rof-03

Программа в формате ZelioSoft 2 v.4.4

В конце концов я придумал и как реализовать «очередность», создал кубиками FBD хитроумные конструкции для реализации очереди FIFO(отсюда моя статья «Использование переменных типа BYTE и WORD в Zelio» ) но… никак не вписался в ограничение Zelio в 200 блоков на программу.

На данный момент я считаю, что для Zelio непосильно полностью реализовать поставленную задачу. Если кто-то это сделает, обещаю выслать бутылку хорошего коньяку. Это конкурс без срока давности.
Если найдется такой Титан, отпишусь об этом в блоге.

Сможешь сделать такую программу на Zelio? Дерзай.

UPD1: Конкурс закрыт, победитель- Алексей из Омска:  http://plc-blog.com.ua/itogi-konkursa-1-zelio

4 комментария: Непосильная задача для логического реле

  • Євген говорит:

    Чергу можна спробувати реалізувати на реверсивних лічильниках (counter) — по одному на канал + один на чергу
    Всі лічильники рахують події IN/OUT, IN на інкремент, OUT на декремент.
    поки канал не готовий (не в черзі) його лічильник працює як на інкремент так і на .декремент
    зміна статусу каналу генерує подію IN, блокує інкремент його лічильника.
    коли лічильник досягнув нуля канал береться в роботу, генерується подія OUT
    в його лічильник завантажується поточне значення з лічильника черги.
    Можлива колізія вирішується пріоритетом каналів (hardcoded)

  • Борис из Ростова говорит:

    Спасибо за посказку! Две недели периодически бился с очень похожей задачей — запуск 9 движков от одного софт-стартера, в итоге повесил приоритеты на входа простыми блокировками, теперь попробую переделать…

Добавить комментарий

Ваш e-mail не будет опубликован.

Подтвердите, что Вы не бот — выберите человечка с поднятой рукой:
Confirm that you are not a bot - select a man with raised hand:

Подпишитесь на нашу рассылку


Copyright © 2016. Перцух Алексей

Индекс цитирования