$1 = 79.7653 ₽ 1¥ = 11.094 ₽
imgПерезвоните мне

Fanuc без секретов: как написать идеальный цикл на G-кодах и ускорить производство в 3 раза

Fanuc — один из самых популярных контроллеров ЧПУ в металлообработке и деревообработке. Программирование циклов на G-кодах позволяет автоматизировать повторяющиеся операции, снизить риск ошибок и значительно ускорить обработку деталей. В этой статье разберём, как написать свой цикл, какие команды использовать, и приведём реальные примеры кода.

1. Что такое цикл в Fanuc

В системе Fanuc цикл — это последовательность команд, оформленная в виде подпрограммы или встроенной функции, которая вызывается с разными параметрами. Основное назначение цикла — автоматизация повторяющихся действий, таких как сверление, нарезание резьбы, выборка карманов или фрезеровка ряда отверстий.

2. Виды циклов в Fanuc

  • Встроенные циклы (fixed cycles) — вызываются стандартными G-кодами, например G81, G82, G83 для сверления, G84 для нарезания резьбы.
  • Пользовательские циклы (custom cycles) — создаются программистом в виде подпрограммы с параметрами.

3. Почему стоит писать собственный цикл

Встроенные циклы удобны, но имеют ограниченную гибкость. Например, вам может понадобиться комбинированная операция: сверление + зенковка + выборка фаски за один вызов. Это можно реализовать только через пользовательский цикл.

4. Структура программы для Fanuc

Пример минимальной структуры:


O0001 (Основная программа)
...
M98 P1000 L5 (Вызов подпрограммы O1000 5 раз)
...
M30 (Конец программы)

O1000 (Пользовательский цикл)
(Здесь команды обработки)
M99 (Возврат в основную программу)

5. Объявление переменных

В Fanuc для передачи параметров в цикл используются адреса #1, #2, #3… (локальные переменные) или #100… (общие переменные).

Например:


#1 = 10.0 (Координата X)
#2 = 20.0 (Координата Y)
#3 = -5.0 (Глубина Z)

6. Пример простого цикла сверления


O0001
#1=0 (Начальная X)
#2=0 (Начальная Y)
#3=-10 (Глубина)
#4=20 (Количество отверстий)
#5=30 (Шаг между отверстиями по X)

N10 G90 G54 G00 X#1 Y#2
M98 P1000 L#4
M30

O1000
G81 X#1 Y#2 Z#3 R2.0 F100
#1 = [#1 + #5]
M99

Здесь подпрограмма O1000 выполняет сверление и сдвигает координату X на заданный шаг.

7. Использование WHILE/END

Fanuc поддерживает циклы WHILE, что позволяет обойтись без L-параметра:


#6=0
WHILE[#6 LT #4] DO1
  G81 X#1 Y#2 Z#3 R2.0 F100
  #1 = [#1 + #5]
  #6 = [#6 + 1]
END1

8. Защита цикла от ошибок

Перед началом выполнения цикла стоит проверять, что глубина резания не превышает допустимых значений, а шаг не равен нулю:


IF[#5 EQ 0] THEN #3000=1 (Ошибка: шаг = 0)
IF[#3 GT 0] THEN #3000=2 (Ошибка: глубина > 0)

9. Реальный пример цикла фрезеровки кармана


O2000 (Цикл фрезеровки прямоугольного кармана)
#1=50 (Длина)
#2=30 (Ширина)
#3=-5 (Глубина)
#4=2 (Подача на глубину)
#5=5 (Боковой припуск)
#6=200 (Подача мм/мин)

G91 Z5.0
#7=0
WHILE[#7 GT #3] DO1
  G01 Z[#7-#4] F#6
  G01 X#1 F#6
  G01 Y#2
  G01 X-#1
  G01 Y-#2
  #1=[#1-#5*2]
  #2=[#2-#5*2]
  #7=[#7-#4]
END1
G90
M99

10. Практические советы

  • Используйте комментарии в коде — это облегчит чтение.
  • Тестируйте цикл на холостом ходу с поднятым инструментом.
  • Всегда задавайте безопасную точку возврата (R-плоскость) в сверлильных циклах.
  • При работе с WHILE следите за условиями выхода — бесконечный цикл приведёт к аварии.

11. Оптимизация кода

Чтобы ускорить обработку, избегайте лишних перемещений, используйте приращения (G91), комбинируйте перемещения по нескольким осям, минимизируйте количество смен инструмента.

12. Не бойтесь циклов

Пользовательские циклы Fanuc позволяют повысить эффективность производства, снизить риск ошибок и обеспечить стабильное качество. Освоение G-кодов и умение комбинировать их в циклы — это навык, который отличает опытного оператора от новичка.

Диагностический макро‑чек‑лист и универсальный цикл сверления для Fanuc

Блок 1. Диагностический макро‑чек‑лист (ловим частые ошибки) — O9001

Назначение: вызывать перед любым циклом/подпрограммой (M98 P9001). Проверяет модальные состояния, параметры и выдаёт понятные предупреждения/аварии.

Код O9001

(***************** O9001 — ПРЕ‑ЧЕК ПЕРЕД ЦИКЛОМ *****************)
(Назначение: вызывать перед любым циклом/подпрограммой: M98 P9001)
(Проверяет модальные состояния и параметры. Выдаёт ALARM при рисках.)

O9001

(— 1. Единицы измерения — проверь: G21 мм или G20 дюймы)
IF[ NOT[ [#4006 EQ 21] OR [#4006 EQ 20] ] ] THEN #3000=100 (НЕ ЗАДАНЫ ЕДИНИЦЫ G20/G21)

(— 2. Плоскость — должна быть G17 для XY-обработки)
IF[ #4003 NE 17 ] THEN #3000=101 (НЕВЕРНАЯ ПЛОСКОСТЬ. НУЖНА G17)

(— 3. Режим отсчёта — чаще нужен абсолют G90)
IF[ #4001 NE 90 ] THEN #3000=102 (НЕ G90. ПРОВЕРЬ РЕЖИМ)

(— 4. Коррекция длины — если фрезерование/сверление с G43)
(Комментарий: опционально жёстко требовать G43; снимите, если не нужно)
IF[ #4120 EQ 1 ] THEN    (Проверяем только при фрезеровании — код 4120=1)
    IF[ #2000 EQ 0 ] THEN #3000=103 (НЕТ G43 H? ПРОВЕРЬ КОРРЕКЦИЮ ДЛИНЫ)
ENDIf

(— 5. Шпиндель и подача — базовые проверки)
IF[ #4123 EQ 0 ] THEN #3006=1 (ВНИМАНИЕ: ШПИНДЕЛЬ ОТКЛЮЧЕН)
IF[ #4008 EQ 94 ] THEN     (G94 мм/мин — ок)
    IF[ #9 LE 0 ] THEN #3000=104 (F<=0 В РЕЖИМЕ G94)
ELSEIF[ #4008 EQ 95 ] THEN (G95 мм/об — ок)
    IF[ #9 LE 0 ] THEN #3000=105 (F<=0 В РЕЖИМЕ G95)
ELSE
    #3000=106 (НЕИЗВЕСТНЫЙ РЕЖИМ ПОДАЧИ)
ENDIf

(— 6. Безопасная плоскость R и глубина Z при сверлении/зенковке/развертке)
(Если в вызываемом цикле используются #R и #Z — делайте явные проверки)
IF[ DEF[#100] ] THEN     (пример: #100 — R-плоскость передана снаружи)
    IF[ #100 LT 1. ] THEN #3006=2 (ПРЕДУПРЕЖДЕНИЕ: R НИЗКО)
ENDIf
IF[ DEF[#101] ] THEN     (пример: #101 — глубина Z-)
    IF[ #101 GE 0 ] THEN #3000=107 (ГЛУБИНА Z ДОЛЖНА БЫТЬ МИНУС)
ENDIf

(— 7. Охлаждение — необязательная рекомендация)
IF[ #4127 EQ 0 ] THEN #3006=3 (ПРЕДУПРЕЖДЕНИЕ: ОХЛАЖДЕНИЕ ВЫКЛ)

(— 8. Механизм аварийного выхода из WHILE — сторож‑счётчик)
IF[ NOT[ DEF[#500] ] ] THEN #500=0 (Сторож итераций. Обнулить, если не задан)
(Рекомендуется в циклах инкрементить #500 и проверять, что #500<#501 лимита)

M99

Как использовать O9001

(Перед своим циклом)
G21 G17 G90
M98 P9001   (Если что-то не так — получите понятный ALARM/сообщение)

Подсказки по системным переменным: #4006 — G20/G21; #4003 — G17/18/19; #4001 — G90/91; #4008 — G94/95; #4123 — шпиндель; #4127 — охлаждение. Если DEF[] не поддерживается на вашей версии Macro B, замените проверки на собственные соглашения.


Блок 2. Универсальный параметрический цикл O8000 (линия, сетка, окружность; G81/G83)

Возможности: размещение отверстий по линии, сетке или окружности; автоматический выбор G81/G83 по параметру «пек»; контроль безопасной плоскости, подачи, шпинделя и охлаждения; сторож от «вечных» WHILE.

Код O8000

(***************** O8000 — УНИВЕРСАЛЬНЫЙ ЦИКЛ СВЕРЛЕНИЯ *****************)
(ВЫЗОВ ПРИМЕРЫ:
(1) Линия по X: 5 отверстий, шаг 30 мм:
    #1=100.  (X0)   #2=50.   (Y0)
    #3=-12.  (Z глубина)     #4=1000. (F мм/мин)
    #5=5     (N отверстий)   #6=30.   (DX шаг)
    #7=0.    (DY шаг, не нужен)       #8=5.  (R-плоскость)
    #9=1200. (S)             #10=1    (M—охлажд: 0 выкл, 1 M8)
    #11=1    (MODE: 1=линия, 2=сетка, 3=окружность)
    #12=0.   (GRID Ny)       #13=0.   (GRID шаг DY)
    #14=0.   (PECK: 0=G81, >0=G83 пек)
    M98 P8000

(2) Сетка 4x3, шаг 40x25:
    #1=10. #2=20. #3=-15. #4=800. #5=4 #6=40. #7=25. #8=3. #9=1000. #10=1 #11=2 #12=3 #13=25. #14=0  M98 P8000

(3) Окружность 8 отверстий, R=60, центр XC=200, YC=150:
    #1=200. (XC) #2=150. (YC) #3=-10. #4=900. #5=8 (N)
    #6=60. (R радиус) #7=0.  (не используется)
    #8=3. (R-плоскость) #9=1500. #10=1 #11=3 #14=0.5 (пек => G83)  M98 P8000 )

O8000

(— ВХОДНЫЕ ПАРАМЕТРЫ — СОГЛАШЕНИЕ)
( #1=X0/центрX, #2=Y0/центрY, #3=Z глубина-, #4=F, #5=N, #6=DX/радиус, #7=DY )
( #8=R-плоскость, #9=S, #10=охлаждение[0/1], #11=MODE(1/2/3), #12=Ny(для сетки), #13=Шаг DY(для сетки), #14=PECK )

(— БАЗОВЫЕ ПРОВЕРКИ)
IF[ #5 LT 1 ] THEN #3000=201 (N<1)
IF[ #3 GE 0 ] THEN #3000=202 (ГЛУБИНА ДОЛЖНА БЫТЬ МИНУС)
IF[ #4 LE 0 ] THEN #3000=203 (F<=0)
IF[ #8 LT 0.5 ] THEN #3006=4 (R НИЗКАЯ — ПРОВЕРЬ)

(— МОДАЛИ И БЕЗОПАСНОСТЬ)
G90 G17
S#9 M3
IF[ #10 GT 0 ] THEN M8

G98            (Возврат в начальную точку после цикла)
G00 X#1 Y#2
G00 Z#8

(— ОПРЕДЕЛЕНИЕ ЦИКЛА G81/G83 ПО ПАРАМЕТРУ #14)
IF[ #14 LE 0 ] THEN #15=81      (режим гладкого сверления)
IF[ #14 GT 0 ] THEN #15=83      (режим прерывистого сверления)

(— СТОРОЖ ОТ БЕСКОНЕЧНЫХ ЦИКЛОВ)
#501 = 0        (счётчик итераций)
#502 = 10000    (жёсткий верхний лимит)

(— ВЕТКА 1: ЛИНИЯ (по X, шаг #6, всего #5))
IF[ #11 EQ 1 ] THEN
    #I=0
    WHILE[ #I LT #5 ] DO1
        IF[ #501 GE #502 ] THEN #3000=204 (OVERFLOW LINE)
        IF[ #14 LE 0 ] THEN G#15 X[#1 + #I*#6] Y#2 Z#3 R#8 F#4
        IF[ #14  GT 0 ] THEN G#15 X[#1 + #I*#6] Y#2 Z#3 R#8 Q#14 F#4
        #I = #I + 1
        #501 = #501 + 1
    END1
ENDIf

(— ВЕТКА 2: СЕТКА N x Ny (шаги #6,#13), строки по Y)
IF[ #11 EQ 2 ] THEN
    IF[ #12 LT 1 ] THEN #3000=205 (Ny<1 ДЛЯ СЕТКИ)
    #ix=0
    WHILE[ #ix LT #5 ] DO2
        #iy=0
        WHILE[ #iy LT #12 ] DO3
            IF[ #501 GE #502 ] THEN #3000=206 (OVERFLOW GRID)
            #Xpos = #1 + #ix*#6
            #Ypos = #2 + #iy*#13
            IF[ #14 LE 0 ] THEN G#15 X#Xpos Y#Ypos Z#3 R#8 F#4
            IF[ #14  GT 0 ] THEN G#15 X#Xpos Y#Ypos Z#3 R#8 Q#14 F#4
            #iy = #iy + 1
            #501 = #501 + 1
        END3
        #ix = #ix + 1
    END2
ENDIf

(— ВЕТКА 3: ОКРУЖНОСТЬ — #5 отверстий по кругу радиуса #6, центр #1/#2)
IF[ #11 EQ 3 ] THEN
    #k=0
    WHILE[ #k LT #5 ] DO4
        IF[ #501 GE #502 ] THEN #3000=207 (OVERFLOW CIRCLE)
        #ang = 360./#5 * #k
        #Xc  = #1 + #6 * COS[#ang]
        #Yc  = #2 + #6 * SIN[#ang]
        IF[ #14 LE 0 ] THEN G#15 X#Xc Y#Yc Z#3 R#8 F#4
        IF[ #14  GT 0 ] THEN G#15 X#Xc Y#Yc Z#3 R#8 Q#14 F#4
        #k = #k + 1
        #501 = #501 + 1
    END4
ENDIf

G80           (Отмена сверлильных циклов)
G00 Z#8
M9
M5
M99

Быстрые подсказки

  • Для зенковки используйте G82 и добавьте P — паузу на дне.
  • При необходимости замените G98 на G99, чтобы возврат шёл на R‑плоскость.
  • Параметр #14 > 0 — включает G83 с пеком Q (уточните единицы пека в документации вашей стойки).
  • Контролируйте сторож: #501 инкрементируется, #502 — лимит; при переполнении сработает авария.
Товар добавлен в сравнение