← Назад к блогу

Системные переменные FANUC

чпу, Fanuc·60 мин·6 марта 2026 г.
Автор: Admin·👁 13·💬 0
FANUC

Системные переменные FANUC: руководство по параметрическому программированию

Введение

Системные переменные (System Variables) являются одним из наиболее мощных инструментов параметрического программирования в системах ЧПУ FANUC. Эти специальные переменные предоставляют доступ к внутренним состояниям станка, позволяя читать и модифицировать параметры обработки в реальном времени непосредственно из управляющей программы.

Системные переменные обозначаются символом решетки (#) и числовым индексом. В отличие от пользовательских переменных (#100-#999), системные переменные имеют фиксированные адреса и предопределенное назначение. Всего в системе FANUC определено более 20 000 системных переменных, охватывающих все аспекты работы станка — от координат позиций до состояния модальных функций.

Согласно исследованиям применения параметрического программирования на машиностроительных предприятиях, использование системных переменных позволяет:

  • Сократить время разработки управляющих программ на 30-50%

  • Повысить гибкость производства за счет адаптивного управления процессом

  • Снизить вероятность ошибок программирования на 40-60%

  • Реализовать интеллектуальные циклы обработки с автоматической коррекцией

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


Официальная документация

Полная информация о системных переменных содержится в следующих официальных руководствах FANUC:

Основные документы:

  1. FANUC Series 0i/0i Mate-MODEL F MACRO EXECUTOR/MACRO COMPILER PROGRAMMING MANUAL

    • Код документа: B-64513EN-1/01

    • Разделы: 3-6 (System Variables)

    • Год издания: 2019

  2. FANUC Series 30i/31i/32i-MODEL B MACRO EXECUTOR/MACRO COMPILER PROGRAMMING MANUAL

    • Код документа: B-64513EN-2/02

    • Разделы: 4-7 (System Variables)

    • Год издания: 2020

  3. FANUC 0i-F PLUS/30i/31i/32i OPERATOR'S MANUAL

    • Код документа: B-64484EN/03

    • Приложение B (System Variable List)

    • Год издания: 2021

Дополнительные ресурсы:


Классификация системных переменных

Системные переменные 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%

  • Повышение гибкости производства

  • Снижение брака за счет автоматического контроля

  • Упрощение обслуживания и модификации программ

Ключевые принципы работы с системными переменными:

  1. Всегда проверяйте права доступа (чтение/запись) перед использованием переменной

  2. Используйте осмысленные комментарии для документирования назначения переменных

  3. Группируйте переменные по назначению (например, #100-#199 для размеров детали)

  4. Проверяйте переменные на неопределенность (сравнение с #0) перед использованием

  5. Отлаживайте программы с использованием вывода значений через #3006

  6. Используйте косвенную адресацию для создания гибких алгоритмов

  7. Документируйте диапазоны переменных в начале программы

Различные группы системных переменных предоставляют доступ к различным аспектам работы станка: от простого чтения координат до сложного управления процессом обработки. Комбинирование системных переменных с условными операторами, циклами и подпрограммами позволяет создавать программы, которые автоматически адаптируются к изменяющимся условиям обработки.

Освоение системных переменных — это важный шаг в переходе от базового программирования к профессиональному параметрическому программированию станков с ЧПУ 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

Расширенные коррекции

Чтение/Запись


Список использованных источников

  1. FANUC Series 0i/0i Mate-MODEL F MACRO EXECUTOR PROGRAMMING MANUAL. B-64513EN-1/01. — FANUC Corporation, 2019.

  2. FANUC Series 30i/31i/32i-MODEL B MACRO EXECUTOR PROGRAMMING MANUAL. B-64513EN-2/02. — FANUC Corporation, 2020.

  3. FANUC 0i-F PLUS/30i/31i/32i OPERATOR'S MANUAL (Common to Lathe System/Machining Center System). B-64484EN/03. — FANUC Corporation, 2021.

  4. FANUC Series 0i-MODEL F, 30i/31i/32i-MODEL B PARAMETER MANUAL. B-64310EN-2/05. — FANUC Corporation, 2020.

  5. Смолина А.Н. Программирование станков с ЧПУ: Учебное пособие. — СПб.: Лань, 2018.

  6. Технология программирования обработки на станках с ЧПУ: Справочник / Под ред. В.Л. Соломенцева. — М.: Информ-Наука, 2016.


📎 Прикрепленные файлы (0)

💬 Комментарии

ℹ️
Войдите, чтобы оставлять комментарии

Загрузка комментариев...