Дешевый ПЛК на 16 входов и 16 выходов
Программируемые логические контроллеры (ПЛК) прочно вошли в современную промышленную электронику. Номенклатура выпускаемых в настоящее время ПЛК настолько обширна, что трудно представить задачу, для решения которой не нашлось бы подходящего ПЛК. Богатая периферия, мощные процессора, большой объем памяти, наличие модулей расширения — это только краткий перечень свойств современных ПЛК.
Однако, следует отметить, что в условиях производства очень часто не требуется огромных вычислительных мощностей. Большинство станков, использующихся в производстве, выполняют четко заданные операции и не являются универсальными. Очень часто у этих станков даже нет дисплея, а все параметры задаются с помощью кнопок или переключателей. Грубо говоря, установленные на этих станках ПЛК порой используются для замены стойки с пускателями/реле/концевиками. И довольно часто встречаются ситуации, когда на замену устаревшего оборудования, выполненного с использованием пускателей, поступает оборудование этого же производителя с аналогичной функциональностью, но уже с использованием ПЛК.
Как-бы то ни было, иногда возникает ситуация, что ПЛК выходят из строя и ремонт возможен только у производителя. Ведь простая замена ПЛК на точно такой же ничего не дает, поскольку отсутствует управляющая программа. Хорошо, если производитель в такой ситуации может оказать помощь. А если нет? Брать другой ПЛК и программировать его самостоятельно? Но если уж приходится самостоятельно программировать, то почему обязательно ПЛК? Не будет ли проще и дешевле запрограммировать систему на базе микроконтроллера? Ведь, как отмечалось выше, в ПЛК заложено много избыточных функций и вычислительных возможностей, за которые приходится платить.
Именно из соображений, изложенных выше, была разработана схема простого ПЛК для замены вышедшего из строя ПЛК KUAX667 на швейном автомате VS3005 — AMF Reece S 2000. Не будем останавливаться на описании данного швейного автомата, тем более, что рассматриваемая здесь схема повторно использовалась на другом станке в мебельном производстве. При разработке ПЛК ставилась задача создать схему максимально дешевую, из доступных деталей, с возможностью диагностики даже с учетом отсутствия дисплея. Также было принято решение отказаться от гальванической развязки входных цепей, поскольку датчиками служили кнопки, концевики и переключатели, осуществляющие простой механической контакт.
Схема устройства и принцип работы аналогичны построению большинства промышленных ПЛК. Есть центральный микроконтроллер и есть порты ввода-вывода.
За основу взят микроконтроллер фирмы Microchip PIC12F629. Этот микроконтроллер выбран исходя из доступности и дешевизны. Входа и выходы реализованы с помощью сдвиговых регистров. Логически они разбиты на две группы по 8 контактов. Передача данных происходит в последовательном виде. Протокол передачи данных идентичен протоколу SPI, однако он полностью реализован программно и на 16 бит. Цепи для входных данных и выходных данных сделаны раздельными. Это, на мой взгляд, облегчает понимание работы и упрощает контроль. Кроме того это позволило использовать ранее написанные модули для приема-передачи данных в сдвиговые регистры. Ну и все-равно эти выводы остались бы неиспользованными, так зачем пропадать добру 🙂 . Входными элементами являются концевики, кнопки, переключатели с коммутацией на общий провод. Поэтому входа реализованы без использования оптопар. Конечно, это снижает надежность схемы. Но, как показала практика, ПЛК работает стабильно. При использовании регистров 155ИР9 или 555ИР9 подтягивающие резисторы к +5 В можно не устанавливать (именно этот вариант представлен на фото ниже). При использовании регистров 74HC165 наличие подтягивающих резисторов обязательно. Особо следует отметить вход 1.0. Этот вход реализован с использованием оптопары и расширителем импульсов на микросхеме 155ЛА3. В одном из станков датчиком вырабатывался импульс +24 Вольта и длительностью около 1 мксек. Поскольку реальная частота опроса входов составляла около 1 кГц, то был риск, что импульс будет пропущен. Для исключения этого в схему был введен расширитель импульсов, увеличивающий время импульса примерно до 0,1 сек. Время импульса определяется элементами C1, R4. Перестановкой джамперов на плате (на схеме джамперы не указаны, их можно отследить по печатной плате) возможна коммутация входа 1.0 минуя оптопару, минуя расширитель импульсов или минуя оптопару и расширитель импульсов. Благодаря встроенным в регистры триггерам, фиксирующим входные уровни по сигналу строба, исключена возможная неопределенность уровней логический «0» или «1». Это, а также последовательный опрос входных цепей микроконтроллером, позволило не учитывать явление «дребезга», характерное для механических датчиков. Исполнительными механизмами являются обмотки пневмоклапанов и реле, которые подсоединены к сдвиговым регистрам 74HC595 через микросхемы-драйвера ULN2803. Питание осуществляется от источника постоянного напряжения +24 Вольта, имеющегося в станке для питания обмоток реле и пневмоклапанов, через импульсный стабилизатор напряжения на LM2576 (микросхема в корпусе TO-263 для поверхностного монтажа, расположена со стороны фольги, фольга же служит и радиатором), включенной по типовой схеме.
Вся схема собрана на плате 100*130 мм. Рядом с каждой микросхемой по питанию стоит конденсатор, емкостью по 0,1 mkF (на схеме не показаны). Как уже выше отмечалось, в устройстве использовались микросхемы 555ИР9, не требующие подтягивающих резисторов. Тем не менее, для использования 74HC165, на плате предусмотрена возможность установки подтягивающих резисторов, которые могут быть от 1 до 10 кОм. В качестве подтягивающих резисторов хорошо использовать сборки сопротивлений типа 9A472J (неиспользуемые выводы просто обкусываются), которые широко применялись в компьютерах на базе 286-486 процессоров.
Программа для микроконтроллера написана в среде PIC Simulator IDE, которая использует диалект языка BASIC. Использование BASIC позволяет легко разрабатывать программы не особо погружаясь в архитектуру микроконтроллеров. Кроме того, так или иначе, с реализациями языка BASIC приходится сталкиваться начиная со школьной скамьи и у большинства непрофессиональных разработчиков он не вызывает почтительного опасения. Рассмотрим программу и остановимся на тех местах, где непосредственно происходит настройка на тот или иной станок.
Программа прилагается в полной версии для швейного автомата. Сначала идет секция описания переменных и символов. При переделке программы под другое оборудование неизменными будут строки с 7 по 11, здесь объявляются переменные для полученных/передаваемых данных и служебная переменная и с 18 по 28, относящиеся к описанию контактов для протокола приема/передачи данных. Далее в программе с 50-й по 96-ю строки идет проверка на включение режима «Тест» и реализация тестового режима. Режим «Тест» включается установкой перемычки между выводом GP2 (5-й вывод) и общей шиной (кнопка «Test» по схеме) до подачи питания на схему. При подаче питания микроконтроллер устанавливает вывод GP2 как вход (строка 54), включаем подтягивающие резисторы (стоки 64,65), производит опрос состояния вывода GP2 (строка 76). Если режим тестирования установлен, то после снятия перемычки начинается бесконечный цикл (стоки 81-95), в котором состояние выходов напрямую зависит от состояния входов. Таким образом последовательно замыкая входа мы можем проверить срабатывание исполнительных элементов, подсоединенных к выходам, т.е. произвести тестирование оборудования от датчиков до исполнительных механизмов.
При подаче питания без установленной перемычки микроконтроллер перейдет к участку программы, где запрограммирован непосредственно рабочий режим станка (в данной программе это строки 98-261). Эта часть программы оставлена для примера и, поскольку она привязана непосредственно к оборудованию, то особо ее рассматривать не будем. Остановимся только на общих принципах работы и подпрограммах приема-посылки данных. В простейшем случае при работе оборудования производится опрос входов (подпрограмма data_input, используемая в ней подпрограмма sinchro_input). Состояние входов в программе сохраняется в переменных data_in1 и data_in2. В зависимости от алгоритма работы оборудования в программе анализируется состояние входов, принимается решение об изменении состояния выходов и это решение записывается в данные data_out1 и data_out2. После этого производится вывод данных (подпрограмма data_out, используемая в ней подпрограмма sinchro_out). И так цикл повторяется до прекращения подачи питания. В случае необходимости возможна организация программы с использованием прерываний микроконтроллера. К примеру, это может понадобится при осуществлении операций на оборудовании, ограниченных по времени.
При программировании микроконтроллера необходимо установить слово конфигурации в &h31С4. Расшифровку можно посмотреть на рисунке ниже.
P.S. Этот абзац специально для критиков. Как уже выше отмечалось, программа писалась не «с нуля», а с использованием уже готовых наработок. Поэтому в программе много комментариев от предыдущих программ, в том числе имеются и комментарии, касательно использования прерываний по таймеру. Я специально не стал их убирать, поскольку считаю, что они могут помочь другим людям при модификации программы. Если же данную программу переписать заново, то наверняка можно достичь более оптимального кода и более высокой частоты опроса входных элементов. Как говориться «нет такой программы, которую нельзя сократить хотя бы на одну команду». Но даже в таком виде программа занимает менее 700 байт и станок, под управлением данной программы, работает стабильно.
Ну и напоследок фотографии собранной и установленной в станок платы.
В архиве:
1. PLC 12F629 — исходный файл и HEX файл.
2. Проект в Proteus.
3. Печатная плата в Sprint-Layout
Источник
Ардуино-совместимый ПЛК CONTROLLINO, часть 1
Впервые про программируемый логический контроллер по имени CONTROLLINO мне довелось узнать году еще в 2014-м в случайной переписке с человеком, который подбирал себе ПЛК для домашней автоматизации. Я ему рекомендовал какие-то классические модели, а он в ответ сообщил, мол, видел на кикстартере некий интересный проект под названием CONTROLLINIO. Это промышленный ПЛК, который программируется так же, как Arduino, в его родной IDE.
Тот парень работал php-программером и С++ был для него не проблема. Деньги и идеи имел, а желания изучать LAD или Codesys нет. В итоге отписался, что сделал предзаказ на CONTROLLINO и больше на связь не выходил.
Не знаю, что и как у него вышло в конце концов, а вот мне через 3 года выпало поработать с этим девайсом.
Пока скрипел пером, понял, что материала будет много. Поэтому рассказ про CONTROLLINO разобью на две части: первая будет про железо, вторая про программирование.
На данный момент производится 4 модели CONTROLLINO: MINI, MAXI, MAXI-AUTOMATION и MEGA. Я работал с MAXI.
Краткие характеристики CONTROLLINO MAXI:
- Микропроцессор ATmega2560
- 12 универсальных дискретных/аналоговых входов
- 12 транзисторных выходов, могут работать в режиме ШИМ
- 10 релейных выходов,
250V/6A
CONTROLLINO и ARDUINO
Прежде всего нужно сказать о том, что CONTROLLINO это не Arduino в корпусе с клеммами вместо пинов, как некоторые могут подумать.
CONTROLLINO это программируемый логический контроллер, ПЛК. То есть, законченное изделие, применяемое в автоматизации, с соответствующей защитой входов и выходов. Конструкцию CONTROLLINO с Arduino как таковым (то есть с отладочной платой на базе чипа atmega) роднит только используемый микропроцессор.
Если разобрать CONTROLLINO (а мы разберем), то внутри не обнаружим спаянную с китайскими шилдами ардуину или, еще хуже, просто ардуину с проводами, закрученными на клеммы.
Совместимость же обеспечивается на уровне ПО- CONTROLLINO MAXI можно программировать из Arduino IDE как плату Arduino MEGA 2560. И там и там один и тот же процессор- ATmega2560.
Многие тут справедливо возразят, что стандарты ПЛК это конечно хорошо, но этот ПЛК стоит как ПЛК, а из ардуины и шилдов можно собрать под свои нужды систему намного дешевле. Не буду спорить, сам так делал и все работало. Выглядело примерно так, как фото прототипа героя статьи на страничке кикстартера.
С другой стороны, я знаю немало тех, кто загорался возможностями платформы Arduino, покупал их, мигал светодиодами и… на этом забрасывал. Освоив азы программирования они неожиданно понимали, что нужно на порядок больше времени что бы разобраться с электроникой, довести все до ума и собрать законченное изделие. Вдруг оказывается, что твое время реально стоит денег и тратить его без видимых перспектив не хочется.
Живущий в другом регионе одногруппник, открыл замечательный стартап. Вооружившись передовыми наработками из интернета, он перебрался за город и построил самогонный аппарат с большой производительностью. И все хорошо, продукт получался отменным(с его слов, я мало что в этом понимаю). Но технологический процесс длился 48 часов, в течении которых нужно по времени что-то включить, что-то выключить, отвинтить, закрутить и т.д. Спать доводилось урывками по два-три часа.
Естественно, возникла идея автоматизировать производство. Обратился ко мне за советом, я ему рассказал про ПЛК и все такое. А через время набирает меня и говорит, что купил замечательную штуку, Ардуино называется. Уже помигал светодиодами- в ардуине язык си, а он его не забыл еще с того времени, как мы учились на компьютерщиков. Осталось дело за малым: прикупить шилдов, что-то спаять самому и тогда выведет производство на новый уровень.
Но прошел год, два, еще сколько-то, а дальше светодиодов дело не пошло. Хотя, может быть мешает новое увлечение- пчеловодство.
На мой взгляд, CONTROLLINO будет интересен тем ардуинщикам, кто не может или не хочет самостоятельно мастерить ПЛК для домашней автоматизации, а вместо этого готов купить уже готовое изделие. Тем более, что у CONTROLLINO есть все для применения в ‘умном доме’: 34 точки ввода/вывода, несколько интерфейсов связи и возможность управления всем этим из интернета.
В конце концов, CONTROLLINO просто красив.
Конструкция
Внутри корпуса находятся 3 платы. Вынимаем верхнюю.
Видим старую добрую микросхему W5100, которая обеспечивает работу Ethernet.
Еще тут есть микропроцессор atmega16. Не то, что бы я удивился. ПЛК с несколькими микропроцессорами я уже наблюдал, например, в моделях фирмы ОВЕН. Но что этот процессор делает тут? Оказалось все просто- он отвечает за загрузку по USB. Точно так же, как и в оригинальной итальянской плате Arduino MEGA 2560.
У вас, как и у меня, скорее всего китайский клон, а в нем на загрузке стоит обычный usb/rs232 преобразователь.
Средняя и нижняя платы CONTROLLINO MAXI спаяны друг с другом, увы.
На нижней ‘релейной’ плате видны реле HF41F на
250V/6A. Среднюю плату можем посмотреть только с одной стороны.
Видим микропроцессор ATmega2560 и обвязку входов и выходов.
Для того, что бы найти соответствие входов и выходов CONTROLLINO пинам платы Arduino MEGA 2560, разработчик нарисовал большую схему.
Желтым отмечены названия клемм ПЛК, а синим- названия пинов Arduino Mega 2560. Например, реле R0 на ПЛК соответствует пину 22 Arduino Mega 2560.
Что бы замкнуть реле R0, в скетче нужно написать такие инструкции:
Но это тема уже следующей статьи.
12 входов, каждый можно в программе считать как аналоговый или дискретный. Два из них, IN0 и IN1, можно использовать как входы прерываний.
Аналоговые входы вольтовые, их диапазон зависит от напряжения питания ПЛК. Если ПЛК работает от 12V, то аналоговые сигналы имеют диапазон 0. 13,2V. Если ПЛК работает от 24V, то диапазон аналоговых сигналов составляет 0. 26,4V. АЦП 10 бит.
12 дискретных транзисторных выходов, каждый можно использовать как ШИМ.
250V/6A. 6 Ампер как-то маловато. Предположу, что такие реле выбраны потому, что они узкие и их можно больше разместить на небольшой площади.
Энергонезависимые часы реального времени
В качестве часов реального времени (RTC) тут не используется привычная ардуинщикам микросхема DS1307, которая работает по шине I2C. Здесь часами трудится микросхема RV-2123-C2-TA-QC-020 с интерфейсом SPI.
Вообще, из трех ‘дополнительных’ микросхем (Ethernet, RS-485 и RTC) в CONTROLLINO две работают по шине SPI и ни одной по I2C. Это удобно- ‘квадратная’ шина полностью свободна для подключения пользовательских устройств, например моей самодельной панели оператора с шиной I2C.
Посмотрите на схему подключения RTC и обратите внимание на прочерки в синих полях.
Прочерки означают, что к соответствующим контактам этой и других ‘дополнительных’ микросхем подключены те ножки микропроцессора ATmega2560, которые не выведены на пины Arduino MEGA 2560. Из Arduino IDE управлять этими ножками стандартной командой digitalWrite() нельзя, а можно только командами прямого доступа к портам. Такое схематическое решение имеет при программировании свои достоинства и недостатки(чего больше- вопрос), о чем я напишу в следующей части.
Ни один современный ПЛК не обходится без порта RS-485 и CONTROLLINO тут не исключение. Для этого в нем установлена микросхема SN65HVD08.
RS-485 может работать в режиме и мастера и слейва.
Наконец-то знакомая микросхема! Чип W5100 уже стал синонимом понятия ‘подключение ардуино к интернету’. Именно W5100 обеспечивает интерфейс Ethernet в CONTROLLINO.
То, что к контакту SCS подключена не 4 нога Ардуино, как принято в стандартных схемах подключения, а очередной ‘прочерк’, не усложняет программирование- все примеры работают без проблем.
Экспериментируя с эзернет, я и разворачивал на CONTROLLINO веб-сервер, и делал управление этим ПЛК через смартфон с помощью андроид-приложения Blynk.
Разъемы X1 и X2
Некоторые сигналы микроконтроллера выведены не только на клеммы в виде входов и выходов с соответствующей обвязкой, но и напрямую на два 26-пиновых разъема X1 и X2 через защитные резисторы.
Какие-то сигналы микропроцессора выведены и на клеммы и на разъемы, какие-то имеются только на клеммах, а какие-то только на разъемах. Например, интерфейсы SPI и I2C выведены только на разъем, сигналы релейных выходов R0. R9 есть только на клеммах, а аналоговые входы A0. IN1 есть и на разъемах и на клеммах.
Конечно, один и тот же сигнал на клемме и разъеме подключается и используется по-разному. Например, универсальные входы A0. IN1 можно запрограммировать в программе как выходы и использовать их таковыми через разъем, но через клемму выходами они работать не смогут- обвязка помешает.
Разъемы X1 и X2 делают использование ПЛК более гибким, позволяя подключать модули, которые привыкли применять ардуинщики в своих поделках. Скажем, датчики DTH22 или микросхемы, работающие по квадратной шине.
Вот я сделал панель оператора, которая работает по I2C и подключается к CONTROLLINO через разъем X1.
На этом про железо все. В следующей части я расскажу про особенности программирования ПЛК CONTROLLINO, как им управлять через интернет со смартфона из любой точки мира, как CONTROLLINO работает по ModbusRTU и о многом другом.
Источник