Логические реле принципиально отличаются от ПЛК только степенью сложности программы. Главное- почувствовать, с какой задачей справится и ЛР, а с какой только ПЛК. Не всегда это выходит.
Вот и я едва не просчитался. Где-то в марте ко мне подошел некий начальник отдела и спросил, какое оборудование нужно для реализации простенькой задачи. Задачу тут же объяснил на пальцах. Не особо вникнув в суть, я ответил, что для такого ерундового дела хватит и ЛР. Сошлись на 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), а в случайном порядке. С этим заказчик согласился, но если бы требование «очередности» было принципиальным, тогда было бы очень худо.
Получилась такая программа:
Программа в формате ZelioSoft 2 v.4.4
В конце концов я придумал и как реализовать «очередность», создал кубиками FBD хитроумные конструкции для реализации очереди FIFO(отсюда моя статья «Использование переменных типа BYTE и WORD в Zelio» ) но… никак не вписался в ограничение Zelio в 200 блоков на программу.
На данный момент я считаю, что для Zelio непосильно полностью реализовать поставленную задачу. Если кто-то это сделает, обещаю выслать бутылку хорошего коньяку. Это конкурс без срока давности.
Если найдется такой Титан, отпишусь об этом в блоге.
Сможешь сделать такую программу на Zelio? Дерзай.
UPD1: Конкурс закрыт, победитель- Алексей из Омска: http://plc-blog.com.ua/itogi-konkursa-1-zelio
Чергу можна спробувати реалізувати на реверсивних лічильниках (counter) — по одному на канал + один на чергу
Всі лічильники рахують події IN/OUT, IN на інкремент, OUT на декремент.
поки канал не готовий (не в черзі) його лічильник працює як на інкремент так і на .декремент
зміна статусу каналу генерує подію IN, блокує інкремент його лічильника.
коли лічильник досягнув нуля канал береться в роботу, генерується подія OUT
в його лічильник завантажується поточне значення з лічильника черги.
Можлива колізія вирішується пріоритетом каналів (hardcoded)
Моё предложение ещё в силе. Дерзайте)
Спасибо за посказку! Две недели периодически бился с очень похожей задачей — запуск 9 движков от одного софт-стартера, в итоге повесил приоритеты на входа простыми блокировками, теперь попробую переделать…
Посмотрите пример реализации программы, предложенный коллегой из Омска, может быть вам это подойдет больше: http://plc-blog.com.ua/itogi-konkursa-1-zelio