Установка для монтажа изделий электронной техники
Привет, Хабр!
Предлагаю вашему вниманию первую из серии статей о производстве установок для присоединения кристаллов и поверхностного монтажа для многокристальной и многоуровневой сборки изделий электронной техники.
Установка для монтажа изделий электронной техники
Работа подобной установки:
Видео ролики
Disclaimer: Все написанное в этой и последующих статьях не является рекламой, основано исключительно на личном опыте работы и имеет целью ознакомление заинтересованных читателей с основами построения системы управления упомянутых установок.
Меня зовут Дмитрий, мне 41 год, последние 7 лет работаю в Германии на одной из фирм, производящих оборудование, указанное в 1 м абзаце. Являюсь тимлидом группы, занимающейся разработкой встроенного программного обеспечения для контроллера управления фирмы Elmo Motion Control на языке С++. А также в рамках магистерской диссертации разрабатывал методы распознавания изображений (электронных компонентов) в системах технического зрения. Возможно, в одной из статей освещу и эту тему.
Вот сам контроллер:
Master-контроллер Platinum Maestro фирмы Elmo
https://www.elmomc.com/product/platinum-maestro/
Platinum Maestro является контроллером, обеспечивающим интерфейс доступа к внутренней сети управления машиной для управляющей программы из внешней TCP/IP сети.
Внутренняя сеть — шина EtherCAT, обеспечивает обмен данными управления и обратной связи между master-контроллером и slave-контроллерами приводов (драйверами), модулями аналоговых и цифровых портов ввода-вывода.
Отдельно о шине EtherCAT можно посмотреть здесь:
Видео, ссылка
а также на https://ru.wikipedia.org/wiki/EtherCAT
Под интерфейсом доступа понимается программная библиотека c API от Elmo, модули которой обеспечивают трансляцию переданных вызывающей программой входных данных в команды управления устройствами на шине. Библиотека написана на языке С/С++ и поставляется Elmo в виде динамических библиотек в двух вариантах — для Windows и Linux. Версия под Linux используется для создания программ как на базе внешнего по отношению к master-контроллеру x86 под управлением ОС Linux, так и для запуска на самом master-контроллере Platinum Maestro.
Для знакомых с TwinCAT или Codesys — Platinum Maestro является (самым) компактным промышленным компьютером для выполнения тех же самых функций — конфигурирования топологии шины EtherCAT и управления устройствами на ней в реальном времени. Плюсом является интеграция в корпус любой даже самой требовательной к габаритам установки и собственная алгоритмическая база для обеспечения интеллектуального смешивания движений, наложенных движений, сплайнового профилирования многоосевых движений с высокой точностью, — встроенная и поставляемая сразу без дополнительных условий (или докупаемых модулей) вместе с контроллером. Кроме С++ доступна библиотека для .NET, модули для интеграции в MATLAB Simulink, собственная среда разработки и удаленной отладки программ на С++ на базе Eclipse, примеры программирования и колоссально отзывчивая техническая поддержка. Это не реклама, а опыт взаимодействия.
Интерфейс программы для настройки топологии сети EtherCAT и устройств к ней подключенных будет темой одной из последующих статей. Называется программа Elmo Application Studio II, или EASII, и аббревиатура действительно соответствует ожиданиям — она проста и одновременно удивительно функциональна.
Пока что мне хотелось бы сконцентрироваться на библиотеке для управления (уже сконфигурированной) установкой.
Для начала, что установка из себя представляет с точки зрения топологии подключения устройств управления и контроля.
Пример топологии сети установки с 1-го фото
Розовым цветом выделена внутренняя шина EtherCAT, зеленым — внешняя TCP/IP.
В левой части между этими шинами — master-контроллер, связанный с ними обеими. В левом нижнем углу — компьютер с интерфейсом пользователя.
Теперь подробнее о библиотеке, обеспечивающей доступ к устройствам на шине EtherCAT.
Архив скачивается с официального сайта
После разархивирования вы получаете папку includes с заголовочными файлами С++, и две папки с бинарными файлами библиотеки — lib и libwin32.
Теперь можно отобразить простейший код подключения к master-контроллеру Maestro Platinum:
// Windows:
CMMCConnection m_cConn;
MMC_CONNECT_HNDL m_gConnHndl;
m_gConnHndl = m_cConn.ConnectRPCEx("192.168.35.10", "192.168.35.4", 0x7fffffff,
reinterpret_cast(CallbackFunc));
// Linux:
m_gConnHndl = m_cConn.ConnectIPCEx(0x7fffffff, reinterpret_cast(CallbackFunc));
Под Windows: первый IP-адрес является адресом master-контроллера на стороне TCP/IP, второй — адресом сетевой карты компьютера, подключенной к той же шине.
Под Linux: указание IP адресов не требуется.
Это чуть ли не единственное место во всей программе, где потребовалось указать под какой операционной системой происходит обращение к функциям библиотеки. Весь остальной код моей достаточно большой программы — переносимый без дополнительных трудозатрат.
Функция обратного вызова CallbackFunc — нужна для обратной связи и получения информации об асинхронных событиях, генерируемых библиотекой. Хотя есть и более удобный инструмент — возможность зарегистрировать функции обратного вызова для основных событий по отдельности. Делается это так:
m_cConn.RegisterEventCallback(MMCPP_HOME_ENDED, (void*)HomeEnded_Received);
m_cConn.RegisterEventCallback(MMCPP_MOTIONENDED, (void*)MotionEnded_Received);
m_cConn.RegisterEventCallback(MMCPP_FB_NOTIFICATION, (void*)FBNotifyEvent_Received);
m_cConn.RegisterEventCallback(MMCPP_PDORCV, (void*)PDO_Received);
m_cConn.RegisterEventCallback(MMCPP_HBEAT, (void*)HeartBeat_Received);
m_cConn.RegisterEventCallback(MMCPP_EMCY, (void*)EmergencyEvent_Received);
m_cConn.RegisterEventCallback(MMCPP_MODBUS_WRITE, (void*)ModbusWrite_Received);
m_cConn.RegisterEventCallback(MMCPP_ASYNC_REPLY, (void*)AsyncReplyEvent_Received);
m_cConn.RegisterEventCallback(MMCPP_GLOBAL_ASYNC_REPLY, (void*)GlobalAsyncReply_Received);
m_cConn.RegisterEventCallback(MMCPP_TOUCH_PROBE_ENDED, (void*)TouchProbeEndEvent_Received);
m_cConn.RegisterEventCallback(MMCPP_NODE_ERROR, (void*)NodeErrorEvent_Received);
m_cConn.RegisterEventCallback(MMCPP_STOP_ON_LIMIT, (void*)StopOnLimit_Received);
m_cConn.RegisterEventCallback(MMCPP_TABLE_UNDERFLOW, (void*)TableUnderflowEvent_Received);
m_cConn.RegisterEventCallback(MMCPP_NODE_CONNECTED, (void*)NodeConnectedEvent_Received);
m_cConn.RegisterEventCallback(MMCPP_NODE_INIT, (void*)NodeInitEvent_Received);
m_cConn.RegisterEventCallback(MMCPP_POLICY_ENDED, (void*)PolicyEndedEvent_Received);
Где, например, первая — вызывается, когда любой из моторов выполнит команду поиска нуля:
void HomeEnded_Received(unsigned short usAxisRef, short sErrCode,...)
{
ldbg << "home ended for axis " << usAxisRef << endl;
//.....
}
Single Axis Motion
Теперь возникает вопрос — что дальше? Вам нужно включить воображение, и представить, что на шине EtherCAT «висит» контроллер управления сервоприводом от Elmo, например КМ1 в левом верхнем углу нашей диаграммы. Выглядит он так — https://www.elmomc.com/servo-drives/ или любого другого производителя. Вы хотите выполнить одномерное движение — заставить этот мотор переместить управляемый им объект из положения А (сейчас) в положение Б (новая координата) с какой-то скоростью. В установке это будет равносильно перемещению, например, инструмента из левого положения в правое в рабочем пространстве.
MMC_MOVEABSOLUTEEX_IN in;
MMC_MOVEABSOLUTEEX_OUT out;
in.dAcceleration = m_ParamsMoveUU.dAcceleration;
in.dDeceleration = m_ParamsMoveUU.dDeceleration;
in.dJerk = m_ParamsMoveUU.dJerk;
in.dVelocity = m_ParamsMoveUU.dVelocity;
in.dbPosition = PositionToUU(target);
in.eBufferMode = m_ParamsMoveUU.eBufferMode;
in.eDirection = m_ParamsMoveUU.eDirection;
in.ucExecute = 1;
int rc = getGmasController()->wrp_MMC_MoveAbsoluteExCmd(*this, ref, &in, &out);
if (rc != 0)
{
if (out.usErrorID == 1009) // already there
{
MotorRunning(0);
EVENT->Trigger_MotionEnded(ref, true);
m_smHelper->SetSubState(2,st_DONE);
return st_DONE;
}
else
{
GMASERROR(out.usErrorID);
return st_ERROR;
}
}
Где MMC_MOVEABSOLUTEEX_IN — структура с параметрами команды, задающими новую координату, максимальную скорость, ускорение — в единицах, указанных при конфигурировании системы.
MultiAxis Vector Motion
Однако, вся мощь контроллера Platinum Maestro проявляется в обработке серии команд на перемещение объекта, положение которого зависит от группы моторов. Как правило, это инструмент, выполняющий какую-то работу, в нашем случае монтаж электронного компонента. Каждая из таких команд задает новую координату объекта в пространстве. В этом случае программист может в цикле передать в библиотеку несколько точек траектории, с указанием скорости и ускорения для каждого отрезка траектории. Размерность передаваемых координат точки соответствует количеству моторов, выполняющих команду.
Таким образом, код подготовки команды для движения группы осей будет отличаться от команды для одномерного движения только тем, что каждая координата in.dbPosition — это вектор состоящий из координат каждой из осей группы, а параметры in.dVelocity, in.dAcceleration и т.п. — скорость и ускорение перемещаемого объекта. Встроенный алгоритм контроллера рассчитает линейную скорость каждой из осей так чтобы соблюсти заданные условия и обеспечить плавное движение объекта, в том числе при огибании точек траектории.
// v_Trajectory - вектор
//
for (size_t idx=0; idx < v_Trajectory.size(); idx++)
{
cMMC_MOTIONPARAMS_GROUP par = v_Trajectory[idx];
MMC_MOVELINEARABSOLUTE_IN in;
MMC_MOVELINARABSOLUTE_OUT out;
in.fAcceleration = par.fAcceleration;
in.fDeceleration = par.fDeceleration;
in.fVelocity = par.fVelocity;
in.fJerk = par.fJerk;
// how to interpolate the corners?
in.eTransitionMode = MC_TM_CORNER_DIST_CV_POLYNOM5;
in.eBufferMode = MC_BLENDING_LOW_MODE;
in.ucSuperimposed = 0;
in.eCoordSystem = MC_MCS_COORD;
for (int i = 0; i < v_group.size(); ++i)
{
in.dbPosition[i] = par.dEndPoint[i];
in.fTransitionParameter[i] = par.fTransitionParameter[i];
}
int rc = getGmasController()->wrp_MMC_MoveLinearAbsoluteCmd(*this, getAxisRef(), &in, &out);
if (rc != 0)
{
// ERROR
}
}
В листинге выше происходит вызов функции MMC_MoveLinearAbsoluteCmd () в цикле по количеству точек траектории. Вложенный цикл задает вектор пространственных координат in.dbPosition. Несколько параметров задают способ огибания углов в точках перелома.
К слову, EASII позволяет моделировать пространственное движение, как на картинке ниже.
Панель Path Editor из программы EASII
У пытливого читателя возникнет вопрос, кто задает координаты для каждой последующей команды? Откуда они берутся в программе, запущенной на встроенном контроллере?
Лирическое отступление о программном комплексе управления
Без объяснения этого момента все последующее описание функций библиотеки Elmo будет казаться сухой инструкцией. Тогда как я бы хотел, чтобы читатели понимали Для Чего эти функции вообще нужны и образно представляли результат их вызова.
В общем случае, установка, работающая в автоматическом режиме сутки напролет, должна быть обеспечена пользовательским интерфейсом, задающим параметры циклически повторяющегося процесса монтажа. Для универсальной установки каждый шаг процесса определяется тем, что за продукт вы хотите получить, из каких исходных электронных компонентов, и какие условия сборки хотите обеспечить. Здесь не обойтись без сложного программного комплекса, обеспечивающего пользователю:
составление процесса из разветвленного дерева конфигурируемых шагов
для каждого шага процесса — выбор из доступных способов монтажа с выбором параметров — источник компонентов и плат (конвейер, ленты с SMD, кремниевая пластина с кристаллами и т. п.), температура пайки, наличие катализаторов, усилия прижима, график приложения всех этих воздействий и т. п.,
выбор из базы доступных электронных компонентов с указанием особенности монтажа и ограничений для каждого из них,
интерфейс обучения системы технического зрения — алгоритмов распознавания различных визуальных паттернов и меток отдельно для каждого шага, автоматический пересчет полученных точек на изображении в системе координат установки, и затем — в системе координат моторов,
передача адекватных команд моторам для их перемещения, параллельно отработка сигналов и управление дополнительными устройствами, участвующими в процессе (устройств поддерживающих воздействия — нагреватели, вакуумные вентили, вентили газа, регуляторы прижима и т.п.)
учет использованных ресурсов и компонентов — с хранением в глобальной базе данных предприятия, зачастую по промышленным стандартам.
Программный комплекс должен обеспечивать интерфейс для настройки всех компонентов системы и отслеживание параметров воздействий в процессе сборки, обработку ошибок.
Такие комплексы разрабатываются годами, являются гордостью производителей и в совокупности с определенными аппаратными решениями защищены патентами.
Возвращаясь к вопросу, одна из функций программного комплекса — хранение данных о системе координат установки. Если вы видите где-то в окне программы координату XYZ, это не обязательно те же самые координаты, которыми оперирует библиотека Elmo. (Она в свою очередь «видит» только те координаты, которые может считать с датчиков положения самих приводов — соответствующие входы для подключения датчиков есть у драйвера, а он их передает мастеру по шине EtherCAT). То есть, систему координат установки надо как-то соотнести с координатами, в которых работают контроллеры. Вообще, расчет координат довольно сложная тема сама по себе, ведь кроме абсолютной общей системы координат рабочего пространства установки есть еще и несколько вложенных. Например, кристаллы, расфасованные в трее или до фасовки — на сепарированной кремниевой пластине, будут иметь координаты, привязанные к трею/пластине, а они в свою очередь — будут иметь координаты в системе установки. При этом каждый кристалл будет иметь метки в системе координат кристалла. Поэтому перемещение нашего объекта (инструмента с вакуумным каналом для захвата кристалла) в центр кристалла из произвольной точки рабочего пространстве установки будет выполняться в несколько этапов:
уточнение координат меток кристалла с помощью камеры, передающей снятое изображение алгоритму распознавания,
пересчет координат камеры в момент снятия изображения в координаты относительно трея или кремниевой пластины, которые также имели свои координаты в тот же момент съемки,
вычисление положения и угла поворота кристалла по изображению,
пересчет результата в системе координат установки,
трансформация в систему координат каждой из осей,
подготовка безопасной траектории перемещения инструмента (как минимум, подход к кристаллу должен выполняться сверху, а не сбоку или по касательной), обход потенциальных столкновений,
касание и захват кристалла включением вакуума,
поднятие кристалла и перенос его к камере, для уточнения координат по меткам снизу,
перенос кристалла к месту монтажа по тому же принципу.
К слову, оценка вертикальной координаты кристалла или места монтажа выполняется как правило по фокусному расстоянию камеры, координаты которой известны.
Таким образом, программный комплекс с откалиброванными камерами и встроенной системой пересчета координат — должен быть в состоянии рассчитать траекторию движения инструмента на любом шаге процесса.
В моем случае передача координат на каждом шаге процесса происходит по внутреннему протоколу обмена командами между программным комплексом установки и master-контроллером по TCP/IP. По сути, программа запущенная на master, является посредником, транслирующим команды, полученные от ПК, во внутреннюю сеть EtherCAT посредством программного интерфейса Elmo, и осуществляющем контроль их выполнения самими устройствами. Например, команда от ПК «перемести стол с кремниевой пластиной в положение X`Y`» раскладывается в master-контроллере на составляющие — какие моторы участвуют, в каком они положении сейчас, какие функции API для этого нужно вызвать, с какими параметрами, дождаться выполнения и рапортовать обратно о выполнении.
Кроме этого, программа на master-контроллере обеспечивает соблюдение параметров воздействий, контроль которых возможен только в системе реального времени, которой Windows не является. Например, обеспечение давления на кристалл во время пайки по определенному графику возможно только на стороне master-контроллера. Когда приходит очередь этого шага процесса — параметры воздействия передаются программе контроллера по TCP/IP, и она запускает PID регулятор. Давление на кристалл обеспечивается передачей контроллеру оси Z команды на перемещение вниз (для усиления давления) или вверх. Роль пружины играет вся механическая система — люфты сборки, подложка, датчик силы. Ошибка на доли микрометра может сломать кристалл.
Что будет дальше
Чтобы подогреть интерес, выложу примерную схему взаимодействия модулей программы master-контроллера.
Обратите внимание на те же две шины, они на этой диаграмме внизу.
Примеры объектов, с которыми приходится иметь дело — ниже.
Трей с кристалламиКремниевая пластина
Предпосылки технического отставания России после разделения мира на зоны
Теперь кратко (кратко не получилось) о том, зачем я затеял создание серии статей на эту тему. Это попытка ответить самому себе на следующие вопросы.
Можно ли повысить долю собственных роботизированных систем среди ежегодно устанавливаемых в России, а также повысить в целом их количество? Навеяно этой статьей. К сожалению, поиск в тексте по комбинации «Росс» не дал результатов. Это более чем печально.
Можно ли задействовать высокий интеллектуальный потенциал российских программистов и перетянуть специалистов из области, направленной на оцифровку людей и банковских данных, в область оцифровки экономики, промышленности и создание новых рабочих мест в области производства автоматических роботизированных систем? Мне кажется, это в перспективе должно оказаться гораздо более прибыльным делом и стратегически оправдано. По-моему, мы достаточно потренировались на улицах, автострадах и в банках. Я думаю, нет смысла детально расписывать кадровый пылесос, устроенный последнее время крупными, в т.ч. отечественными, цифровыми гигантами, деятельность которых далеко не всегда направлена на благо для нашего государства.
Дальнейшее окукливание и цементирование оболочки цифрового контроля выродится в ситуацию, когда мы разучимся (так и не научившись) делать что-либо свое кроме бесконечных алгоритмов сбора и обработки биг-дата, с неизменной 100%-й зависимостью на аппаратном уровне от иностранных поставщиков. Мы разучимся окончательно поднимать попу из-за стола с компьютером и производить что-либо кроме цифровых продуктов, работающих на чужой аппаратной базе.
Мир меняется, границы закрываются. В нашем евроазиатском регионе утвердится в качестве промышленного (а следовательно, и социального, идеологического, религиозного, военного, и т. п.) лидера тот, кто имеет преимущество не в системах контроля за собственным населением, а в системах производства промышленного оборудования и автоматизированных беспилотных средств вооружения. И пока часть интеллекта китайских товарищей направлена на оцифровку себя, у нас остался последний шанс занять хоть какую-то нишу в производстве робототехники. Конкурентен и независим от внешнеполитической конъюнктуры в новом мире будет тот, кто в состоянии обеспечить всю цепочку производства товаров, а не только цифровую ее часть. Сегодня на нас давит США. Завтра нам будет выламывать руки и ставить условия любой региональный монополист, Германия, да или хотя бы Китай, если 90% электроники, а также / или даже львиная доля оборудования для ее производства будет импортироваться. Невозможно говорить об импортозамещении процессоров, если сами процессоры литографируются не у нас, а в Корее. Невозможно говорить и об импортозамещении компьютеров, если вы собираете их на импортных машинах сборки материнских плат, пусть даже устанавливаете на них «свои» процессоры.
Master-контроллер, про который я рассказываю в этой статье, тоже не российский, а израильский. Но с чего-то надо начинать, и сборка машин на нашей территории позволит от ввоза цельных систем с высокой добавленной стоимостью перейти ко ввозу комплектующих для них. А затем и дроблению производства, и постепенному импортозамещению самих комплектующих. Дойдет дело и до контроллеров.
Отдельно нужно сказать о наработанных алгоритмах распознавания изображений. Есть хорошие алгоритмы? Направьте их мощь в «мирное» русло распознавания электронных компонентов, маркеров позиционирования на процессорах и печатных платах, штрих-кодов продуктов и компонентов. Там поле непаханое, знаю по опыту работы. Каждая фирма разрабатывает свои алгоритмы, трясясь над их сохранностью, преемственностью и защищенностью от конкурентов. Некоторые из специальных библиотек, например Halcon, продаются с лицензией на рабочее место за хорошие деньги. Беда для нас в том, что все эти библиотеки — зарубежные. Из свободно распространяемых далеко не всегда можно составить конкурентный алгоритм, как по времени его работы, так и по качеству получаемых данных, да и по объему ресурсов на разработку конечного продукта. Обратите внимание, речь идет не об отбраковке товаров, распознавании лиц, рукописных бланков, номеров машин или QR-кодов. Речь идет о создании алгоритмов и установок, позволяющих позиционировать электронные компоненты с точностью до долей микрон в механических системах под управлением системы технического зрения в реальном времени. Разработка медицинского оборудования находится на том же уровне технологических достижений. В этой области мы тоже зависим от импорта.
Я знаю пару компаний, производящих установки для присоединения кристаллов и монтажа выводов, находящихся, например, в Беларуси. Как вы думаете, долго ли они протянут, если часть комплектующих и программных модулей, закупаемых на западе, окажутся под расширяющимся санкционным давлением? Далеко ли до блокировки поставок аналогичных товаров или целых систем в Россию?