su[ii]=getchar(); if (su[ii]=='\n') { sscanf(su,"G%d\n",&op); |
Опишем более подробно данный алгоритм. Мы не работаем напрямую с прерыванием по приему символа. Буфер формируется самостоятельно по прерываниям и не стоит загружать функцию формирования буфера лишними операциями. Мы, когда нам необходимо будет, спокойно считываем символы из буфера (su[ii]=getchar();) в строку su, используя индексный массив, и одновременно проверяем приходящий символ на наличие символа конца строки. При наличии такого, сканируем строку на всевозможно-необходимые для нас данные, которые могут быть в полученной строке. При помощи процедуры sscanf(su,"G%d\n",&op);,которая в данном случае сканирует строку su на наличие символа ‘G’ и при наличии такого помещает в переменную op число, находящееся в строке после символа ‘G’.
Таким образом, удалось анализировать входящие данные на МК с ПК и выполнять различные действия исходя из полученных данных. В код программы для микроконтроллера было добавлено несколько процедур, обеспечивающих работу таких операций, как сверление, инициализация станка. Все операции управляются с ПК. В дальнейшем были реализованы операции выжигания, и режим ручного управления (Робот).
§2.4. Формирование файла сверления для отправки на микроконтроллер
Для ведения диалога ПК--МК был организован алгоритм «общения» станка ЧПУ с ПК через интерфейс RS232 [1], [6]. Для этого организован диалог между МК и ПК, используя некоторый набор управляющих и информационных команд. Также, было учтено, что на МК размер буфера составляет 256 байт. То есть, при отправке большей информации, происходят потери данных и, вследствие этого, возникает ошибка работы, как станка ЧПУ, так и всей системы в целом. Для этого было решено отправлять данные на МК пакетами, размер которых не будет превышать 256 байт.
Но также нам необходимо знать, что отправлять. Был составлен список команд, которые будут использоваться для обеспечения диалога ПК--МК. Например, отправленная на МК, команда G05 означает, что начинается операция сверления, G22 – операция выжигание.
Для сверлений отверстий необходимо знать координаты отверстия на плате и глубину опускания сверла. Для экономии времени и ресурсов, введем еще понятие начальной позиции сверла, то есть если рабочий ход сверла 100 мм, а толщина платы всего 3 мм, то нет необходимости полностью поднимать и опускать сверло над отверстием. Функция перемещения по координатам на МК организована таким образом, что при выполнении в первую очередь перемещается ось Z, а затем ось Xи Y. Поэтому алгоритм сверления отверстия на МК будет следующим:
1. Получили команду G05 на сверление в основном цикле программы;
2. Передаем управление процедуре сверления;
3. Ожидаем строку с данными о начальной позиции сверла (ZN{значение}) и заносим его в переменную zn;
4. Ожидаем строку с данными о максимальной позиции сверла (глубина опускания сверла - ZH{значение}) и заносим его в переменную zh;
5. Ожидаем строку с командой DRL1 (старт сверления) и передаем управление в цикл сверления;
6. Ожидаем строку с командой DRL0 (конец сверления) и передаем управление в основной цикл программы, предварительно инициализировав станок ЧПУ, если нет такой строки, то выполняем далее;
7. Ожидаем строку с координатами в формате “{значение_X},{значение_Y}” и заносим их в соответствующие переменные. Переводим сверло в указанную позицию, ось Zв позиции zn, затем включаем электродвигатель сверла, опускаем сверло до позиции zh, и снова пункт 6;
При тестировании данного алгоритма не удалось добиться таких же результатов как в симуляторе на контроллере. После многих попыток изменения кода программы удалось добиться правильной работы на «реальном» устройстве, но пришлось пожертвовать правильными результатами в симуляторе. Это обусловлено несоответствием анализа конца строки симулятора и рабочего приложения с контроллером. В конечном результате удалось добиться успеха и произвести сверление пробных отверстий. При тестировании операции сверления было обнаружено, что точность станка не соответствует требуемой. После проведения серии тестирований, было установлено, что за один шаг шагового двигателя шпиндель станка ЧПУ проходит расстояние в 1,6 мм. Это значит, что невозможно будет сверлить отверстия для промышленных микросхем, так как не позволит существующая точность. Было решено увеличить точность позиционирования шпинделя станка. Для этого нужно увеличить передаточное число от ШД к кареткам. Для этого, были заменены существующие шестерни на соответствующие большего диаметра. Заменив шестерни быстрым монтажом сверху существующих и при помощи клея, а также удаления ШД от шестерни, как показано на рис. 2.5.1, были проведены еще несколько операций сверления.
Рис. 2.5.1. – увеличение передаточного числа от ШД к кареткам.
После модернизации станка вновь не удалось добиться желаемой точности. Теперь за один шаг ШД шпиндель станка ЧПУ перемещается на расстояние 0.8 мм. Это не то чего хотелось, но было решено оставить все так, как есть.
В программе рисования плат добавили объекты микросхем и некоторых компонентов, затем это все было импортировано через приложение и отправлено на станок для сверления отверстий на гетенаксе для приближения к поставленной задаче. Существующая погрешность станка частично компенсировалась программно, используя алгоритмы округления и учета коэффициента. После сверления отверстий, микросхема без усилий вошла в положенные отверстия. Этот факт еще раз убедил в необходимости увеличения точности станка.
При длительном тестировании было обнаружено, что иногда возникают ошибки сверления. Это обуславливается различными факторами, такими как помехозащищенность, отказ программных средств и различные неблагоприятные факторы. Для избегания данной проблемы было решено организовать систему контроля сверлимых отверстий и возможность контроля ошибочных операций с последующим исправлением ошибок. Была написана процедура, организующая все необходимые функции контроля целостности операций, а также все необходимые доработки. Главные параметры для анализа целостности берутся из контроллера из данных, которые поступают на ПК после каждой завершенной операции перемещения каретки. В этих данных содержится информация о текущей позиции шпинделя станка ЧПУ. То есть в ответ мы должны получить ту же строку, которую отправили, и если строки различны, значит «ошибка», и добавляем данную строку в список ошибок для последующего исправления. Этим нам удалось добиться безошибочного сверления отверстий. Далее задумано развитие данного пункта. Но пока оставим это на будущее развитие.
Далее был создан модуль, который обеспечивает управление станком ЧПУ в режиме реального времени с набором различных команд. Команды управляют различными функциями станка ЧПУ. Среди них такие, как установка скорости, установка режима шага-полушага, включение-выключение двигателя сверла, перемещение каретки в трехмерном пространстве и другие. Все это было организовано использованием списка команд, взаимно понимаемых как контроллером, так и приложением, а также использованием уже имеющихся функций процедур на уровне, как микроконтроллера, так и на уровне ПК.
Описание используемых команд приведено ниже.
Команда | Описание |
G02 | Команда на вызов процедуры ручного управления |
DRL1 | Старт процедуры |
X10 | Позиция каретки по оси X |
Y15 | Позиция каретки по оси Y |
Z32 | Позиция каретки по оси Z |
SLEEP5 | Время задержки между импульсами фаз (глобальная скорость) |
RM1 | Выбор режима половинного шага – полного шагового |
DRL0 | Конец процедуры |
DR1 | Включение (1) выключение (0) двигателя сверла |
Данные команды распознаются контроллером и выполняются необходимые операции в соответствии с командами. На уровне приложения отправки данных команд, решение задачи ручного управление было достигнуто следующим образом. Созданы необходимые визуальные элементы управления позицией шпинделя станка, включением выключением электродвигателей, смены режимов и т.д. При изменении значений любого из элементов, по включению обработчика данного события отправляется существующая команда на МК. В ответ ожидается информация о текущем состоянии станка. Только после успешного получения ответа, вновь возможна отправка пакета данных на МК.
После тестирования данного режима на реальном устройстве, было обнаружено, позиционирование станка не всегда выполняется в соответствии с управлением в приложении. Так как обработчик событий изменения параметров отправляет данные только при изменении данных на форме приложения. А отправка пакета данных происходит только после получения подтверждения предыдущей операции. На выполнение операции, например перемещение каретки на определенное количество шагов, необходимо определенное время, и из-за этого пропускаются определенные пакеты данных. Для исправления данной ошибки было решено использовать либо очередь, что не совсем эффективно, либо организовать в C++ Builder таймер, в котором будет проводиться проверка соответствия данных на ПК и текущей позицией станка ЧПУ.
После выполнения ряда тестирований в режиме сверления и ручном режиме, существующий станок ЧПУ был оборудован, вернее, его шпиндель, головкой для выжигания на материале. Используя возможности созданного станка, можно выполнить выжигание, используя как точечный метод, так и метод «рисования».