Параметрическое программирование в СЧПУ с примерами. Ч.2 - От теории к практике
Привет, дорогой читатель. Это продолжение моего поста с разбором параметрического программирования в ЧПУ. Первый ты найдешь по этой ссылке. Сегодня мы перейдем от теории к практике.
UPD:
Часть 2. От теории к практике.
Давай напишем универсальную программу для фрезерования прямоугольных деталей с необходимыми нам размерами. Т.к. детали могут быть разных размеров, то, чтобы не рисовать это в CAM, мы и применим параметризацию.
Давай сразу оговоримся что в коде не будет уделяться внимание безопасным отступам, подачам и пр. Мы здесь не за этим.
Итак.
Сегодня на производстве, например, нам необходимо сделать вот такую деталь:
Для начала необходимо создать наши изменяемые переменные:
#1 = 0.1 (BOTTOM OFFSET) // Отступ от кончика фрезы до стола чтобы не фрезеровать зеркало стола.
#2 = 3.175 (ENDMILL DIAMETER) // Диаметр рабочего инструмента
(---------------------------------)
#3 = 200 (OUTER WIDTH) // Ширина детали
#4 = 80 (OUTER HIGHT) // Высота детали
#5 = 20 (OUTER CORNER RADIUS) // Радиусы скруглений на детали
(---------------------------------)
#6 = 120 (INNER WIDTH) // Ширина отверстия
#7 = 60 (INNER HIGHT) // Высота отверстия
#8 = 10 (INNER CORNER RADIUS) // Скругления внутренних углов
С переменными разобрались. Теперь стандартная строка безопасности и шапка программы:
G90 G17 G21 G40 G49 G80 G94 F1500
G54
T1 M6
G43 H1 M03 S20000
Т.к. тему компенсации на радиус инструмента здесь мы затрагиваем (в дальнейшем будет и на это отдельная тема), то, чтобы получить отверстие необходимых размеров необходимо учитывать и диаметр режущего инструмента тоже. Для этого мы и завели переменную #2.
Начало координат - G54 X0 Y0 - у нас в центре детали. Это важно!
Пишем код для обработки внутреннего контура:
// На ускоренном ходу подъезжаем в точку врезки. Чтоб получить точку врезки по оси Х необходимо нашу внутреннюю ширину разделить на два и отнять половину диаметра фрезы (радиус фрезы), а по оси Y (давайте начнем обработку с точки начала внутреннего радиуса) необходимо от половины высоты отверстия отнять радиус внутреннего угла. Геометрия. 4 класс, вторая четверть. Надеюсь, объяснил понятно ;)
G0 X[#6/2 - #2/2] Y[#7/2 - #8]
Проверяем.
Все правильно (в симуляторе обращаем внимание на верхний правый угол. Это позиция инструмента). Идем дальше.
// На рабочей подаче врезаемся в заготовку до, прописанного нами, отступа от стола.
G1 Z#1
Собственно теперь сама обработка отверстия. Инструмент справа.
// Вторая наша точка абсолютно зеркальна точке врезки, т.е. со знаком "минус" по оси Y. И т.к. мы перемещаемся только по одной оси, то координаты по оси Х опустим. Возьмите себе это за правило. Во-первых, уменьшает объем программы (важно для старых стоек), а во-вторых, улучшает читаемость кода и снижает риск ошибиться.
G1 Y-[#7/2 - #8]
Проверяем:
Ошибок пока нет. И не мудрено, написано то только 3 строки кода ;)
Радиус. Тут немного сложнее. Мы же работаем без компенсации, значит постоянно держим в уме радиус рабочего инструмента. Где-то его надо отнять от координаты, а где-то добавить:
// Точка у нас будет с такими координатами: по оси Х - это половина ширины отверстия минус радиус скругления внутренних углов. По оси Y (отрицательная координата !!!) - это половина высоты отверстия минус половину диаметра фрезы. Радиус дуги R - радиус внутреннего скругления минус половину диаметра инструмента.
G2 X[#6/2 - #8] Y-[#7/2 - #2/2] R[#8 - #2/2]
Проверяем:
Проверяем.
Далее берем значения из предыдущей строки но только для оси Х и с отрицательным значением:
G1 X-[#6/2 - #8]
Можно и не проверять. Ошибиться тут сложно. Но по традиции, 2 картинки:
Далее две точки у нас зеркальны предыдущим точкам. Дуга:
G2 X-[#6/2 - #2/2] Y-[#7/2 - #8] R[#8-#2/2]
Прямая:
G1 Y[#7/2 - #8]
Дуга:
G2 X-[#6/2 - #8] Y[#7/2 - #2/2] R[#8-#2/2]
Прямая:
G1 X[#6/2 - #8]
Дуга с координатами такими же как и наша точка входа:
G2 X[#6/2 - #2/2] Y[#7/2 - #8] R[#8-#2/2]
И т.к. мы находимся в точке входа, то выполняем выход из материала на ускоренной подаче:
G0 Z12
Вот, собственно, мы и получили параметрически описанный код для обработки отверстия в требуемой детали. Теперь вы можете легко поменять любые значения, относящиеся к переменным отверстия (#6, #7 или #8) и траектория обработки у вас перестроится.
С наружным контуром давайте поступим так: если контур отверстия мы строили в абсолютных координатах (G90 - у нас прописан в строке безопасности), то наружный контур давайте построим в относительных координатах.
Начнем.
На точку врезки мы еще двигаемся в абсолютных координатах, потому как в относительных координатах нам сложно вычислить на сколько и по какой оси сместиться. "Можно! А зачем?" (c, кто-то из великих). Точка:
// Чтобы получить точку входа по осям нам необходимо: по оси Х - к половине ширины детали добавить половину диаметра инструмента. По оси Y - от половины высоты детали отнять внешний радиус.
G0 X[#3/2 + #2/2] Y[#4/2 - #5]
Проверим:
Врезаемся в материал:
G1 Z#1
Вот теперь и переключаемся в режим относительных координат:
G91
Инструмент справа. Значит обработка и дуга против часовой стрелки:
// Т.к. мы в относительных координатах, то вычислений у нас минимум. По оси X и Y смещаемся на величину радиуса, но т.к. работаем без коррекции на диаметр инструмента не забываем добавить к величинам половину диаметра инструмента. С включенной коррекцией код еще проще...
G3 X-[#5 + #2/2] Y[#5 + #2/2] R[#5 + #2/2]
Проверим правильность координат:
Все верно! А ведь в относительных координатах и правда удобнее работать. Особенно когда у тебя начало координат находится в какой-нибудь рандомной точке.
Далее прямая:
// Проще некуда: смещаемся по оси Х на величину ширины детали минус два внешних радиуса детали. Должны получить зеркальную координату оси Х предыдущей точки.
G1 X-[#3 - #5*2]
Верно.
Дальше дуга.
// Просто копируем код предыдущей дуги и смотри куда нам надо переместиться. По оси Х - идем "в минус", и по оси Y - также идем "в минус". Обратите внимание на то, что на предыдущей дуге мы смещались: по оси Х - "в минус", а вот по оси Y - "в плюс".
G3 X-[#5 + #2/2] Y-[#5 + #2/2] R[#5 + #2/2]
Даже если вы ошибетесь со знаками осей, то симулятор всегда вам покажет неправильную кривую:
После дуги снова идет прямая:
G1 Y-[#4 - #5*2]
Дуга:
// По аналогии берем код из предыдущей дуги, но в этот раз смещаемся по осям: Х - "в плюс", Y - "в минус".
G3 X[#5 + #2/2] Y-[#5 + #2/2] R[#5 + #2/2]
Прямая:
G1 X[#3 - #5*2]
Дуга:
G3 X[#5 + #2/2] Y[#5 + #2/2] R[#5 + #2/2]
Прямая:
G1 Y[#4 - #5*2]
Всё!
Круг замкнулся, господа присяжные заседатели. Мы в точке врезки. Здесь ОООООЧЕНЬ важно вернуть "взад" режим абсолютных координат:
G90
Выход из материала и конец программы:
G0 Z12 // Выход из материала
M5
M2
Бинго.
А теперь то, зачем мы вообще все это затеяли. Нам необходимо сделать деталь, но уже с другими размерами. Например, квадрат с наружными размерами 150x150. Отверстием 50х50 и радиусами, пусть 5мм. Меняем всего пару цифр в начале программе:
(---------------------------------)
#3 = 150 (OUTER WIDTH)
#4 = 150 (OUTER HEIGTH)
#5 = 5 (OUTER CORNER RADIUS)
(---------------------------------)
#6 = 50 (INNER WIDTH)
#7 = 50 (INNER HEIGTH)
#8 = 5 (INNER CORNER RADIUS)
И мгновенный результат:
Магия? НЕТ! Параметрия.
В следующей части мы усложним наш код различными проверками "на правильность". Ведь зона внутренней обработки не должна быть больше наружной. А внутренний радиус не может быть меньше радиуса инструмента. Правда ведь? Вот мы это и проверим. А при наличии ошибок выведем ошибку на панель.
Дальше - больше ;)
До связи. Ваш @Nikomas






























