Имеется транспортёр, на котором установлен датчик дефектов и исполнительное устройство - сбрасыватель. По транспортёру движутся объекты, задача - производить сброс в случае обнаружения дефекта. Длина объекта от 1,5 до 7 метров, во избежание различных интересных эффектов сброс необходимо производить в момент прохождения центра объекта мимо сбрасывателя. Пройденное объектом расстояние измеряется при помощи датчика перемещения (инкрементального энкодера), наличие объекта определяется датчиком наличия (фотодатчиками). Обработав данные с этих датчиков, можно измерить длину объекта и вычислить необходимое перемещение до точки сброса.
Это история об использовании простого программируемого реле в реальной задаче промышленной автоматизации. Но такое ли оно простое? Добро пожаловать в программирование без единой строчки кода!
Для решения этой задачи используем имеющееся в наличии программируемое реле Siemens LOGO 6 серии. Подобные реле есть у многих производителей, они как правило имеют небольшие размеры и размещаются на стандартной DIN-рейке. Я попытаюсь на примере LOGO рассказать, что они из себя представляют и чем отличаются от ПЛК.
Базовый модуль имеет несколько входов, выходов, разъём для программирования, дисплей и кнопки управления (есть более дешёвые модели без кнопок и дисплея). Более новые серии (начиная с 7) имеют слот для SD карты и Ethernet. Питание бывает как низковольтное, так и 230 Вольт. К базовому модулю могут подключаться модули расширения - входные, выходные, коммуникационные. Максимальная конфигурация - 24 входа и 16 выходов, программа может содержать до 200 элементов (до 400 начиная с 7 серии).
Отличие от ПЛК: входы и выходы подключаются на неразъёмный клеммник, нет индикации их состояния, программа не может меняться во время исполнения и перезаписывается только целиком. Для программирования могут использоваться только два языка из стандарта МЭК 61131-3: LAD (релейно-контактная логика) и FBD (функциональные блоки).
Ну и, разумеется, более ограниченные ресурсы - меньше входов и выходов, нет возможности структурировать программу (хотя с 7 версии появилась возможность выделять часть программы в пользовательскую функцию), нет сложной математики. С другой стороны, более низкая цена при наличии хорошей функциональности, надёжности, удобной среды программирования и отладки делают их привлекательными для решения несложных задач. Насколько несложных? В примерах использования обычно приводят примитивные кейсы вроде управления освещением, климатом или автоматическими дверями. Но иногда приходится задействовать все ресурсы этого миниатюрного контроллера.
Как оказалось, датчик дефектов - довольно сложное устройство и имеет свой ленточный транспортёр, в связи с этим разместить фотодатчики наличия объекта удалось только на расстоянии 3 метров от него. Как следствие - во время его срабатывания датчики наличия могут видеть совсем другой объект. Расстояние от датчиков наличия до сбрасывателя составило 9 метров, на таком расстоянии могут разместиться до 6 объектов одновременно - их все придётся отслеживать. Сбрасыватель тоже непрост, его исходное положение необходимо контролировать для подтверждения удачного сброса и чтобы исключить ситуацию когда он завис поперёк транспортёра. Сбрасыватель установлен на выходном транспортёре, который управляется из другого места - от нас нужен сигнал разрешения его работы. Инкрементальный энкодер также установлен на выходном транспортёре. Ну и для удобства отладки и диагностики я решил добавить возможность настройки расстояний через дисплей и индикацию типа нештатной ситуации с помощью количества миганий лампы "Работа". Уже в процессе разработки пришла идея добавить на дисплей текущее значение скорости транспортера, измеренной длины объекта и счетчики нештатных ситуаций. Также добавил мигание лампы в момент прохождения точки сброса каждым объектом - это в дальнейшем сильно упростило отладку.
Программа в ПЛК выполняется циклически - читается состояние входов, производится их обработка согласно программе, выставляется состояние выходов. Исключение составляют только высокоскоростные входы и таймеры - они обрабатываются по прерываниям. Если какая-то переменная изменилась, её новое значение не может использоваться во влияющих на неё расчетах в этом же цикле - можно только запомнить и использовать в следующем цикле.
В качестве порогов могут выступать значения других счётчиков или результаты вычислений.
Алгоритм работы системы: при поступлении сигнала от датчика дефектов он проходит линию задержки на одном из счётчиков расстояний ДД и привязывается к имеющемуся объекту, при этом горит лампа "Обнаружен дефект". Затем начинается отслеживаемое одним из счётчиков сброса движение объекта к точке сброса, лампа при этом мигает. Измерение длины объекта производится счётчиком длины, измеренное значение фиксируется в блоке вычислений соответствующего канала сброса и используется для вычисления точки сброса. При её достижении транспортёры останавливаются и производится сброс объекта. После возврата сбрасывателя в исходное положение транспортёры запускаются. Входной транспортёр имеет задержку запуска 4 секунды для компенсации времени разгона остальных транспортёров, которые управляются частотными преобразователями. Возможные нештатные ситуации - срабатывание датчика без объекта, отсутствие исходного положения сбрасывателя, отсутствие реакции сбрасывателя на сигал сброса, превышение габаритов объекта (датчик на входе), превышение длины объекта в результате нахлёста или неисправности датчика наличия. Также контролируется готовность датчика дефектов и частотных преобразователей привода движения.
Больше всего при разработке программы напрягали логические элементы без возможности расширения количества входов, прямо как старые добрые ЛА3. В старших контроллерах входы элемента можно наращивать по мере необходимости. Ещё если к выходу элемента подключен десяток входов и вдруг понадобилось добавить в разрыв ещё элемент - перерисовывать придётся все 10 линий. Особенно это доставляет, когда они идут на другие страницы - не помешало бы сделать повторители. Все выходы элементов нужно куда-то подключать, даже если они не нужны - придётся использовать открытый коннектор, без этого можно запустить симуляцию, но нельзя загрузить программу в контроллер. Этих коннекторов ограниченное количество, если не хватает - нужны логические элементы для объединения бесполезных сигналов. Ну и пользовательские функции для повторяющихся блоков - у меня их не было, но даже если бы я взял более новую модель LOGO - это бы не помогло, не влез в ограничения. Ну ладно, я знал на что иду - это же просто программируемое реле, и подобное его использование скорее исключение.
Программа в графическом виде разместилась на 8 листах А4, тут я привожу её в виде двух картинок (осторожно, они большие).
Картинка 1
Картинка 2
Это реальный проект, работающий в железе уже пятый год с небольшими доработками - добавлена светозвуковая индикация запуска входного транспортёра, были эксперименты со сбросом без остановки (добавлено как отключаемая опция).
iiwabor
Siemens LOGO — удобная штука, качественная, функциональная и недорогая. Мы десятки систем на этом программируемом реле сделали. Жалко, российского аналога ему, хорошего нет
tmin10
А у овена нет чего-то подобного?
not4fun
Есть ПР200
PR200SD
Почему это нет, есть и по функционалу, иногда эти "трудяги" тягаются с ПЛК, ну по крайней мере клиенты так хотят выжать по максимуму из них.
Я говорю о ПР200, ПР100, ПР102, и скоро ПР103 с Ethernet.
Про применения есть много видео тут: https://www.youtube.com/playlist?list=PLTJJg6aLoOUqQVCuShPc3siAd-73EM96U
Для домашней автоматики есть примеры для управления освещением тут: https://habr.com/ru/post/507818/
mefis_2m
Может и хорошо, что нет. За 20 лет всего две отзывные компании, работает как часы :-), рассчитан на необразованных электриков. Правда сейчас туда столько интернету напихали, без серьёзной теоретической подготовки не разберёшься. Ну и с поддержкой дешевых ардуиновских датчиков всё грустно.