- •Спецификации обработки. (Machine Specifications).
- •Внутренние параметры. (Internal Parms).
- •Инициализация станка (данные станка с чпу). (Machine Initialize)
- •Для определения g-кода в относительной системе координат.
- •Этот параметр определяет первую ось вращения, используемую для расчета углов поворота. Сначала угол вращения для xy & xz должен быть установлен для X. Следующий - z.
- •Ось по умолчанию является zyx.
- •Этот параметр определяет направление вращения 4-ой оси в положительном направлении при одновременной обработке в SolidCam-е.
- •Номер программы. (Program numbers).
- •Пример:
- •Управление процедурами. (Procedures control).
- •Loop_exist тип: logical {y/n} (только для фрезерования)
- •Позиционирование. (Positioning).
- •Компенсация (коррекция на радиус инструмента). (Compensation).
- •Определения дуги. (Arc Definitions).
- •Эпсилон величины. (Epsilon Values).
- •Вращение шпинделя, подача. (Feed-Spin).
- •Расчет времени. (Timing).
- •Опции проекта. (Part Options).
- •Опции переходов. (Job Options).
- •Циклы прорезки. (Grooving Cycles).
- •Параметры симуляция 5-ой оси. (Sim 5-Axis Parameters).
- •Пользовательская документация. (User Documentation).
- •Gppl язык. (gppl language).
- •Введение. (Introduction).
- •Типы переменных .(Variable Types).
- •1. Change attribute (смена атрибуции)
- •2. Active attribute (активный атрибут)
- •Функции генерации. (Generate Functions).
- •Оператор преждевременного завершения.(Abort statement)
- •Оператор прерывания. (Break statement).
- •Параметры:
- •Параметры:
- •Системные Переменные gppTool. (gppTool System Variables)
- •Переменные, которые передаются в gppTool.( Variables that are passed to gppTool).
- •Нумерация кадров. (Block Numbers).
- •GppTool Команды.(gppTool Commands).
- •Xcenter, ycenter, радиус, zstart
- •Точка смещения начала координат. (Change Ref Point)
- •Определение токарного инструмента. (Def Turn Tool).
- •Время выдержки. (Delay). Параметры:
- •Примеры:
- •Пример:
- •Параметры:
- •Описание:
- •Пример:
- •Пример:
- •Примеры:
- •Пример:
- •Начальная точка. (Home_data). Параметры:
- •Инициализация позиции с.(Init Cpos).
- •Описание:
- •Подача, шпиндель.(m Feed Spin). Праметры:
- •Описание:
- •Направление ускоренного перемещениея 4-х осевой.(Move4x Dir). Параметры:
- •Описание:
- •Параметры:
- •Описание:
- •Вращение по плоскисти.(Rotate to plane). Параметры:
- •Пример:
- •Старт инструмента.( Start Tool).
- •Примеры :
- •Стоп Инструмент. (Stop Tool)
- •Нарезание резьбы. (Thread).
- •Матрица. (Tmatrix). Параметры:
- •Информация о траектории. (Tool Path Info). Параметры:
- •Описание:
- •Токарная смена инструмента. (Turn Change Tool). Параметры:
- •Описание:
- •Пример:
- •Сверление в токарной обработке. (Turn Drill). Параметры:
- •Пример:
- •Конец токарной процедуры. (Turn Endproc).
- •Описание:
- •Пример:
- •Токарная обработка. (Turning).
- •Описание:
- •Дуга в электроэрозионной обработке. (Wc Arc). Параметры:
- •Описание:
- •Пример:
- •Пример:
- •Резание проволокой в электроэрозионной. (Wc Cut Wire).
- •Информация финишной электроэрозионной обработки. (Wc Finish Info). Параметры:
- •Описание:
- •Пример:
- •Загрузка проволоки-электротэрозия. (Wc Insert Wire).
- •Пример:
- •Примеры:
- •Примеры:
- •Файловые Команды. (File Commands).
- •Местное включение. (Include Place).
- •Включение вложенности. (Include Nesting).
- •Включение сообщения об ошибках.(Include Error messages).
- •Включение инициализации.(Include initialization).
- •Кинематический Стиль .(Kinematic Style).
- •Примеры. (Examples). Пример 1: пользовательский пре- и постпроцессор для Fanuc контроллера. (Example 1: User-defined Pre and Post-processor for a Fanuc controller). Файл препрцессора: [fanuc.Prp]
- •Файл постпроцессора: [fanuc.Gpp]
- •Файл препроцессора: [Integrex-e-410h.Prp]
- •Файл постпроцессора: [Integrex-e-410h.Gpp]
- •Пример файла. (example: fanuc g-Code file)
- •Сообщения об ошибках gpPtool. (gpPtool error messages).
Файл постпроцессора: [fanuc.Gpp]
; FANUC
@init_post
global string tool_diameter_f; ввод глобальной переменной строкового типа о диаметре инстр-та
num_user_procs = 1; номер пользовательской процедуры (показ в панели проекта)
numeric_def_f = '5.3'; размерность расчета до 3 знаков после запятой и 5 знаков до запятой integer_def_f = '5.0(p)' gcode_f = '2.0(p)'; формирование функций G не более 2-х разрядов без вывода точки mcode_f = '2.0(p)'; формирование функций M не более 2-х разрядов без вывода точки xpos_f = '5.3'; размерность расчета для координаты X ypos_f = '5.3'; размерность расчета для координаты Y zpos_f = '5.3'; размерность расчета для координаты Z feed_f = '4.3(p)'; размерность подачи до 4-х цифр до и 3-х после запятой с выдачей точки tool_diameter_f = '5.3/1'; размерность описания и принятия диаметра инструмента blknum_f = '5.0(p)'; размерность номера кадра не более 5-ти цифр в нумерации blknum_gen = FALSE; генерация номера кадра ЛОЖЬ (т.е.нет нумерации при выводе УП) blknum_exist = TRUE; выход номера кадра «разрешено» blknum = 5; номер первого кадра при нумерации выходных кадров blknum_delta = 5; приращение при нумерации кадров (т.е. шаг номера кадра) blknum_max = 32000; максимальный номер кадра в программе
endp; конец процедуры (далее везде это будет обозначать конец процедуры для уменьшения
; печати)
;-------------------(строка визуального разделения при печати и корректировки постпроцессора)
;-------------------(т.е. разделительная строка процедур по визуализации
@start_of_file; старт файла
; начальная фраза перед определением инструмента {'%'}; начало программы в виде процента {nl, 'O'program_number, ' (', g_file_name, ')'}; номер (имя) программы if rotate_used then; если используется вращение, тогда gcode = 69; определение функции G {nb, 'G'gcode}; формирование пустого номера кадра с функцией G endif; конец условия «если» для G69 if mirror_used then; если используется «зеркало», тогда {nb, 'G50.1 X0 Y0'}; формирование кадра отмены зеркала для X и Y endif; конец условия «если» для «зеркала» {nb, '(SUBROUTINES: O'first_proc_number, ' .. O'last_proc_number, ')'}; кадр сообщения о
; подпрограмме
endp
;-------------------
@start_program; старт программы
; для последующего определения инструмента {nb, 'G80 G49 G40'}; формирование кадра с начальными функциями перед сменой инстр-та call @home_number; расчет (обращение к процедуре) нулевой (начальной) точки программы
endp
;-------------------
@end_program; конец программы
{nb, 'M9'}; формирование кадра отключения охлаждения call @rapid_move; обращение к процедуре ускоренного перемещения (позиционирования) {nb, 'M30'}; конец программы
endp
;-------------------
@end_of_file; конец файла
label = first_user_proc; определение названия подпрограммы call @proc; обращение к расчету поцедуры подпрограммы {nb, '(--------------------)'}; формирование визуального кадра для индикации на дисплее станка
;(опция для станочника) {nb, '(- CHANGE TOOL -)'}; сообщение о смене инструмента (опция для станочника) {nb, '(--------------------)'}; формирование визуального кадра для индикации на дисплее станка
;(опция для станочника) {nb, 'G80 G49 G40 M9'}; формирование определенного кадра, который включает в себя
;ввод отмены цикла сверления (G80), ввод отмены длины инструмента (G49), ввод отмены
;коррекции на радиус инструмента (G40), ввод отмены охлаждения (M9) {nb, 'G91 G28 Z0.'}; формирование кадра с выходом в референтную точку по коорд-те Z call @stop_tool; обращение к процедуре «стоп инструмента» {nb, 'G90 M1'}; формирование кадра абсолюта (G90) и условного останова (M1) {nb, 'M6'}; кадр с поворотом револьверной головки и активацией текущего инструмента call @end_proc; обращение к процедуре «конец процедуры» {nl, '%'}; конец массива программы (конец перфоленты по старым определениям)
endp
;-------------------
@relative_mode; относительная система отсчета
gcode = 91; определение функции отсительной системы отсчета { nb, 'G'gcode, ' '}; формирование кадра с G91 skipline = FALSE; пропуск следующего формирования записи
endp
;-------------------
@absolute_mode; абсолютная система остчета
gcode = 90; определение функции абсолютной системы отсчета {nb, 'G'gcode, ' '}; формирование кадра с G90 skipline = FALSE; пропуск следующего формирования записи
endp
;---------------------
@machine_plane; основная плоскость обработки (актуально для круговой интерполяции и для
;ввода коррекции на радиус инструмента G41 и G42)
if machine_plane eq XY; если плоскость обработки XY gcode = 17; определение функции G17 endif; конец условия «если» if machine_plane eq YZ; если плоскость обработки YZ gcode = 18; определение функции G18 endif; конец условия «если» if machine_plane eq ZX; если плоскость обработки ZX gcode = 19; определение функции G19 endif; конец условия «если» {nb, 'G'gcode}; формирование кадра с определенной функцией G (смотри условия выше)
endp
;-------------------
@call_proc; процедура расчета подпрограммы
if active(parm1) then; если активен параметр parm1, тогда gcode = 65; определение функции G65 {nb, 'G'gcode, ' P'label}; формирование кадра с G и P (имя подпрограммы) {' A'parm1, [' B'parm2], [' C'parm3]}; добавление к предыдущей строке else; иначе {nb, 'M98 P'label}; формирование кадра с M98 и P именем подпрограммы endif; конец условия «если» if proc_count gt 1 then; если счетчик процедуры указывает на большее ,чем 1,тогда {' L'proc_count}; добавление повтора подпрограммы под адресом L endif; конец условия «если» {[' ('message, ')']}; добавить к предыдущей строке сообщение (присутствие модальности)
endp
;-------------------
@proc; процедура
{nl, 'O'label}; строка без нумерации (nl) – адрес O с именем процедуры
endp
;-------------------
@end_proc; конец процедуры
{nb, 'M99'}; формирование кадра конца процедуры (подпрограммы)
endp
;----------------
@loop; цикличность повторения
local integer var_num; ввод локальной переменной var_num целочисленного значения
var_num = loop_level + 20; переменная var_num равна loop_level (уровень повторения +20)
{nb, '#', var_num, ' = 0'}; формирование кадра с внутренней переменной FANUC {nb, 'WHILE [#', var_num, ' LT ', loop_count, '] DO ', loop_level};описание условий « пока» в
;FANUC-e
endp
;----------------
@end_loop; конец петли повторения
local integer var_num; ввод локальной переменной var_num целочисленного значения
var_num = loop_level + 20 {nb '#', var_num, ' = #', var_num, ' + 1'}; формирование кадра с внутренней переменной FANUC {nb 'END ', loop_level}; конец повторений
endp
;----------------
@def_tool; смещение обработки
{nb, '(G10 L12 P', (tool_number+50), ' R'tool_offset, ')'}
endp
;-------------------
@rapid_move; ускоренное позиционирование
{nb}; пустой кадр gcode = 0; определение функции G0
if change(gcode) then; если смена G кода, тогда {'G'gcode}; формирование функции G для состава кадра else; иначе {' '}; формирование пробела в строке кадра endif; конец условия « если» {[' X'xpos], [' Y'ypos], [' Z'zpos]}; добавление к предыдущей строке формирования кадра
endp
;-------------------
@line; линейное перемещение (смотри предыдущую процедуру – аналог по описанию)
{nb} gcode = 1 if change(gcode) then {'G'gcode} else {' '} endif {[' X'xpos], [' Y'ypos], [' Z'zpos], [' F'feed]}
endp
;------------------- @arc; движение по окружности (окружность)
if arc_direction eq CCW then; если направление движения по окружности есть против часовой,
; тогда gcode = 3; определение функции G движения по окружности со значением 3 else ; CW иначе по часовой gcode = 2; определение функции G движения по окружности со значением 2 endif; конец условия «если» if change(gcode) then; если смена G кода, тогда {'G'gcode}; формирование функции G для состава кадра else; иначе
{' '}; формирование пробела в строке кадра endif; конец условия «если» {[' X'xpos] [' Y'ypos] [' Z'zpos]}; добавление к предыдущей строке формирования кадра
if arc_size eq 360 then; если размер дуги равен 360градусов, тогда else; иначе if arc_size >= 180 then; если размер дуги больше или равен 180 градусам, тогда radius = -radius; радиус равен радиусу со знаком минус endif; конец условия «если» {' R'radius}; добавление адреса R к строке формирование кадра endif; конец условия «если»
{[' F'feed]}; добавление подачи в строку кадра
endp
;-------------------
@compensation; компенсация радиуса инструмента (ввод или отмена ввода радиуса инстр-та)
if side eq COMP_LEFT then; если компенсация с левой стороны, тогда gcode = 41; определение функции G41 для компенсации слева endif; конец условия «если» if side eq COMP_RIGHT then; если компенсация с правой стороны, тогда gcode = 42; определение функции G42 для компенсации слева endif; конец условия «если» if side eq COMP_OFF then; если компенсация отключена, тогда gcode = 40; определение функции G40 для отмены компенсации
endif; конец условия «если» {nb, 'G'gcode, ' '}; формирование кадра с определенной функцией skipline = FALSE; пропуск следующего формирования записи
endp
;-------------------
@delay; выдержка времени
gcode = 4; определение функции G со значением 4 {nb 'G'gcode, ' P'delay_period:integer_def_f}; формирование кадра с выдержкой времени
endp
;-------------------
@change_ref_point; смена положения начальной точки (перенос ноля детали)
; Задано в абсолюте gcode = 92; определение функции G92 {nb, 'G'gcode, ' X'xhome, ' Y'yhome, ' Z'zhome}; формирование кадра сдвига системы координат
endp
;-------------------
@home_number; начальная точка (начало координат обработки детали)
gcode = 53 + home_number; определение станочного нуля (G53) плюс MAC1 или MAC2 и т.д. {nb, 'G'gcode}; формирование функции начала координат обработки детали
endp
;-------------------
@rotate; поворот обработки (перехода)
; Не приемлемо для FANUC 6M if rotate_cancel then; если отменен поворот, тогда gcode = 69; определение G кода отмены поворота обработки {nb, 'G'gcode}; формирование кадра с функцией G69 else; иначе gcode = 68; определение G кода ввода поворота обработки {nb, 'G'gcode, ' X0 Y0 G91 R'angle}; кадр центра поворота (X0 Y0) и угла поворота (R'angle) {nb, 'G90'}; ввод абсолюта ,т.к. предыдущий кадр с относительной системой отсчета (G91) endif; конец условия «если»
endp
;-------------------
@fourth_axis; четвертая ось
gcode = 0; определение функции быстрого позиционирования по 4-ой оси {nb, 'G'gcode, ' A'angle}; формирование кадра с G0 и углом поворота по оси A.
endp
;------------------- @change_tool; смена инструмента
local logical save_blknum_gen; ввод локальной переменной (сохранить номер кадра)
{nb, '(*TOOL 'tool_number, ' - DIA 'tool_diameter, '*)'}; кадр с информацией инструмента {nb, 'T'tool_number}; кадр с вызовом инструмента label = first_user_proc; присвоение имени подпрограмме для мены инструмента call @call_simple_proc; обращение к расчету простой процедуры save_blknum_gen = blknum_gen; сохрененномусгенерированнонму кадра присваивается номер blknum_gen = true ; генерация номера кадра для следующего кадра (истина для генерации) gcode = 43; определение функции G кода корректора на длину инструмента {nb, 'G'gcode, ' H'tool_number, ' D'(tool_number+50), ' '}; формирование кадра с корректорами на
;длину и диаметр инструмента blknum_gen = save_blknum_gen; сохранение нумерации кадров xpos = xnext; следующая позиция по x ypos = ynext; следующая позиция по y zpos = znext; следующая позиция по z skipline = FALSE; пропуск следующего формирования записи call @rapid_move; обращение к процедуре ускоренного перемещения tool_direction = CCW; направление вращения инструмента против часовой call @start_tool; обращение к процедуре «старт инструмента» {nb, 'M8'}; формирование кадра с выключением охлаждения
endp
;-------------------
@message; сообщение
{nb, '(', message, ')'}; формирование кадра с сообщением
endp
;-------------------
@drill; сверление
call @rapid_move; обращение к процедуре ускоренного перемещения
gcode = 98; определение функции G98 {nb, 'G'gcode, ' '}; формирование кадра с функцией G98 if drill_type eq drilling then; если тип сверления есть «сверление», тогда gcode = 81; формирование кадра с функцией G81 endif; конец условия «если» if drill_type eq f_drill then; если тип сверления есть «сверление с выдержкой времени», тогда gcode = 82; формирование кадра с функцией G82 endif; конец условия «если» if drill_type eq peck then; если тип сверления есть «сверление с выводом инстр-та», тогда gcode = 83; формирование кадра с функцией G83 endif; конец условия «если» if drill_type eq tapping then; если тип сверления есть «нарезание резьбы метчиком», тогда gcode = 84; формирование кадра с функцией G84 endif; конец условия «если» if drill_type eq boring then; если тип сверления есть «расточка», тогда gcode = 85; формирование кадра с функцией G85
endif; конец условия «если»
if drill_type eq r_boring then; если тип сверления есть «обратная расточка», тогда gcode = 86; формирование кадра с функцией G86 endif; конец условия «если» if drill_type eq f_boring then; если тип сверления есть «расточка с выдержкой времени», тогда gcode = 89; формирование кадра с функцией G89 endif; конец условия «если» {'G'gcode, ' Z'drill_lower_z, ' R'drill_upper_z} if drill_type eq peck then; если тип сверления есть «центровка», тогда {' Q'down_step}; добавление адреса Q к строке endif; конец условия «если» if drill_type eq f_drill or drill_type eq tapping then; если тип сверления есть «сверление с выдержкой
;времени» или «нарезание резьбы метчиком», тогда {' P'delay:integer_def_f}; добавление к строке адреса P (параметр - время выдержки) endif; конец условия «если» {' F'feed}; добавление к строке подачи
endp
;-------------------
@drill_point; точки сверления
if not first_drill then; если нет первого сверления, тогда {nb, ' ', [' X'xpos], [' Y'ypos], [' Z'zpos]}; формирование кадра с координатами endif; конец условия «если»
endp
;-------------------
@mirror; зеркальная обработка (зеркало)
if mirror_type eq MIRROR_OFF then; если «тип зеркала» является «нет зеркала»,тогда {nb, 'G50.1 X0 Y0'}; формирование кадра с отменой зеркала else; иначе {nb, 'G51.1 '}; формирование кадра с зеркалом (функция G51.1) if mirror_type eq MIRROR_X then; если зеркало относительно оси X, тогда {'X1 Y0'}; добавление к строке координат зеркальной обработки endif; конец условия «если» if mirror_type eq MIRROR_Y then; если зеркало относительно оси Y, тогда {'X0 Y1'}; добавление к строке координат зеркальной обработки endif; конец условия «если» if mirror_type eq MIRROR_XY then; если зеркало относительно оси XY, тогда {'X1 Y1'}; добавление к строке координат зеркальной обработки endif; конец условия «если» endif; конец условия «если»
endp
;-------------------
@end_drill; конец циклов сверления
gcode = 80; определение функции G80 {nb, 'G'gcode}; формирование кадра с функцией G80
endp
;-------------------
@halt_program; условный останов
{' M0'}; формирование строки условного останова
endp
;--------------------
@start_of_job; старт перехода
; NOP
endp
;--------------------
@end_of_job; конец перехода
; NOP endp
; ======================= ; USER DEFINED PROCEDURES; ОПРЕДЕЛЯЕМЫЕ ПОЛЬЗОВАТЕЛЕМ ПРОЦЕДУРЫ ; =======================
@call_simple_proc; простая процедура
active(message) = FALSE; активность (сообщение) - ЛОЖЬ active(parm1) = FALSE; активность (parm1) - ЛОЖЬ active(parm2) = FALSE; активность (parm2) - ЛОЖЬ active(parm3) = FALSE; активность (parm3) - ЛОЖЬ proc_count = 1; количество процедур - 1 call @call_proc; обращение к процедуре
endp
;-------------------
@start_tool; старт инструмента
if tool_direction eq CW then; если направление вращения инструмента по часовой,тогда mcode = 4; определение М кода со значением 4 else ; CCW иначе против часовой mcode = 3; определени М кода со значением 4 endif; конец условия «если» {' S'spin:integer_def_f, ' M'mcode}; кадр с числом (S) оборотов и определенной функцией М
endp
;-------------------
@stop_tool; стоп инструмента
{' M5'}; формирование строки останова инструмента
endp
Пример 2: Пользовательский пре- и постпроцессор для фрезерно-токарного контроллера с XZYCB осями. (Example 2: User-defined Pre and Post-processor for mill-Turn with XZYCB axis controller).
