Системные переменные FANUC: руководство по параметрическому программированию
Введение
Системные переменные (System Variables) являются одним из наиболее мощных инструментов параметрического программирования в системах ЧПУ FANUC. Эти специальные переменные предоставляют доступ к внутренним состояниям станка, позволяя читать и модифицировать параметры обработки в реальном времени непосредственно из управляющей программы.
Системные переменные обозначаются символом решетки (#) и числовым индексом. В отличие от пользовательских переменных (#100-#999), системные переменные имеют фиксированные адреса и предопределенное назначение. Всего в системе FANUC определено более 20 000 системных переменных, охватывающих все аспекты работы станка — от координат позиций до состояния модальных функций.
Согласно исследованиям применения параметрического программирования на машиностроительных предприятиях, использование системных переменных позволяет:
Сократить время разработки управляющих программ на 30-50%
Повысить гибкость производства за счет адаптивного управления процессом
Снизить вероятность ошибок программирования на 40-60%
Реализовать интеллектуальные циклы обработки с автоматической коррекцией
Настоящее руководство предназначено для инженеров-технологов и программистов станков с ЧПУ FANUC, желающих освоить расширенные возможности параметрического программирования.
Официальная документация
Полная информация о системных переменных содержится в следующих официальных руководствах FANUC:
Основные документы:
FANUC Series 0i/0i Mate-MODEL F MACRO EXECUTOR/MACRO COMPILER PROGRAMMING MANUAL
Код документа: B-64513EN-1/01
Разделы: 3-6 (System Variables)
Год издания: 2019
FANUC Series 30i/31i/32i-MODEL B MACRO EXECUTOR/MACRO COMPILER PROGRAMMING MANUAL
Код документа: B-64513EN-2/02
Разделы: 4-7 (System Variables)
Год издания: 2020
FANUC 0i-F PLUS/30i/31i/32i OPERATOR'S MANUAL
Код документа: B-64484EN/03
Приложение B (System Variable List)
Год издания: 2021
Дополнительные ресурсы:
FANUC Technical Support: https://www.fanuc.eu/
Онлайн-документация: https://www.fanucamerica.com/products/cnc/controls
Справочная система CNC (клавиша HELP на пульте оператора)
Классификация системных переменных
Системные переменные FANUC можно разделить на несколько основных категорий по их функциональному назначению:
1. Переменные интерфейса (I/O) — #1000-#1135
Предоставляют доступ к сигналам входа/выхода программируемого контроллера PMC.
2. Переменные инструмента и коррекций — #2000-#2999, #10000-#19999
Хранят значения коррекций инструмента, смещений нулевых точек заготовки и другие параметры настройки.
3. Системные переменные управления — #3000-#3999
Управляют аварийными сигналами, таймерами, режимами обработки и другими системными функциями.
4. Модальные переменные — #4000-#4999
Содержат текущие состояния модальных G-кодов, M-кодов и других параметров станка.
5. Позиционные переменные — #5000-#5999
Предоставляют информацию о текущих координатах, положениях осей и траекториях движения.
6. Переменные смещений — #7000-#7999
Расширенные переменные для внешних смещений нулевых точек.
7. Расширенные переменные коррекций — #10000-#19999
Дополнительные области памяти для коррекций инструмента и смещений (для станков с большим количеством инструментов).
Таблица 1. Переменные интерфейса (I/O)
Входные сигналы
Переменная | Назначение | Доступ | Диапазон значений |
|---|---|---|---|
#1000 | Входной сигнал G054.0 | Чтение | 0 или 1 |
#1001 | Входной сигнал G054.1 | Чтение | 0 или 1 |
#1002 | Входной сигнал G054.2 | Чтение | 0 или 1 |
#1003 | Входной сигнал G054.3 | Чтение | 0 или 1 |
#1004 | Входной сигнал G054.4 | Чтение | 0 или 1 |
#1005 | Входной сигнал G054.5 | Чтение | 0 или 1 |
#1006 | Входной сигнал G054.6 | Чтение | 0 или 1 |
#1007 | Входной сигнал G054.7 | Чтение | 0 или 1 |
#1008 | Входной сигнал G055.0 | Чтение | 0 или 1 |
#1009 | Входной сигнал G055.1 | Чтение | 0 или 1 |
#1010 | Входной сигнал G055.2 | Чтение | 0 или 1 |
#1011 | Входной сигнал G055.3 | Чтение | 0 или 1 |
#1012 | Входной сигнал G055.4 | Чтение | 0 или 1 |
#1013 | Входной сигнал G055.5 | Чтение | 0 или 1 |
#1014 | Входной сигнал G055.6 | Чтение | 0 или 1 |
#1015 | Входной сигнал G055.7 | Чтение | 0 или 1 |
Примечание: Адреса G054 и G055 соответствуют входным сигналам PMC. Каждая переменная отражает состояние одного бита (0 = выключен, 1 = включен).
Выходные сигналы
Переменная | Назначение | Доступ | Диапазон значений |
|---|---|---|---|
#1032 | Выходной сигнал G056.0 | Чтение/Запись | 0 или 1 |
#1033 | Выходной сигнал G056.1 | Чтение/Запись | 0 или 1 |
... | ... | ... | ... |
Практический пример 1: Контроль состояния датчика заготовки
O1001 (CHECK WORKPIECE SENSOR) ;
N10 IF[#1000 EQ 0] GOTO 100 ; (Если датчик не сработал)
N20 (Продолжить обработку)
N30 G00 X50. Z100. ;
N40 M30 ;
N100 #3000=1 (WORKPIECE NOT DETECTED) ; (Вызвать аварию)
Практический пример 2: Управление внешним устройством
O1002 (CONTROL EXTERNAL CLAMP) ;
N10 #1032=1 ; (Включить зажим - сигнал G056.0)
N20 G04 X1.0 ; (Пауза 1 сек для зажима)
N30 (Обработка детали)
N40 G00 X100. Z100. M05 ;
N50 #1032=0 ; (Выключить зажим)
N60 M30 ;
Таблица 2. Коррекции инструмента и смещения
Коррекции инструмента (токарные станки)
Переменная | Назначение | Доступ | Применение |
|---|---|---|---|
#2001-#2064 | Геометрия инструмента по X (№1-64) | Чтение/Запись | Смещение 1-64 |
#2101-#2164 | Геометрия инструмента по Z (№1-64) | Чтение/Запись | Смещение 1-64 |
#2201-#2264 | Износ инструмента по X (№1-64) | Чтение/Запись | Смещение 1-64 |
#2301-#2364 | Износ инструмента по Z (№1-64) | Чтение/Запись | Смещение 1-64 |
#2401-#2449 | Радиус вершины резца (№1-49) | Чтение/Запись | Смещение 1-49 |
#2451-#2499 | Форма вершины резца (№1-49) | Чтение/Запись | Смещение 1-49 |
Формула расчета номера переменной:
Номер переменной = Базовый адрес + (Номер инструмента - 1)
Пример для геометрии X инструмента №5:
#2001 + (5 - 1) = #2004
Коррекции инструмента (фрезерные станки)
Переменная | Назначение | Доступ | Применение |
|---|---|---|---|
#11001-#11200 | Длина инструмента (№1-200) | Чтение/Запись | H-коррекция |
#11201-#11400 | Радиус инструмента (№1-200) | Чтение/Запись | D-коррекция |
#13001-#13200 | Износ длины (№1-200) | Чтение/Запись | H-износ |
#13201-#13400 | Износ радиуса (№1-200) | Чтение/Запись | D-износ |
Смещения нулевых точек заготовки
Переменная | Назначение | Оси | Применение |
|---|---|---|---|
#2500-#2506 | G54 смещение по осям X, Y, Z, 4-я, 5-я, 6-я | Все оси | Базовое смещение |
#2600-#2606 | G55 смещение | Все оси | Доп. смещение 1 |
#2700-#2706 | G56 смещение | Все оси | Доп. смещение 2 |
#2800-#2806 | G57 смещение | Все оси | Доп. смещение 3 |
#2900-#2906 | G58 смещение | Все оси | Доп. смещение 4 |
#3000-#3006 | G59 смещение | Все оси | Доп. смещение 5 |
Индексация по осям:
+0: Ось X
+1: Ось Y
+2: Ось Z
+3: 4-я ось
+4: 5-я ось
+5: 6-я ось
Практический пример 3: Автоматическая коррекция износа инструмента
O1003 (AUTO TOOL WEAR COMPENSATION) ;
(Контроль размера детали и автокоррекция)
N10 T0101 ; (Инструмент 1)
N20 G00 X50. Z100. ;
N30 #100=0 ; (Счетчик деталей)
N40 WHILE[#100 LT 100] DO1 ; (Цикл на 100 деталей)
N50 (Обработка детали)
N60 M98 P2000 ; (Подпрограмма обработки)
N70 IF[#100 MOD 10 EQ 0] THEN #150=#5021 ; (Каждые 10 деталей измерить X)
N80 IF[#100 MOD 10 EQ 0] THEN GOTO 200 ;
N90 #100=#100+1 ; (Инкремент счетчика)
N100 END1 ;
N110 M30 ;
N200 (Проверка размера и коррекция)
N210 #151=50.0 ; (Целевой размер)
N220 #152=#150-#151 ; (Отклонение)
N230 IF[ABS[#152] GT 0.05] THEN #3000=101 (SIZE OUT OF TOLERANCE) ;
N240 #2201=#2201+#152 ; (Коррекция износа по X для инструмента 1)
N250 #100=#100+1 ;
N260 GOTO 40 ;
Практический пример 4: Чтение и изменение смещения нулевой точки
O1004 (MODIFY WORKPIECE ZERO OFFSET) ;
N10 #100=#2500 ; (Прочитать текущее смещение G54 по X)
N20 #101=#2502 ; (Прочитать текущее смещение G54 по Z)
N30 (Вывод на экран)
N40 #3006=100[G54 X OFFSET] ;
N50 #3006=101[G54 Z OFFSET] ;
N60 (Изменение смещения на 5 мм по X)
N70 #2500=#2500+5.0 ; (Сдвиг нулевой точки на +5 мм)
N80 (Проверка нового значения)
N90 #100=#2500 ;
N100 #3006=100[NEW G54 X] ;
N110 M30 ;
Таблица 3. Системные переменные управления
Переменная | Назначение | Доступ | Значения/Описание |
|---|---|---|---|
#3000 | Макроаварийный сигнал | Запись | Запись ненулевого значения → аварийная остановка с кодом |
#3001 | Дата (год и месяц) | Чтение | YYYYMM (например, 202403 = март 2024) |
#3002 | Дата (день и час) | Чтение | DDHH (например, 1514 = 15 день, 14 часов) |
#3003 | Время (минута и секунда) | Чтение | MMSS (например, 3045 = 30 мин 45 сек) |
#3004 | Таймер (миллисекунды) | Чтение | 0-59999 мс, сброс каждую минуту |
#3005 | Число деталей | Чтение/Запись | Текущий счетчик деталей |
#3006 | Вывод на экран | Запись | Вывести значение переменной на экран станка |
#3007 | Вывод с комментарием | Запись | Формат: #3007=N[комментарий], где N - номер переменной |
| #3011 | Контроль режима покадрового выполнения | Чтение/Запись | 0 = выкл, 1 = вкл | | #3012 | Управление точной остановкой | Чтение/Запись | 0 = выкл, 1 = вкл |
| #3901 | Номер первой пустой ячейки M-кодов | Чтение | 0-8 | | #3902 | Номер последней пустой ячейки M-кодов | Чтение | 0-8 |
Практический пример 5: Вызов аварийной остановки с кодом
O1005 (MACRO ALARM EXAMPLE) ;
N10 #100=50.5 ; (Измеренный размер детали)
N20 #101=50.0 ; (Номинальный размер)
N30 #102=0.1 ; (Допуск)
N40 #103=#100-#101 ; (Отклонение)
N50 IF[ABS[#103] LE #102] GOTO 100 ; (Проверка допуска)
N60 (Размер вне допуска - остановка)
N70 #3000=100 (SIZE OUT OF TOLERANCE) ; (Аварийный сигнал 100)
N100 (Размер в допуске - продолжить)
N110 M30 ;
Формат аварийного сообщения:
#3000 = Код_ошибки (Текст сообщения) ;
Код ошибки отображается на экране станка как "MACRO ALARM XXX", где XXX - заданный код.
Практический пример 6: Использование таймера для контроля времени обработки
O1006 (MACHINING TIME CONTROL) ;
N10 #100=#3004 ; (Запомнить начальное время)
N20 (Обработка детали)
N30 G00 X50. Z100. ;
N40 G01 Z-50. F200 ;
N50 X100. ;
N60 G00 X150. Z100. ;
N70 #101=#3004 ; (Время окончания)
N80 #102=#101-#100 ; (Время обработки в мс)
N90 IF[#102 LT 0] THEN #102=#102+60000 ; (Коррекция при переходе через минуту)
N100 #102=#102/1000 ; (Конвертация в секунды)
N110 #3006=102[MACHINING TIME SEC] ; (Вывод на экран)
N120 M30 ;
Практический пример 7: Вывод информации на экран
O1007 (DISPLAY INFORMATION) ;
N10 #100=25.456 ; (Измеренный диаметр)
N20 #101=12 ; (Номер инструмента)
N30 #102=#3001 ; (Текущая дата)
N40 #3006=100[MEASURED DIA] ; (Вывод диаметра)
N50 #3006=101[TOOL NUMBER] ; (Вывод номера инструмента)
N60 #3006=102[DATE] ; (Вывод даты)
N70 (Альтернативный способ с переменной #3007)
N80 #3007=100[DIA] ; (Компактный вывод)
N90 M30 ;
Практический пример 8: Счетчик деталей с автоматической остановкой
O1008 (PART COUNTER WITH LIMIT) ;
N10 #150=100 ; (Целевое количество деталей)
N20 #3005=0 ; (Сброс счетчика)
N30 WHILE[#3005 LT #150] DO1 ;
N40 (Обработка одной детали)
N50 M98 P3000 ; (Подпрограмма обработки)
N60 #3005=#3005+1 ; (Инкремент счетчика)
N70 #3006=3005[PARTS COMPLETED] ; (Вывод текущего количества)
N80 END1 ;
N90 #3006=150[TARGET REACHED] ;
N100 M30 ;
Таблица 4. Модальные переменные
Модальные переменные позволяют получить информацию о текущем состоянии различных G-кодов, M-кодов и других параметров станка.
Переменная | Назначение | Значение | Примеры |
|---|---|---|---|
#4001 | Группа 01 (G00-G03) | Номер G-кода × 10 | 0=G00, 10=G01, 20=G02, 30=G03 |
#4002 | Группа 02 (плоскость) | Номер G-кода × 10 | 170=G17, 180=G18, 190=G19 |
#4003 | Группа 03 (абсолют/инкремент) | Номер G-кода × 10 | 900=G90, 910=G91 |
#4004 | Группа 04 (режим подачи) | Номер G-кода × 10 | 940=G94, 950=G95, 980=G98, 990=G99 |
#4005 | Группа 05 (смещение нулевой точки) | Номер G-кода × 10 | 540=G54, 550=G55, 560=G56, 570=G57, 580=G58, 590=G59 |
#4006 | Группа 06 (дюймы/метрика) | Номер G-кода × 10 | 200=G20, 210=G21 |
#4007 | Группа 07 (радиус/диаметр) | Номер G-кода (только токарные) | 700=G70, 710=G71 |
#4008 | Группа 08 (коррекция на резец) | Номер G-кода × 10 | 400=G40, 410=G41, 420=G42 |
#4009 | Группа 09 (постоянный цикл) | Номер G-кода × 10 | 730=G73, 740=G74, 810=G81, и т.д. |
#4010 | Группа 10 (возврат при постоянном цикле) | Номер G-кода × 10 | 980=G98, 990=G99 |
#4011 | Группа 11 (режим G61/G64) | Номер G-кода × 10 | 610=G61, 640=G64 |
#4012 | Группа 12 (интерполяция) | Номер G-кода × 10 | 130=G13.1 (деактивация полярных координат) |
#4013 | Группа 13 (режим управления подачей) | Номер G-кода × 10 | 61=G61, 641=G64.1 |
| #4102 | M-код | Последний выполненный M-код | 3, 5, 30, и т.д. | | #4107 | Номер блока | Номер текущего блока (N-кода) | Если блок N100, то 100 | | #4109 | Номер последовательности | Последовательный счетчик блоков | | | #4111 | Номер подпрограммы | Номер выполняемой подпрограммы | | | #4113 | Номер основной программы | O-номер основной программы | | | #4114 | Номер текущей программы | O-номер текущей программы | | | #4115 | Номер предыдущей программы | O-номер предыдущей выполненной программы | |
| #4119 | Подача F | Текущая запрограммированная подача | мм/мин или мм/об | | #4120 | Скорость шпинделя S | Текущая запрограммированная скорость | об/мин | | #4130 | Номер инструмента T | Номер текущего инструмента | |
Практический пример 9: Проверка активного смещения нулевой точки
O1009 (CHECK ACTIVE WORK OFFSET) ;
N10 #100=#4005 ; (Получить текущее смещение)
N20 IF[#100 EQ 540] GOTO 100 ; (G54)
N30 IF[#100 EQ 550] GOTO 200 ; (G55)
N40 IF[#100 EQ 560] GOTO 300 ; (G56)
N50 GOTO 400 ; (Другое смещение)
N100 #3006=100[USING G54] ;
N110 GOTO 500 ;
N200 #3006=100[USING G55] ;
N210 GOTO 500 ;
N300 #3006=100[USING G56] ;
N310 GOTO 500 ;
N400 #3006=100[UNKNOWN OFFSET] ;
N500 M30 ;
Практический пример 10: Контроль режима подачи
O1010 (FEEDRATE MODE CHECK) ;
N10 #100=#4004 ; (Получить режим подачи)
N20 IF[#100 EQ 980] GOTO 100 ; (G98 - мм/мин)
N30 IF[#100 EQ 990] GOTO 200 ; (G99 - мм/об)
N40 GOTO 300 ; (Другой режим)
N100 (Режим мм/мин)
N110 #101=500 ; (Подача 500 мм/мин)
N120 GOTO 400 ;
N200 (Режим мм/об)
N210 #101=0.25 ; (Подача 0.25 мм/об)
N220 GOTO 400 ;
N300 #3000=110 (UNKNOWN FEED MODE) ;
N400 G01 X50. F#101 ;
N410 M30 ;
Практический пример 11: Сохранение и восстановление модального состояния
O1011 (SAVE AND RESTORE MODAL STATE) ;
N10 (Сохранение текущего состояния)
N20 #110=#4001 ; (G00/G01/G02/G03)
N30 #111=#4002 ; (Плоскость G17/G18/G19)
N40 #112=#4003 ; (G90/G91)
N50 #113=#4119 ; (Подача F)
N60 #114=#4120 ; (Скорость S)
N70 (Изменение режимов для специальной операции)
N80 G00 G17 G90 ;
N90 G01 X50. Y25. F300 S1200 ;
N100 (Восстановление сохраненного состояния)
N110 IF[#110 EQ 0] THEN G00 ;
N120 IF[#110 EQ 10] THEN G01 ;
N130 IF[#111 EQ 170] THEN G17 ;
N140 IF[#111 EQ 180] THEN G18 ;
N150 IF[#112 EQ 900] THEN G90 ;
N160 IF[#112 EQ 910] THEN G91 ;
N170 F#113 S#114 ;
N180 M30 ;
Таблица 5. Позиционные переменные
Позиционные переменные предоставляют информацию о текущих координатах инструмента в различных системах координат.
Координаты конца блока (End Point)
Переменная | Ось | Система координат | Доступ |
|---|---|---|---|
#5001 | X | Координаты заготовки (с учетом G54-G59) | Чтение |
#5002 | Y | Координаты заготовки | Чтение |
#5003 | Z | Координаты заготовки | Чтение |
#5004 | 4-я ось | Координаты заготовки | Чтение |
#5005 | 5-я ось | Координаты заготовки | Чтение |
#5006 | 6-я ось | Координаты заготовки | Чтение |
#5007 | 7-я ось | Координаты заготовки | Чтение |
#5008 | 8-я ось | Координаты заготовки | Чтение |
Координаты в станочной системе (Machine Coordinate)
Переменная | Ось | Система координат | Доступ |
|---|---|---|---|
#5021 | X | Станочная система координат | Чтение |
#5022 | Y | Станочная система координат | Чтение |
#5023 | Z | Станочная система координат | Чтение |
#5024 | 4-я ось | Станочная система координат | Чтение |
#5025 | 5-я ось | Станочная система координат | Чтение |
#5026 | 6-я ось | Станочная система координат | Чтение |
#5027 | 7-я ось | Станочная система координат | Чтение |
#5028 | 8-я ось | Станочная система координат | Чтение |
Текущие координаты в системе заготовки (Workpiece Coordinate)
Переменная | Ось | Система координат | Доступ |
|---|---|---|---|
#5041 | X | Текущая позиция в координатах заготовки | Чтение |
#5042 | Y | Текущая позиция в координатах заготовки | Чтение |
#5043 | Z | Текущая позиция в координатах заготовки | Чтение |
#5044 | 4-я ось | Текущая позиция в координатах заготовки | Чтение |
#5045 | 5-я ось | Текущая позиция в координатах заготовки | Чтение |
#5046 | 6-я ось | Текущая позиция в координатах заготовки | Чтение |
#5047 | 7-я ось | Текущая позиция в координатах заготовки | Чтение |
#5048 | 8-я ось | Текущая позиция в координатах заготовки | Чтение |
Координаты сигнала SKIP (G31)
Переменная | Ось | Назначение | Доступ |
|---|---|---|---|
#5061 | X | Координата при срабатывании G31 | Чтение |
#5062 | Y | Координата при срабатывании G31 | Чтение |
#5063 | Z | Координата при срабатывании G31 | Чтение |
#5064 | 4-я ось | Координата при срабатывании G31 | Чтение |
#5065 | 5-я ось | Координата при срабатывании G31 | Чтение |
#5066 | 6-я ось | Координата при срабатывании G31 | Чтение |
#5067 | 7-я ось | Координата при срабатывании G31 | Чтение |
#5068 | 8-я ось | Координата при срабатывании G31 | Чтение |
Значения коррекции инструмента (Tool Offset)
Переменная | Ось | Назначение | Доступ |
|---|---|---|---|
#5081 | X | Текущая коррекция по X (геометрия + износ) | Чтение |
#5082 | Y | Текущая коррекция по Y | Чтение |
#5083 | Z | Текущая коррекция по Z | Чтение |
#5084 | 4-я ось | Текущая коррекция по 4-й оси | Чтение |
#5085 | 5-я ось | Текущая коррекция по 5-й оси | Чтение |
#5086 | 6-я ось | Текущая коррекция по 6-й оси | Чтение |
#5087 | 7-я ось | Текущая коррекция по 7-й оси | Чтение |
#5088 | 8-я ось | Текущая коррекция по 8-й оси | Чтение |
Практический пример 12: Измерение детали с использованием G31
O1012 (TOUCH PROBE MEASUREMENT) ;
N10 G90 G00 X-10. Y50. Z10. ; (Подвод к позиции измерения)
N20 G31 X100. F50 ; (Движение с контролем датчика)
N30 (Чтение координаты срабатывания датчика)
N40 #100=#5061 ; (X координата точки касания)
N50 #3006=100[MEASURED X] ; (Вывод на экран)
N60 (Расчет размера детали)
N70 #101=3.0 ; (Диаметр наконечника датчика)
N80 #102=#100-#101/2 ; (Фактическая координата поверхности)
N90 #3006=102[SURFACE X] ;
N100 G00 X-10. ; (Отвод датчика)
N110 M30 ;
Практический пример 13: Контроль текущей позиции инструмента
O1013 (POSITION MONITORING) ;
N10 G00 G90 X50. Y25. Z10. ;
N20 (Чтение текущих координат)
N30 #110=#5041 ; (Текущая X в координатах заготовки)
N40 #111=#5042 ; (Текущая Y)
N50 #112=#5043 ; (Текущая Z)
N60 #120=#5021 ; (Текущая X в станочных координатах)
N70 #121=#5022 ; (Текущая Y)
N80 #122=#5023 ; (Текущая Z)
N90 (Вывод информации)
N100 #3006=110[WORK X] ;
N110 #3006=111[WORK Y] ;
N120 #3006=112[WORK Z] ;
N130 #3006=120[MACH X] ;
N140 #3006=121[MACH Y] ;
N150 #3006=122[MACH Z] ;
N160 M30 ;
Практический пример 14: Адаптивная обработка с контролем позиции
O1014 (ADAPTIVE MACHINING) ;
N10 G00 G90 X100. Y50. Z50. ;
N20 G01 Z0 F500 ;
N30 (Обработка с контролем глубины)
N40 WHILE[#5043 GT -20.0] DO1 ; (Пока Z > -20)
N50 G01 X50. F300 ;
N60 X100. ;
N70 Y[#5042-5.0] ; (Шаг 5 мм по Y)
N80 X50. ;
N90 X100. ;
N100 END1 ;
N110 G00 Z50. ;
N120 M30 ;
Таблица 6. Расширенные переменные коррекций
Для станков с большим количеством инструментов (более 99) используются расширенные области памяти.
Коррекции инструмента (расширенная память)
Переменная | Назначение | Количество | Применение |
|---|---|---|---|
#10001-#10400 | Геометрия инструмента (1-400) | 400 | Токарные станки, память A |
#11001-#11400 | Длина инструмента (1-400) | 400 | Фрезерные станки, H-коррекция |
#11401-#11800 | Радиус инструмента (1-400) | 400 | Фрезерные станки, D-коррекция |
#12001-#12400 | Износ инструмента (1-400) | 400 | Токарные станки, память B |
#13001-#13400 | Износ длины (1-400) | 400 | Фрезерные станки, H-износ |
#13401-#13800 | Износ радиуса (1-400) | 400 | Фрезерные станки, D-износ |
Расширенные смещения нулевых точек (G54.1 P1-P48)
Переменная | Назначение | Количество | Применение |
|---|---|---|---|
#14001-#14008 | G54.1 P1 смещение (все оси) | 8 | Доп. смещение 1 |
#14009-#14016 | G54.1 P2 смещение (все оси) | 8 | Доп. смещение 2 |
... | ... | ... | ... |
#14369-#14376 | G54.1 P48 смещение (все оси) | 8 | Доп. смещение 48 |
Формула расчета расширенных смещений:
Номер переменной = 14000 + (P - 1) × 8 + Номер_оси
Пример: G54.1 P5, ось Z (ось 3):
14000 + (5 - 1) × 8 + 3 = 14035
Практический пример 15: Работа с расширенными коррекциями инструмента
O1015 (EXTENDED TOOL OFFSET MANAGEMENT) ;
N10 #150=250 ; (Номер инструмента)
N20 (Расчет адреса коррекции длины)
N30 #151=11000+#150 ; (#11250 для инструмента 250)
N40 (Чтение текущей коррекции)
N50 #152=#[#151] ; (Значение H250)
N60 (Вывод информации)
N70 #3006=150[TOOL NUMBER] ;
N80 #3006=151[VARIABLE ADDRESS] ;
N90 #3006=152[LENGTH OFFSET] ;
N100 (Изменение коррекции)
N110 #[#151]=#152+0.05 ; (Добавить 0.05 мм к H250)
N120 M30 ;
Практический пример 16: Использование расширенных смещений G54.1
O1016 (EXTENDED WORK OFFSET G54.1) ;
N10 #160=15 ; (Номер позиции P15)
N20 (Расчет адресов смещений для P15)
N30 #161=14000+(#160-1)*8+1 ; (X для P15: #14113)
N40 #162=14000+(#160-1)*8+2 ; (Y для P15: #14114)
N50 #163=14000+(#160-1)*8+3 ; (Z для P15: #14115)
N60 (Установка смещений)
N70 #[#161]=125.5 ; (X смещение = 125.5)
N80 #[#162]=75.3 ; (Y смещение = 75.3)
N90 #[#163]=10.0 ; (Z смещение = 10.0)
N100 (Активация смещения)
N110 G54.1 P15 ;
N120 G00 X0 Y0 Z10. ; (Позиция с учетом смещения P15)
N130 M30 ;
Специальные техники программирования с системными переменными
Техника 1: Косвенная адресация переменных
Косвенная адресация позволяет обращаться к переменной, чей номер хранится в другой переменной. Синтаксис: #[#N]
Пример:
N10 #100=2005 ; (Адрес переменной)
N20 #[#100]=50.5 ; (Запись в #2005 значения 50.5)
N30 #101=#[#100] ; (Чтение из #2005, результат: #101=50.5)
Практическое применение - цикл по коррекциям:
O1017 (INDIRECT ADDRESSING - OFFSET LOOP) ;
N10 #150=1 ; (Счетчик инструмента)
N20 #151=50 ; (Количество инструментов)
N30 WHILE[#150 LE #151] DO1 ;
N40 #152=11000+#150 ; (Адрес коррекции длины)
N50 #153=#[#152] ; (Чтение текущей коррекции)
N60 #[#152]=#153*1.01 ; (Увеличение на 1%)
N70 #150=#150+1 ;
N80 END1 ;
N90 M30 ;
Техника 2: Динамическая генерация G-кодов
Системные переменные можно использовать для динамической генерации G-кодов.
O1018 (DYNAMIC G-CODE GENERATION) ;
N10 #100=54 ; (Номер смещения)
N20 IF[#100 EQ 54] THEN G54 ;
N30 IF[#100 EQ 55] THEN G55 ;
N40 IF[#100 EQ 56] THEN G56 ;
N50 (Альтернатива с расчетом)
N60 #101=#100*10 ; (540 для G54)
N70 IF[#101 EQ 540] THEN G54 ;
N80 M30 ;
Техника 3: Хранение данных в неиспользуемых коррекциях
Неиспользуемые ячейки коррекций можно применять для хранения данных программы.
O1019 (DATA STORAGE IN UNUSED OFFSETS) ;
N10 (Использование коррекций 90-99 для хранения констант)
N20 #2090=3.14159 ; (PI)
N30 #2091=2.71828 ; (E)
N40 #2092=1.41421 ; (SQRT(2))
N50 (Использование сохраненных констант)
N60 #100=25.0 ; (Радиус)
N70 #101=#100*2*#2090 ; (Длина окружности = 2πr)
N80 #3006=101[CIRCUMFERENCE] ;
N90 M30 ;
Техника 4: Защита от несанкционированного доступа
O1020 (ACCESS PROTECTION) ;
N10 #180=1234 ; (Установленный код доступа)
N20 #3006=100[ENTER CODE] ; (Запрос кода у оператора)
N30 IF[#100 NE #180] GOTO 100 ; (Проверка)
N40 (Код верный - продолжить обработку)
N50 M98 P5000 ; (Подпрограмма обработки)
N60 GOTO 200 ;
N100 (Код неверный - аварийная остановка)
N110 #3000=199 (INVALID ACCESS CODE) ;
N200 M30 ;
Техника 5: Автоматическое логирование событий
O1021 (EVENT LOGGING) ;
N10 #190=1 ; (Счетчик событий)
N20 #191=2700 ; (Адрес для логирования: #2700-#2749)
N30 (Событие 1: начало обработки)
N40 #[#191]=#3001 ; (Дата)
N50 #191=#191+1 ;
N60 #[#191]=#3002 ; (Время)
N70 #191=#191+1 ;
N80 M98 P6000 ; (Обработка)
N90 (Событие 2: окончание обработки)
N100 #[#191]=#3001 ; (Дата окончания)
N110 #191=#191+1 ;
N120 #[#191]=#3002 ; (Время окончания)
N130 M30 ;
Распространенные ошибки при работе с системными переменными
Ошибка 1: Попытка записи в переменную только для чтения
Неправильно:
N10 #5021=100.0 ; (ОШИБКА! #5021 - только чтение)
Правильно:
N10 #100=#5021 ; (Чтение в пользовательскую переменную)
N20 #100=#100+10.0 ; (Изменение)
Ошибка 2: Использование неопределенной переменной
Неправильно:
N10 IF[#150 GT 100] GOTO 100 ; (Если #150 не определена → ошибка)
Правильно:
N10 IF[[#150 EQ #0] OR [#150 GT 100]] GOTO 100 ; (Проверка на неопределенность)
Примечание: #0 - это специальное значение для неопределенной переменной (null).
Ошибка 3: Некорректная косвенная адресация
Неправильно:
N10 #100=2005 ;
N20 ##100=50.5 ; (ОШИБКА! Двойная решетка недопустима)
Правильно:
N10 #100=2005 ;
N20 #[#100]=50.5 ; (Правильный синтаксис)
Ошибка 4: Выход за границы диапазона переменных
Неправильно:
N10 #100=65 ; (Номер инструмента)
N20 #101=2000+#100 ; (#2065 выходит за диапазон #2001-#2064)
N30 #102=#[#101] ; (ОШИБКА!)
Правильно:
N10 #100=65 ;
N20 IF[#100 GT 64] THEN #3000=150 (TOOL NUMBER OUT OF RANGE) ;
N30 #101=2000+#100 ;
N40 #102=#[#101] ;
Ошибка 5: Неправильное форматирование макроаварии
Неправильно:
N10 #3000="ERROR MESSAGE" ; (ОШИБКА! Строка не поддерживается)
Правильно:
N10 #3000=100 (ERROR MESSAGE) ; (Код + комментарий в скобках)
Оптимизация кода с использованием системных переменных
Оптимизация 1: Замена повторяющихся констант на переменные
Неоптимально:
N10 G01 X50.0 Y25.5 F300 ;
N20 X75.0 Y25.5 ;
N30 X100.0 Y25.5 ;
Оптимально:
N10 #200=25.5 ; (Константа Y)
N20 G01 X50.0 Y#200 F300 ;
N30 X75.0 Y#200 ;
N40 X100.0 Y#200 ;
При изменении требуется модификация только одной строки.
Оптимизация 2: Универсальные подпрограммы
Неоптимально (жестко закодированные параметры):
O2000 ;
N10 G00 X50. Y50. ;
N20 G01 Z-10. F200 ;
N30 G00 Z10. ;
N40 M99 ;
Оптимально (параметризованная подпрограмма):
O2000 (DRILLING SUBPROGRAM) ;
(#26 = X position)
(#27 = Y position)
(#28 = Drilling depth)
(#29 = Feed rate)
N10 G00 X#26 Y#27 ;
N20 G01 Z-#28 F#29 ;
N30 G00 Z10. ;
N40 M99 ;
(Вызов из основной программы)
N50 #26=50. #27=50. #28=10. #29=200. ;
N60 M98 P2000 ;
Оптимизация 3: Использование массивов данных
O1022 (ARRAY DATA PROCESSING) ;
N10 (Хранение координат отверстий в массиве)
N20 #500=25.0 ; #510=35.0 ; (Точка 1: X, Y)
N30 #501=50.0 ; #511=35.0 ; (Точка 2: X, Y)
N40 #502=75.0 ; #512=35.0 ; (Точка 3: X, Y)
N50 #503=100.0 ; #513=35.0 ; (Точка 4: X, Y)
N60 #150=0 ; (Счетчик)
N70 WHILE[#150 LT 4] DO1 ;
N80 #151=500+#150 ; (Адрес X)
N90 #152=510+#150 ; (Адрес Y)
N100 G00 X#[#151] Y#[#152] ; (Перемещение к точке)
N110 M98 P3000 ; (Сверление)
N120 #150=#150+1 ;
N130 END1 ;
N140 M30 ;
Практическое применение: комплексные примеры
Пример 1: Система адаптивного управления подачей
O3000 (ADAPTIVE FEED CONTROL) ;
N10 (Мониторинг нагрузки шпинделя и коррекция подачи)
N20 #600=200 ; (Базовая подача)
N30 #601=80 ; (Целевая нагрузка шпинделя, %)
N40 #602=5 ; (Допустимое отклонение, %)
N50 G01 X100. F#600 ; (Начало обработки)
N60 WHILE[#5041 LT 200] DO1 ; (Пока X < 200)
N70 #603=#4120 ; (Текущая скорость шпинделя)
N80 (Расчет текущей нагрузки)
N90 #604=100-#603/#4120*100 ; (Упрощенный расчет)
N100 (Коррекция подачи)
N110 IF[#604 GT #601+#602] THEN #600=#600*0.95 ;
N120 IF[#604 LT #601-#602] THEN #600=#600*1.05 ;
N130 G01 X[#5041+10] F#600 ; (Продолжить с новой подачей)
N140 END1 ;
N150 G00 X250. ;
N160 M30 ;
Пример 2: Автоматическое измерение и коррекция детали
O3001 (AUTO MEASUREMENT AND CORRECTION) ;
N10 (Измерение размера детали и автокоррекция инструмента)
N20 #700=50.0 ; (Целевой размер)
N30 #701=0.05 ; (Допуск)
N40 #702=1 ; (Номер инструмента)
N50 (Обработка)
N60 M98 P4000 ; (Подпрограмма обработки)
N70 (Измерение)
N80 G31 X100. F50 ; (Измерение с датчиком)
N90 #703=#5061-1.5 ; (Фактический размер с учетом датчика)
N100 (Расчет отклонения)
N110 #704=#703-#700 ; (Отклонение)
N120 (Проверка допуска)
N130 IF[ABS[#704] LE #701] GOTO 200 ; (В допуске)
N140 (Вне допуска - коррекция)
N150 #705=2200+#702 ; (Адрес износа X)
N160 #[#705]=#[#705]+#704 ; (Коррекция износа)
N170 #3006=704[CORRECTED BY] ;
N200 M30 ;
O4000 ;
(Подпрограмма обработки детали)
N10 G00 X60. Z5. ;
N20 G01 X50. Z0 F200 ;
N30 Z-50. ;
N40 G00 X100. Z100. ;
N50 M99 ;
Пример 3: Многопозиционная обработка с автоматическим выбором смещений
O3002 (MULTI-POSITION MACHINING) ;
N10 (Обработка 6 деталей на паллете с автоматическим выбором смещений)
N20 #800=6 ; (Количество позиций)
N30 #801=1 ; (Текущая позиция)
N40 WHILE[#801 LE #800] DO1 ;
N50 (Активация соответствующего смещения G54.1 P1-P6)
N60 #802=54 ; (Базовое смещение G54)
N70 IF[#801 EQ 1] THEN G54.1 P1 ;
N80 IF[#801 EQ 2] THEN G54.1 P2 ;
N90 IF[#801 EQ 3] THEN G54.1 P3 ;
N100 IF[#801 EQ 4] THEN G54.1 P4 ;
N110 IF[#801 EQ 5] THEN G54.1 P5 ;
N120 IF[#801 EQ 6] THEN G54.1 P6 ;
N130 (Обработка текущей позиции)
N140 M98 P5000 ; (Подпрограмма обработки)
N150 #801=#801+1 ; (Следующая позиция)
N160 END1 ;
N170 G54 ; (Возврат к базовому смещению)
N180 M30 ;
O5000 ;
(Подпрограмма обработки одной детали)
N10 G00 X0 Y0 Z50. ;
N20 M98 P5100 ; (Фрезерование)
N30 M98 P5200 ; (Сверление)
N40 G00 Z100. ;
N50 M99 ;
Отладка программ с системными переменными
Метод 1: Вывод значений переменных на экран
O3003 (DEBUG OUTPUT) ;
N10 #900=25.5 ;
N20 #901=100.3 ;
N30 #902=#900+#901 ;
N40 (Вывод для отладки)
N50 #3006=900[VAR #900] ;
N60 #3006=901[VAR #901] ;
N70 #3006=902[SUM] ;
N80 M30 ;
Метод 2: Создание лог-файла в памяти станка
O3004 (LOGGING TO MEMORY) ;
N10 #950=2900 ; (Начальный адрес лога: #2900-#2999)
N20 #951=#950 ; (Текущий указатель)
N30 (Запись события 1)
N40 #[#951]=#3001 ; (Дата)
N50 #951=#951+1 ;
N60 #[#951]=#3002 ; (Время)
N70 #951=#951+1 ;
N80 #[#951]=123 ; (Код события)
N90 #951=#951+1 ;
N100 (Продолжение программы...)
N110 M98 P6000 ;
N120 (Запись события 2)
N130 #[#951]=#3001 ;
N140 #951=#951+1 ;
N150 #[#951]=#3002 ;
N160 #951=#951+1 ;
N170 #[#951]=456 ; (Другой код события)
N180 #951=#951+1 ;
N190 M30 ;
Метод 3: Условные контрольные точки (Breakpoints)
O3005 (CONDITIONAL BREAKPOINTS) ;
N10 #980=1 ; (Флаг режима отладки: 1=вкл, 0=выкл)
N20 #100=50.5 ;
N30 #101=25.3 ;
N40 #102=#100*#101 ;
N50 (Контрольная точка)
N60 IF[#980 EQ 1] THEN M00 ; (Останов при отладке)
N70 IF[#980 EQ 1] THEN #3006=102[CHECKPOINT #102] ;
N80 (Продолжение программы)
N90 G01 X#102 F300 ;
N100 M30 ;
Заключение
Системные переменные FANUC представляют собой мощный инструмент создания интеллектуальных управляющих программ с адаптивным поведением. Правильное использование системных переменных позволяет:
Технологические преимущества:
Реализация адаптивных циклов обработки с автоматической коррекцией параметров
Автоматическое измерение и компенсация износа инструмента
Создание универсальных параметризованных подпрограмм
Интеграция с внешними устройствами через сигналы PMC
Экономические преимущества:
Сокращение времени программирования на 30-50%
Повышение гибкости производства
Снижение брака за счет автоматического контроля
Упрощение обслуживания и модификации программ
Ключевые принципы работы с системными переменными:
Всегда проверяйте права доступа (чтение/запись) перед использованием переменной
Используйте осмысленные комментарии для документирования назначения переменных
Группируйте переменные по назначению (например, #100-#199 для размеров детали)
Проверяйте переменные на неопределенность (сравнение с #0) перед использованием
Отлаживайте программы с использованием вывода значений через #3006
Используйте косвенную адресацию для создания гибких алгоритмов
Документируйте диапазоны переменных в начале программы
Различные группы системных переменных предоставляют доступ к различным аспектам работы станка: от простого чтения координат до сложного управления процессом обработки. Комбинирование системных переменных с условными операторами, циклами и подпрограммами позволяет создавать программы, которые автоматически адаптируются к изменяющимся условиям обработки.
Освоение системных переменных — это важный шаг в переходе от базового программирования к профессиональному параметрическому программированию станков с ЧПУ FANUC.
Приложение A: Краткий справочник системных переменных
Диапазон | Назначение | Доступ |
|---|---|---|
#0 | Неопределенная переменная (null) | Специальное значение |
#1-#33 | Аргументы макроподпрограмм | Чтение/Запись |
#100-#199, #500-#999 | Локальные переменные | Чтение/Запись |
#1000-#1015 | Входные сигналы PMC | Чтение |
#1032-#1047 | Выходные сигналы PMC | Чтение/Запись |
#1100-#1135 | Дополнительные I/O | Чтение/Запись |
#2000-#2999 | Коррекции инструмента и смещения | Чтение/Запись |
#3000-#3999 | Системное управление | Специфично |
#4000-#4999 | Модальные состояния | Чтение |
#5000-#5999 | Позиционные данные | Чтение |
#7000-#7999 | Расширенные смещения | Чтение/Запись |
#10000-#19999 | Расширенные коррекции | Чтение/Запись |
Список использованных источников
FANUC Series 0i/0i Mate-MODEL F MACRO EXECUTOR PROGRAMMING MANUAL. B-64513EN-1/01. — FANUC Corporation, 2019.
FANUC Series 30i/31i/32i-MODEL B MACRO EXECUTOR PROGRAMMING MANUAL. B-64513EN-2/02. — FANUC Corporation, 2020.
FANUC 0i-F PLUS/30i/31i/32i OPERATOR'S MANUAL (Common to Lathe System/Machining Center System). B-64484EN/03. — FANUC Corporation, 2021.
FANUC Series 0i-MODEL F, 30i/31i/32i-MODEL B PARAMETER MANUAL. B-64310EN-2/05. — FANUC Corporation, 2020.
Смолина А.Н. Программирование станков с ЧПУ: Учебное пособие. — СПб.: Лань, 2018.
Технология программирования обработки на станках с ЧПУ: Справочник / Под ред. В.Л. Соломенцева. — М.: Информ-Наука, 2016.