Деревянные оконные рамы ушли в прошлое, вместо них повсеместно используются пластик и алюминиевые сплавы. Этот переход полностью изменил производство, и вместо деревообрабатывающих комбинатов теперь окна производят предприятия, оснащённые современными станками, которые кроят и режут профиль и стекло, сваривают и склеивают, в итоге собирают готовые окна нужных заказчику размеров. Соответственно возникла и новая отрасль станкостроения - производство оборудования для изготовления пластиковых и алюминиевых окон мирового уровня, которое производят всего несколько фирм, в основном они расположены в Германии и в Италии. Как правило, это станки с PLC (programmable logic controller - программируемый логический контроллер) и автоматизированные линии, включённые в промышленную компьютерную сеть, поскольку проектирование окон осуществляется с помощью специального программного обеспечения. Причём во многих случаях весь этот процесс напрямую увязан с бухгалтерским учётом и планированием на предприятии.
Одним из мировых лидеров в производстве оконного оборудования является компания Urban GmbH & Co. с так называемой "чёрной линией" PLC от фирмы B&R Industrial Automation Gmbh, которая пользовалась заслуженной популярностью из-за своей высокой надёжности. Станков, укомплектованных этим PLC, в мире довольно много, в том числе и в нашей стране, где эти станки до сих пор успешно работают несмотря на то, что изготовитель давно перешёл на оборудование нового поколения. Это не означает, что изготовитель забыл о своих клиентах, но, к сожалению, на его помощь в решении некоторых проблем рассчитывать уже не приходится. Одна из них и способ её самостоятельного решения и освещены в статье.
Одно из омских предприятий имеет четыре сварочных станка производства указанной выше фирмы. Три из них оснащены PLC B&R Multicontrol, позволяющими работать с ними по сети, а один не имеет такой возможности, причиной чего является использование в нём PLC иной модели - Minicontrol. В результате четвёртый станок оказался фактически выключенным из производства, так как в настоящее время вводить большое число цифр в память PLC с помощью клавиатуры никто не будет. Владелец станка попытался выйти из положения приобретением нового PLC Multicontrol, но возникла проблема его программного обеспечения, т. е. того, что в обиходе принято именовать прошивкой. Казалось бы, чего проще, - скачать прошивку с любого из трёх работающих станков и перенести её в четвёртый, но препятствием стало то, что модули памяти этих PLC представляют собой не просто набор микросхем памяти, а платы с собственной "обвязкой". Конечно, кардинальным выходом из положения являлось бы выпаивание микросхем памяти из рабочей платы, считывание из них содержимого и последующая запись его в микросхемы памяти модуля четвёртого станка. Но, во-первых, такая операция, несмотря на кажущуюся простоту, всегда имеет риск вывода рабочего станка из строя, а во-вторых, эта операция потребует длительной остановки работающего станка, что при серийном производстве недопустимо.
Изготовитель PLC в своё время предусмотрел такую ситуацию, поэтому он выпускал специальное программирующее устройство, которое позволяло переписывать содержимое одного модуля памяти в другой, но к моменту возникновения проблемы выпуск этих устройств был давно прекращён. Обращение к изготовителю станка за помощью не принесло результатов, очевидно, что знаменитая фирма потеряла всякий интерес к российским потребителям её продукции.
Рис. 1. Схема модуля памяти EP128
В результате пришлось воспользоваться формулой "спасение утопающих - дело рук самих утопающих". На рис. 1 приведена схема модуля памяти EP128, восстановленная "вручную". Нумерация элементов соответствует маркировке на плате, питание большинства микросхем не показано. Тип использованной памяти - EEPROM с УФ-стиранием, на сегодняшний день ещё не раритет, но уже редкость, как и сами устройства УФ-стирания. Обращает на себя внимание нетрадиционность схемного решения модуля. Если чтение информации выполнено типовым способом - подачей соответствующего напряжения на выводы CE микросхем EEPROM U1 и U2, то алгоритм записи реализован гораздо сложнее - через мультиплексор U4 и набор триггеров U9. Скорее всего, такой путь был выбран из-за недостаточной разрядности шины управления, разряды которой заняты преимущественно управлением периферией в PLC, в результате чего для управления модулем памяти остаются только четыре разряда. Алгоритмы управления модулем памяти в режимах чтения/записи хорошо отслеживаются в исходной программе, снабжённой подробными комментариями.
Питание модуля производится от источника питания PLC напряжением 5 В, от него запитаны все микросхемы, за исключением EEROM, на которые во время программирования подаётся повышенное напряжение согласно даташита. Обращает на себя внимание подача 12,75 В на входы КМОП-микросхем U4 и U3, питающихся от 5 В. Такое решение не является опасным, так как напряжение 12,75 В поступает через резистор сопротивлением 10 кОм, а на входе КМОП-микросхем установлены защитные диоды, которые и спасают входы микросхем от выхода из строя. Переключатель ЭА1 предназначен для предотвращения ошибочного включения режима записи в программаторе и/или в PLC.
Рис. 2. Схема программатора
Схема программатора показана на рис. 2. Выбор микроконтроллера (МК) был сделан исходя из желания максимально упростить схему. Конечно, можно было бы использовать малогабаритный МК и "обложить" его регистрами, но автор предпочёл пойти по пути минимизации комплектации - выбрать доступный МК, который в состоянии предоставить полноценные 16-разрядную шину адреса, 8-разрядную шину данных и 8-разрядную шину управления. Как оказалось, этим требованиям лучше всего соответствует МК ATmega32 в корпусе DIP40, причём программирование его на плате изначально не предусматривалось ввиду наличия универсального программатора и удобства внешнего программирования МК в корпусе DIP. Следует отметить, что сначала планировалось применение МК ATmega16, но так как он систематически извещал о недостатке памяти ещё в процессе написания фрагментов программы, решено было заменить его на МК ATmega32, тем более, что по цене они отличаются несущественно. Тем не менее, вполне возможно, что использование ATmega16 даст положительный результат, не говоря уж о том, чтобы транслировать исходную программу с Arduino в Atmel Studio.
Как видно из схемы, выбор МК полностью оправдал себя - программатор не имеет ни буферов, ни усилителей для работы с модулем памяти. Питание программатора осуществляется от внешнего источника питания 24 В. Такое решение обусловлено тем, что "чёрная серия" PLC питается тоже от 24 В, а это означает, что считать содержимое модуля памяти и записать его можно непосредственно рядом со станком. Для предотвращения ошибки в полярности подключения предусмотрен диод VD1. В качестве стабилизированного преобразователя напряжения использован популярный DC-DC преобразователь напряжения А1 (LM2596), выходное напряжение которого выставляется установленным на его плате многооборотным подстроечным резистором. Это важно, так как напряжение программирования EEPROM у разных изготовителей разное, и оно должно быть обязательно выставлено по дата-шиту перед программированием, в данном случае для EEPROM типа M27C512 оно составляет 12,75 В. Выходное напряжение преобразователя A1 поступает на линейный стабилизатор напряжения DA1 (5 В), выходное напряжение которого используется для питания МК и модуля microSD. Управление подачей программирующего напряжения 12,75 В на EEPROM осуществляется с помощью ключей на транзисторах VT1 и VT2, управляемых сигналом PGM от МК.
Режим работы программатора (чтение или запись) задают установкой перемычки S1, состояние которой опрашивается в момент старта программы при включении питания. Иными словами, управление программатором упрощено до максимума, а именно - надо установить режим работы, включить питание и ждать окончания работы или сообщения об ошибке. Состояние шин управления nCE1, nCE2, nMR и PGM индицируются светодиодами HL1-HL4.
Считанное в режиме чтения содержимое модуля памяти записывается на miсroSD A2 в виде двух файлов с наименованиями EPROM1.BIN и EPROM2.BIN объёмом по 64 кбайт каждый. MicroSD подключён к МК не напрямую, а через соответствующий модуль, содержащий конвертер напряжения питания с 5 В до 3,3 В. В программаторе присутствует кнопка сброса SB1, которая оказалась лишней ввиду того, что сброс МК не обеспечивает сброса контроллера карты памяти, а делать отдельный узел сброса этого контроллера не имеет смысла, поскольку для работы вполне достаточно автоматического сброса МК и карты памяти при подаче на них напряжения питания 5 В.
В программаторе предусмотрены обработка и индикация ошибок с помощью трёх светодиодов HL5-HL7, подключённых к адресным шинам. Это стало возможным благодаря тому, что в случае обнаружения ошибки операция чтения или записи останавливается и программа уходит в блок обработки и индикации ошибки. Предусмотрены обнаружение и индикация ошибок, приведённых в таблице.
Таблица. Обнаружение и индикация ошибок
Свечение светодиодов | Состояние | ||
HL5 | HL6 | HL7 | |
1 | 0 | 0 | Нет карты памяти |
0 | 1 | 0 | Не удалось открыть карту памяти в режиме чтения |
0 | 0 | 1 | Не удалось открыть карту памяти в режиме записи |
0 | 1 | 1 | Прочитанное не соответствует записанному |
Мигает | 0 | Мигает | Чтение удачно |
Мигает | Мигает | Мигает | Запись удачна |
Кроме индикации, светодиодами предусмотрен вывод более подробной информации об ошибке по последовательному каналу Serial.Print Arduino IDE, а именно, в случае обнаружения ошибки записи в терминал Arduino IDE передаётся адрес, на котором возникла ошибка, что по этому адресу записывалось и что по этому адресу потом было прочитано. В режиме программирования модуля памяти задано максималь ное число попыток записи 25. Это означает, что в случае не соответствия записываемого байта записанному, будет сделано ещё 24 попытки записи, и только в случае неудачи 25-й попытки программа записи будет остановлена. Число попыток записи всегда подсчитывается в режиме записи и выводится на ПК, в том числе и в случае удачной записи. Это - важный параметр, так как само наличие повторных попыток даёт основание проверить модуль памяти, контакты его разъёма, качество пайки микросхем, целостность дорожек, а возможно, и потребуется замена микросхем EEPROM.
Рис. 3. Чертёж печатной платы программатора
Рис. 4. Схема размещения элементов на плате программатора
Программатор собран на односторонней печатной плате из фольгированного стеклотекстолита толщиной 1,5...2 мм. Её чертёж показан на рис. 3, а схема размещения элементов на ней - на рис. 4. В нём применены резисторы и конденсаторы для поверхностного монтажа типоразмера 1206, светодиоды - выводные любого свечения. Рассмотренное ранее решение изготовителя по управлению записью коррелирует с решением вывода индикации об ошибках в ПК. Проблема в том, что использование аппаратного UART МК ATmega32 для вывода на ПК невозможно из-за того, что в процессе работы на этом выводе изобилуют импульсы адресной шины, из-за чего экран терминала гарантированно забивается "кракозябрами", причём программный Serial.Print в этой ситуации никак не поможет. Решение было найдено с помощью применения виртуального UART, который позволяет назначить Tx и Rx любым выводам. В данном случае Tx был назначен старшему биту адресной шины, что обеспечило наличие всего нескольких "кракозябр" на экране в случае ошибки, поэтому нисколько не мешает выводу нужной информации, а Rx для вывода информации в терминал в данном случае не нужен.
Рис. 5. Плата программатора в сборе
Использование полноразмерного МК имеет ещё одно преимущество. Топологию платы можно разводить раньше или одновременно с разработкой схемы, что позволяет до минимума сократить число перемычек на односторонней плате, именно этот подход в данном случае и был реализован. Фото программатора показано на рис. 5. Как видно на нём, экспериментальная плата программатора немного отличается от приведённой на рис. 3 и рис. 4, а сама конструкция не имеет корпуса, что обусловлено крайне редким её применением. Мало того, преобразователь LM2596, модуль microSD и МК ATmega32 можно вообще не хранить в программаторе, а использовать их и для других целей.
Программы и файлы для программирования, чертежи печатной платы в авторском и редакционном вариантах находятся здесь.
Автор: Ю. Булычев, г. Омск