Параметрическое программирование

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

Большинство станочных систем ЧПУ имеют в своем распоряжении специальный язык для параметрического программирования (макропрограммирования). Например, в СЧПУ Fanuc этот язык называется Macro В. Если вы хоть немного знакомы с языком программирования Бейсик (Basic), то вы без труда разберетесь и с Macro В. Команды и функции именно этого языка мы рассмотрим подробно. В обычной управляющей программе вы указываете различные G-коды, а также направления и величины перемещений при помощи числовых значений. Например, G10 или Х100. Однако СЧПУ станка может делать то же самое при помощи переменных.

Символом переменной в Macro В является знак #. Например, в программе можно указать следующие выражения:


#1=100
#2=200
#3=#1+#2

Это означает, что переменной #1 присваивается значение 100, а переменной #2 – значение 200. Переменная #3 будет являться результатом суммы переменной #1 и переменной #2. С таким же успехом можно записать и G-код:


#25=1
G#25

Переменной #1 присвоено значение 1. Тогда вторая строка по своей сути будет обозначать код линейной интерполяции G1. С переменными можно производить различные арифметические и логические операции, что позволяет создавать «умные» программы обработки или различные станочные циклы.

В памяти системы ЧПУ существует область, в которой хранятся значения переменных. Вы можете заглянуть в эту область, если найдете раздел памяти СЧПУ, который обычно называется MACRO или VARIABLES. Присваивать значения переменным можно не только внутри программы, но и непосредственно – вводя значения в регистры этой памяти. Приведу несколько примеров. Можно составить такую программу:

#1=25
#2=30
#3=#2+#1

В этом случае значения присваиваются переменным внутри программы. Чтобы в будущем изменить числовые значения переменных #1 и #2, придется отредактировать программу.

Можно реализовать более удобный вариант, который позволит изменять значения переменных в любой момент, не прибегая к изменению самой программы:

#3=#2+#1

Как видите, переменным #1 и #2 в программе не присвоено никаких значений. Оператор станка может войти в область переменных MACRO и ввести любое числовое значение для любой переменной.

№ переменной Значение
0
1
2
3
4

700
701
0
10
12
0
0

0
0

После того как оператор станка присвоил переменной #1 значение 10, а переменной #2 значение 12 и выполнил программу, значение переменной #3 станет равным 22.

№ переменной Значение
0
1
2
3
4

700
701
0
10
12
22
0

0
0

Все переменные системы ЧПУ можно условно разделить на 4 типа:

  • нулевые;
  • локальные;
  • общие;
  • системные.

Локальные переменные могут быть использованы внутри макросов для хранения данных. При выключении электропитания локальные переменные обнуляются. У большинства станков с СЧПУ Fanuc нулевой серии локальными являются переменные с номерами от 1 до 33.

Общие переменные могут работать внутри различных параметрических программ и макросов. При выключении электропитания некоторые общие переменные обнуляются, а некоторые сохраняют свои значения. У большинства станков с СЧПУ Fanuc нулевой серии общими являются переменные с номерами от 100 до 999.

Системные переменные используются для чтения и записи различной системной информации – данных о позиции инструмента, величинах компенсации, времени и др. Номера системных переменных для Fanuc нулевой серии начинаются с 1000.

Нулевые переменные всегда равны нулю.

Для выполнения арифметических и логических операций язык Macro В предоставляет набор команд и операторов.

Таблица 10.1. Основные арифметические и логические команды

Функции Формат
Равенство
Сложение
Вычитание
Умножение
Деление
Синус
Косинус
Тангенс
Арктангенс
Квадратный корень
Абсолютное значение
Округление
ИЛИ (OR)
И (AND)
#a=#b
#c=#a+#b
#c=#a-#b
#c=#a*#b
#c=#a/#b
#c=SIN[#b]
#c=COS[#b]
#c=TAN[#b]
#c=ATAN[#b]
#c=SQRT[#b]
#c=ABS[#b]
#c=ROUND[#b]
#c=#a OR #b
#c=#a AND #b

Для управления переменными и для выполнения различных логических операций служат макрокоманды. Макрокоманды языка Macro В похожи на команды Бейсика.

Команда безусловного перехода GOTO предназначена для передачи управления определенному кадру программы. Формат команды следующий:

  • GOTO N – безусловный переход к кадру N;
  • GOTO #A – безусловный переход к кадру, установленному переменной #A.

Пример:

N10 G01 X100
N20 G01 X-100
N30 GOTO 10

После выполнения кадра N30 система ЧПУ переходит к кадру N10. Затем снова работает с кадрами N20 и N30 – получается бесконечный цикл.

Команда условия IF позволяет выполнять различные действия с условием. После IF указывается некоторое выражение. Если это выражение оказывается справедливым, то выполняется команда (например, команда безусловного перехода), находящаяся в кадре с IF. Если выражение оказывается несправедливым, то команда, находящаяся в кадре с IF, не выполняется, а управление передается следующему кадру.

Формат команды следующий:

IF [#a GT #b] GOTO N

Пример:

#1=100
#2=80
N10 G01 X200
N20 IF [#1 GT #2] GOTO 40
N30 G01 X300
N40 M30

В начале программного примера переменным #1 и #2 присваиваются значения 100 и 80 соответственно. В кадре N20 происходит проверка условия. Если значение переменной #1 больше значения переменной #2, то выполняется команда перехода GOTO к кадру окончания программы N40. В нашем случае выражение считается справедливым, так как 100 больше, чем 80. В результате после выполнения кадра N10 происходит переход к кадру N40, то есть кадр N30 не выполняется.

В этой же программе можно изменить значения переменных:

#1=100
#2=120
N10 G01 Х200
N20 IF [#1 GT #2] GOTO 40
N30 G01 Х300
N40M30

Во втором случае условие в кадре N20 не будет справедливым, так как 100 не больше, чем 120. В результате после выполнения кадра N10 не происходит переход к кадру N40, то есть кадр N30 выполняется как обычно.

В выражении [#1 GT #2] используются операторы сравнения. В табл. 10.2 сведены операторы для сравнения переменных языка Macro В.

Таблица 10.2. Операторы сравнения

Оператор Смысл
EQ
NE
GT
GE
LT
LE
Равно (=)
Не равно
Больше (>)
Больше или равно
Меньше (<)
Меньше или равно

Команда WHILE позволяет повторять различные действия с условием. Пока указанное выражение считается справедливым, происходит выполнение части программы, ограниченной командами DO и END. Если выражение не справедливо, то управление передается кадру, следующему за END.

%
О1000
#1=0
#2=1
WHILE [#2 LE 10] DO 1;
#1=#1+#2
#2=#2+1
END 1
M30
%

Макропрограммой называется программа, которая находится в памяти СЧПУ и содержит различные макрокоманды. Макропрограмму можно вызывать из обычной программы с помощью G-кода, аналогично постоянным циклам. При вызове макропрограммы существует возможность прямой передачи значений для переменных макропрограммы.

Команда G65 предназначена для немодального вызова макропрограммы. Формат для этой команды следующий:

G65 P_L_A_B_

где G65 – команда вызова макропрограммы; Р_ – номер вызываемой макропрограммы; L_ – число повторений макропрограммы; А_ и В_ – адреса и значения локальных переменных.

Пример:

G65 Р9010 L2 А121 В303 – макропрограмма 9010 вызывается 2 раза, соответствующим локальным переменным присваиваются значения 121 и 303.

Необходимо знать, какой локальной переменной присваивается значение с помощью того или иного адреса. Например, для СЧПУ Fanuc 0-MD будут справедливы следующие зависимости:

Таблица 10.3. Соответствие адресов локальным переменным

Адрес Переменная
A
B
C
D
E
F
H
I
J
K
M
Q
R
S
T
U
V
W
X
Y
Z
#1
#2
#3
#7
#8
#9
#11
#4
#5
#6
#13
#17
#18
#19
#20
#21
#22
#23
#24
#25
#26

Теперь можно приступить к созданию несложной, но очень полезной параметрической программы. Довольно часто возникает необходимость в обработке нескольких отверстий, находящихся на некотором радиусе и следующих через определенный угол (рис. 10.7). Чтобы освободить программиста от утомительного переделывания программы в случае изменения радиуса, угла или количества отверстий, создадим такую программу обработки, которая позволит оператору вводить значения радиуса и угла и выполнять операцию сверления по окружности с любыми размерами.

Для сверления отверстий будем использовать стандартный цикл G81. Угол, на котором находятся отверстия, отсчитывается от оси X против часовой стрелки (положительный угол).

Необходимо задать:

  • радиус окружности, на которой находятся отверстия;
  • начальный угол (угол, на котором находится первое отверстие);
  • относительный угол (угол, через который следуют остальные отверстия);
  • общее количество отверстий.

Все эти данные должны быть представлены в параметрическом виде, то есть при помощи переменных.

Пусть
#100= радиус окружности, на которой находятся отверстия;
#101= начальный угол;
#102= относительный угол;
#103= общее количество отверстий.

Рис. 10.7. Создадим параметрическую программу для обработки детали с неизвестными размерами

Для того чтобы создать параметрическую программу, необходимо придумать алгоритм, позволяющий изменять поведение программы обработки в зависимости от значений указанных переменных. В нашем случае основой УП является стандартный цикл сверления G81. Остается найти закон, по которому описываются координаты центров отверстий при любых первоначальных значениях радиуса, углов и произвольном количестве отверстий.

%
О2000
N10 G21 G90 G80 G54 G40 G49 G00
N20 G17

Первые кадры программы будут стандартными. Это номер программы, строка безопасности и код G17 выбора плоскости XY.

N30 G16

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

Далее следуют вызов инструмента (сверла), компенсация его длины и включение оборотов шпинделя.

N40 Т1 М6
N45 G43 HI Z100
N50 S1000 M03
#120=0

В кадр N60 поставим цикл сверления G81 и координаты центра первого отверстия. Как вы помните, в случае работы с полярными координатами X обозначает радиус, a Y определяет угол. Значения радиуса и начального угла известны, они устанавливаются переменными #100 (радиус) и #101 (начальный угол). Вводится некоторая переменная #120 с нулевым значением. Эта переменная представляет собой счетчик. Чуть позже вы поймете назначение данной переменной.

N60 G98 G81 Х#100 Y#101 Z-5 R0.5 F50

Переменная #103 отвечает за общее количество отверстий. Так как первое отверстие мы уже просверлили, то уменьшим #103 на 1. Таким образом, кадр N70 обеспечивает подсчет оставшихся отверстий. А кадр N75 увеличивает значение переменной #120 на 1.

N70 #103=#103-1
N75 #120=#120+1

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

N80 IF [#103 EQ 0] GOTO 120

В кадре N80 происходит сравнение значения переменной #103 с нулем. Если переменная #103 равна нулю, то управление передается кадру N120 в конце программы. Если же переменная #103 не равна нулю, то выполняется следующий кадр.

N90 #130=#102*#120
N95#110=#101+#130

Кадр N90 предназначен для определения углового приращения. Новая переменная #110 является суммой #101 (начального угла) и #130 (углового приращения). Кадр N95 обеспечивает расчет угла последующего отверстия.

Затем указывается новый угол для сверления, и управление передается кадру N70.

N100 Y#110
N110 GOTO 70

При помощи кадра N70 образуется замкнутый цикл, который обеспечивает расчет координат центров отверстий и сверление до тех пор, пока значение переменной #103 не будет равно нулю. Если значение #103 станет равным нулю, то управление будет передано кадру N120.

N120 G80
N125 М05
N130 G15
N140 М30
%

Заключительные кадры программы предназначены для отмены постоянного цикла (G80), выключения оборотов шпинделя (М05), выключения режима полярных координат (G15) и завершения программы (М30).

%
О2000
N10 G21 G90 G80 G54 G40 G49 G00
N20 G17
N30 G16
N40 T1 M6
N45 G43 H1 Z100
N50 S1000 M03
#120=0
N60 G98 G81 X#100 Y#101 Z-5 R0.5 F50
N70 #103=#103-1
N75 #120=#120+1
N80 IF [#103 EQ 0] GOTO 120
N90 #130=#102*#120
N95 #110=#101+#130
N100 Y#110
N110 GOTO 70
N120 G80
N125 M05
N130 G15
N140 M30
%

Любая параметрическая программа должна быть тщательно проверена, прежде чем она попадет на станок. Скорее всего, у вас не получится проверить такую программу при помощи редактора УП и бэкплота, так как в ней присутствуют переменные. Самая надежная проверка в данном случае – это подстановка значений для входных переменных и «раскручивание» алгоритма уже с конкретными числами.

Предположим, что оператор станка получил чертеж детали (рис. 10.8) для обработки отверстий. Он должен установить нулевую точку G54 в центр детали, замерить длину сверла и установить его в шпиндель. Затем следует войти в область переменных MACRO и ввести следующие числовые значения:

№ переменной Значение

100
101
102
103
104
105

12.5
45
20
4
0
0

Рис. 10.8. Вместо переменных на чертеже стоят конкретные размеры и известно количество отверстий

Для проверки созданной параметрической программы достаточно подставить конкретные значения переменных и, «прокручивая» алгоритм, получить обычную программу.

%
О2000
N10 G21 G90 G80 G54 G40 G49 G00
N20 G17
N30 G16
N40 T1 M6
N45 G43 H1 Z100
N50 S1000 M03
#120=0
N60 G98 G81 X12.5 Y45 Z-5 R0.5 F50
N70 #103=#103-1=4-1=3 – количество оставшихся отверстий
N75 #120=#120+1=0+1=1
N80 Переменная #103 не равна 0
N90 #130=#102*#120=20*1=20
N95 #110=#101+#130=45+20=65
N100 Y65
N70 #103=#103-1=3-1=2 – количество оставшихся отверстий
N75 #120=#120+1=1+1=2
N80 Переменная #103 не равна 0
N90 #130=#102*#120=20*2=40
N95 #110=#101+#130=45+40=85
N100 Y85
N70 #103=#103-1=2-1=1– количество оставшихся отверстий
N75 #120=#120+1=2+1=3
N80 Переменная #103 не равна 0
N90 #130=#102*#120=20*3=60
N95 #110=#101+#130=45+60=105
N100 Y105
N70 #103=#103-1=1-1=0 – количество оставшихся отверстий
N75 #120=#120+1=3+1=4
N80 Переменная #103 равна 0, переход к кадру N120
N120 G80
N125 M05
N130 G15
N140 M30
%

Эту же программу можно записать и в привычном виде:

%
О2000
N10 G21 G90 G80 G54 G40 G49 G00
N20 G17
N30 G16
N40 T1 M6
N45 G43 H1 Z100
N50 S1000 M03
N60 G98 G81 X12.5 Y45 Z-5 R0.5 F50
N100 Y65
N100 Y85
N100 Y105
N120 G80
N125 M05
N130 G15
N140 M30
%

Теперь попробуем создать макропрограмму, которая будет функционировать аналогично постоянному циклу. Для обработки детали, показанной на рис. 10.8, оператор станка должен ввести и отработать следующую команду:

G65 P9010 I12.5 A45 B20 H4

При этом наша параметрическая программа (с новым номером О9010) уже должна находиться в памяти СЧПУ. Как правило, макропрограммы имеют номера с 9000 и выше, недоступны для свободного редактирования. Команда G65 предназначена для немодального вызова макропрограммы. При этом адреса I, А, В, Н в кадре с G65 передают свои числовые значения определенным локальным переменным. Для нахождения соответствия адресов локальным переменным можно воспользоваться табл. 10.3.

Можно подстроить переменные в нашей программе, вставив следующие строки в программу:

#100=#4
#101=#1
#102=#2
#103=#11

В результате получаем макропрограмму:

%
О9010
#100=#4
#101=#1
#102=#2
#103=#11
N10 G21 G90 G80 G54 G40 G49 G00
N20 G17
N30 G16
N40 T1 M6
N45 G43 H1 Z100
N50 S1000 M03
#120=0
N60 G98 G81 X#100 Y#101 Z-5 R0.5 F50
N70 #103=#103-1
N75 #120=#120+1
N80 IF [#103 EQ 0] GOTO 120
N90 #130=#102*#120
N95 #110=#101+#130
N100 Y#110
N110 GOTO 70
N120 G80
N125 M05
N130 G15
N140 M30
%

Хотя созданная нами параметрическая программа и не является оптимальной, однако она наглядно демонстрирует широкие возможности этого метода по созданию эффективных УП и различных станочных циклов.