ЩУПЫ.РФ — Купить щупы для ЧПУ от Renishaw и других брендов в РФ
Как написать макрос измерения для ЧПУ

Как написать макрос измерения для ЧПУ

макрос измерения чпумакропрограммированиеG65Fanucизмерительный цикл

Стандартные измерительные циклы закрывают 80% задач — но что делать, когда нужно измерить нестандартный элемент, записать результат в конкретный корректор или принять решение прямо внутри программы? Ни один готовый цикл этого не сделает.

В этой статье разберём структуру пользовательского макроса измерения для ЧПУ: как устроены переменные, как вызвать щуп, обработать результат и записать коррекцию — на примере Fanuc Custom Macro B, с параллелями для Heidenhain и Siemens Sinumerik.


Что такое макрос измерения и зачем он нужен

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

Некоторые размеры, которые необходимо контролировать при обработке детали, не могут быть измерены с помощью стандартных измерительных циклов, реализованных в ЧПУ. Именно для таких случаев и существует пользовательское макропрограммирование.

Ключевое правило: макрос измерения — это не просто «щуп + запись координаты». Это логический блок: подвод → касание → считывание переменной → вычисление отклонения → запись в корректор → безопасный отвод.


Архитектура макроса: переменные и их типы

На Fanuc (Custom Macro B) все вычисления ведутся через системные переменные. Понимание их типов — основа грамотного макроса.

Локальные переменные (#1–#33)

Используются только внутри текущего вызова макроса. Аргументы, переданные через G65, попадают именно сюда: адрес A → #1, B → #2, X → #24, Y → #25, Z → #26 и т.д.

Общие переменные (#100–#199, #500–#999)

#100–#199 обнуляются при сбросе питания. #500–#999 сохраняются в памяти ЧПУ постоянно — используйте их для хранения эталонных значений и накопленных коррекций.

Системные переменные (#1000 и выше)

Содержат данные о положении осей, состоянии щупа, корректорах инструмента. Ключевые для измерений:

ПеременнаяСодержание
#5021Текущая позиция по X в МСК
#5022Текущая позиция по Y в МСК
#5023Текущая позиция по Z в МСК
#5061Позиция по X в момент пропуска (G31)
#5062Позиция по Y в момент пропуска (G31)
#5063Позиция по Z в момент пропуска (G31)
#2001–#2200Корректоры геометрии инструмента
#2401–#2600Корректоры износа инструмента

Макропрограммы Fanuc (обычно серия 9000) обеспечивают точность определения координат на микронном уровне — в зависимости от применяемого щупа.


Вызов щупа и команда G31

Измерение строится на команде G31 (пропуск по сигналу). Щуп движется в заданном направлении, и как только срабатывает датчик касания, ЧПУ фиксирует текущие координаты в переменных #5061–#5063 и прерывает движение.

Базовая структура измерительного кадра:

G91 G31 Z-20. F200

Здесь: инкрементальное перемещение по Z на 20 мм вниз со скоростью 200 мм/мин. При касании координата Z фиксируется в #5063.

Важно: перед G31 щуп должен быть активирован (выдвинут, включён радиоканал). На большинстве станков это реализуется через M-функцию, заданную производителем, — например, M51/M50 у Renishaw или через обращение к PMC-сигналам.

Проверка факта касания

После G31 всегда проверяйте, произошло ли касание, или щуп прошёл полный путь вхолостую:

IF [#5063 EQ #5023] THEN #3000=1 (PROBE NO CONTACT)

Если переменная пропуска совпадает с текущей позицией до команды — касания не было. Это критически важная защита от ложных результатов.


Пример: макрос измерения торца детали по оси Z

Задача: измерить фактическое положение верхнего торца детали и скорректировать нулевую точку G54 по Z.

O9001 (MEASURE Z SURFACE)
;
#100 = #5023        (запомнить текущую Z перед движением)
G91 G31 Z-30. F150  (движение к детали, ожидание касания)
#101 = #5063        (зафиксировать Z касания)
;
IF [#101 EQ #100] THEN #3000=10 (ОШИБКА: НЕТ КАСАНИЯ)
;
G91 G0 Z5.          (безопасный отвод)
;
; Вычислить отклонение от эталона (#500 = эталонная Z)
#102 = #101 - #500
;
; Записать коррекцию в G54 (смещение Z = системная переменная #5203)
#5203 = #5203 + #102
;
M99                 (конец макроса, возврат)

Вызов макроса из основной программы:

G65 P9001

Для измерительной системы Renishaw вызов готового цикла выглядит так: G65 P9814 D50 Z-10 S4 — цикл обмера отверстия/вала, или G65 P9815 X0 Y0 I20 J20 S6 — цикл обмера внутреннего углового элемента. Ваш собственный макрос использует ту же механику вызова через G65.


Передача аргументов: делаем макрос универсальным

Жёстко прописанные значения в теле макроса — плохая практика. Используйте аргументы G65, чтобы один макрос работал для разных деталей и позиций.

G65 P9001 Z-30. F150. A#500

Внутри макроса:

  • #26 = переданное значение Z (глубина подвода)
  • #9 = скорость подвода (адрес F → #9)
  • #1 = эталонное значение (адрес A → #1)

Кадр движения тогда принимает вид:

G91 G31 Z[#26] F[#9]

Это позволяет использовать один макрос O9001 для измерения любой поверхности по Z, просто меняя аргументы вызова.

Ключевое правило: храните эталонные значения в переменных #500–#999. Они сохраняются при отключении питания и не сбрасываются при нажатии RESET.


Запись результатов в корректоры

Зонд перемещается в заданную точку и при касании определяет фактические геометрические параметры. Полученные данные заносятся в таблицу корректоров инструмента в ЧПУ.

На Fanuc корректоры инструмента доступны через системные переменные:

Тип коррекцииПеременнаяПример
Геометрия (длина) инструмента T01#2001#2001 = #2001 + #102
Износ (длина) инструмента T01#2401#2401 = #102
Смещение G54 по X#5201#5201 = #5201 - #101
Смещение G54 по Y#5202#5202 = #5202 - #101
Смещение G54 по Z#5203#5203 = #5203 + #102

Запись коррекций на Heidenhain (Q-параметры)

На TNC 640 вместо # используются Q-параметры. Команда FN 18: SYSREAD считывает системные данные, CYCL DEF 9.0 и пользовательские циклы — аналог макросов Fanuc:

FN 18: SYSREAD Q1 ID210 NR4 IDX1  ; считать позицию X
Q10 = Q1 - Q50                    ; отклонение от эталона
FN 13: ERROR = 10                  ; выдать ошибку при выходе из допуска

Запись коррекций на Siemens Sinumerik

В Sinumerik используются переменные типа R (R1–R249) и системные переменные $AA_IM[X] (позиция по оси). Запись в коррекцию инструмента:

$TC_DP3[1,1] = $TC_DP3[1,1] + R10

Ветвление и обработка ошибок

Макрос без логики ветвления — просто последовательность кадров. Настоящая мощь приходит с условными операторами.

IF / GOTO на Fanuc:

IF [#102 GT 0.1] GOTO 100   (если отклонение более 0.1 мм — прыжок)
IF [#102 LT -0.1] GOTO 200  (если отклонение < -0.1 мм — прыжок)
GOTO 300                     (иначе — в допуске)
N100 #3000=20 (РАЗМЕР ЗАВЫШЕН — БРАК)
N200 #3000=21 (РАЗМЕР ЗАНИЖЕН — БРАК)
N300 (РАЗМЕР В ДОПУСКЕ — ПРОДОЛЖИТЬ)

WHILE-цикл для многоточечного измерения:

#150 = 0       (счётчик точек)
#151 = 0       (накопитель суммы)
WHILE [#150 LT 4] DO1
  G65 P9001    (измерение в текущей точке)
  #151 = #151 + #101
  #150 = #150 + 1
  G91 G0 X25.  (шаг к следующей точке)
END1
#152 = #151 / 4  (среднее из 4 точек)

Такие циклы позволяют ускорить наладку, повысить качество обработки, снизить количество брака и автоматически корректировать смещения, обеспечивая высокую стабильность в серийном производстве.


Безопасность и отладка макроса

Написать макрос — половина дела. Безопасная отладка — вторая половина.

Перед первым запуском:

  • Запустите макрос в режиме Single Block (покадровое выполнение)
  • Установите подачу F на 10–20% через Override
  • Проверьте значения переменных вручную через экран диагностики ЧПУ

Типичные ошибки:

  • Нет безопасного отвода после касания — щуп остаётся в контакте с деталью при следующем движении
  • Запись в неверный корректор — например, #2001 вместо #2401: геометрия вместо износа
  • Не проверяется факт касания — макрос записывает «нулевое» касание как реальный результат
  • Нет ограничения на максимальное отклонение — при случайном промахе макрос запишет в корректор значение 30 мм вместо 0.03 мм

Ключевое правило: всегда ограничивайте максимально допустимое значение коррекции: IF [ABS[#102] GT 1.0] THEN #3000=99. Защита от аварийной записи в корректоры — обязательна.

Подобрать измерительный щуп для вашего станка →


Быстрая памятка: как написать макрос измерения

  1. Определить задачу → что измеряем (поверхность, отверстие, торец), куда записываем результат (G54, корректор инструмента)
  2. Выбрать переменные → #100–#199 для промежуточных, #500–#999 для эталонов и накоплений
  3. Написать подвод → G0 к точке старта, затем G31 с рабочей подачей 100–300 мм/мин
  4. Считать результат → #5061/#5062/#5063 для позиции касания
  5. Проверить касание → сравнить переменную пропуска с исходной позицией, при несовпадении — аварийный останов
  6. Вычислить отклонение → разница между фактом и эталоном
  7. Ограничить коррекцию → ABS-проверка перед записью в корректор
  8. Записать коррекцию → в #5201–#5206 (G54–G59) или #2001–#2999 (инструмент)
  9. Безопасный отвод → G0 от детали перед M99
  10. Отладить в Single Block → проверить все переменные на экране диагностики

Смотреть измерительные щупы для ЧПУ →


Связанные статьи

Запросить ценуTelegram