Перейти к содержанию

GOTO в ЧПУ-программировании: что это и как работает?

Программирование ЧПУ | CNC
1 1 234
  • Если вы видели в коде что-то вроде GOTO10 или IF [#1 GT 0] GOTO20 — это именно оно. Ну что ж, давайте разбираться для чего она нам нужна.

    Что такое GOTO?

    GOTO (от англ. go to) — безусловный переход к указанной строке (номеру блока) в программе.
    Используется для:

    • Циклов (например, повторная обработка).
    • Пропуска блоков кода.
    • Обработки условий (в связке с IF).

    Пример:

    O1000 (ПРОГРАММА С GOTO)
    G00 X0 Y0 Z5 (начальная позиция)
    N10 G01 Z-5 F100 (опускаемся на глубину)
    G01 X100 Y100 (обработка)
    GOTO10 (вернуться к строке N10)
    M30 (конец)
    

    Этот код будет бесконечно повторять обработку — GOTO10 отправляет выполнение обратно к строке N10.
    Проще говоря - переход к определенному участку и выполнения кода.

    Разберем как это работает

    Метки (N…): Каждая строка с номером (например, N10, N20) становится точкой перехода.

    Синтаксис:

    GOTO<номер_строки> (например, GOTO50)
    

    Ограничения:

    • Нельзя перейти в другую подпрограмму.
    • Не работает с циклами типа WHILE (только для базовых переходов).

    GOTO vs. IF: условные переходы
    Чаще используется IF + GOTO для ветвления:

    IF [#1 GT 10] GOTO30 (если переменная #1 >10, перейти к N30)
    G01 X50 Y50 (выполнится, если условие ложно)
    N30 G01 X100 Y100 (выполнится, если условие истинно)
    

    Если кто не знает, команда IF выполняет условие, и если уже говорить дословно “ЕСЛИ”


    Почему GOTO — зло?
    Рассмотрим основные проблемы:

    • Спагетти-код: Много переходов превращают программу в хаотичный набор строк.
    • Сложность отладки: Потеряться в циклах GOTO10-GOTO20-GOTO30 — проще простого.

    Лучше использовать альтернативы:

    • Циклы WHILE (если контроллер поддерживает).
    • Подпрограммы M98/M99.

    Пример реальной программы

    Задача: Просверлить 5 отверстий с шагом 20 мм по оси X.

    O1000 (СВЕРЛЕНИЕ С GOTO)
    G90 G54 G17 G40 G49 (настройки)
    M03 S2000 (пуск шпинделя)
    G00 X0 Y0 Z5 (подвод)
    
    #1=0 (счетчик отверстий)
    
    N10 G91 G81 Z-15 R2 F100 (цикл сверления)
    G90 X[#1*20] Y0 (перемещение к следующей позиции)
    #1=#1+1 (увеличить счетчик)
    IF [#1 LT 5] GOTO10 (повторить, пока не 5 отверстий)
    
    G80 G00 Z100 (отмена цикла, подъем)
    M30 (конец)
    

    Советы по использованию

    • Минимизируйте GOTO: Заменяйте на структурные команды (WHILE, M98).
    • Комментируйте: Пишите, зачем нужен переход (например, GOTO50 (переход к финишной обработке)).
    • Проверяйте: Всегда тестируйте программы с GOTO в режиме DRY RUN.