Главная » Промышленная электроника
Призовой фонд
на октябрь 2017 г.
1. Термометр Relsib WT51
Рэлсиб
2. 1000 руб
PCBWay
3. Регулируемый паяльник 60 Вт
Паяльник
4. 100 руб.
От пользователей

Дешевый ПЛК на 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

Список радиоэлементов

Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнот
U1 МК PIC 8-бит
PIC12F629
1 Поиск в LCSCВ блокнот
U2, U3 Сдвиговый регистр
SN74HC595
2 Поиск в LCSCВ блокнот
U4, U5 Сдвиговый регистр
SN74HC165
2 Поиск в LCSCВ блокнот
U6 Вентиль
SN7400
1 Поиск в LCSCВ блокнот
U7 Оптопара
PC817
1 Поиск в LCSCВ блокнот
U8,U9 Составной транзистор
ULN2803
2 Поиск в LCSCВ блокнот
R1, R2 Резистор
10 кОм
2 Поиск в LCSCВ блокнот
R3, R4 Резистор
1 кОм
2 Поиск в LCSCВ блокнот
С1 Конденсатор10 мкФ1 Поиск в LCSCВ блокнот
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Теги:

Опубликована: 0 0
Я собрал 0 4
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 3.9 Проголосовало: 4 чел.

Комментарии (16) | Я собрал (0) | Подписаться

0
kalina_79 #
Довольно таки не плохо, и схема и печатка и программа, но вот, только с пиками еще не познакомился, юзаю AVR, и программаторы для AVRов собирались. Обидно конечно, но что уж поделаешь, придется пока переждать.
Ответить
0

[Автор]
sergej_shaggy #
Спасибо. Делал подобные схемы на ATMega8 с LCD и прога на BASCOM - отлично работает. При использовании команды SPIMOVE сразу можно и читать и записывать данные по SPI. Правда там тоже есть нюансы.
Ответить
0
Гагарин Александр Юрьевич #
А подскажите пожалуйста, подобный простейший ПЛК можно сделать с языком программирования модбас и каналами связи на RS-235?
Ответить
0
talibanich #
Modbus - это протокол вообще то. А про RS-235 впервые слышу.
Ответить
0

[Автор]
sergej_shaggy #
Все можно. Но тогда ПЛК станет не дешевым и проще будет взять промышленный ПЛК.
Ответить
0
An #
Для того, чтобы не пропускать пульсы надо уметь программировать и разбираться в работе микроконтроллера.
Хотя бы почитайте, что такое прерывание по входу порта.
А подскажите пожалуйста, подобный простейший ПЛК можно сделать с языком программирования модбас и каналами связи на RS-235?
Модбус (а его несколько разновидностей, не вдаваясь в настройки по паритету и т.д.) можно реализовать на RS-232 (в простонародье - СОМ-порт), но оно вам надо? Берите стандартные схемы для 485 и вперёд. Если микроконтроллер нормальный и в нём заложена периферия для последовательных коммуникаций, то у него есть специальные регистры и мультиплексоры для включения их на выводы ножек MCU(микроконтроллера). В этом смысле даже легче найти процессор, что поддерживает CAN.
Общий вывод такой: сперва тщательно выбирайте микроконтроллер, используйте прерывания для того, чтобы избавиться от лишнего железа на плате, используйте гальваническую развязку. Прелесть ПЛЦ - в простом интерфейсе - надо сделать софт для упрощения программирования и выполнения задач. И тогда в результате получите действительно хороший продукт.
Ответить
0

[Автор]
sergej_shaggy #
"Все смешалось - кони, люди ...."
Все Ваши комментарии верны и я с ними не спорю. Вот только возможности у всех разные. Кто-то на ARM программирует и 3-D принтера собирает, а кто-то до сих пор на 155 логике работает.
P.S. Интересно, как Вы в этой схеме собираетесь ловить пульсы по прерыванию. Ведь для этого, как минимум, надо сигнал подать на вывод микроконтроллера. Здесь предложен "дубовый" способ и он работает. А вот ловля импульсов часто дает ложные срабатывания и тут тоже много от разработчика зависит. В итоге бывает все равно одновибраторы ставят.
Ответить
0
An #
Я работал с MSP430 всё идеально работает. Входы порта - через Pull-Up резисторы.
Я знаю, что это мой недостаток "критиканство" и резкость. Но с другой стороны я таким образом спас многих людей от ошибок и сэкономил, не годы, но недели работы уже многим. Мой пост не направлен на критику, а именно на описание проблем и их более простые решения.
Если когда-нибудь у меня будет время и силы. То сделаю свой дешёвый PLC с гальванической изоляцией и аналоговыми выходами. Возможно добавлю протокол, на интерфейс время точно не будет.
Ответить
0

[Автор]
sergej_shaggy #
Вы счастливый человек. У нас этого семейства просто нет в продаже. Вариантов реализации этой схемы море. И не надо брать 16-битный контроллер, простая ATMega128 или PIC 16F877 с этой задачей справились бы на ура и вся схема была бы в одном корпусе (ну буфера бы остались). Для меня на тот момент более простое решение было именно такое.
Ответить
0
An #
Да, у вас туго с этим. Вроде farnell.com имеет сингапурское отделение, которое занимается доставкой по азии и с ними можнео условиться. Мы ещё digi-key используем.
В любом случае, я бы лично взял кучу дешёвых оптопар, выход с транзистором сделал бы через поднимающий потенциал резистор. Добавил бы, наверное, RC-цепочек для устранения шумов. Палл-апы ставил бы по-ближе к контроллеру.
Интеррапт по порту не знаю, как в ПИКах, но я лично делаю так: вход в ISR (unterrupt subroutine), в ней небольшая задержка через софтовую петлю(избавиться от осцилляций) и дальше проверка пина, действительно ли он в положении срабатывания остался. А дальше или switch() или if`ы с кучей под-программ. Взял бы я что-то вроде PIC16F873A-I/SO. У него много ножек, не надо думать о том, как входы опрашивать, ещё pwm для аналового выхода и ADC будет для работы с частотником, например.
Вообще, может стоит мне взять и засветить свою почту и себя самого, можно вообще договориться, бандеролью послать деталей вам.
Ответить
0

[Автор]
sergej_shaggy #
Спасибо за предложение переслать бандеролью.
Вы все правильно написали про прерывания, и в ПИКах в АВРках да, и думаю в других МК, они обрабатываются примерно одинаково. Судя по Вашим сообщениям Вы являетесь именно разработчиком систем на МК. У меня же другой профиль. Я ремонтник. И моим клиентам абсолютно пофигу на чем я все сделаю. Главное - быстро и надежно. Я встречал модификации станков которые изначально делались на пускателях, а потом туда производители ставили ПЛК и они сгорали ( с нашим то напряжением да с кривыми руками у операторов станков). Как Вы думаете, какой станок ремонтировался быстрее? Поэтому я и делаю максимум за неделю и на том, что у меня есть. Программировать МК приходится раз-два в месяц. Поэтому все проги пишу на диалектах бейсика, хотя признаю, что это не есть хорошо. В итоге примерно выходит так: вызов + осмотр пациента - один день, разработка схемы + написание проги - 2-3 дня, восстановление + отладка - 2-3 дня. И далее где-то в течение месяца контроль и доработка уже в работе. И на данный момент у меня хоть и есть желание изучать новые семейства, но нет возможности - надо самому кушать и семью кормить. Хотя жизнь идет и все меняется. Было время и я думал, что электроникой заниматься не буду, это когда в банке программистом СУБД работал. Хотя я по специальности инженер АСУТП.
Моя почта в профиле указана и давайте дальнейшие разговоры, если Вам интересно, переведем туда.
Отредактирован 21.03.2015 06:30
Ответить
0
An #
На мой взгляд для этой задачи подойдёт и самый простой и дешёвый MSP430 (от Texas Instruments) 2-й серии.
Ответить
0
sser #
На Атмега 16 или 32 меньше и дешевле ...(LDmicro программа для программирования в лестничной логике )
Прикрепленный файл: 20151208_121936.jpg
Ответить
0

[Автор]
sergej_shaggy #
Сделал из того, что было под рукой. Попалась бы Mega128, сделал бы на ней. Выше у же пытался ответить на аналогичные замечания.
Ответить
0
MSLM Electric #
Еще умудрились все это делать с PIC12F629. Первое с чем я поэкспериментировал был PIC12F675, абсолютно такая же микросхемка с 8-ю туфельками, но там вдобавок есть 2 компаратора. И на то время я жалел что нафиг такая миниатюрка? Лучше с чего ни будь 40-ножного начал бы учить... Но вот оно! Скромненькое величие этого карлика. Спасибо! Это было искусство
Только я ошибся. У 12F629 уже есть компаратор, это у его собрата вдобавок есть АЦП.
Ответить
0

[Автор]
sergej_shaggy #
Спасибо. Очень лестный комментарий.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется напряжение?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Модуль радиореле на 4 канала
Модуль радиореле на 4 канала
Pickit 2 - USB-программатор PIC-микроконтроллеров Металлоискатель MD3010II
вверх