mach3 что такое dro в
ЧПУ в хоббийной мастерской (часть 3)
Изначально, планировал ограничиться двумя постами (раз, два) про мои ЧПУшные эксперименты. Но, тема оказалась многим интересной, поэтому, немного ее еще пораскрываю. В этом посте пойдет речь про написание самодельного софта для управления любительским ЧПУ.
Предисловие
Не знаю, удалось ли кого-то мотивировать первыми постами, но некоторые комментарии мне самому дали хорошую пищу для размышлений. Отдельная благодарность @evilruff за фото его лаборатории и за видео с классным корейцем. После просмотра того и другого мой бардачёк в подвале перестал казаться таким уж уютным.
Собравшись с силами, на выходных навел что-то отдаленно напоминающее порядок и сделал, наконец, 2 вещи которые собирался сделать еще пол-года назад.
Во-первых, заменил кусок фанеры который выполнял роль жертвенного стола. Этой фанерой я пользовался с момента покупки станка, прикручивая саморезами к ней заготовки и сооружая всякие безумные конструкции из палок и клиньев. Все для того, чтобы деталь не отправилась в непредсказуемый полет при фрезеровке.
Может кому пригодится лайфхак: новый стол сделал из пластиковой террасной доски (продается в Кастораме):
Доски болтами прикрутил прямо к алюминиевому родному столу. Бонусом получились удобные пазы для фиксаторов заготовки и быстрого монтажа присадочного стола. На все про все ушло пара часов и
И во-вторых, наконец, написал более-менее юзабильный софт для управления нестандартными функциями ЧПУ. Про это и будет основной рассказ.
Постановка задачи
G-code для операций, которые описаны во второй части простейший. Тем не менее, сам процесс наладки нельзя назвать быстрым.
Как это происходило
Например, для присадки нужно было: зная ширину панели посчитать сколько должно быть отверстий, рассчитать точное расстояние между ними, создать файл, написать g-code, загрузить его в Mach3. Все это занимает, в лучшем случае, минут 15 — 20. В этом свете, преимущества цифрового станка значительно меркнут по сравнению с ручным инструментом, которым за это же время можно навертеть целую кучу дырок.
Что хотелось получить
В случае той-же присадки, хотелось получить программу, где в очень простом интерфейсе я бы вводил ширину и толщину панели и нажав кнопку запускал процесс сверления нужного количества присадочных отверстий на одинаковом расстоянии друг от друга.
Поиск решения
Первое что пришло в голову было написание автономной программы, которая напрямую бы взаимодействовала с параллельным портом. Беглый гуглинг показал, что задача записи в lpt вполне решаемая, но черт, как известно, прячется в деталях. При дальнейшем изучении вопроса я понял, что застрять тут можно всерьез и надолго. К тому же, такое решение было бы не гибким: для другого станка, например с USB, оно не работало бы.
Оставался вариант разобраться с SDK Mach3. В процессе сбора информации про создание mach-плагинов я натолкнулся на интересное решение. В нем описывалось как используя OLE-механизмы можно дергать Mach3 из стороннего приложения. Я не эксперт в технологиях Microsoft, но после просмотра по диагонали мануала по SDK Mach3, если я правильно уловил основную идею, никакой серебренной пули не существует, плагины используют те же публичные методы COM-объектов Mach3. Перекраивать интерфейс Mach3 я не собирался, таким образом, разница для пользователя между плагином и standalon приложением получалась только в том, что плагин доступен из меню Mach3, а приложение — через иконку на рабочем столе XP.
Отдельное приложение мне показалось предпочтительней. В этом случае, теоретически, я мог сразу после загрузки компьютера запускать свою программу, которая паровозом загружала бы Mach3 (вместо того, чтобы сначала грузить Mach3 и потом копаться в его меню для запуска плагина).
Берем в руки шашку
Последний раз нативное десктопное приложение для Windows мне приходилось писать году, эдак, в 2006 и было оно на Delphi. С тех пор веб-технологии с их Линуксом окончательно поглотили меня. Поэтому, сейчас особых предпочтений на каком языке ваять windows-программу у меня не было. Найденный простенький пример был написан на C#, этот язык и был выбран в качестве подопытного кролика.
Я не буду здесь выкладывать весь код получившегося приложения (при желании можете его найти на github по ссылке внизу поста). Поясню основные вещи. Все эксперименты я проделывал на виртуалке с WinXP SP3, VS 2003 и Mach3 Version R3.043.062. Для тех кто считает, что лучше один раз увидеть ссылка на ролик в Youtube по которому разбирался я. Ниже расшифровка основных моментов.
Подготовка
Взаимодействие с Mach3
Подключаем нужные библиотеки, объявляем переменные (Form1.cs)
Коды кнопок и значений параметров можно посмотреть в вики: OEM_DROs и OEM_Buttons (Wiki у них подглючивает, значения параметров в таблице не выводится, я смотрел на вкладке «View source»).
Первая версия программы работала так: по установленным параметрам генерировался g-code который покадрово (т.е. построчно) выполнялся методом _mInst.Code. И это было моей ошибкой. В отладочной среде на виртуалке все прекрасно работало. В Mach3 бежали правильные цифры в координатах. Но при переносе на станочный компьютер возникли проблемы. Каретка перемещалась правильно, но шпиндель не включался.
Похоже, что управление роутером и шпинделем в Mach работает в разных потоках. Получалась ситуация, что команды перемещений (G. ) выполнялись последовательно как они поступали в метод _mInst.Code в одном потоке, а команды управления шпинделем (M3, M5), не зависимо от первых, выполнялись в другом потоке. В результате, шпиндель включался (M3) и тут же выключался (M5), при этом перемещение каретки шло своим чередом.
Я пробовал разные варианты, подключал задержки, пробовал загнать весь управляющий g-code в одну строку и отправлять одним куском в _mInst.Code. В результате, остановился на решении «в лоб»: просто загоняю сгенерированный код в файл, этот файл программно открываю в Mach3 и там же программно нажимаю кнопку «Старт». Фрагмент работающего кода:
Пауза между загрузкой файла и нажатием кнопки нужна для того, что бы Mach успел открыть файл. Возможно, есть какой-то более изящный способ. Если кто знает, напишите в комментариях.
Дополнительным бонусом такого решения получилось то, что теперь можно в интерфейсе Mach наблюдать визуализацию процесса обработки.
Что в итоге получилось
Далее, в двух словах о получившемся приложении. Отдельно расскажу о UI для каждой операции.
Раскрой
Тут все достаточно прозрачно. Параметр S нужен для компенсации размера L если заготовка закреплена не в нулевой точке по Х (или по Y при распиле вдоль).
Присадка
Для присадки возможны 2 конфигурации оснастки. Первая с болгаркой для сверления торцевых отверстий. И вторая с обычным шпинделем для сверления в плоскости щита (почему-то я назвал ее «Присадка фронтальная»).
Присадка торцевая
При торцевой присадке важно точно выставить ноль в правом нижнем углу заготовки (у меня там находится угол бокового упора и стола). Со сверлом по дереву это сделать не сложно — там есть острый наконечник которым и надо попасть в этот угол. Закрепляя заготовку на столе я просто упираю ее в сверло.
Не меняя оснастку тем же способом я делаю ответные отверстия закрепляя заготовку вертикально:
Параметр X нужен для того, чтобы соединять панели разной ширины (например, когда нижняя и верхняя панели шкафа шире боковых на толщину дверей).
Присадка фронтальная
Оснастка для фронтальной — это обычный шпиндель. Этот вид присадки используется когда нужно насверлить отверстий в горизонтальной поверхности не только по краям но и где-то посередине. Например, если в шкафе несколько отделений и кроме боковых стенок есть внутренние. Если длина панели больше длины станка, присадку можно сделать в 2 подхода с разворотом детали на 180 градусов. В этом случае, так же пригодится параметр X.
Токарная обработка
Для меня основной сложностью при подготовке g-code с токарной траекторией было не переборщить с максимальной глубиной погружения диска. Дело в том, что на выходе из Inkscape получается одна линия и точение происходит в один проход. Из-за этого, мне приходилось делать отдельный код для цилиндрования заготовки и только после этого запускался основной проход создающий форму. И были некоторые ограничения на эту форму. В частности, нужно было следить, чтобы траектория не уходила слишком глубоко. Я старался не выходить за рамки 10 — 15мм от уровня первоначального цилиндра.
Все перечисленные проблемы удалось решить в новой программе. Работает это так: загружаем «сырой» g-code полученный из Inkscape, задаем размер стороны бруска заготовки и указываем максимальную глубину обработки за 1 проход (чем тверже деревяшка, тем меньше эта глубина). На базе исходного g-code и параметров программка посчитает безопасную траекторию и отправит ее в ЧПУ.
Планы на будущее
Программа здорово упростила рутину, но до совершенства еще далеко. Во-первых, нужно будет оптимизировать алгоритм сверления глубоких отверстий (сверло забивается стружкой и перегревается, нужно сделать качание вперед-назад). В-вторых, появилась идея сделать библиотеку токарных форм. Т.е. несколько типовых форм (типа цилиндра, конуса, скалки и т.п.) с возможностью настройки размеров без необходимости создавать траектории в сторонних программах.
Установка машинных координат в произвольное значение из скрипта
Помогите пожалуйста.
Мне нужно из скрипта синхронизировать машинные координаты по пользовательским.
Чтобы они совпадали.
Я машинные координаты могу только в 0 установить. В произвольное значение не получается.
Нужен аналог SetDRO(2, MyZ) но для машинных координат. Есть такое?
Я все мануалы прочитал. ответа пока нет.
Спасибо за ответ, но Вы меня не совсем поняли.
В Mach3 5 координатных систем:
1. Current Position
Code «G92 Z..» устанавливает G92 Offset (на рисунке отмечено синим).
Я хочу разобраться как управлять именно Machine Offset? (на рисунке отмечено красным).
Сбросить в 0 каждую ось можно функцией SetMachZero(0..2), а вот
как можно установить конкретное значение не двигая станком?
Я хочу разобраться как управлять именно Machine Offset?
Если хотите изменить показания, то можно использовать следующие варианты:
1. Передвинуть голову при помощи кнопок (самое простое).
2. Изменить значения мм/импульс.
3. Переместить датчики в другое место.
ЗЫ. Не это Вам нужно. Сформулируйте лучше конечную цель.
Если хотите изменить показания, то можно использовать следующие варианты:
1. Передвинуть голову при помощи кнопок (самое простое).
2. Изменить значения мм/импульс.
3. Переместить датчики в другое место.
ЗЫ. Не это Вам нужно. Сформулируйте лучше конечную цель.
У меня есть радио пульт XHC HB04-L. Там есть две удобные кнопки которыми я всегда пользовался не задумываясь:
Поставил заготовку в произвольное место рабочего поля. Подвел инструмент в 0. Нажал первую. Запустил программу и в путь.
Если нужно вернуться в 0 то нажал вторую.
Решил сделать себе AutoZeroTool. Написал скрипт по аналогии с имеющимися. Все работает. Вот только с координатами теперь беда.
Скрипт после работы AutoZeroTool правильно выставляет только Current Position при помощи SetDRO(2, Plate). При этом Machine Coord не меняются. Если теперь нажать на пульте «Переместить голову в 0» то станок едет не к 0 Current Position, а к 0 Machine Coord.
У меня датчиков Номе нет. И я не понимал до конца необходимость использования Machine Coord.
Все таки как программно из скрипта поменять значения Machine Coord на произвольные не двигая станком?
Есть в описании SetOEMDRO(85, MyCoord) но не работает. Может в настройках какие дополнительные
разрешающие галочки нужно поставить?
У меня датчиков Номе нет
Решил сделать себе AutoZeroTool. Написал скрипт по аналогии с имеющимися. Все работает. Вот только с координатами теперь беда. Скрипт после работы AutoZeroTool правильно выставляет только Current Position при помощи SetDRO(2, Plate). При этом Machine Coord не меняются. Если теперь нажать на пульте «Переместить голову в 0» то станок едет не к 0 Current Position, а к 0 Machine Coord.
Если после скрипта такое началось, то может в нём что-то не то написали?
Если после скрипта такое началось, то может в нём что-то не то написали?
Я даже понимаю, что нужно написать в скрипте. Я команду не могу найти нужную в мануале по G-Code и Mach3 Macro Programmers Reference.
Книжка Сосонкин, Мартинов по программированию ЧПУ тоже не помогла.
Может я хочу того чего в природе нет? Поправьте если не прав.
Думаю, самое правильное было бы поменять макрос в пульте пульт XHC HB04-L,
который тащит голову к 0 машинных координат. Но пока не понимаю как.
Можно на свободную кнопку свой макрос написать вместо неправильного штатного. Подумаю.
Просто до того как сделал AutoZeroTool все устраивало.
Получилось Коза-Баян. Но теперь бросить уже не спортивно. Нужно добивать.
SetMachZero() я знаю. Она в «0» устанавливает Machine Coord.
А мне нужно в произвольное значение.
У меня скрипт AutoZeroTool после процедуры поднимает инструмент над тестовой пластиной на величину H.
Мне Z Machine Coord нужно установить в тоже значение = H.
Вы бы скрипт свой показали, чтоб понятней было.
Есть в описании SetOEMDRO(85, MyCoord) но не работает.
Page 69
Legacy script note: Over time, there have been two different DRO numbering
schemes used with Mach; the “DRO number” series and the “OEMDRO number”
series. This function uses the “DRO number” series.
Page 70
The “DRO number” series was further subdivided into “User” and “OEM”
ranges. Within the “OEM” range, valid DRONums were from 0 to 200, which, at
one time, corresponded to OEM DRO numbers 800 to 1000.
The numerical correspondence between the numbering series is not guaranteed
for future releases of Mach.
Сдается мне что надо использовать SetOEMDRO(885, MyCoord)
Example:
‘ Define the axes
Const ZaxisMultiFunctionDRONum = 2
‘ Write 1.2345 to Z axis DRO using SetDRO
SetDRO(ZaxisMultiFunctionDRONum, 1.2345)
Example:
‘ Define the axes
Const ZaxisMultiFunctionOEMDRONum = 802
‘ Write 1.2345 to Z axis DRO using SetOEMDRO
SetOEMDRO(ZaxisMultiFunctionDRONum, 1.2345)
cnc-club.ru
Статьи, обзоры, цены на станки и комплектующие.
Подключение KFLOP + DRO + scale( линейки) + Mach3
Подключение KFLOP + DRO + scale( линейки) + Mach3
Сообщение aftaev » 20 ноя 2012, 20:13
Re: Подключение KFLOP + DRO + scale( линейки) + Mach3
Сообщение ukr-sasha » 20 ноя 2012, 20:55
Re: Подключение KFLOP + DRO + scale( линейки) + Mach3
Сообщение aftaev » 20 ноя 2012, 21:12
Re: Подключение KFLOP + DRO + scale( линейки) + Mach3
Сообщение ukr-sasha » 20 ноя 2012, 21:29
Re: Подключение KFLOP + DRO + scale( линейки) + Mach3
Сообщение aftaev » 20 ноя 2012, 21:30
Re: Подключение KFLOP + DRO + scale( линейки) + Mach3
Сообщение Impartial » 20 ноя 2012, 21:42
Re: Подключение KFLOP + DRO + scale( линейки) + Mach3
Сообщение aftaev » 20 ноя 2012, 21:46
Re: Подключение KFLOP + DRO + scale( линейки) + Mach3
Сообщение Impartial » 20 ноя 2012, 21:48
Re: Подключение KFLOP + DRO + scale( линейки) + Mach3
Сообщение aftaev » 20 ноя 2012, 21:51
Re: Подключение KFLOP + DRO + scale( линейки) + Mach3
Сообщение aftaev » 20 ноя 2012, 21:53
Re: Подключение KFLOP + DRO + scale( линейки) + Mach3
Сообщение Impartial » 20 ноя 2012, 22:01
Re: Подключение KFLOP + DRO + scale( линейки) + Mach3
Сообщение Nick » 20 ноя 2012, 22:05
Use the Console, Luke.
Re: Подключение KFLOP + DRO + scale( линейки) + Mach3
Сообщение aftaev » 20 ноя 2012, 22:06
Re: Подключение KFLOP + DRO + scale( линейки) + Mach3
Сообщение aftaev » 20 ноя 2012, 22:09
Re: Подключение KFLOP + DRO + scale( линейки) + Mach3
Сообщение aftaev » 20 ноя 2012, 22:11
Re: Подключение KFLOP + DRO + scale( линейки) + Mach3
Сообщение Nick » 20 ноя 2012, 22:11
The 7I37 provides 8 Isolated 48VDC 1A output drivers and 16 Opto-isolated inputs.
Use the Console, Luke.
Re: Подключение KFLOP + DRO + scale( линейки) + Mach3
Сообщение Impartial » 20 ноя 2012, 22:18
MACH 3: Настройка режима постоянной скорости
Настройка режима постоянной скорости в MACH3
Многие пользователи Mach 3 путаются в настройках режима постоянной скорости и в том, как они влияют на перемещения станка.
— Режим перемещения (постоянная скорость или точный останов)
Постоянная скорость (Constant Velocity, ПС) — режим, обеспечивающий поддержание постоянной скорости во время ВСЕХ угловых или дуговых перемещений, подчиняясь параметру ускорения. Однако это невозможно во время некоторых перемещений, таких как перемещения по одной оси переменного направления (то есть, при таких перемещениях движение должно в какой-то момент останавливаться). При перемещениях, где может поддерживаться постоянная скорость, углы будут скругляться в зависимости от того, насколько велико ускорение в сочетании с допуском расстояний в режиме постоянной скорости (см. ниже). Более высокие ускорения и меньшие значения допуска расстояний приведут к более крутым углам и снижению динамической погрешности. Обратите внимание, что это НЕ то же самое, что и динамическая погрешность серводвигателя подачи и не имеет ничего общего с ПИД-регулированием. Динамическая погрешность серводвигателя / шагового двигателя будет несколько ХУЖЕ, чем погрешность в режиме постоянной скорости, и зависит от того, насколько жесткой является обратная связь серводвигателя. Шаговые двигатели также будут отставать (+/-1 полный шаг) и терять шаги при слишком больших углах поворота (ЭТО ОЧЕНЬ ПЛОХО).
Точный останов (Exact Stop) — в этом режиме движение ускоряется и замедляется между «точками» в G-коде. Mach-3 видит только одно перемещение за раз, поэтому станки в этом режиме работают несколько грубо и очень медленно. Режим «точный останов» должен использоваться только в том случае, если станок не должен скруглять ни один угол (внутренний или внешний). Однако помните, что большинство CAM-программ для формирования дуг будут выдавать множество крошечных перемещений по коду G01. В режиме точного останова данный тип движения характеризуется низким качеством обработки поверхности и может негативно сказываться на режущем инструменте и компонентах станка.
— Общая конфигурация (LookaHead____ Lines) (буфер предпросмотра)
Применяется только в режиме постоянной скорости и определяет, как далеко «по ходу» заглядывает вперед планировщик перемещений Mach3. Установка малого значения данного параметра — это как вождение автомобиля при близорукости. Установка большого значения напоминает стопроцентное зрение, дополняемое использованием бинокля, когда необходимо смотреть вдаль. Данный параметр позволяет программе лучше адаптироваться к внезапным изменениям траектории движения. Для большинства случаев рекомендуется установить значение данного параметра примерно на 200. Максимальное значение составляет 1000, однако установка максимума может вызвать проблемы при недостаточном быстродействии компьютера.
Режим «плазма» (Plasma Mode) позволяет в некоторых случаях избежать «нырков» и скруглений углов. Как правило, этот параметр не рекомендуется использовать, помимо случая, когда ваш станок имеет невысокое ускорение и низкое разрешение шага.
ПС допуск расстояний (CV Dist Tolerance____ Units) — данный параметр влияет на величину скругления углов. Установка большого значения позволит станку работать максимально быстро. Установка малого значения обеспечит меньшее скругление углов, поскольку станок будет приближаться к заданной геометрии, однако при этом скорость обработки несколько снизится. Физически данный параметр означает расстояние от конца линии, по которой производится рез, до того места, где дуга начинает скругляться. Таким образом, это расстояние от пересечения дуги в режиме ПС до фактического конца перемещения (в режиме точного останова).
G100 адаптивно значению ПС (G100 Adaptive NurbsCV) — это устаревшая опция и ее не следует использовать. Она осталась с тех времен, когда G100 выполнял DDA, но теперь безнадежно устарела.
Этот код будет УЖАСНО запускаться с настройкой на 90 градусов или выше. Иногда, просто глядя на экран, ОЧЕНЬ сложно сказать, есть ли в вашем коде такая проблема. Данный вопрос заставляет многих биться головой о стену, поэтому, если несмотря на все ваши старания, ваш станок перемещается по кривым, стоит просмотреть свой код. При этом, чтобы увидеть проблему, на Mach3 может потребоваться масштабирование траектории движения инструмента.
Настройка колеса Шаттл (Ускорение колеса___секунд)
Данный параметр определяет, сколько времени отводится на перемещение для устранения люфта (см. статью «Люфт ШВП и ходовых винтов»). В данном случае для сервоприводов были установлено ОЧЕНЬ маленькое значение (0,00001). Это нивелирует влияние люфта на плавность работы станка, поскольку шаговые импульсы отправляются максимально часто (в пределах скорости ядра). В системах c шаговыми двигателями может потребоваться большое значение, необходимое для предотвращения потери шагов. Также рекомендуется установить размер люфта до некоторого ОГРОМНОГО видимого числа (10 мм), поскольку в этом случае легко понять, как различные параметры люфта влияют на перемещения станка.
Размер люфта в единицах (Backlash Distance in units) — это величина отклонения / соответствия / компенсация / мертвого хода по конкретной оси. Ось станка без трения (линейные направляющие и т. д.), может скользить вперед и назад на величину люфта, как ей будет угодно (во время ускорения, глубокого реза, при вибрации). Так что желательно максимально сократить рабочий ход, прежде чем применять компенсацию люфта в программе. Для станков с высоким коэффициентом трения (прямоугольные направляющие / направляющие типа «ласточкин хвост») или медленных станков это не такая уж большая проблема.
Скорость люфта % от макс. (Backlash Speed % of Max) — данный параметр необходим, поскольку компенсация люфта не ограничена параметром ускорения. Установка параметра на 100% в системе с шаговыми двигателями это приведет к потерям шагов, а для серводвигателей 100% — это просто отлично 🙂
Главный экран (Настройки Alt6) (Main Screen (Settings Alt6))
ПС допуск расстояний (CV Distance) — см. выше
ПС подача (CV Feedrate) — перемещение, как в режиме постоянной скорости, НО с заданной вами скоростью подачи. Например, если ПС подача установлена на 50 UPM, а значение перемещения — на 20, то скорость по следующей оси ускорится до 20, тогда как первая ось замедлится до 20. В результате, перемещение в режиме постоянной скорости будет выглядеть так же, как перемещение при 20 UPM. Проблема лишь в том, что на высокой скорости будет наблюдаться огромное количество рывков в системе.
Очевидно, что настройки режима постоянной скорости оказывают значительное влияние на производительность станка. При первом запуске лучше включить режим постоянной скорости и отключить все остальные настройки до тех пор, пока вы не прочувствуете работу системы. Сервосистемы весьма снисходительны в отношении настроек постоянной скорости и не теряют позиционирование несмотря ни на что. Шаговые двигатели, наоборот, могут моментально начать терять шаги, если настройка не совсем верна. Рекомендация при работе с шаговыми двигателями: вносите изменения максимально осторожно и не забывайте, что превышение допустимых возможностей может привести к потере шагов и самообладания!
