Перейти к содержанию
  • Лента
  • Популярные
  • Последние
  • Теги
  • Пользователи
  • Сотрудничество
Свернуть
Логотип бренда
Категории
  1. Промышленный форум
  2. Категории
  3. ПO для чпу
  4. Программирование ЧПУ | CNC
  5. Макрос WHILE для параметрического G84 на 840D

Макрос WHILE для параметрического G84 на 840D

Запланировано Прикреплена Закрыта Перенесена Программирование ЧПУ | CNC
g84while макрос840d нарезание
1 Сообщения 1 Постеры 0 Просмотры 1 Отслеживают
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • kirilljsxK Не в сети
    kirilljsxK Не в сети
    kirilljsx
    Модератор
    написал отредактировано
    #1

    Обложка: Как написать макрос на Siemens 840D с WHILE для параметрического цикла G84 нарезания резьбы массива с контролем нагрузки без SCADA

    Нарезание резьбы массивом отверстий - задача, которая заставляет писать код, а не кликать по кнопкам в интерфейсе. Когда нужно обработать десяток, сотню или тысячу резьб с контролем нагрузки, без параметрической логики не обойтись. Сейчас разберёмся, как завязать WHILE-цикл на G84, чтобы станок сам понимал, когда метчик упирается в нагрузку и когда можно переходить к следующему отверстию.

    G84 - это штатный цикл нарезания резьбы на 840D. Шпиндель вращается по часовой, загоняет метчик в глубину, затем реверсит - и инструмент выходит. Но когда массив координат лежит в таблице, а нагрузка скачет в зависимости от материала и подачи, хочется подстроить параметры на лету. Вот тут и нужен макрос с циклом WHILE - чтобы проверять текущие значения и принимать решения прямо в программе.

    Логика параметрического цикла: где брать данные

    На Siemens 840D есть переменные, которые ты можешь читать прямо из ЧПУ. Нагрузка на шпиндель висит в параметрах диагностики, частоту вращения выставляешь сам, подачу тоже. Идея вот в чём: ты программируешь G84 не с жёсткими цифрами подачи, а с переменной, которая меняется в зависимости от того, как себя ведёт метчик.

    Самый полезный параметр - это момент на шпинделе или ток привода. Если ток превышает порог, значит, метчик буксует или упирается в стружку. Второй важный параметр - это координаты из массива данных. Ты берёшь координаты X, Y из таблицы, подгружаешь их в переменные, и G84 работает с этими переменными, а не с прямыми числами.

    Полезные моменты при работе с нагрузкой:

    • Читай текущий ток шпинделя через системный параметр (обычно это AD параметр или встроенная переменная вроде $A_CURRENT)
    • Устанавливай порог срабатывания - например, если ток превысил 80% от номинала, то снизь подачу на 30%
    • Проверяй тип стружки - если она длинная и вязкая, нужна более агрессивная подача, чем для хрупкого чугуна
    • Используй паузу P в G84 для выхода стружки, если материал сложный

    Структура WHILE-макроса для массива отверстий

    Макрос строится так: основной цикл перебирает строки таблицы, вложенный WHILE следит за нагрузкой, при её скачках корректирует подачу, а потом запускает G84. Получается двухуровневое управление - верхний цикл итерирует по координатам, нижний - по попыткам нарезания при разных подачах.

    Вот скелет логики: инициализируешь переменные счётчика и массива координат, входишь в основной FOR или WHILE (перебор отверстий), внутри него запускаешь вложенный цикл на WHILE, который следит за нагрузкой и корректирует подачу, после успешного G84 переходишь к следующему отверстию. Если нагрузка не приходит в норму после нескольких попыток, макрос может либо остановиться с ошибкой, либо перейти в режим критически низкой подачи (на усмотрение технолога).

    Типичная структура макроса выглядит так:

    • Инициализация переменных: счётчик отверстий, базовая подача, минимальная и максимальная подача, порог нагрузки
    • Главный цикл (FOR или WHILE): перебор массива координат
    • Локальная переменная подачи: берёшь базовую подачу, потом она меняется в зависимости от нагрузки
    • Вложенный WHILE: проверяется нагрузка, если высокая - подача снижается, потом снова запускается попытка G84
    • Выход из вложенного цикла: когда нагрузка приходит в норму или количество попыток исчерпано
    • G84 с переменными: цикл работает с переменными X, Y, Z, F (подача)
    • Переход к следующему: счётчик увеличивается, координаты обновляются из таблицы

    Пример кода: как это выглядит на практике

    Никаких готовых решений не будет - статья про логику, а не про copy-paste. Но структуру покажу, чтобы ты понимал, как обвязать всё это.

    DEF INT i=0
    DEF REAL feed_base=0.15
    DEF REAL feed_current=feed_base
    DEF REAL load_threshold=75
    DEF REAL load_current=0
    DEF INT retry_count=0
    DEF INT max_retries=3
    
    WHILE (i < total_holes)
      ; Загружаем координаты из таблицы
      x_coord = coord_table[i]
      y_coord = coord_table[i]z_depth = coord_table[i]feed_current = feed_base
      retry_count = 0
      
      ; Вложенный цикл: следим за нагрузкой
      WHILE (retry_count < max_retries)
        ; Читаем текущую нагрузку (зависит от СУ)
        load_current = GET_LOAD()  ; псевдокод
        
        IF (load_current > load_threshold)
          feed_current = feed_current * 0.7  ; Снижаем подачу на 30%
          retry_count = retry_count + 1
        ELSE
          ; Нагрузка в норме, можно нарезать
          G84 X{x_coord} Y{y_coord} Z{z_depth} F{feed_current} P500
          BREAK  ; Выходим из вложенного цикла
        ENDIF
      ENDWHILE
      
      i = i + 1
    ENDWHILE
    

    Это упрощённый вариант, но смысл понятен. Реальный код будет более сложным, потому что нужно учитывать:

    • Как именно читается нагрузка на конкретной стойке (у разных производителей - разные переменные)
    • Нужна ли пауза между попытками или можно сразу реверсить и снова загонять метчик
    • Как обрабатывать ошибки, если метчик сломался
    • Логирование попыток (в памяти ЧПУ или в файл на ПК)

    Подвохи и нюансы: где обычно ломается

    Программирование на 840D - это не HTML, где ошибка в одной строке не повалит весь документ. Здесь мелочь приводит к том, что метчик ломается, программа зависает или станок начинает пилить воздух. Вот самые частые грабли.

    Первый подвох - синтаксис переменных. На 840D используются как глобальные переменные (начинаются с $), так и локальные (просто имя). Если ты забудешь объявить переменную правильно, код не скомпилируется. Если ты будешь писать в переменную, которая только для чтения (вроде текущих координат оси), получишь ошибку при исполнении.

    Второй подвох - синхронизация с шпинделем. Когда ты отправляешь G84, шпиндель начинает вращаться, но код может продолжить исполняться, пока шпиндель ещё работает. Нужно вставить ожидание (обычно G4 или встроенная команда ожидания), чтобы макрос не полезел дальше, пока G84 не закончился.

    Третий подвох - чтение параметров нагрузки. На разных версиях 840D параметры расположены в разных местах. На 840D sl это одно, на 840Di - другое. Нужно заранее узнать, какой параметр отвечает за нагрузку именно на твоей стойке. Обычно это в диагностике или в таблице системных параметров.

    Четвёртый подвох - граница между попытками. Если подача упала уже на 10% от базовой, а нагрузка всё ещё высокая, нужно честно остановиться и позвать оператора. Иначе программа будет вертеть метчик с микроскопической подачей часами, пока не сломается.

    Что точно нужно проверить перед запуском:

    • Глубина Z должна быть правильно посчитана (не на полмиллиметра больше, не на полмиллиметра меньше)
    • Шаг резьбы соответствует подаче (если резьба М8 с шагом 1.25, то подача при 500 об/мин должна быть 1.25 * 500 / 60 = примерно 10 мм/мин, а не 0.15 мм/мин)
    • Плоскость отвода R выше начального уровня, иначе G84 будет резать воздух
    • Метчик используется с нужной поправкой на длину вылета

    Контроль нагрузки: как настроить пороги

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

    Для нержавейки 30Х13 (или других аустенитных) подача обычно низкая, потому что материал вязкий и стружка налипает. Пороги нагрузки можно установить на 60-65% от номинала, потому что превышение означает, что стружка забивает канавки метчика. Для чугуна СЧ15-32 материал хрупкий, стружка короткая, можно смелее с подачей. Пороги можно поднять до 75-80%, потому что нагрузка вырастет только если метчик зажимает (например, если остатки стружки не вывели).

    Таблица рекомендуемых порогов для разных материалов:

    Материал Тип стружки Порог нагрузки, % Начальная подача, мм/мин Заметки
    Нержа (AUS) Вязкая, налипает 60-65 0.10-0.12 Нужна пауза для вывода стружки
    Чугун СЧ Хрупкая, короткая 75-80 0.15-0.20 Можно более агрессивная подача
    Алюминий Вязкая, длинная 55-60 0.12-0.18 Высокий риск налипания
    Латунь Короткая, чистая 70-75 0.15-0.25 Отличная обрабатываемость
    Сталь конструкционная Средняя 65-70 0.12-0.18 Универсальный вариант

    Как правильно подобрать пороги для своего случая:

    • Запусти программу с консервативными значениями (низкая подача, низкий порог) и посмотри, как растёт нагрузка
    • Отметь момент, когда появляется звук скрежета или когда стружка начинает налипать на метчик (по звуку, вибрации, или по повышению нагрузки)
    • Отними 10-15% от нагрузки в этот момент - это твой порог для автоматического снижения подачи
    • Проверь несколько материалов из одной партии, чтобы убедиться, что порог универсален

    Без SCADA: как обойтись встроенными средствами 840D

    СCАДА - это внешняя система, которая сидит на ПК и разговаривает со станком через Ethernet. Красиво, мощно, но дорого и медленно. Когда ты пишешь макрос прямо на 840D, то работаешь с локальными переменными ЧПУ, и ответ приходит за миллисекунды. SCADA обычно обновляет данные каждые 100-500 мс, и контролировать нагрузку в реальном времени через неё - это как водить танк по доту через мобильный интернет.

    Что даёт встроенный макрос без SCADA:

    • Скорость реакции: контур замыкается на самом ЧПУ, без сетевых задержек
    • Надёжность: если связь упадёт (а она упадёт), станок всё ещё может работать по программе
    • Простота: не нужно писать на C++, не нужно разбираться с SDK Siemens, просто G-код и встроенный язык программирования
    • Экономия: не нужно покупать лицензию SCADA, не нужен отдельный ПК с ОС реального времени

    Отступление: 840D имеет встроенный интерпретатор CNC-программ и собственный язык для параметрического программирования (что-то между ассемблером и Паскалем). Это позволяет писать циклы, условия, функции прямо в программе, без внешних систем. Для контроля нагрузки при нарезании резьбы этого более чем достаточно.

    Что ты можешь делать встроенными средствами 840D:

    • Читать диагностические параметры (нагрузка, обороты, позиция осей)
    • Записывать значения в переменные и использовать их в G-коде
    • Выполнять условную логику (IF-THEN-ELSE, WHILE, FOR)
    • Прерывать программу с сообщением об ошибке или переходить на альтернативный путь кода
    • Логировать события в памяти ЧПУ (на некоторых версиях)

    Что ты НЕ можешь делать без SCADA:

    • Отправлять данные на ПК в реальном времени (только через файлы, которые потом копируешь с портативки)
    • Менять параметры станка из интерфейса SCADA (смену оборотов, к примеру, нужно вшить в программу или выбрать через консоль ЧПУ)
    • Визуализировать процесс на большом мониторе в цехе
    • Запускать программы с удалённого ПК (только через панель оператора на самом станке)

    Практический пример: как завязать всё вместе

    Предположим, у тебя есть деталь с 20 отверстиями под резьбу М5 с шагом 0.8, разбросанными по всей поверхности. Материал - нержа 08Х17Т (аустенитная, вязкая). Надо нарезать все 20 без поломок метчика и без ручной переналадки подачи между отверстиями.

    План действия: координаты 20 отверстий заносишь в таблицу (можно прямо в текст программы, можно в отдельный файл, который программа читает). Глубина резьбы - скажем, 10 мм. Базовая подача для М5 при 400 об/мин: 0.8 * 400 / 60 = 5.33 мм/мин, но для нержи лучше снизить в 1.5-2 раза, получится 0.10-0.12 мм/мин. Порог нагрузки ставишь на 62% (для нержи это норма). Если нагрузка выше - подача снижается на 20% за каждую попытку. Если за 3 попытки не удалось - алармировать и остановиться.

    Код (псевдокод, потому что реальный синтаксис 840D зависит от версии):

    ; Параметры резьбы
    DEF INT hole_count = 20
    DEF REAL thread_depth = 10
    DEF REAL feed_base = 0.11
    DEF INT spindle_rpm = 400
    DEF REAL load_limit = 62
    DEF REAL feed_min = 0.03
    
    ; Переменные цикла
    DEF INT i = 0
    DEF REAL x, y, z
    DEF REAL feed = feed_base
    DEF INT attempts = 0
    DEF REAL current_load = 0
    
    ; Таблица координат (X, Y в мм)
    REAL coord= {
      {10, 10}, {30, 10}, {50, 10}, {70, 10},
      {10, 30}, {30, 30}, {50, 30}, {70, 30},
      {10, 50}, {30, 50}, {50, 50}, {70, 50},
      {10, 70}, {30, 70}, {50, 70}, {70, 70},
      {20, 20}, {40, 40}, {60, 20}, {60, 60}
    }
    
    ; Главный цикл
    WHILE (i < hole_count)
      x = coord[i]
      y = coord[i]z = thread_depth
      feed = feed_base
      attempts = 0
      
      ; Вложенный цикл попыток нарезания
      WHILE (attempts < 3)
        ; Имитация чтения нагрузки (в реальности - правильный параметр)
        current_load = GET_SPINDLE_LOAD()  ; Функция зависит от ЧПУ
        
        IF (current_load < load_limit AND feed > feed_min)
          ; Нагрузка в норме, нарезаем резьбу
          M3 S{spindle_rpm}        ; Вращение шпинделя CW
          G84 X{x} Y{y} Z{z} F{feed} P300  ; Цикл нарезания
          G4 P1000                 ; Пауза 1 сек после G84
          M5                       ; Стоп шпинделю
          BREAK                    ; Выход из цикла попыток
        ELSE
          ; Нагрузка высокая, снижаем подачу
          feed = feed * 0.8
          attempts = attempts + 1
          IF (feed < feed_min)
            ; Подача упала ниже допустимого
            ALARM(200, "Резьба M5 отверстие %d: подача достигла минимума", i+1)
            M0  ; Стоп программы
          ENDIF
        ENDIF
      ENDWHILE
      
      i = i + 1
    ENDWHILE
    
    M30  ; Конец программы
    

    Что происходит в этом коде:

    • Цикл перебирает 20 отверстий по очереди
    • Для каждого отверстия берутся координаты X, Y из таблицы
    • Глубина Z одна и та же для всех (10 мм)
    • Вложенный цикл проверяет нагрузку, и если высокая - снижает подачу на 20%
    • G84 с переменными выполняет цикл нарезания при текущей подаче
    • Если подача упала ниже минимума (0.03 мм/мин), программа останавливается с алармом
    • После успешного G84 переход к следующему отверстию

    На что ещё обратить внимание

    Остаток за кадром - это мелочи, которые легко упустить, но они ломают программу. Например, коррекция вылета инструмента. Если у тебя метчик вставлен в переходник или прямо в шпиндель, его вылет (расстояние от узла шпинделя до кончика метчика) меняется. На 840D это учитывается через смещение инструмента в таблице. Если вылет неправильно, глубина Z получится неправильной, и либо резьба будет поверхностной, либо метчик упрёшься в дно отверстия.

    Ещё один момент - реверс шпинделя. G84 предполагает, что шпиндель сам реверсит (вращается туда, потом обратно). Но на некоторых стойках нужно явно прописать М4 (реверс) перед G84, иначе цикл не сработает. Проверь документацию своего 840D, какие команды движения шпинделя требует G84 на твоей конфигурации.

    1 ответ Последний ответ
    0

    Здравствуйте! Похоже, вас заинтересовал этот пост, но у вас ещё нет аккаунта.

    Надоело каждый раз пролистывать одни и те же посты? Зарегистрировав аккаунт, вы всегда будете возвращаться на ту же страницу, где были раньше, и сможете выбирать, получать ли уведомления о новых ответах (по электронной почте или в виде push-уведомлений). Вы также сможете сохранять закладки и ставить лайки постам, чтобы выразить свою благодарность другим участникам сообщества.

    С вашими комментариями этот пост мог бы стать ещё лучше 💗

    Зарегистрироваться Войти

    • kirilljsxK

      Макрос на Fanuc с G65 для параметрического G86 рассверливания с контролем нагрузки

      Отслеживается Игнорируется Запланировано Прикреплена Закрыта Перенесена Программирование ЧПУ | CNC макрос fanuc g86 цикл контроль нагрузки
      1
      1
      0 Голоса
      1 Сообщения
      0 Просмотры
      Нет ответов
    • kirilljsxK

      Макрос G65 для цикла G81: параметрический сверловочный массив

      Отслеживается Игнорируется Запланировано Прикреплена Закрыта Перенесена Программирование ЧПУ | CNC макропрограммирование g65 g81 fanuc
      1
      1
      0 Голоса
      1 Сообщения
      1 Просмотры
      Нет ответов
    • kirilljsxK

      Макрос на Fanuc с G66 для G70: параметрический финиш с контролем припуска

      Отслеживается Игнорируется Запланировано Прикреплена Закрыта Перенесена Программирование ЧПУ | CNC fanuc макрос g70 цикл g66 параметр
      1
      1
      0 Голоса
      1 Сообщения
      2 Просмотры
      Нет ответов
    • kirilljsxK

      Макрос WHILE для G73: параметрический цикл сверления на Fanuc

      Отслеживается Игнорируется Запланировано Прикреплена Закрыта Перенесена Программирование ЧПУ | CNC g73 параметрическое программирование макросы while
      1
      1
      0 Голоса
      1 Сообщения
      7 Просмотры
      Нет ответов
    • kirilljsxK

      Макрос WHILE на Fanuc для фрезеровки массива отверстий

      Отслеживается Игнорируется Запланировано Прикреплена Закрыта Перенесена Программирование ЧПУ | CNC while макрос параметрическая фрезеровка fanuc g-код
      1
      1
      0 Голоса
      1 Сообщения
      8 Просмотры
      Нет ответов
    • kirilljsxK

      Макрос Fanuc для G84: резьба с защитой от обрыва метчика и авто-подачей

      Отслеживается Игнорируется Запланировано Прикреплена Закрыта Перенесена Программирование ЧПУ | CNC макрос fanuc g84 резьба защита метчика
      1
      1
      0 Голоса
      1 Сообщения
      5 Просмотры
      Нет ответов
    • kirilljsxK

      Макрос стружкоотвода для Sinumerik 840D в титане: фиксим кривой пост Mastercam

      Отслеживается Игнорируется Запланировано Прикреплена Закрыта Перенесена Программирование ЧПУ | CNC sinumerik 840d макрос стружкоотвода титан cnc
      1
      1
      0 Голоса
      1 Сообщения
      2 Просмотры
      Нет ответов
    • kirilljsxK

      G-код G84: цикл нарезания резьбы в Fanuc - полный разбор и примеры

      Отслеживается Игнорируется Запланировано Прикреплена Закрыта Перенесена Программирование ЧПУ | CNC g84 fanuc нарезание резьбы
      1
      0 Голоса
      1 Сообщения
      76 Просмотры
      Нет ответов

    Категории

    • Главная
    • Новости
    • Объявления
    • ПО и ЧПУ
    • Обсуждение

    Контакты

    • Сотрудничество
    • forum@investsteel.ru

    © 2022 - 2026 InvestSteel, Inc. Все права защищены.

    Политика конфиденциальности
    • Войти

    • Нет учётной записи? Зарегистрироваться

    • Войдите или зарегистрируйтесь для поиска.
    • Первое сообщение
      Последнее сообщение
    0
    • Лента
    • Популярные
    • Последние
    • Теги
    • Пользователи
    • Сотрудничество