Выполняя очередной проект, столкнулся с интересной проблемой.
Проект автоматизации повысительной насосной. Наверху стоит SCADA iFix, контроллерный уровень — Omron CS1D.
На управлении насосами стоят частотники (сейчас уже не помню какие). В проекте достаточно сложные технологические алгоритмы управления тремя насосами, но не об этом речь. Оператор может управлять частотой вращения насоса вручную, либо задавая цифрой частоту его вращения, либо нажимая кнопочки «Больше», «Меньше». Если насос работает в автоматическом режиме, нажимая эти же кнопки (это виртуальные кнопки) он задает перепад давлений на насосной (почему-то технологи захотели, что бы регулировался не расход через насосную, а именно перепад давлений на ней).
Так вот, наладку я уже закончил, всё проверили, всё работает согласно техзадания. И вдруг операторы начинают жаловаться, что когда начинают задавать частоту кнопками, насос начинает разгоняться без остановки до максимума оборотов (50Гц) либо тормозить до минимума (10Гц).
Стал разбираться, в чём же дело.
В SCADA кнопки были реализованы таким образом, что, пока оператор жмет на кнопку, в контроллер должна приходить логическая «1». Как только он отпустил кнопку, соответственно логический «0». И оказалось, что иногда, при отпускании кнопки, iFix не отправляет «0» в контроллер. В контроллере, соответственно, постоянно висит сигнал на увеличение или уменьшение оборотов, и частотник усердно разгоняется или тормозит до упора.
Я первый раз столкнулся с такой проблемой. Что ж делать? Нужно искать решение. И решение напросилось такое.
Пришлось на каждую пару кнопок «больше»/"меньше" одного насоса поставить по таймеру, который через определенный интервал (мы с операторами решили, что это будет 3 секунды) сбрасывает сигналы от кнопок.
В релейной логике Omron это выглядит вот так:
Теперь при зависании сигнала «1» от любой из кнопок дольше, чем на 3 секунды, происходит принудительный сброс обоих сигналов в «0».
Хотел этим и ограничиться, но операторы предложили, что бы при реально долгом нажатии на кнопку, команда тоже прерывалась. И, поэтому, пришлось ввести еще один элемент, обведенный кружком.
Теперь, если оператор долго держит кнопку нажатой, через 3 секунды, прохождение команд на увеличение или уменьшение задания блокируется до тех пор, пока он кнопку не отпустит. Я долго думал, зачем это им нужно. Потом пришёл к выводу, что это на случай засыпания оператора во время нажатия кнопки.
Так что, защита получилась двойная — от заЛИпания и от заСЫпания. 🙂
Удачных проектов!
P.S.: Не стесняйтесь комментировать статью и, если она понравилась, делиться ей с коллегами в социальных сетях (кнопочки ниже).
А может у кого есть свой интересный вариант решения защиты от залипаний?
Вопрос освещён компетентно