Gpptools 2012
Gpptools 2012
Руководство по составлению
препроцессоров и постпроцессоров
для станков с ЧПУ фрезерной,
токарной и электроэрозинной группы в
среде SolidCAM, встроенного в
оболочку SolidWorks.
SENNIK53
Введение.
Типы Постпроцессоров.
Два типа использования Постпроцессорами GPPtool:
Пользовательский Постпроцессор.
При работе с пользовательским вариантом постпроцессора для каждого специфичного ЧПУ
контроллера необходимы три файла GPPtool. Это файлы:
[Link]
[Link]
[Link]
где [machine] - любое имя, выбранное пользователем для специфичного CNC (ЧПУ) контроллера
(системы ЧПУ, станка).
Файл [[Link]] описывает параметры препроцессора, которые определяют траекторию
инструмента в SOLIDCAM..
Файл [[Link]] описывает параметры постпроцессора и процедуры GPPL (GPP-языка), которые
определяют, как в SOLIDCAM движения инструмента преобразовываются в ЧПУ код.
Файл [[Link]] определяет станочные параметры.
Файлы PRP и GPP могут быть сгенерированы и отредактированы при использовании любого
текстового редактора. Файлы vmid могут быть отредактированы только [Link].
Gpptool установка.
GPPtool автоматически устанавливается на компьютер при инсталляции программы SOLIDCAM.
Выполнение GPPtool.
GPPtool является неотъемлемой частью программы SOLIDCAM. Всякий раз, когда команда G-Code
(УП) внутри SOLIDCAM активизирована, программа GPPtool также активизируется, чтобы
генерировать код ЧПУ.
Параметры препроцессора.
Это параметры, которые определены пользователем и определяют траекторию инструмента в
SOLIDCAM. Они определены в файле:
[Link]
где [machine] - любое имя выбранное потребителем для конкретного контроллера CNC(ЧПУ).
Файл [[Link]] можно редактировать, используя любой текстовый редактор.
Пример:
gMill_3x_Cincinnati_Eval.PRP
gTurn_Centroid_2x_Eval.PRP
[Link]
[Link]
Integer (целое число, целочисленный) - может содержать подпись, целые числа в диапазоне
(-999999999, +999999999).
Numeric (числовой) - может содержать любое число в диапазоне (-1.E300, +1.E300).
Logical (логический) - может содержать логическую TRUE(1) величину или FALSE(0). (ИСТИНА (1)
или ЛОЖЬ (0)).
String (строковый) - может содержать любую последовательность символов ASCII; количество
символов неограниченное.
post_processor = MAKINO_W
gpp_file_ext = nc
max_g_name_length = 8
Пример.
Имя проекта: upper plate side 1
Расширение: nc (max_g_name_length = 8)
Имя файла УП: [Link]
Определяет язык постпроцессора из числа следующих опций: CHINESE, CZECH, DANISH, ENGLISH,
FRENCH, GERMAN, HEBREW, ITALIAN, JAPANESE, KOREAN, POLISH, PORTUGUESE, RUSSIAN,
SPANISH и TURKISH. Параметры циклов постпроцессора могут быть преобразованы в другие языки .
Например, в препроцессоре ******.PRP (условный препроцессор) строка:
default_lang= ENGLISH
SolidCAM сохраняет сгенерированные файлы G-кода (УП) в папке по указанному пути. Когда
генерация G-кода (УП) запускается, SolidCAM создает новую папку с именем проекта CAM в
указанном каталоге сохранения G-кода (УП) и сохраняет файлы УП там. Если эта папка уже
существует, SolidCAM использует ее для вывода G-кода (УП).
Например, если в препроцессоре ******.PRP не указана папка сохранения (вид написания ниже)
dir_gcode =
или нет такой записи, то выходной файл сохраняется по умолчанию в папке проекта (смотри в
настройках SolidCAM-а) или по дополнительному указанию при создании проекта.
Если ИСТИНА (Y), SolidCAM создает отдельную папку для каждого сегментного файла G–кода (УП) и
сохраняет файлы сегментов УП там. Папка создается в папке G–кода (УП) SolidCAM в указанном
расположении. Имя папки является таким же именем, как и имя файла сегмента G-кода (УП).
Если ИСТИНА(Y), SolidCAM создает папку для каждого проекта и сохраняет файл G-кода (УП) там. В
противном случае, файлы G-кода (УП) для всего проекта будут сгенерированы в директорий G-кода.
machine_plane = XY
Этот параметр определяет, имеет ли станок с ЧПУ команду G-кода для поворота.
Если (Y) Да - процедура G-кода имеет поворот, используя контроллер поворота G-кода или
параметрическое определение.
Если (N) Нет, процедура G-кода должна быть восстановлена с новым поворотом координат.
mirror тип: logical {Y/N}
Этот параметр NCTOOL определяет, имеет ли станок с ЧПУ команду G-кода для зеркального
отражения.
Если (Y) Да - процедура G-кода имеет зеркальное отражение, используя контроллер
зеркального отражения G-кода или параметрическое определение.
Если (N) Нет, процедура G-кода должна быть восстановлена с новыми зеркальными
координатами.
Этот параметр определяет оси вращения для 4-х осевых фрезерных станков с ЧПУ.
_4th_axes_around = X
означает, что четвертой осью является ось X (вертикальный станок) и модель будет вращаться
вокруг Оси X.
Возможность #2 (в препроцессоре строка)
_4th_axes_around = Y
означает, что четвертой осью является ось Y (горизонтальный станок) и модель будет вращаться
вокруг Оси Y.
Этот параметр определяет первую ось вращения, используемую для расчета углов поворота. Сначала
угол вращения для XY & XZ должен быть установлен для X. Следующий - Z.
Этот параметр определяет оси вращения для 5-х осевых фрезерных станков с ЧПУ.
Есть 3 возможности:
Возможность #1 (в препроцессоре строка)
_5th_axes_around = X
_5th_axes_around = Y
Установка параметра _5x_rotary_axes определяет линейные оси с применением ротационной оси (оси
поворота), которые вращаются вокруг нее (оси вращения). Этот параметр определяет
несколько конфигураций обработки поворота YX, ZY, ZX, XY, XZ вокруг оси поворота. После
определения этого параметра происходит поворот системы координат, приведенной в
начальное состояние как нулевое значение (dev_angle = 0). (dev_angle представляет собой
угол поворота в плоскости обработки, на который обработка должна быть повернута).
Параметр tilt_axis_dir (направление наклона оси) определяет направление, в котором 5-ая ось
наклоняет рабочие координаты, когда мы применяем 5-ти осевую обработку. Против часовой
стрелки (CCW) значение по умолчанию.
Когда параметр _5x_rotary_axes определен как ZX, или YX параметр tilt_axis_dir определяет
направление оси X.
Этот параметр определяет направление вращения 4-ой оси в положительном направлении при
одновременной обработке в SolidCAM-е.
При tilt_axis_dir_cw_ccw = Y отменяется вычисление без dev_angle, где dev_angle представляет собой
угол в плоскости обработки, на которой должна повернуться программа обработки.
По умолчанию tilt_axis_dir_cw_ccw = N
Этот параметр позволяет писать постпроцессоры в новом стиле. В новом стиле разработчик
постпроцессора не должен заботиться об определении параметров PRP и GPP @home_data и
@tmatrix подпрограммы. SolidCAM обеспечивают вывод Gcode (УП) для многих систем.
G65 P1000 L5
G65 P1000 L3
G65 P1000 L1.
Пример:
gen_procs = Y
gen_internal_proc = Y
Пример:
drill_proc = Y
O1
(--------------)
(D-D-T3 - DRILL)
(--------------)
G0 X17. Y50. Z50.
G98 G81 Z2. R5. F100
M98 P3 (d)
M99
O2
(--------------)
(D-D-T4 - DRILL)
(--------------)
G0 X17. Y50. Z50.
G98 G84 Z-1.8 F50
M98 P3 (d)
M99
O3
(----------)
(D - DRILLS)
(----------)
X27.
X17. Y20.
X27.
X77.
X87.
Y50.
X77.
G80
M99
drill_proc = N
O1
(--------------)
(D-D-T3 - DRILL)
(--------------)
G0 X17. Y50. Z50.
G98 G81 Z2. R5. F33
X27.
X17. Y20.
X27.
X77.
X87.
Y50.
X77.
G80
M99
O2
(--------------)
(D-D-T4 - DRILL)
(--------------)
G0 X17. Y50. Z50.
G98 G81 Z-2. R5. F33
X27.
X17. Y20.
X27.
X77.
X87.
Y50.
X77.
G80
M99
Этот параметр используется для токарных циклов. Он конкретизирует формат G-кода (УП), если
геометрия цикла - это простая линия. Обычно геометрия цикла указана в процедуре G-кода (УП).
Если Y, - процедура геометрии будет генерироваться, как и любая другая геометрия.
Если N, - процедура геометрии не будет генерироваться и детали геометрии будут представлены
только в токарной команде.
Пример:
optimize_jobs_loop = Y
O5000 (.TAP)
G54
M98 P9011
M01
M98 P1 (F-profile1-T1)
M98 P2 (D-drill1-T1)
G10G91 L2 P1 X60. Y0. Z0.
G90
#22 = #22 + 1
G1
END 2
G10G91 L2 P1 X-120. Y-30. Z0.
G90
#21 = #21 + 1
G1
END 1
G10G91 L2 P1 X0. Y60. Z0.
G90
M98 P9010
M30
O1
optimize_jobs_loop = N
O5000 (.TAP)
G54
M98 P9011
M01
M98 P1 (F-profile1-T1)
G10G91 L2 P1 X60. Y0. Z0.
G90
#22 = #22 + 1
G1
END 2
G10G91 L2 P1 X-120. Y-30. Z0.
G90
#21 = #21 + 1
G1
END 1
G10G91 L2 P1 X0. Y60. Z0.
G90
#21 = 0
WHILE [#21 LT 2] DO 1
#22 = 0
WHILE [#22 LT 2] DO 2
M98 P2 (D-drill1-T1)
G10G91 L2 P1 X60. Y0. Z0.
G90
#22 = #22 + 1
G1
END 2
G10G91 L2 P1 X-120. Y-30. Z0.
G90
#21 = #21 + 1
G1
END 1
G10G91 L2 P1 X0. Y60. Z0.
G90
M98 P9010
M30
O1
Эта переменная устанавливается при использовании только файловых команд. Если команды “open
file”, “close file”, “delete file”, “copy file” (“открыть файл”, “закрыть файл”, “удалить файл”, “файл
копировать”) используется в переменной GPP seq_sub_number, должен быть установлен на Y.
seq_sub_number = Y
Пример:
Loop_exist = Y
%
O5000 (.TAP)
G54
M98 P9011
M01
(TOOL -1- MILL DIA 6.0 R0. MM )
G90 G00 G40 G54
G43 H1 D31 G0 X7. Y12.5 Z50. S1000 M3
M8
#21 = 0
WHILE [#21 LT 2] DO 1
#22 = 0
WHILE [#22 LT 2] DO 2
M98 P1 (F-profile-T1)
M98 P2 (D-drill-T1)
G90
#22 = #22 + 1
G1
END 2
G90
#21 = #21 + 1
G1
END 1
G90
M98 P9010
M30
O1
(----------------------)
(F-PROFILE-T1 - PROFILE)
(----------------------)
M99
O2
(------------------)
(D-DRILL-T1 - DRILL)
(------------------)
G0 X15. Y15. Z10.
G98 G81 Z-5. R2. F33
M98 P3 (drill)
M99
O3
(--------------)
(DRILL - DRILLS)
(--------------)
X25.
G80
M99
%
Loop_exist = N
%
O5000 (.TAP)
G54
M98 P9011
M01
(TOOL -1- MILL DIA 6.0 R0. MM )
G90 G00 G40 G54
G43 H1 D31 G0 X7. Y12.5 Z50. S1000 M3
M8
M98 P1 (F-profile-T1)
M98 P2 (D-drill-T1)
G10G91 L2 P1 X60. Y0. Z0.
G90
M98 P1 (F-profile-T1)
M98 P2 (D-drill-T1)
G10G91 L2 P1 X60. Y0. Z0.
G90
G10G91 L2 P1 X-120. Y30. Z0.
G90
M98 P1 (F-profile-T1)
M98 P2 (D-drill-T1)
G10G91 L2 P1 X60. Y0. Z0.
G90
M98 P1 (F-profile-T1)
M98 P2 (D-drill-T1)
G10G91 L2 P1 X60. Y0. Z0.
G90
G10G91 L2 P1 X-120. Y30. Z0.
G90
G10G91 L2 P1 X0. Y-60. Z0.
G90
M98 P9010
M30
O1
(----------------------)
(F-PROFILE-T1 - PROFILE)
(----------------------)
M99
O2
(------------------)
(D-DRILL-T1 - DRILL)
(------------------)
M98 P3 (drill)
M99
O3
(--------------)
(DRILL - DRILLS)
(--------------)
X25.
G80
M99
%
Пример:
same_sub_numbers = Y
seq_sub_number = Y
O5000 (.TAP )
M98 P8060
G56 P109 Z-5. A5000. F5000. H0.(F-profile-T4)
M98 P8060
M30
O0109
M99
O0110
(- CLOSE PROGRAM -)
M30
%
------- разделение на части-------
%
O5001 (.TAP )
M98 P8060
G56 P109 Z-30. A33. F100. H0.(F-profile-T5)
M98 P8060
M30
O0109
M99
O0110
(- CLOSE PROGRAM -)
M30
%
same_sub_numbers = N
seq_sub_number = Y
%
O5000 (.TAP )
M98 P8060
G56 P109 Z-5. A5000. F5000. H0.(F-profile-T4)
M98 P8060
M30
O0109
M99
O0110
(- CLOSE PROGRAM -)
M30
%
------- разделение на части-------
%
O5001 (.TAP )
M98 P8060
G56 P111 Z-30. A33. F100. H0.(F-profile-T5)
M98 P8060
M30
O0111
M99
O0112
(- CLOSE PROGRAM -)
M30
%
SolidCAM не будет использовать функции трансформации станка (зеркало, смещение, поворот и т.д.)
и путь инструмента будет рассчитан согласно определенной трансформации.
software_transform4x тип: logical {Y/N}
Определяет расположение, где @home_data будет выведен или в начале программы после @def_tool
или в конце программы после @end_of_program. @home_data включает информацию нового
исходного положения, вращение и т.д..
Позиционирование. (Positioning).
dflt_start тип: numeric (x, y, z)
Это значение по умолчанию стартовой позиции инструмента в начале обработки детали. Это значение
может быть изменено внутри SOLIDCAM в поле «Данные Операции».
Примечание:
Даже если станок с ЧПУ имеет возможность компенсации радиуса инструмента (коррекции на радиус
инструмента), пользователь может решить не использовать эту станочную особенность в случае,
если он хочет генерировать управляющую программу, которая не использует компенсацию радиуса
инструмента.
comp_arc_arc тип: logical (Y/N).
Указание SOLIDCAM, может ли станочный контроллер (т.е. система ЧПУ) активизировать
компенсацию радиуса инструмента между двумя связанными между собой дугами.
Указание SolidCAM, является ли компенсация радиуса инструмента нулем (если Y) или радиусом
инструмента (если N).
Пример:
arc_3d = Y
%
O5000 (.TAP)
G54
M98 P9011
M01
M98 P1 (P- POCKET -T1)
M98 P9010
M30
O1
(---------------------)
(P- POCKET -T1 - POCKET)
(---------------------)
G0 X182.414 Y32.5 Z10.
Z2.
G3 X165.856 Y40.05 Z0. R10. F100
X171.015 Y22.598 Z-2. R10.
X173.813 Y42.402 R-10. F300
X171.015 Y22.598 R-10.
G1 X172.414 Y32.5
X177.5
Y51.538
X174.919 Y54.119
G2 X172.414 Y32.5 R38.
G0 Z10.
M99
%
arc_3d = N
%
O5000 (.TAP)
G54
M98 P9011
M01
M98 P1 (P- POCKET -T1)
M98 P9010
M30
O1
(---------------------)
(P- POCKET -T1 - POCKET)
(---------------------)
G0 X182.414 Y32.5 Z10.
Z2.
G1 X182.271 Y34.185 Z1.852 F100
X181.846 Y35.822 Z1.704
X181.151 Y37.364 Z1.556
X180.207 Y38.767 Z1.407
X179.039 Y39.991 Z1.259
X177.682 Y41. Z1.111
X176.174 Y41.766 Z0.963
X174.559 Y42.267 Z0.815
X172.882 Y42.489 Z0.667
X171.192 Y42.425 Z0.519
X169.537 Y42.077 Z0.37
X167.964 Y41.455 Z0.222
X166.518 Y40.577 Z0.074
X165.241 Y39.468 Z-0.074
X164.17 Y38.159 Z-0.222
X163.334 Y36.689 Z-0.37
X162.758 Y35.099 Z-0.519
X162.458 Y33.434 Z-0.667
X162.443 Y31.743 Z-0.815
X162.713 Y30.074 Z-0.963
X163.261 Y28.473 Z-1.111
X164.07 Y26.988 Z-1.259
X165.118 Y25.661 Z-1.407
X166.375 Y24.529 Z-1.556
X167.805 Y23.626 Z-1.704
X169.366 Y22.976 Z-1.852
X171.015 Y22.598 Z-2.
G3 X173.813 Y42.402 R-10. F300
X171.015 Y22.598 R-10.
G1 X172.414 Y32.5
X177.5
Y51.538
X174.919 Y54.119
G2 X172.414 Y32.5 R38.
G0 Z10.
M99
%
Пример#2
arc_quadrants = Y
%
O5000 (.TAP)
G54
M98 P9011
M01
N1 M6 T1
M8
M98 P1 (F-profile-T1)
M98 P9010
M30
O1
(----------------------)
(F-PROFILE-T1 - PROFILE)
(----------------------)
G0 X26. Y-4. Z9.
Z1.
G1 Z-6. F33
G2 X-4. Y26. R30. F100
X26. Y56. R30.
X56. Y26. R30.
X26. Y-4. R30.
G0 Z9.
M99
%
arc_quadrants = N
%
O5000 (.TAP)
G54
M98 P9011
M01
M8
M98 P1 (F-profile-T1)
M98 P9010
M30
O1
(----------------------)
(F-PROFILE-T1 - PROFILE)
(----------------------)
G0 X26. Y-4. Z9.
Z1.
G1 Z-6. F33
G2 X26. Y56. R-30. F100
X26. Y-4. R-30.
G0 Z9.
M99
%
Указывает SolidCAM, имеет ли система ЧПУ дуги с диферентной глубиной на 4 осях. Если нет, дуга
разделяется на линейные сегменты.
Самая маленькая длина дуги, ниже которой дуга преобразовывается в линейное перемещение.
Если да (Y), это означает, что SolidCAM генерирует G_коды (УП), которые включают дуги в плоскости
ZX (G18) и в плоскости YZ (G19).
Если нет (N), дуга делится на линейные сегменты.
Если да (Y), это означает, что SoilidCAM генерирует G_коды (УП), которые включают дуги в
плоскостях только xy, yz и zx. Дуги в других плоскостях делятся на линейные сегменты.
Если да (Y), это означает, что SolidCAM генерирует G_коды (УП), которые включают дуги при
вращении.
Если нет, дуга делится на линейные сегменты.
Эпсилон величины. (Epsilon Values).
eps_angle тип: numeric
Минимальный угол дуги, меньше которого дуга пересчивается в прямую при генерации УП.
Этот параметр определяет количество цифр после знака десятичной дроби для величин подачи.
Этот параметр определяет количество цифр после знака десятичной дроби для координатных
величин при генерации G_кодов (УП) и "данных показа" в моделировании SolidCAM.
Этот параметр определяет количество цифр после знака десятичной дроби для величин вращения.
SolidCAM позволяет Вам определить языкозависимые опции проекта. В этом случае расширение
языка должно быть добавлено к команде опций.
Пример:
_chi
Chinese _ita Italian
_cze
Czech _jap Japanese
_dan
Danish _kor Korean
_ger
German _rus Russian
_heb
Hebrew _spa Spanish
_tur
_hun Hungarian Turkish
Пимер:
{INTEGER/LOGICAL/NUMERIC/STRING}.
Пример:
Пример:
SolidCAM позволяет Вам определить языкозависимую работу опции. В этом случае расширение
языка должно быть добавлено к job_opt_type команде .
Пример:
Эта команда позволяет Вам определить опцию работы, доступную в китайской языковой среде .
{DRILLING/F_DRILL/PECK/TAPPING/BORING/R_BORING/F_BORING}
Этот параметр может быть указан более одного раза, определяя дополнительные циклы сверления
для каждой линии. Каждый drill_type (т.е. тип сверления) следуют после:
- Drill_type_name (имя типа сверления)
- Флажок указывает, может ли он использоваться в качестве цикла.
Если Y, это означает, что CNC-контроллер имеет такой цикл или, что цикл определен внутри файла
[[Link]].
Параметры сверления опрашиваются позже на экране Drill-Job (переход сверления).
Пример:
Сверление является именем цикла, которое будет выведено на экран в диалоговом окне работы
сверления. Сверление является идентификатором типа цикла, который определяет код цикла для
выбора, Y является логическим флагом, который определяет для контроллера CNC выполнение
такого цикла.
Пример:
Эта команда позволяет Вам определить опцию для цикла сверления, доступную в немецкой
языковой среде.
{INTEGER/LOGICAL/NUMERIC/STRING}
Этот параметр может быть указан более одного раза, определяя дополнительные циклы токарной
обработки. Каждый turn_type (тип точения) следуют после:
- turn_type_name (т.е. имя токарных циклов);
- Флажок указывает, может ли он использоваться в качестве цикла. Если Y, это означает, что CNC-
контроллер имеет такой цикл или цикл определен внутри файла [[Link]].
- Параметры токарных циклов опрашиваются позже на экране Turning-Job (токарный переход).
Пример:
SolidCAM позволяет Вам определить языкозависимую опцию работы. В этом случае расширение
языка должно быть добавлено к turn_type (тип точения) команде.
Пример:
Эта команда позволяет Вам определить опцию работы, доступную в венгерской языковой среде.
Пример:
{INTEGER/LOGICAL/NUMERIC/STRING}
Этот параметр можно задавать более одного раза, описывая дополнительные циклы . Каждый
thread_type (тип резьбонорезания) сопровождается:
- thread_type_name (т.е. имя цикла резьбонерезания).
- Флагом, указывающим, что это может использоваться как цикл.
Если да (Y), то это означает, что система ЧПУ имеет такой цикл или что цикл определен в файле
[[Link]].
- Параметры циклов резьбонарезания. Эти параметры опрашиваются с панели «Циклы
резьбонарезания».
Пример:
Пример:
SolidCAM позволяет Вам определить языкозависимую опцию работы. В этом случае расширение
языка должно быть добавлено к thread_type (тип резьбонарезания) команде.
Пример:
Эта команда позволяет Вам определить опцию работы, доступную в русской языковой среде.
{INTEGER/LOGICAL/NUMERIC/STRING}
Этот параметр можно задавать более одного раза, описывая дополнительные циклы в каждой строке.
Каждый параметр groove_type (тип прорезки) сопровождается:
- Groove_type_name (т.е. имя цикла прорезки).
- Флагом, указывающим, что это может использоваться как цикл.
Если да (Y), то это означает, что система ЧПУ имеет такой цикл или, что цикл определен в файле
[[Link]].
- Параметры цикла прорезки. Эти параметры запрашиваются в панели «Циклы прорезки».
Пример:
SolidCAM позволяет Вам определить языкозависимую опцию работы. В этом случае расширение
языка должно быть добавлено к groove_type команде.
Пример:
Эта команда позволяет Вам определить опцию работы, доступную в китайской языковой
среде.
Этот параметр определяет черновые процессы станочных циклов отхода к точке старта ('Y') либо
оставаться в последней точке ('N').
finish_retreat тип: logical {Y/N}
Этот параметр определяет финишные (чистовые) процессы станочных циклов отхода к точке старта
('Y') либо оставаться в последней точке ('N').
semi_finish_retreat тип: logical {Y/N}
Этот параметр определяет получистовые процессы станочных циклов отхода к точке старта ('Y') либо
оставаться в последней точке ('N').
fanuc_cycle тип: logical {Y/N}
Этот параметр определяет режим симуляции токарного чернового цикла.
Если Y, - симуляция идентична машинному циклу FANUC.
Если N, - симуляция идентична машинному циклу OKUMA.
Если Y, то включается расчет G – кода (УП), который использует ось C станка с направлением
вращения по часовой или против часовой стрелки (CW/CCW). Это включает использованию
нормализованных модулей C. (Только для фрезерования).
wc_pos_type
Этот параметр может быть указан более одного раза, определяя дополнительные станочные (макро)
циклы для каждой линии. Каждый wc_pos_type следуют после:
- Wc_pos_type_name
- The wc_pos_type параметры.
Эти параметры опрашиваются позже на экране wc_pos_job. Все параметры имеют цифровой тип.
wc_macro
Пример:
Этот параметр является флагом постпроцессора для автоматического выбора угловой пары. 5 осевые
векторы могут всегда отображаться в двух различных угловых парах. Этот флаг устанавливается в
истину, если постпроцессор должен автоматически определить, которая пара углов используется. В
этом случае постпроцессор выбрал бы угловую пару, которая не будет создавать очень большое
угловое перемещение относительно предыдущей позиции по углу. Некоторые станки могут
использовать только одну из угловых пар (осей координат) из-за станочных ограничений. В таком
случае, этот флаг должен быть установлен на истину и выбор угла параметра другой пары должен
быть использован для одной или другой пары углов.
Этот параметр постпроцессора для выбора одной угловой пары или другой угловой пары (всегда есть
2 математически возможные пары), Этот параметр используется, только если автоматическая угловая
пара выключена. Если автоматическая угловая пара включена, то этот флаг используется, чтобы
определить выбор самой первой угловой пары. После первого шага все последующие угловые
выборы пары будут выполняться автоматическим способом.
angle_change_limit тип:numeric
Эта величина (в градусах) устанавливает предел изменения угла от одной позиции инструмента до
следующей. Если угловое изменение между двумя позициями инструмента больше чем этот предел,
то постпроцессором применяется отход из зоны резания. Расстояние отхода устанавливается
пользователем в дальнейшем параметре. Значение по умолчанию составляет 150 градусов.
Например, если этот предел составил 100 градусов, и ось C перемещается от C10 до C170 градусов,
то такое перемещение рассмотривается как большое угловое изменение, и движение отхода
применяется постпроцессором.
interplat_distance тип:numeric
Эта функция устанавливает дистанцию интерполяции в модулях (мм или дюйм). Постпроцессор
интерполирует между двумя позициями траектории инструмента (система координат проекта),
использующий это пороговое значение.
Значение по умолчанию составляет 1 мм для метрической размерности и 0.05 дюйма для
размерности английского модуля. Например, если траектория инструмента от 0,0,0 до 0, 0, 100 и
дистанция интерполяции устанавливаются на 10, то 9 перемещений добавляются между стартом и
концом перемещения, и интерполятор добавит 0,0,10, то 0,0,20 и т.д.
retract_distance тип:numeric
Это значение определяет дистанцию возврата инструмента в проекте обработки, если обнаружено
предельное угловое превышение по оси наклона, определенное пределом угла наклона.
Значение по умолчанию составляет 100 мм для метрической системы и 4 для размера в не
метрических единицах, применяемых в Великобритании (дюйм).
Если Y, это включается изменения в задании значений 5 Осей следующих двух параметров:
auto_angle_pair
other_angle_pair
Этот параметр определяет области полюса, где ротационная ось и вращение шпинделя
параллельны.
Этот параметр определяет, будет ли допуск на длину инструмента (H длина) добавлен к кодовым
обозначениям NC (УП) или будет расценен как 0, и изменение длины инструмента будет добавлено в
активном станке (в процессе обработки на станке). Значение по умолчанию параметра
Use_tool_H_Lenght в PRP-файле является Y.
Этот параметр, используется для кинематического вычисления G-кода (УП) только при
pos_to_machine = N.
Этот параметр, используется для кинематического вычисления G-кода (УП) только при
pos_to_machine = N.
Эта опция позволяет Вам генерировать файлы документации в других форматах, например: Html,
Excel, txt, и т.д.
Prp Doc_processor
Можно настроить вывод документации SolidCAM, редактируя файлы станка *.prp и процессора
документации *.dpp вашего контроллера CNC.
Постпроцессор документации включает два файла: <machine_name>.dpp и <machine_name>.prp.
Эти файлы должны быть расположены в каталоге файлов постпроцессора, определенном в
настройках SolidCAM:
\Program Files\SolidCAMXXXX\SolidCAM,
где XXXX версия программного обеспечения SolidCAM.
Параметр под именем doc_processor должен быть определен в файле: <machine_name>.prp
Параметр определяется следующим образом:
doc_processor = <machine_name>.
{nl,'!!make dir='path_nc_code'!!'}
22 PAR Holder_description
@init_post
global integer tool_count
global string tool_def<<20,50>>
global integer job_count
global string job_def<<20,150>>
endp
Шаг 2 - Ввод значения для переменной
@start_of_job
message = msg
job_count = job_count + 1
job_def<<1,job_count>> = job_name
job_def<<2,job_count>> = tostr(down_step)
job_def<<3,job_count>> = tostr(toolpath_length)
job_def<<4,job_count>> = tostr(surface_offset)
job_def<<5,job_count>> = tostr(wall_offset)
job_def<<6,job_count>> = tostr(floor_offset)
job_def<<7,job_count>> = tostr(island_offset)
Npr=(abs(depth/down_step)-round(abs(depth/down_step),0))
If Npr > 0 then
Np=round(abs(depth/down_step),0)+1
else
Np=round(abs(depth/down_step),0)
endif
job_def<<8,job_count>> = tostr(Np)
job_def<<9,job_count>> = tostr(feed_rate)
job_def<<10,job_count>> = tostr(z_feed)
job_def<<11,job_count>> = tostr(finish_feed)
job_def<<12,job_count>> = tostr(spin_rate)
job_def<<13,job_count>> = tostr(finish_spin)
job_def<<14,job_count>> = tostr(job_dtime)
job_def<<15,job_count>> = tool_message
t_langth =tostr(tool_ID_number:'8.0(p)')
t1_langth=left( t_langth,4)
t2_langth=right( t_langth,4)
job_def<<16,job_count>> = t1_langth+'-'+ t2_langth
job_def<<17,job_count>> = tool_material
job_def<<18,job_count>> = holder_description
; {'(MSG, 'message')'}
endp
@def_tool
{nb,'(TOOL NUMBER ' tool_NUMBER ' tool_length ' tool_length ' tool_teeth_number ' tool_teeth_number }
{' corner_radius ' corner_radius}
tool_count = tool_count + 1
tool_def<<1,tool_count>> = tostr(tool_number:integer_def_f)
tool_def<<2,tool_count>> = tostr(tool_offset)
tool_def<<3,tool_count>> = tostr(tool_length )
tool_def<<4,tool_count>> = tostr(tool_teeth_number:integer_def_f)
tool_def<<5,tool_count>> = tostr(corner_radius)
tool_def<<6,tool_count>> = tostr(tool_type)
tool_def<<7,tool_count>> = tostr(tool_feed_z)
tool_def<<8,tool_count>> = tostr(tool_feed_finish)
tool_def<<9,tool_count>> = tostr(tool_spin_finish)
tool_def<<10,tool_count>> = tostr(tool_id_number:integer_def_f)
tool_def<<11,tool_count>> = tostr(tool_angle)
tool_def<<12,tool_count>> = tool_user_type
tool_def<<13,tool_count>> = tostr(program_number:integer_def_f)
tool_def<<14,tool_count>> = g_file_name
tool_def<<15,tool_count>> = 'DMU70_M'
tool_def<<16,tool_count>> = ' '
tool_def<<17,tool_count>> = tool_message
endp
@end_of_file
Процедура должна включать команду генерации вначале, чтобы открыть файл документа и закрыть
его в конце.
@doc
local string t_num
local integer i num
local string job_table_file
job_table_file = 'c:\\SolidCAM\\GPPTool\\job_table.html'
{nl,'!!open file=' job_table_file '!!'}
{nl,'<html>'}
{nl,''}
{nl,'<head>'}
{nl,'<meta http-equiv="Content-Language" content="en-gb">'}
{nl,'<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">'}
{nl,'<meta name="GENERATOR" content="Microsoft FrontPage 4.0">'}
{nl,'<meta name="ProgId" content="[Link]">'}
{nl,'<title>SolidCAM SetUp Sheet</title>'}
{nl,'</head>'}
{nl,''}
{nl,'<body>'}
{nl,''}
;
{nl,' </table>'}
{nl,' </left>'}
{nl,' <table border="1" width="81%">'}
num=num+1
t_num =tostr(num:'8.0(p)')
{nl,' </tr>'}
{nl,' <td>'t_num'</td>'}
{nl,' <td>OBR</td>'}
{nl,' <td> </td>'}
{nl,' <td>Machine description</td>'}
{nl,' <td>'machine_descr'</td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' </tr>'}
;
num=num+1
t_num =tostr(num:'8.0(p)')
{nl,' </tr>'}
{nl,' <td>'t_num'</td>'}
{nl,' <td>PAR</td>'}
{nl,' <td> </td>'}
{nl,' <td>Type machine</td>'}
{nl,' <td>'job_machine_type'</td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' </tr>'}
;
num=num+1
t_num =tostr(num:'8.0(p)')
{nl,' </tr>'}
{nl,' <td>'t_num'</td>'}
{nl,' <td>MZA</td>'}
{nl,' <td> </td>'}
{nl,' <td>Work material</td>'}
{nl,' <td>'work_material'</td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' </tr>'}
;
{nl,' </tr>'}
{nl,' <td bgcolor="#C0C0C0">.</td>'}
{nl,' <td bgcolor="#C0C0C0"> </td>'}
{nl,' <td bgcolor="#C0C0C0"> </td>'}
{nl,' <td bgcolor="#C0C0C0"> </td>'}
{nl,' <td bgcolor="#C0C0C0"> </td>'}
{nl,' <td bgcolor="#C0C0C0"> </td>'}
{nl,' <td bgcolor="#C0C0C0"> </td>'}
{nl,' <td bgcolor="#C0C0C0"> </td>'}
{nl,' <td bgcolor="#C0C0C0"> </td>'}
{nl,' <td bgcolor="#C0C0C0"> </td>'}
{nl,' </tr>'}
i=1
while i <= job_count
if i <= job_count
num=num+1
t_num =tostr(num:'8.0(p)')
{nl,' </tr>'}
{nl,' <td>'t_num'</td>'}
{nl,' <td>TPR</td>'}
{nl,' <td> </td>'}
{nl,' <td>Part name</td>'}
{nl,' <td>'f_name '</td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' </tr>'}
;
num=num+1
t_num =tostr(num:'8.0(p)')
{nl,' </tr>'}
{nl,' <td>'t_num'</td>'}
{nl,' <td>TPR</td>'}
{nl,' <td> </td>'}
{nl,' <td>Job name</td>'}
{nl,' <td>'job_def<<1,i>>'</td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' </tr>'}
;
num=num+1
t_num =tostr(num:'8.0(p)')
{nl,' </tr>'}
{nl,' <td>'t_num'</td>'}
{nl,' <td>PAR</td>'}
{nl,' <td> </td>'}
{nl,' <td>Down step</td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td>'job_def<<2,i>>'</td>'}
{nl,' </tr>'}
;
num=num+1
t_num =tostr(num:'8.0(p)')
{nl,' </tr>'}
{nl,' <td>'t_num'</td>'}
{nl,' <td>PAR</td>'}
{nl,' <td> </td>'}
{nl,' <td>Toolpath length</td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td>'job_def<<3,i>>'</td>'}
{nl,' </tr>'}
;
num=num+1
t_num =tostr(num:'8.0(p)')
{nl,' </tr>'}
{nl,' <td>'t_num'</td>'}
{nl,' <td>PAR</td>'}
{nl,' <td> </td>'}
{nl,' <td>Surface offset</td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td>'job_def<<4,i>>'</td>'}
{nl,' </tr>'}
;
num=num+1
t_num =tostr(num:'8.0(p)')
{nl,' </tr>'}
{nl,' <td>'t_num'</td>'}
{nl,' <td>PAR</td>'}
{nl,' <td> </td>'}
{nl,' <td>Wall offset</td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td>'job_def<<5,i>>'</td>'}
{nl,' </tr>'}
;
num=num+1
t_num =tostr(num:'8.0(p)')
{nl,' </tr>'}
{nl,' <td>'t_num'</td>'}
{nl,' <td>PAR</td>'}
{nl,' <td> </td>'}
{nl,' <td>Floor offset</td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td>'job_def<<6,i>>'</td>'}
{nl,' </tr>'}
;
num=num+1
t_num =tostr(num:'8.0(p)')
{nl,' </tr>'}
{nl,' <td>'t_num'</td>'}
{nl,' <td>PAR</td>'}
{nl,' <td> </td>'}
{nl,' <td>Island offset</td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
;{nl,' <td>'job_def<<7,i>>'</td>'}
{nl,' </tr>'}
;
num=num+1
t_num =tostr(num:'8.0(p)')
{nl,' </tr>'}
{nl,' <td>'t_num'</td>'}
{nl,' <td>PAR</td>'}
{nl,' <td> </td>'}
{nl,' <td>Number passed</td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td>'job_def<<8,i>>'</td>'}
{nl,' </tr>'}
;
num=num+1
t_num =tostr(num:'8.0(p)')
{nl,' </tr>'}
{nl,' <td>'t_num'</td>'}
{nl,' <td>PAR</td>'}
{nl,' <td> </td>'}
{nl,' <td>Feed rate</td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td>'job_def<<9,i>>'</td>'}
{nl,' </tr>'}
;
num=num+1
t_num =tostr(num:'8.0(p)')
{nl,' </tr>'}
{nl,' <td>'t_num'</td>'}
{nl,' <td>PAR</td>'}
{nl,' <td> </td>'}
{nl,' <td>Feed Z</td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td>'job_def<<10,i>>'</td>'}
{nl,' </tr>'}
;
num=num+1
t_num =tostr(num:'8.0(p)')
{nl,' </tr>'}
{nl,' <td>'t_num'</td>'}
{nl,' <td>PAR</td>'}
{nl,' <td> </td>'}
{nl,' <td>Feed finish</td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td>'job_def<<11,i>>'</td>'}
{nl,' </tr>'}
;
num=num+1
t_num =tostr(num:'8.0(p)')
{nl,' </tr>'}
{nl,' <td>'t_num'</td>'}
{nl,' <td>PAR</td>'}
{nl,' <td> </td>'}
{nl,' <td>Spin rate</td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td>'job_def<<12,i>>'</td>'}
{nl,' </tr>'}
;
num=num+1
t_num =tostr(num:'8.0(p)')
{nl,' </tr>'}
{nl,' <td>'t_num'</td>'}
{nl,' <td>PAR</td>'}
{nl,' <td> </td>'}
{nl,' <td>Spin finish</td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td>'job_def<<13,i>>'</td>'}
{nl,' </tr>'}
;
num=num+1
t_num =tostr(num:'8.0(p)')
{nl,' </tr>'}
{nl,' <td>'t_num'</td>'}
{nl,' <td>PAR</td>'}
{nl,' <td> </td>'}
{nl,' <td>Job time</td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td>'job_def<<14,i>>'</td>'}
{nl,' </tr>'}
;
num=num+1
t_num =tostr(num:'8.0(p)')
{nl,' </tr>'}
{nl,' <td>'t_num'</td>'}
{nl,' <td>INS</td>'}
{nl,' <td> </td>'}
{nl,' <td>Tool message</td>'}
{nl,' <td>'job_def<<15,i>>'</td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' </tr>'}
;
num=num+1
t_num =tostr(num:'8.0(p)')
{nl,' </tr>'}
{nl,' <td>'t_num'</td>'}
{nl,' <td>PAR</td>'}
{nl,' <td> </td>'}
{nl,' <td>Tool ID</td>'}
{nl,' <td>'job_def<<16,i>>'</td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' </tr>'}
;
num=num+1
t_num =tostr(num:'8.0(p)')
{nl,' </tr>'}
{nl,' <td>'t_num'</td>'}
{nl,' <td>PAR</td>'}
{nl,' <td> </td>'}
{nl,' <td>Tool material</td>'}
{nl,' <td>'job_def<<17,i>>'</td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' </tr>'}
;
num=num+1
t_num =tostr(num:'8.0(p)')
{nl,' </tr>'}
{nl,' <td>'t_num'</td>'}
{nl,' <td>PAR</td>'}
{nl,' <td> </td>'}
{nl,' <td>Holder_description</td>'}
{nl,' <td>'job_def<<18,i>>'</td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' <td> </td>'}
{nl,' </tr>'}
;
{nl,' </tr>'}
{nl,' <td bgcolor="#C0C0C0">.</td>'}
{nl,' <td bgcolor="#C0C0C0"> </td>'}
{nl,' <td bgcolor="#C0C0C0"> </td>'}
{nl,' <td bgcolor="#C0C0C0"> </td>'}
{nl,' <td bgcolor="#C0C0C0"> </td>'}
{nl,' <td bgcolor="#C0C0C0"> </td>'}
{nl,' <td bgcolor="#C0C0C0"> </td>'}
{nl,' <td bgcolor="#C0C0C0"> </td>'}
{nl,' <td bgcolor="#C0C0C0"> </td>'}
{nl,' <td bgcolor="#C0C0C0"> </td>'}
{nl,' </tr>'}
else
endif
i=i+1
endw
{nl,'!!close file='job_table_file'!!'}
endp
Introduction
GPPL Variables
GPPL Constants
GPPL Expressions
GPPL Statements
GPPL Internal Functions
Введение. (Introduction).
Эта глава описывает язык GPPL, его структуру и функции. Хотя есть много примеров в этой главе,
Вам также предлагают посмотреть примеры в следующей главе, где стандартные блоки GPPL
собраны в одном месте, чтобы сформировать полное общее представление о постпроцессоре.
У каждой переменной GPPL есть два атрибута. Эти атрибуты определяются и обновляются
автоматически GPPL, но могут также быть изменены непосредственно пользователем. Эти атрибуты:
Переменная GPPL может принимать значение одной из пяти групп. Как только она определена и
находиться в определенной группе, ее группа не может быть изменена. Переменными группами
являются:
Под этой группой вы можете найти все системные переменные, которые определены GPPL для
вашего использования в разработке постпроцессора. Отметьте, что вам не разрешается изменять
вид этих переменных.
Массив.(Array).
General (общее)
Variable (переменная)
Ей определено место в памяти с определенной целью и именем. Переменные могут быть различных
типов и различных размеров. Например, переменная, которая определена как целое число (т.е.
может принимать целые значения), будет иметь два байта в памяти.
Ряд переменных, которые имеют определенные логические взаимоотношения между собой и
размещены вместе, называются массивами. Массивы - это переменные такого же типа и имени,
которые могут быть дифференцированы только их индексом.
Например, если мы хотим сохранить первые сто простых чисел. Массив может быть назван PRIMES,
его тип может быть определен как "целое число" и его размер может составить 100. Первое исходное
число, таким образом, будет сохранено на первом месте в этой переменной, второе исходное число
будет сохранено на втором месте и так далее.
Упомянутое выше - это пример вектора, т.е., переменная с одним измерением. Также можно
определить переменную с двумя или более измерениями. Двумерная переменная называется
матрицей. Простой пример матрицы - это таблица умножения. Вектор имеет один индекс, который
дифференцирован между его переменными. Матрица, с другой стороны, имеет два индекса: первый
индекс символизирует номер строки, а второй индекс символизирует номер столбца.
Definition (Определение)
Определение переменной типа массив:
local/global numeric/integer/string var_name<<i1, i2 ...>>
Выражения в GPPL могут быть числового типа (т, е, выражения, которые производят целое
число/числовые значения), логического типа (которые производят логические ИСТИННЫЕ/ЛОЖНЫЕ
значения) или строкового типа (которые производят строковые значения). Любое выражение в
основном состоит из одного или более операндов, разделенных операторами, которые определяют
работу, и которая будет выполняться. Операнды являются или константами, переменными или
подвыражениями. Выражение могло бы содержать любое число круглых скобок, чтобы изменить
нормальную последовательность оценки. Например, в выражении (1+2-3), числа 1,2,3 являются
операндами, и символы +, - являются операторами. Можно использовать parantheses, чтобы изменить
приоритеты операторов или разъяснить выражения.
GPPL поддерживает четыре вида выражений: целые числа, цифровые, логические и строковые
выражения.
1. Integer expression: (целочисленное выражение)
Какое-либо выражение, которое включает целое число или логические подвыражения, но включает
как минимум одно подвыражение целого числа.
Пример:
1+(2-3) , tool_number+50
2. Numeric expression: (цифровое выражение)
Какое-либо выражение, которое включает целое число или логические, или цифровые подвыражения,
но включает как минимум одно цифровое подвыражение.
Пример:
1.+(2-3) , xpos , ypos*100
3. Logical expression: (логическое выражение)
Какое-либо выражение, которое включает целое число или логические выражения, и приводит к
значению TRUE/FALSE (1/0).
Пример:
xpos > -100 and xpos < 100 , FALSE , tool-number = 5
4. String expression: (строковое выражение)
Какое-либо выражение, которое включает только подвыражения строки.
Пример:
'G-code generated on '+ date
Операторы. (Operators).
GPPL поддерживает три типа операторов: целочисленные/числовые, логические и строковые
операторы.
операторы integer/numeric:
+,-, *, / основные арифметические операторы
^
Этот оператор определяет выполнение той же самой задачи как головная функция (b, p) .
Главная GPPL (b, p) функция возвращает значение b, возведенного в степень p.
a = b ^ p это эквивалентно a = pow(b, p);
Параметры:
b - любое числовое выражение.
p - любое числовое выражение.
Пример:
x = 4 ^ 3 ^ 2 ==> 4 ^ (3 ^ 2) = 4 ^ 9 = 262,144
Конверсии. (Conversions).
Конверсия - это процесс, используемый для оценки какого-либо выражения, которое состоит из
операндов различных типов. Например, пробуя добавить целое число и цифру один должен дать
значимый результат.
GPPL использует самый простой (более мощный) механизм, чтобы управлять конверсиями:
Примеры:
Комментарий. (Comment).
Формат:
; какой-либо текст
Описание:
Весь текст после ';' написанный до конца строки просто игнорируется.
Пример:
gcode = 1 ; это комментарий и будет проигнорирован.
Примечание.
Описание:
Генерация оператора используется для генерирования УП (управляющей программы). Все элементы
в операторе рассчитываются, и затем выводятся в файл УП. Каждый <item> (элемент) может быть:
Переменной любого вида (например, {xpos}).
Выражением любого вида; это должно прописываться между скобками (например, {(2*xpos)}).
У каждого элемента может дополнительно быть "display format" (формат дисплея или показа) для
управления способом генерации. Это можно явно записать в соединении элемента непосредственно
(например, {xpos: '5.3'}), или GPPL пытается найти это согласно следующим правилам:
Искать локальную строковую переменную под именем 'xxx_f'. Если она существует, используется
это в качестве формата дисплея (формат показа).
Если переменная имеет числовой тип, используется системная переменная под именем
'def_numeric_f' как формат дисплея (формат показа).
Этот механизм дает Вам полный контроль над форматом генерации УП.
Примечание:
Переменные типа массив могут использовать только формат по умолчанию .
GPPL поддерживает условную генерацию элементов. "modal group" ("модальная группа") - это группа
элементов, окруженных квадратными скобками ( [...] ). Например:
{ ['G', gcode] }
Если системная переменная 'gcode' изменилась и стала другой, строка с 'G1' будет генерироваться.
Если не изменилась, тогда строка с 'G1' не будет генерироваться.
Примеры:
gcode = 1 - если предыдущее значение было 1, флажок
изменения выбора установится в FALSE.
{nb, ['G'gcode], ' X'xpos, ' Y'ypos} - N125 X123.45 Y-12.3 отметьте, что 'G1' не генерировался.
Код GPPL, используемый для кадра N15 в первом примере, имеет следующее описание:
gcode = 1 ; определение функции G с значеним 1
{nb, ['G' gcode], ' X' xpos, 'Y' ypos}; формирование кадра с линейным перемещением
Код GPPL, используемый для кадра N15 во втором примере, является немного более сложным:
gcode = 1 ; определение функции G с значеним 1
if change(gcode) then ; если смена G кода, тогда
{nb, 'G' gcode, ' X' xpos, ' Y' ypos}; формирование кадра с адресом G
else ; иначе
{nb, ' ', ' X' xpos, ' Y' ypos}; резервное пространство вместо G
endif ; конец условия «если»
Было бы лучше, если мы могли бы написать второй пример в более сжатом виде (как в первом
примере). GPPL предоставляет возможность так сделать. Если системная переменная 'gcode_space'
(сохранение G кода) равна TRUE (ИСТИНА), GPPL будет генерировать G-код для второго примера,
даже если утверждение генерации GPPL прсутствует:
{nb, ['G' gcode], ' X' xpos, ' Y' ypos}
<fraction> контроль десятичной части. Этот компонент, должен быть 'N' или 'N/n', где:
N - число цифр после десятичной точки. Значение по умолчанию 0 для целочисленных выражений,
3 - для цифровых.
/n - минимальное число цифр, которые должны генерироваться. Значение по умолчанию: 0
<trailing-zeroes> (контроль фиксированных нулей):
' ' - присоединить число с фиксированными пробелами (интервалами).
'z' - присоединить число с фиксированными нулями.
none - не присоединять ничего.
Это - функция строки формата числовой переменной или выражения. GPPL вставит до или добавит
после числа необходимый префикс или постфикс (здесь: аффикс)
<Префикс> (<prefix>) или <постфикс> (<postfix>), расположенный в самом начале или конце строки
формата, окруженный ' <' и '>' символами.
<prefix><sign><leading-zeroes><integer>.<fraction><trailing-zeroes><options><postfix>
Аффиксы являются дополнением.
Аффикс не может содержать строку внутри: '<> 5.2'. Это - то же самое, как не пишется <> вообще.
Длина аффикса ограничивается 31 символом. Если более длинная строка будет найдена, то GPP
будет использовать первую 31 случайную обработку, и проигнорирует остальные. Никакое сообщение
об ошибке не выводится.
Символ'>' не может использоваться в строках аффиксов.
Пример:
'<X> 5.2 (p)' напечатает "X" как раз перед числом.
'5.2 (p) <abc>' добавит "abc" к числу.
'<X> 5.2 <abc>' произведет и префикс и суффикс.
Операторы генерации:
{nb} - Этот оператор генерирует новый блок (номер кадра).
{nl} - Этот оператор генерирует новую строку (кадр без нумерации).
col(число) - оператор используется, чтобы определить номер столбца, определяющего
местоположение печати значений параметра.
colrel (число) - оператор используется, чтобы обозначить номер столбца, определяющего
местоположение печати значение параметра относительно текущего расположения .
Пример:
@end_program
{nb,col(7) 'M30'}
endp
Формат:
while <cond>
statements
endw
Описание:
Условие (cond) оценено и превращено в логический тип. Если результат - его FALSE (ЛОЖЬ), то
инструкции 'endw' пока не выполняется (пропускаются). Иначе эти инструкции выполняются и
упомянутый выше процесс повторяется.
Инструкции могут быть вложены вплоть до 8 уровней (вложенность инструкций).
Пример:
logical integer i
i=1
while i < = 5
{nl, 'I=', i }
i=i+1
endw
Упомянутый выше код будет генерировать 5 кадров (линий) с 5 различными значениями (1...5) для i.
Формат:
trace <procedures>:<trace-level>
Описание:
GPP будет продуцировать trace (трассировку) информации пока генерируется G-код. Информация
trace (трассировки) будет генерироваться только для тех процедур, в которых определен список
процедур (смотрите примеры ниже). <trace-level> определяет, сколько информации будет
генерироваться. Значение <trace-level> должно находиться в пределах от 1 до 5, где 5 представляет
максимально доступную для трансляции информацию.
Эта информация представляет большой интерес на фазе разработки нового постпроцессора. Она
может существенно сократить время, требуемое для разработки такого постпроцессора.
Примеры:
trace "all": 1 - Все процедуры будут трассированы с минимально доступной trace информацией.
trace "@line,@arc":5 - только процедуры '@line' и '@arc' будут оттрассированы, генерируя
максимальную доступную информацию.
Примечание:
Распечатка трассировки содержит уровень вложенности процедуры, сопровождаемой именем
процедуры, и сопровождаемый символом ">". После символа прибывают данные трассировки и
сгенерированного G – кода (УП). Данные.
Пример:
if @line calls @user1 which calls @user2 (@line ==> @user1 ==> @user2)
if @line calls @user1 and then calls @user2 (@line ==> @user1, @user2)
Примечание:
Если SolidCAM обращался к @proc и эта proc (процедура) не была найдена в GPP файле, оператор
трассировки отследил бы это.
Нужно отметить:
Уровень вложенности для этих процедур (0) дает Вам дополнительную информацию, которую
пропускает процедуру.
Если процедуру вызывают из другой процедуры - сообщение об ошибке выводится на экран.
Примечание:
Если @rapid_move не существует в текущей строке, распечатка трассировки выдает его как вложение
0, но если эта процедура вызывается из @start_of_file, например, то сообщение об ошибке выводится
на экран.
Описание:
Оператор преждевременного завершения GPP останавливает процесс генерации УП независимо от
уровня подпрограмм или выражений if / while (если/пока).
Внутри некоторое время пункт 'break' (прерывание) будет игнорировать все операторы до оператора
'endw' (конец «пока»), и продолжать выполнение в первом операторе после 'endw'. Снаружи
некоторое время пункт 'break' допустим, но ничего не делает (=nop).
'break' ограничивается границей @proc: GPP ищет 'endw' только в @proc оператора 'break', и не ищет
по вызову @proc.
GPPL может прекращать выполнять @proc (расчет процедуры), и продолжать выполнять @proc.
Оператор 'return' (возврат) может быть в любом месте @proc, включая любой уровень вложенности
пунктов if/while (если, пока).
Отметьте, что операторы 'break' (прерывание) и 'return' ('возврат') имеют локальный эффект. Они
ограничиваются рамкой @proc (расчета процедуры). Операторы 'exit' ('выход') и 'abort' ('отказ') не
ограничены рамкой @proc (расчета процедуры) и имеют более глобальный эффект: или immediatelly
останавливают выполнение самого внешнего @proc и продолжают выполнять следующую генерацию
кода ('exit') (выход), или immediatelly прекращают генерировать G - код (УП) вообще.
Остановка генерации G-кода (УП) после ошибок. (Stop GCode generation after
errors).
Описание:
SolidCAM дает возможность прекратить обработку сообщения GPP, если происходит ошибка. Если
SolidCAM обнаружит ошибку в файле GPP в течение времени обработки, тогда он покажет сообщение
с описанием этой ошибки. В этом диалоговом окне сообщения присутствуют кнопки “OK” и 'CANCEL'.
Щелчок на кнопке OK разрешает SolidCAM-у продолжать обработку постпроцессинга. Нажатие кнопки
'CANCEL' останавливает обработку и осуществляет выход из постпроцессинга.
GPPL поддерживает ряд внутренних ("built-in") ("встроенных") функций. Используйте эти функции
всякий раз, когда Вы в этом нуждаетесь. Есть четыре категории функций: числовой, строковый,
логичный и функции генерации (numeric, string, logical и generation functions).
Numeric Functions
String Functions
Logical Functions
acos (number)
Параметры:
number: какое-либо цифровое выражение в диапазоне [-1, 1].
Описание:
Эта функция возвращает арккосинус числа. Возвращенный угол находится в диапазоне градусов [0,
180].
Примеры:
acos(1) ==> 0
acos(-1) ==> 180
ang (x, y)
Параметры:
Эта функция возвращает угол, определенный точкой и положительным направлением оси X. Угол
возвращен в диапазоне градусов [-180, 180] (смотрите функцию 'atan2').
Примеры:
ang(5,5) ==> 45
asin (number)
Параметры:
number - какое-либо цифровое выражение в диапазоне [-1, 1].
Описание:
Эта функция возвращает арксинус числа. Возвращенный угол находится в диапазоне градусов [-90,
90].
Примеры:
atan (number)
Параметры:
number - какое-нибудь цифровое выражение.
Описание: (описание)
Эта функция возвращает арктангенс числа. Возвращенный угол находится в диапазоне градусов [-90, 90].
Примеры:
atan(1) ==> 45
atan(-1) ==> -45
atan2 (y, x)
Параметры:
x - координата оси X точки.
y - координата оси Y точки.
(Оба, x и y не должны быть нулем.)
Описание:
Эта функция возвращает угол, который определяется точкой и положительным направлением оси X.
Угол возвращен в диапазоне градусов [-180, 180] (смотрите функцию 'ang').
Примеры:
atan2(5,5) ==> 45
atan2(-3, 0) ==> -90
atan2(5, -5) ==> 135
cos (angle)
Параметры:
angle - какое-либо цифровое выражение (угол измеряется в градусах).
Описание:
Эта функция возвращает значение косинуса угла.
Примеры:
cos(90) ==> 0
cos(810) ==> 0
cos(540) ==> -1
cos(acos(1)) ==> 1
dist (x, y)
Параметры:
x - координата оси X точки.
y - координата оси Y точки.
Описание:
Эта функция возвращает расстояние между origin (точкой начала отсчета) осей системы (точка
(0,0) ). Dist(x, y) равноценно sqrt(x*x + y*y).
Примеры:
dist(3, 4) ==> 5
dist(-3, 4) ==> 5
dist(12, -5) ==> 13
exp (number)
Параметры:
number - какое-либо цифровое выражение.
Описание:
Эта функция возвращает значение e (основа натуральных логарифмов) степени числа.
Примеры:
exp(0) ==> 1
exp(1) ==> 2.718281828...
exp(-0.5) ==> 0.606530659..
frac (number)
Параметры:
number - какое-либо цифровое выражение.
Описание:
Эта функция возвращает десятичную часть числа.
Примеры:
frac(12.345) ==> 0.345
frac(-12.345) ==> 0.345
frac(12) ==> 0
int (number)
Параметры:
number - какое-либо цифровое выражение.
Описание:
Эта функция возвращает целую часть числа. Значение урезано, не заключено.
Примеры:
int(12.345) ==> 12
int(-12.345) ==> -12
int(frac(12.3)) ==> 0
log (number)
Параметры:
number - какое-либо положительное цифровое выражение.
Описание:
Эта функция возвращает значение натурального логарифма числа.
Примеры:
log(1) ==> 0
log(2.718281828) ==> 1 (приблизительно)
log10 (number)
Параметры:
number - какое-либо положительное цифровое выражение.
Описание:
Эта функция возвращает значение десятичного логарифма числа.
Примеры:
log10(1) ==> 0
log10(10) ==> 1
log10(1000) ==> 3
mod (a, b)
Параметры:
a: какое-либо цифровое выражение.
b: какое-либо цифровое выражение.
Описание:
Эта функция возвращает остаток R от a/b, такой, что = i * b + R, где i - целое число, R имеет такой же
знак, как и abs(r) < abs(b).
Примеры:
mod(5, 2) ==> 1
mod(-17, 3) ==> -2
mod(9.2, 4) ==> 1.2
pow (b, p)
Параметры:
b - какое-либо цифровое выражение.
p - какое-либо цифровое выражение.
Примечание: если b равно нулю, p должно быть положительным; если b - меньше нуля, - p должно
быть целым числом.
Описание:
Эта функция возвращает значение b степени p.
Примеры:
pow(10, 3) ==> 1000
pow(0, 12) ==> 0
pow(25, 0.5) ==> 5
pow(-2, 2) ==> 4
pow(-2, 3.5) ==> ошибка, смотрите примечание ограничения выше.
Параметры:
number - какое-либо цифровое выражение.
dig - количество цифр, заключенное в скобки (должно быть целым числом).
Описание:
Эта функция возвращает число к требуемому количеству цифр после или перед десятичной точкой.
Отметьте, что возможно число слева от десятичной точки, представлено как отрицательное число
для dig (смотрите примеры ниже).
Примеры:
round(12.3456, 1) ==> 12.3
round(12.3456, 3) ==> 12.346
round(12.5, 0) ==> 13
round(-12.5, 0) ==> -13
round(123.4, -1) ==> 120
round(126.4, -1) ==> 130
round(123, -3) ==> 0
round2val (c, d)
Параметры:
c - какое-либо цифровое выражение.
d - какое-либо цифровое выражение.
Описание:
Эта функция возвращает заключенное в скобки самое малое кратное числа d.
Примеры:
round2val(730, 360) ==> 720
round2val(17.5, 2) ==> 18
round2val(8.5, 2.1) ==> 8.4
sign (number)
Параметры:
number - какое-либо цифровое выражение.
Описание:
Эта функция возвращает знак числа. Возвращенными значениями являются:
-1 - если число меньше нуля.
0 - если число равно нулю.
1 - если число больше нуля.
Примеры:
sign(123.4) ==> 1
sign(-123.4) ==> -1
sign(cos(90)) ==> 0
sin (angle)
Параметры:
angle - какое-либо цифровое выражение (угол в градусах).
Описание:
Эта функция возвращает значение синуса угла.
Примеры:
sin(90) ==> 1
sin(990) ==> -1
sin(540) ==> 0
sin(asin(1)) ==> 1
sqrt (number)
Параметры:
number - какое-либо неотрицательное цифровое выражение.
Описание:
Эта функция возвращает квадратный корень числа. Эта функция равноценна 'pow(number, 0.5)'.
Примеры:
sqrt(25) ==> 5
sqrt(0) ==> 0
sqrt(-4) ==> ошибка. Только неотрицательные числа имеют действительный квадратный корень.
square (number)
Параметры:
number - какое-либо цифровое выражение.
Описание:
Эта функция возвращает значение квадратного корня числа. Она равноценна 'pow(число, 2)'.
Примеры:
square(5) ==> 25
square(-5) ==> 25
square(0) ==> 0
tan (angle)
Параметры:
angle - какое-либо цифровое выражение (угол в градусах).
Описание:
Эта функция возвращает значение тангенса угла.
Примеры:
tan(45) ==> 1
tan(90) ==> 1.632455E16 (приближение к бесконечности)
tan(540) ==> 0
todeg (angle)
Параметры:
angle - какое-либо цифровое выражение (угол в радианах).
Описание:
Эта функция возвращает угол (в радианах) в его эквивалент в градусах.
Примеры:
todeg(0) ==> 0
todeg(1) ==> 57.295779...
todeg(pi) ==> 180 (отметьте, что 'pi' - системная переменная со значением 3.1415926...)
torad (angle)
Параметры:
angle - какое-либо цифровое выражение (угол в градусах).
Описание:
Эта функция возвращает угол (в градусах) в его эквивалент в радианах.
Примеры:
torad(0) ==> 0
torad(57.295779) ==> 1 (приблизительно)
torad(180) ==> 3.1415926...
Параметры:
нет.
Описание:
Эта функция возвращает значение строки текущей даты в формате 'DD-MMM-YYYY', где DD -
текущий день, MMM - текущий месяц и YYYY - текущий год.
Примеры:
date ==> "12-Apr-1994"
dup (string, count)
Параметры:
string - выражение строки, которое дублируется.
count - какое-либо неотрицательное цифровое выражение.
Описание:
Эта функция возвращает значение строки, состоящее из строки 'string' дублированное в 'count' раз.
Примеры:
dup ('abc', 3) ==> 'abcabcabc'
dup (date, 2) ==> '26-Nov-198926-Nov-1989'
Параметры:
str - выражение строки, которое найдено.
sub_str - выражение строки, которое необходимо найти.
Описание:
Эта функция находит первое появление sub_str в str и возвращает это положение от начала str.
Если sub_str не был найден, функция возвращается в 0. Отметьте, что GPPL различает написание
нижнего и верхнего регистра.
Примеры:
instr('abcd', 'cd') ==> 3
instr('abcd', 'x') ==> 0
instr('abcd', 'Cd') ==> 0 (нижний/верхний зависит от условий)
instr('abcdabcd', 'cd') ==> 3 (находится первый случай)
Параметры:
str - какое-либо выражение строки.
num - какое-либо положительное цифровое выражение.
Описание:
Эта функция возвращает подстроку, которая состоит из символов слева num str. Если str слишком
короткий, весь str возвращается (смотрите функцию 'right').
Примеры:
left('abcdef', 4) ==> 'abcd'
left('abcdef', -2)==> ошибка, (бессмысленный запрос)
left('xyz', 6) ==> 'xyz' (нет 6 символов слева).
lower (string)
Параметры:
string - какое-либо выражение строки.
Описание:
Эта функция возвращает такую же строку, где все написано (А-Z) на верхнем регистре (CAPITAL),
заменяется их эквивалентом на нижнем регистре (a-z). Заметьте, что оригинальная строка
оставлена неизмененной. Если вы хотите изменить определенную строку на нижний регистр, вы
должны использовать оператор присвоения (смотрите примеры ниже).
Примеры:
lower('TITLE') ==> 'title'
lower('Title no. 1') ==> 'title no. 1'
line = lower(line) ==> конвертирование строки переменных 'line' в нижний регистр.
Параметры:
Str - строка для поиска в
Oldstr - строка для поиска
Newstr - строка для замены
K - (опционально). Несколько вариантов oldstr для замены:
= 0: заменить все случаи oldstr (то же самое, если k опущен)
> 0: заменить первый k (местонахождение) в oldstr
< 0: заменить последний k (местонахождение) в oldstr
Описание:
Эта функция заменяет k появления Oldstr в str с новой str, и возвращает str. Если oldstr не был сочтен
функциональными возвратами str как строка результата. Отметьте, что GPPL действительно
различает строчные и прописные буквы.
Правильно:
s = replace("abacad", "a", "x", 0) ==> s = "xbxcxd" (один к одному)
s = replace("abacad", "a", "xy", 0) ==> s = "xybxycxyd" (один на многое)
s = replace("abacad", "a", "", 0) ==> s = "bcd" (один на ноль)
s = replace("abacad", "ac", "X", 0) ==> s = "abXad" (многое на один/многое)
s = replace("abacad", "x", "y", 0) ==> s = "abacad" (только для указанных целей)
s = replace("abacad", "a", "xa", 0) ==> s = "xabxacxad" (без рекурсии)
s = replace("", "a", "x", 0) ==> s = "" (только для указанных целей)
s = replace("abacad", "", "x", 0) ==> s = "abacad" (только для указанных целей, нет ошибки)
s = replace("abacad", "A", "x", 0) ==> s = "abacad" (с учетом регистра)
s = replace("ab"+"acad", "a", "x", 0) ==> s = "xbxcxd" (выражения допущенные)
s = replace("abacad", "a", "x", 2) ==> s = "xbxcad" (только сначала 2 случая)
s = replace("abacad", "a", "x", -2) ==> s = "abXcXd" (только последние два случая)
s = replace("abacad", "a", "x", 8) ==> s = "xbXcXd" (также, как k=0, нет ошибки)
Не правильно:
s = replace(123, "a", "b", 0) ==> первый аргумент должен быть строкой
rev (string)
Параметры:
string - какое-либо выражение строки.
Описание:
Эта функция возвращает такую же строку с инвертированным порядком её символов.
Примеры:
rev('abcd') ==> 'dcba'
rev('123') ==> '321'
right (str, num)
Параметры:
str - какое-либо выражение строки.
num - какое-либо положительное цифровое выражение.
Описание:
Эта функция возвращает подстроку, которая состоит из символов справа num str. Если str слишком
короткая, вся str возвращается (смотрите функцию 'left').
Примеры:
right('abcdef', 4) ==> 'cdef'
right('abcdef',-2) ==> ошибка, (бессмысленный запрос)
right('xyz', 6) ==> 'xyz' (нет 6 символов справа).
space (len)
Параметры:
len - какое-либо неотрицательное цифровое выражение.
Описание:
Эта функция возвращает строку пробелов (интервалов) длиной len. Если len - нуль, то
возвращается пустая строка. Эта функция равноценна 'dup(' ', длина)'.
Примеры:
space(5) ==> ' '
space(0) ==> '' (пустая строка)
space(-3) ==> ошибка
strlen (string)
Параметры:
string - какое-либо выражение строки.
Описание:
Функция возвращает длину строки, т.е. число символов в строке.
Примеры:
strlen('abcd') ==> 4
strlen('abcd ') ==> 5 (ставит пробел в конце строки)
strlen('') ==> 0 (длина пустой строки - это нуль)
Параметры:
string - какое-либо выражение строки.
from - положение от начала строки, где начинается подстрока. 'from' должен находиться в диапазоне
[1, strlen(string)].
len - длина подстроки для извлечения
Описание:
Эта функция возвращает под-строку длины len, начинающейся в строке от положения 'from' и
длиной len. Если 'from + len' больше, чем strlen(string), возвращенная под-строка будет длиной
менее, чем len.
Примеры:
substr('abcdefg',5,2) ==> 'ef'
substr('abcdefg',5,4) ==> 'efg' (нет больше символов)
substr('abcdefg',9,2) ==> ошибка (9 не является действительным положением)
time
Параметры:
нет.
Описание:
Эта функция возвращает значение строки текущего времени в формате 'HH:MM:SS', где HH -
текущий час, ММ - текущие минуты и SS - текущие секунды.
Примеры:
time ==> [Link] (10 часов, 17 минут, 30 сек.)
time ==> [Link] (10 часов ПОПОЛУДНИ, 17 минут, 30 сек.
tonum (string)
Параметры:
string - какое-либо выражение строки, которое удерживает действительное цифровое значение
(смотрите описание ниже).
Описание:
Эта функция превращает число, представленное в строке из формата строки в цифровой формат.
Действительное число в строке должно иметь следующий формат:
[spaces] [sign] [digits] [.digits] [E [sign] digits]
[пробелы] [знак] [цифры] [.цифры] [E [знак] цифры] – (рус. перевод)
spaces - пробелы (' ').
sign - none ('+' предполагается), '+' или '-'.
digits - какая-либо последовательность десятичных разрядов (0-9).
.digits - десятичная точка, завершающая какую-либо последовательность цифр.
E – начало экспоненциальной части.
sign - none '+' или '-'; знак экспоненты.
digits - значение экспоненты.
Обратное действие 'tonum' - это функция 'tostr'. Смотрите его описание ниже.
Примеры:
tonum(' 12') ==> 12
tonum('-12.34') ==> -12.34
tonum('12.3e2') ==> 1230
tonum('-12E-1') ==> -1.2
Параметры:
number - какое-либо цифровое выражение.
format - определение формата (необязательно).
Описание:
Эта функция превращает число в изображение строки знаками согласно спецификации формата
'format'. Если 'format' пренебрегается, строка превращается в соответствии с форматом по
умолчанию. Смотрите главу детального описания опций 'format'.
Примеры:
tostr(12.345) ==> '12.345'
tostr(12.3456) ==> '12.346' (формат по умолчанию - '5.3').
tostr(12.3456:'4.0') ==> '12.'
trim (string)
Параметры:
string – какое-либо строковое выражение.
Описание:
Эта функция возвращает такую же строку, но исключает все фиксированные пробелы.
Примеры:
trim('abcd') ==> 'abcd' (ничего не отсечено)
trim('abcd ') ==> 'abcd'
upper (string)
Параметры:
string - какое-либо выражение строки.
Описание:
Эта функция возвращает такую же строку, где все написанное на нижнем регистре(a-z) заменяется
их эквивалентом верхнего регистра (CAPITAL) (А-Z). Заметьте, что оригинальная строка остается
неизмененной. Если вы хотите изменить определенную строку на верхний регистр, вы должны
использовать оператор присвоения (смотрите примеры ниже).
Примеры:
upper('TITLE') ==> 'TITLE'
upper('Title no. 1') ==> 'TITLE NO. 1'
line = upper(line) ==> изменяет строку переменных на верхний регистр.
Параметры:
variable - какая-либо переменная local/global/system.
Описание:
Эта функция возвращает значение TRUE/FALSE (1/0) согласно текущего статуса активного атрибута
переменной. Активный атрибут устанавливается в TRUE (ИСТИНА) в следующих случаях:
- Если переменная может использоваться в текущей процедуре.
- Когда переменной присвоено значение.
- Когда пользователь явно использует атрибут оператора присвоения 'active'.
Эта функция наиболее полезна при проверке на условное выполнение ('if' statement - 'если'
утверждение) или при генерации модальных элементов (смотрите описание модальности).
Смотрите также описание функции 'change'.
Примеры:
active(xpos) - TRUE/FALSE как активный флажок xpos
active(123) - ошибка, выражение не имеет активного атрибута.
active(xpos) = active(xnext) - Устанавливает активный атрибут смены xpos, который является таким же
как активный атрибут смены xnext.
change (variable)
Параметры:
variable - какая-либо переменная local/global/system.
Описание:
Эта функция возвращает значение TRUE/FALSE (1/0) в соответствии с текущим статусом атрибута
смены переменной. Атрибут смены устанавливается в TRUE (ИСТИНА) в следующих случаях:
- Когда переменной присвоено новое значение.
- Когда пользователь явно использует оператор присвоения атрибута 'change'.
Эта функция наиболее полезна при проверке на условное выполнение ('if' statement - 'если'
утверждение) или при генерации модальных элементов. Смотрите также описание функции 'active'.
Примеры:
change(xpos) - TRUE/FALSE как флажок смены xpos.
change(123) - ошибка, выражение не имеет атрибута смены.
change(xpos)=change(xnext) - устанавливает атрибут смены изменения xpos, который является таким
же, как и атрибут смены переменной.
even (number)
Параметры:
number - какое-либо цифровое выражение.
Описание:
Эта функция есть TRUE (ИСТИНА), если число четное.
Примеры:
even(8) ==> TRUE
even(13) ==> FALSE
even(4.2) ==> FALSE
odd (number)
Параметры:
number - какое-либо цифровое выражение.
Описание:
Эта функция есть TRUE, если нечетное число.
Примеры:
odd(7) ==> TRUE
odd14) ==> FALSE
odd(3.2) ==> FALSE
Есть три типа системных переменных, которые доступны для использования в процедурах GPPL,
которые определяют, как каждая команда пути инструмента SolidCAM преобразовывается в УП.
Эти три типа переменных:
Переменные, которые определяются в SolidCAM и передаются в GPPTool.
Переменные, которые определяются в начале [[Link]] файла (в разделе @init_post).
Переменные, которые имеют специальные значения и не могут быть присвоены новые значения.
Пример:
@init_post
numeric_def_f = '5.3'; точка будет всегда появляться (5. а не 5)
integer_def_f = '5.0(p)'
gcode_f = '2.0(p)'
mcode_f = '2.0(p)'
xpos_f = '5.3(p)'; точка всегда не будет появляться (5 и не 5.1)
ypos_f = '5.3(p)'
zpos_f = '5.3(p)'
apos_f = '5.3(p)'
feed_f = '4.0(p)'
end_block_text = ''; не присоединяется что-либо
blknum_letter = 'N'; использовать 'N' в качестве символа нумерации кадра
blknum_gen = FALSE; нет генерации номеров кадра
blknum_exist = TRUE; нумерация кадров разрешена к выводу в УП
blknum_f = '5.0(p)'; использование до 5 цифр для номеров кадра (нет десятичной точки)
blknum = 5; номера кадра начнутся с 5 (первый номер кадра)
blknum_delta = 5; блок будет нумероваться как 5, 10, ...(приращение нумерации кадров)
blknum_max = 32000; нумерация кадра не может превышать этот лимит
num_user_procs = 1; одна пользовательская процедура определена в процедуре '@end_of_file'
remove_blanks = FALSE; оставляет пробелы, генерируемые файлом G-кода
Параметры:
Нет
Описание:
Эта команда вводит в программу режим абсолютных координат.
Примеры:
@absolute_mode; для FANUC
gcode = 90; определение абсолюта
{nb, 'G'gcode}; формирование кадра
skipline = FALSE; генерирует следующую команду в этой же строке
endp; конец процедуры
Arc .(дуга).
Параметры:
xpos, ypos, zpos тип: numeric Положение инструмента в конце дуги.
feed тип: numeric Подача.
xcenter, ycenter тип:numeric Абсолютные координаты центра дуги.
xcenter_rel ,ycenter_rel тип:numeric Координаты центра дуги относительно точки старта
radius тип: numeric Радиус дуги.
start_angle , end_angle тип: numeric Углы начала и конца дуги (в градусах).
arc_direction тип: integer Направление дуги {CW, CCW}.
arc_plane тип: integer Значение дуга-плоскость {XY, YZ, ZX}.
arc_size тип: numeric Размер дуги (в градусах).
next_direction тип: numeric Направление следующего блока XY (если следующий
блок не является блоком).
Описание:
Эта команда генерирует дуговое позиционирование в G-коде.
Примеры:
@arc; дуга (для FANUC)
if arc_direction eq CCW then; если направление дуги против часовой, тогда
gcode = 3; определение G кода против часовой
else ; иначе CW (по часовой)
gcode = 2; определение G кода по часовой
endif; конец условия «если»
{nb, ['G'gcode], [' X'xpos], [' Y'ypos], [' Z'zpos]}; формирование кадра (присутствие модальности)
if arc_size eq 360 then; если размер дуги равен 360 градусам, тогда
{' I'xcenter_rel, ' J'ycenter_rel}; добавление строки с адресами I и J
else; иначе
if arc_size gt 180 then; если дуга больше 180 градусов, тогда
radius = -radius; радиус равен радиусу со знаком минус
endif; конец условия «исли»
{' R'radius}; добавление адреса R в кадр
endif; конец условия «если»
{[' F'feed]}; добавление подачи в кадр (присутсвие модальности)
endp; конец процедуры
@arc; MAHO-432
if arc_direction eq CCW then
gcode = 3
else; CW
gcode = 2
endif
if machine_plane eq ZX then
xpos = -xpos
endif
{nb, ['G'gcode], [' X'xpos], [' Y'ypos], [' Z'zpos]}
if arc_size gt 180 then
{[' I'xcenter_rel], [' J'ycenter_rel]}
else
{' R'radius}
endif
{[' F'feed]}
endp
Кинематические параметры:
xpos ypos zpos
xhpos yhpos zhpos
xmpos ympos zmpos
xopos yopos zopos
xlpos ylpos zlpos
xtpos ytpos ztpos
xtopos ytopos ztopos
Станочные Координатные оси с Текущим набором Контрольной точки (G54, G55 …):
xopos, yopos, zopos
Для этого расчета координат SolidCAM учитывает кинематические параметры, определенные в VMID.
Начальная точка станка (home), которая определяется из источника в Машинном диалоговом окне
установки SolidCAM, не берется из учетной записи.
Длина инструмент H не берется из учетной записи.
Для станков HEAD_HEAD этот набор координат не имеет никакого влияния при opos = hpos.
Машинные Координатные оси с Текущим набором Контрольной точки (G54, G55 …) для точки
поворота:
Параметры:
xpos, ypos, zpos тип: numeric Позиция инструмента в конце дуги.
xcenter, ycenter тип: numeric Абсолютные координаты центра дуги.
xcenter_rel, ycenter_rel тип: numeric Координаты центра дуги относительно точки старта.
radius тип: numeric Радиус дуги.
start_angle, end_angle тип: numeric Углы начала и конца дуги (в градусах).
arc_direction тип: integer Направление дуги {CW, CCW}.
arc_plane тип: integer Плоскость дуги {XY, YZ, ZX}.
arc_size тип: numeric Размер дуги (в градусах).
zstart тип: numeric Z value at start of arc.
Направление следующего блока XY (если следующий кадр не
next_direction тип: numeric является кадром).
тип: numeric Расчетные углы вращения вокруг машинных векторов
apos, bpos
осей.
Описание:
Эта команда генерирует дуговое позиционирование в G-коде.
Команда @arc_5x только для обработки Поверхности.
Кинематические параметры:
xpos ypos zpos
xhpos yhpos zhpos
xmpos ympos zmpos
xopos yopos zopos
xlpos ylpos zlpos
xtpos ytpos ztpos
xtopos ytopos ztopos
Описание кинематических параметров:
Параметры:
xpos, cpos, zpos тип: numeric Положение инструмента в конце дуги.
feed тип: numeric Скорость подачи.
xcenter, ycenter тип: numeric Абсолютные координаты центра дуги.
xcenter_rel , ycenter_rel тип: numeric Координата центра дуги относительно точки старта.
radius тип: numeric Радиус дуги.
start_angle, end_angle тип: numeric Углы начала и конца дуги (в градусах).
arc_direction тип: integer Направление дуги {CW, CCW} (по часовой, против
часовой).
arc_plane тип: integer Значение дуга-плоскость {XY, YZ, ZX}.
arc_size тип: numeric Размер дуги (в градусах).
zstart тип: numeric Значение Z в точке старта дуги.
dc тип: numeric Дельта cpos.(приращение)
dir4x тип: integer Направление оси C {CW, CCW} (по часовой, против
часовой).
Описание:
Эта команда генерирует дуговое позиционирование в G-коде (УП). Конечное положение
определяется декартовыми координатами (xpos, cpos).
Пример:
@arc4x_cartesian
gcode = 1; определение фукции G
{nb, ['G'gcode],[' X'xpos],[' Z'zpos],[' C'cpos],[' F'feed]}; формирование кадра
;(есть модальность адресов)
endp; конец процедуры
Примечание:
@arc4x_cartesian обрабатывается только при:
pos_to_machine = N.
Дуга в полярной системе координат 4x. (Arc4x-Polar).
Примечание:
@arc4x_polar обрабатывается только при:
pos_to_machine = N.
Праметры:
label тип: integer Имя (номер) подпрограммы, которая вызвана.
start_line тип: функция номера стартового кадра подпрограммы.
end_line тип: функция номера кадра окончания подпрограммы.
call_prms_num тип: integer Номер параметров, чтобы перейти к подпрограмме.
call_prms array тип: numeric Массив.
Параметры для перехода к подпрограмме.
Описание:
Эта команда генерирует обращение к подпрограмме с параметрами.
Параметры:)
label тип: integer Имя (номер) подпрограммы, которая вызвана.
proc_count тип: integer Число повторений выполнения подпрограммы.
parm1, parm2, parm3 тип: numeric Параметры процедуры (необязательно).
message тип: string Необязательный текст (сообщение), который дает
дополнительное описание подпрограммы.
start_line тип: function Номер стартового кадра (строки) подпрограммы.
end_line тип: function Номер кадра (строки) окончания подпрограммы.
Примечание: Эта команда генерирует обращение к подпрограмме. Использование функций
'start_line' и 'end_line' ограничено, только чтобы генерировать утверждения для дальнейшего
описания их поведения.
Для первой процедуры уровня могут использоваться следующие параметры:
Параметры для всего типа задания
job_type тип: string
Параметры:
tool_number тип: integer Номер инструмента для смены.
tool_diameter тип: numeric Диаметр инструмента при смене инструмента.
tool_length тип: numeric Длина инструмента относительно длины первого
инструмента (как определяется в таблице
инструментов для фрезерования).
corner_radius тип: numeric Радиус при вершине инструмента.
tool_direction тип: integer Направление вращения инструмента {CW, CCW}
(по часов. стрелке, против часовой).
first_tool тип: logical TRUE если это первый инструмент в программе.
last_tool тип: logical TRUE если это последний сменяемый инструмент в
программе.
next_tool_number тип: integer Номер следующего инструмента.
next_tool_machine_type тип: integer Станочный тип следующего инструмента.
xnext, ynext, znext тип: numeric Положение для перемещения после смены инструмента.
spin тип: numeric Обороты шпинделя.
xtool, ytool, ztool тип: numeric Координаты положения смены инструмента (необязательно).
tool_name тип: string Название инструмента.
group_tool_name тип: string Имя группы инструмента.
holder_name тип: string Имя державки инструмента.
group_holder_name тип: string Имя группы державок инструмента.
tool_description тип: string Описание инструмента.
holder_description тип: string Описание оправки.
total_tool_length тип: numeric Длина инструмента.
cutting_tool_length тип: numeric Длина режущей части инструмента.
work_material тип: string Материал заготовки.Ипользуется для расчета подачи.
d_offset тип: integer Адрес d диаметрального припуска.
h_offset тип: integer Адрес h припуска на длину.
hlength тип: numeric Длина.
number_of_jobs_used_tool тип: integer Количество переходов, которые используют этот номер
инструмента.
Описание:
Эти команды генерируют коды УП, требуемые для смены инструмента.
Пример:
@change_tool ; смена инструмента для MAHO-432
{nb, '(* TOOL 'tool_number ' - DIA 'tool_diameter '*)'};ввод сообщения о диаметре инструмента
{nb, 'M9'}; включение охлаждения
{nb, 'T'tool_number, ' M6'};установка инструмента, (активация в CNC контроллере) по M6
xpos = xnext; определение следующей позиции после смены инструмента (X)
ypos = ynext; определение следующей позиции после смены инструмента (Y)
zpos = tool_start_plane; определение стартовой позиции по координате Z
call @rapid_move ; генерирует кадр с G0 (ускоренное перемещение)
direction = CCW; определяет направление вращения шпинделя для call @start_tool
call @start_tool; генерирует кадр включения шпинделя
endp; конец процедуры
Кинематические параметры:
Параметры:
tool_number тип: integer Номер инструмента для смены.
tool_diameter тип: numeric Диаметр инструмента, на который будет
произведена его замена.
wire_D, wire_T, wire_P, wire_S.
Описание:
Вырезная проволока станка wire_cut и изменение её параметров.
Примеры:
@change_wire; смена проволоки для AGIE
if next_command eq '@rapid_move' then; (т.е. если следующая команда эквивалентна
; ускоренному перемещению, тогда)
D_save = wire_D
T_save = wire_T
P_save = wire_P
S_save = wire_S
else; иначе
{nb, '% D'wire_D, ' T'wire_T, ' P'wire_P, ' S'wire_S, ' G43'}; формирование кадра
skipline = FALSE; генерирует следующую команду в этом же кадре (строке)
endif; конец условия «if» («если»)
endp; конец процедуры
Описание:
Эта команда решает, является ли компенсация инструмента активной и если да, с какой сторона.
Пример:
compensation ; для FANUC , MAHO-432
skipline = FALSE ; следующий код будет сформирован в том же самом кадре а не в текущем
Описание:
Эти команды определяют характеристики инструмента.
Пример:
@def_tool ; FANUC
{nb, '(G10 L12 P', (tool_number+50), ' R'tool_offset, ')'}
endp
Параметры:
delay_period тип: numeric Время выдержки.
Описание:
Примеры:
Сверление. (Drill).
Параметры:
xpos, ypos, zpos тип: numeric Координаты точек сверления.
drill_type тип: integer Тип сверления, как определено в '[Link]' файле.
d_drill_type тип: integer Тип сверления
{D_Drilling, D_F_Drill, D_Peck,
D_Tapping, D_Boring,
D_R_Boring, D_F_Boring}.
drill_lower_z тип: numeric Верхний уровень сверления.
drill_upper_z тип: numeric Нижний уровень для сверления
(включая безопасное расстояние).
drill_clearance_z тип: numeric Безопасный уровень инструмента по координате Z при
перемещении от одного отверстия до другого.
drill_depth тип: numeric (drill_upper_z-drill_lower_z) (нижний уровень минус
верхний уровень и как результат глубина сверления).
down_step тип: numeric Глубина шага сверления.
num_down_steps тип: integer Количество шагов (последний шаг
может быть короче других).
feed тип: numeric Подача.
spin тип: numeric Обороты.
В дополнение к вышеупомянутым параметрам больше параметров может быть определено
пользователем в файле '[Link]'. Эти параметры определяют 'drill_type' (тип сверления) и для
каждого типа определяются требуемые для него параметры. Смотри примеры ниже.
Пример:
Для FANUC:
(часть из файла [Link]):
drill_type = Drilling Y ; G81
drill_type = F_Drill Y Delay ; G82
drill_type = Peck Y Delay ; G83
drill_type = Tapping Y Delay ; G84
drill_type = Boring Y Delay ; G85
drill_type = R_Boring Y Delay ; G86
drill_type = F_Boring Y Delay ; G89
Семь 'drill_type' (типов сверления) определены здесь: 'Drilling', 'F_Drill', 'Peck', 'Tapping', 'Boring',
'R_Boring' and 'F_Boring'. У каждого типа сверления есть свои собственные параметры. Например:
если 'drill_type' (тип сверления) является 'Peck' (Клевать), то у параметра ' Delay' (Выдержка) есть
свои допустимые значения.
Станочные Координатные оси с Текущим набором Контрольной точки (G54, G55 …):
xopos, yopos, zopos
Поскольку этот набор координирует вычисление, SolidCAM берет из учетной записи кинематические
параметры, определенные в VMID.
Для вычисления этой координаты начальной точки, которая определяется как относительная
подстаночного источника в станочном диалоговом окне установки SolidCAM, не берется из учетной
записи
Длина инструмента H не берется из учетной записи.
Для станков с кинематической схемой HEAD_HEAD (голова_голова (есть кинематические схемы
станков голова_стол)) этот координатный набор не имеет никакого влияния при opos = hpos.
Станочные Координатные оси с Текущим набором Контрольной точки (G54, G55 …) для точки
поворота:
xtopos, ytopos, ztopos
Поскольку этот набор координирует вычисление, SolidCAM берет из учетной записи кинематические
параметры, определенные в VMID.
Для вычисления этой координаты начальной точки, которая определяется как относительная
подстаночного источника в станочном диалоговом окне установки SolidCAM, не берется из учетной
записи.
Длина инструмента H и расстояние до центра поворота берутся из учетной записи .
Параметры:
xpos, cpos тип : numeric Координаты точек сверления.
dc тип : numeric Приращение cpos ( приращение коор-ты С).
dir4x тип : integer Направление оси C {CW, CCW} (по час., против).
first_drill тип : logical (смотри @drill_point (расчет точек сверления)).
Описание:
Эта команда генерирует кадр для определения точки сверления. Позиция сверления определяется
декартовой системой координат (xpos, cpos).
Пример:
@drill_point; MAHO-432
gcode = 79
{nb, 'G'gcode, [' X'xpos], [' Y'ypos], [' Z'zpos]}
endp
Кинематические параметры :
xpos ypos zpos
xhpos yhpos zhpos
xmpos ympos zmpos
xopos yopos zopos
xlpos ylpos zlpos
xtpos ytpos ztpos
xtopos ytopos ztopos
normal_to_plane_x normal_to_plane_y normal_to_plane_z
apos bpos
Примечание:
Станочные Координатные оси с Текущим набором Контрольной точки (G54, G55 …):
xopos, yopos, zopos
Поскольку этот набор координирует вычисление, SolidCAM берет из учетной записи кинематические
параметры, определенные в VMID.
Для вычисления этой координаты начальной точки, которая определяется как относительная
подстаночного источника в станочном диалоговом окне установки SolidCAM, не берется из учетной
записи
Длина инструмента H не берется из учетной записи.
Для станков с кинематической схемой HEAD_HEAD (голова_голова (есть кинематические схемы
станков голова_стол)) этот координатный набор не имеет никакого влияния при opos = hpos.
Параметры:
xpos, ypos, zpos тип: numeric Координаты точки сверления.
С cpos только две из них будут использоваться
совместно согласно станочной обработке ('cpos'
всегда используется при обработке).
first_drill тип: logical, Определяет это 1-я точка сверлильного цикла или нет.
В некоторых станках 1-е сверление выполняется
в '@drill'.
Описание:
Эта команда генерирует кадр УП, требуемый для определения точки сверления при использовании
одновременно 4-х осей.
Пример:
@drill4x_pnt ; FANUC_0TC
if not first_drill then
{nb,' ',[' X'xpos],[' Z'zpos ],[' C'cpos]}
endif
endp
Описание:
Эта команда генерирует кадр УП, требуемый для завершения цикла сверления
Примеры:
@end_drill ; для FANUC
gcode = 80; определение функции G80 – конец сверления
{nb, 'G'gcode}; формирование кадра с G80
endp ; конец процедуры
@end_drill ; для MAHO-432
; Нет end_drill (конца сверления) - всегда активно.
; Отметьте, что процедура ДОЛЖНА присутствовать, хотя она не содержит
; генерации рабочей программы.
endp
Параметры:
Нет
Описание:
Эта команда генерирует необходимый код для завершения процедуры..
Пример:
Примеры:
@end_loop ; для FANUC
local integer var_num; ввод локальной переменной под именем «var_num»
var_num = loop_level + 20; присвоение значений локальной переменной
{nb '#', var_num, ' = #', var_num, ' + 1'}; формирование кадра
{nb 'END ', loop_level}; формирование кадра
endp; конец процедуры
@end_loop ; MAHO
gcode=14
loop_count = loop_count - 1
{nb, 'G'gcode, ' N1='start_line, ' N2='end_line, ' J'loop_count}
endp
Конец файла . (End Of File).
Параметры:
Нет.
Описание:
Выполняется в конце генерации файла G-кода (УП). Он может содержать определенные
пользователем процедуры. Используйте следующие свойства для автоматической нумерации этих
процедур:
- Конкретизировать свой номер в 'num_user_procs' (в '@init_post').
- Использовать переменную 'first_user_proc' (первая пользовательская процедура) в качестве первого
номера процедуры.
- Использовать 'first_user_proc'+1 для второго и т.п...
Пример:
@end_of_file; расчет процедуры конца файла (для FANUC)
label = first_user_proc; имя процедуры
call @proc; генерация кадра 'Onnnn'
{nb, '(--------------------)'}; генерация кадра
{nb, '(- CHANGE TOOL -)'}; генерация кадра
{nb, '(--------------------)'}; генерация кадра
{nb, 'G80 G49 G40 M9'}; генерация кадра
{nb, 'G91 G28 Z0.'}; генерация кадра
call @stop_tool ; генерация кадра с 'M5'
{nb, 'G90 M1'}; генерация кадра
{nb, 'M6'}; генерация кадра
call @end_proc ; генерация кадра с 'M99'
{nl, '%'}; генерация строки без нумерации кадра
endp; конец процедуры
@end_proc; MAHO-432
; Так номер кадра используются для обращения
: к подпрограмме, нет необходимости генерировать какие-либо кадр
; Отметьте, что процедура ДОЛЖНА быть запущена, хотя
; она не содержит генерации рабочей программы
endp; конец процедуры
Параметры:
xpos, ypos, zpos тип: numeric Конечная позиция инструмента.
Описание:
Эта команда выполняется в конце основной программы.
Пример:
Параметры:
feed_unit тип: integer Размерность подачи {MM_MIN / MM_REV}
(мм/мин, мм/обор).
feed тип: numeric Подача.
spin_unit тип: integer Размерность вращения шпинделя {RPM/CSS}
(метров в минуту, оборотов в минуту).
spin тип: numeric Обороты.
Описание:
Эта опция используется, чтобы конкретизировать направление вращения и формирования подачи в
управляющих программах.
Пример:
Параметры:
angle тип: numeric Угол поворота (в градусах).
direction_4x тип: integer Направление вращения {CW,CCW} (по часов., против часов.).
Описание:
Эта команда генерирует кадр УП для управления вращением четвертой оси.
Примеры:
@fourth_axis ; (для FANUC) четвертая ось
gcode = 0; определение функции G со значеним 0
{nb, 'G'gcode, ' A'angle}; формиование кадра с G и А
endp ; конец процедуры
@fourth_axis ; (для MAHO-432) четвертая ось
gcode = 0; определение функции G со значеним 0
{nb, 'G'gcode, ' B'angle}; формирование кадра с G и В
endp ; конец процедуры
Примечание:
Ниже параметры разработки только при:
pos_to_machine = Y.
shift_x, shift_y и shift_z являются сдвигами в системе координат проекта. Они могут
использоваться для определения рабочей плоскости системы координат (lpos установлена).
Прорезка. (Groove).
Параметры:
work_type тип: integer {groove_rough, groove_prof, cut, ang_groove}
(чернов. прорезка, профильная прорезка, отрезка,
прорезка под углом).
process_type тип: integer {LONG, FACE} (продольная, торцевая).
turning_mode тип: integer Для продольной: {INTERNAL, EXTERNAL}
(наружная, внутренняя),
для торцевой: {BACK, FRONT}
(сзади, спереди).
first_pos_x тип: numeric Кординаты первой точки геометрии для X.
first_pos_z тип: numeric Кординаты первой точки геометрии для Z.
last_pos_x тип: numeric Кординаты последней точки геометрии для X.
last_pos_z тип: numeric Кординаты последней точки геометрии для Z.
second_offset тип: integer Припуск с другой стороны инструмента.
down_step тип: numeric Шаг прорезки.
side_step тип: numeric Расстояние между двумя соседними шагами при прорезке.
release_dist тип: numeric Дистанция безопасности при прорезке.
В добавление к упомянутым выше параметрам, можно добавить больше параметров, определенных
пользователем в файле [[Link]]. Эти параметры определяют 'turn_type' (тип точения) и для
каждого типа определяет требуемые для него параметры. Смотрите пример ниже.
Описание:
Пример:
@groove; для FANUC (упрощенно)
if process_type eq FACE then; если типом процесса прорезки является FACE (торец), тогда
gcode = 74; определение функции G74
else; иначе
gcode = 75; определение функции G75
endif; конец условия «если»
{nb, 'G' gcode, 'R'release_dist}; формирование кадра
{nb, 'G' gcode, 'X'first_pos_x, 'Z'last_pos_z}; формирование кадра
{'P'down_step, 'Q'side_step, 'F'feed}; добавление в конец кадра
endp; конец процедуры
Примечание:
Параметры:
home_number:1
clearance_plane:50.000 tool_start_plane:70.000
work_upper_plane:0.000 zero_plane:-40.000
rotate_angle_x:0.000T rotate_angle_y:0.000T rotate_angle_z:0.000T
rotate_angle_x_dir:cw rotate_angle_y_dir:cw rotate_angle_z_dir:cw
x_angle_const_z:0.000T y_angle_const_z:0.000T dev_angle_z:0.000T
x_angle_const_z_dir:cw y_angle_const_z_dir:cw dev_angle_z_dir:cw
x_angle_const_y:0.000T z_angle_const_y:0.000T dev_angle_y:0.000T
x_angle_const_y_dir:cw z_angle_const_y_dir:cw dev_angle_y_dir:cw
y_angle_const_x:0.000T z_angle_const_x:0.000T dev_angle_x:0.000T
y_angle_const_x_dir:cw z_angle_const_x_dir:cw dev_angle_x_dir:cw
angle_4x_around_x:0.000T angle_4x_around_y:0.000T
angle_4x_around_x_dir:cw angle_4x_around_y_dir:cw
shift_x:0.000T shift_y:0.000T shift_z:0.000T
part_home_number:1 tool_z_level:500.000
tmatrix_I_1:1.000T tmatrix_I_2:0.000T tmatrix_I_3:0.000T tmatrix_I_4:0.000T
tmatrix_I_5:0.000T tmatrix_I_6:1.000T tmatrix_I_7:0.000T tmatrix_I_8:0.000T
tmatrix_I_9:0.000T tmatrix_I_10:0.000T tmatrix_I_11:1.000T tmatrix_I_12:0.000T
. tmatrix_I_13:0.000T tmatrix_I_14:0.000T tmatrix_I_15:0.000T tmatrix_I_16:1.000T
. x = cosy*cosz*x - sinz*cosy*y + siny*z
.. y = (-sinx*siny*cosz + cosx*sinz)*x + (sinx*siny*sinz + cosx*cosz)*y - sinx*cosy*z
z = (cosx*cosz*siny + sinx*sinz)*x + (-sinz*cosx*siny + sinx*cosz)*y - cosx*cosy*z
вокруг Z
x = x*cos(dev_angle) - y*sin(dev_angle)
y = x*sin(dev_angle) + y*cos(dev_angle)
вокруг Y
z = z*cos(dev_angle) - x*sin(dev_angle)
x = z*sin(dev_angle) + x*cos(dev_angle)
вокруг X
y = y*cos(dev_angle) - z*sin(dev_angle)
z = y*sin(dev_angle) + z*cos(dev_angle)
Эта команда используется в конце программы, чтобы генерировать подпрограмму для каждой
начальной точки (стартовое положение инструмента в начале программы). Мы можем позже
вызвать эту подпрограмму из основной программы каждый раз, когда мы должны изменить исходное
положение. Если в некоторой более поздней точке, оператор должен изменить что-то, он может легко
изменить только в одном месте (в подпрограмме для начальной точки).
Описание:
@home_data содержит информацию о начальной точке проекта, станочной начальной точке,
плоскостях, углах, сдвигах и матрице преобразования.
Расположение @home_data зависит от prp переменной home_data_at_start:
если "Y" появляется после @def_tool
если "N" появляется после @end_program.
Пример:
;Deckel-Maho
@home_data
Параметры:
home_number тип: integer Станочная начальная точка для активации.
Описание:
Эта команда генерирует код для активиации новой станочной начальной точки. Новая точка может
быть установлена в экране данных перехода (менеджер ноля детали).
Примеры:
Описание:
Эта команда используется перед 1-ым кадром перемещения при новом задании фрезерования с
использованием одновременно 4-ой оси. Она используется, чтобы установить новый угол поворота
для станочной начальной точки (home). Он используется, только если параметр 'init_cpos' в файле .
PRP - 'Y'. Этот параметр используется для того что бы избежать ненужных поворотов детали в
процессе обработки.
Пример:
@init_cpos ; FAN_0TC
gcode = 0
{nb,'G'gcode ' C'prev_cpos}
gcode = 50
{nb,'G'gcode ' C'best_cpos}
endp
Пример:
@line; FANUC
gcode = 1
{nb, ['G'gcode'],[' X'xpos],[' Y'ypos],[' Z'zpos],[' F'feed]}
endp
Кинематические параметры:
xpos ypos zpos
xhpos yhpos zhpos
xmpos ympos zmpos
xopos yopos zopos
xlpos ylpos zlpos
xtpos ytpos ztpos
xtopos ytopos ztopos
Станочные Координатные оси с Текущим набором Контрольной точки (G54, G55 …):
xopos, yopos, zopos
Поскольку этот набор координирует вычисление, SolidCAM берет из учетной записи кинематические
параметры, определенные в VMID.
Для вычисления этой координаты начальной точки, которая определяется как относительная
подстаночного источника в станочном диалоговом окне установки SolidCAM, не берется из учетной
записи
Длина инструмента H не берется из учетной записи.
Для станков с кинематической схемой HEAD_HEAD (голова_голова (есть кинематические схемы
станков голова_стол)) этот координатный набор не имеет никакого влияния при opos = hpos.
Станочные Координатные оси с Текущим набором Контрольной точки (G54, G55 …) для точки
поворота:
xtopos, ytopos, ztopos
Поскольку этот набор координирует вычисление, SolidCAM берет из учетной записи кинематические
параметры, определенные в VMID.
Для вычисления этой координаты начальной точки, которая определяется как относительная
подстаночного источника в станочном диалоговом окне установки SolidCAM, не берется из учетной
записи.
Длина инструмента H и расстояние до центра поворота берутся из учетной записи .
Пример:
@line4x_cartesian
gcode = 1
{nb, ['G'gcode],[' X'xpos],[' Z'zpos ],[' C'cpos],[' F'feed]}
endp
Примечание:
@line4x_cartesian активен только при:
pos_to_machine = N.
Line4x Dir.
Параметры:
xpos, ypos, zpos тип: numeric Положение инструмента в конце движения.
cpos тип: numeric Позиционирование по координате C станка.
feed тип: numeric Подача. Если 'cpos' изменен
в кадре, подача находится в Угол/Мин.,
в противном случае - в ММ/Мин.
next_direction тип: numeric Направление следующего блока XY
(если следующий блок не является блоком XY).
dc тип: numeric Delta cpos (приращение С позиции).
dir4x тип: integer Направление оси C {CW, CCW}
(по часов., против часов.).
Описание:
Эта команда генерирует позиционирование в строке G-кода (УП) при использовании 4-ой оси.
Эта команда сгенерирована если параметр файла PRP set_dir = Y.
Примеры:
@line_4x ; для FAN_0TC
gcode = 1 ; определение функции G со значением 1
{nb, ['G'gcode],[' X'xpos],[' Z'zpos ],[' C'cpos],[' F'feed]} ; формирование кадра с линейными и угловым
; перемещениями
endp ; конец процедуры
Примечание:
line4x_dir активен только при:
pos_to_machine = N.
@line4x_polar
gcode = 1
{nb, ['G'gcode],[' X'xpos],[' Z'zpos ],[' C'cpos],[' F'feed]}
endp
Примечание:
line4x_polar активен только при:
pos_to_machine = N.
Примечание:
Станочные Координатные оси с Текущим набором Контрольной точки (G54, G55 …):
xpos, ypos, zpos
Для переходов Поверхности и Развертки (FACE и WRAP) этими координатами являются полярные
координаты, как было разработано в старом стиле в командах @line4x_polar / @line_4x / line_4xdir .
Станочные Координатные оси с Текущим набором Контрольной точки (G54, G55 …) для вершины
инструмента:
xopos, yopos, zopos
Поскольку этот набор координирует вычисление, SolidCAM берет из учетной записи кинематические
параметры, определенные в VMID.
Начальная точка станка (home), которая определяется из источника в Машинном диалоговом окне
установки SolidCAM, не берется из учетной записи.
Длина инструмента H не берется из учетной записи.
Станочные Координатные оси с Текущим набором Контрольной точки (G54, G55 …) для точки
поворота:
xtopos, ytopos, ztopos
Поскольку этот набор координирует вычисление, SolidCAM берет из учетной записи кинематические
параметры, определенные в VMID.
Для вычисления этой координаты начальной точки, которая определяется как относительная
подстаночного источника в станочном диалоговом окне установки SolidCAM, не берется из учетной
записи.
Длина инструмента H и расстояние до центра поворота берутся из учетной записи .
Для станков с кинематической схемой HEAD_HEAD (голова_голова (есть кинематические схемы
станков голова_стол)) этот координатный набор не имеет никакого влияния при opos = hpos.
Line On.
Параметры:
xpos, ypos, zpos тип: numeric Положение инструмента в конце движения.
feed тип: numeric Подача.
before тип: logical Движение заканчивается радиусом перед
или после указанной точки.
Описание:
Команда, размещающая позиционирование в строке, которое короче или длиннее длины радиуса
инструмента. Эта команда генерируется для станков, чье значение comp_x_start - Y.
Пример:
@line_on ; MAHO-432
if before then
gcode = 43
else
gcode = 44
endif
{nb, 'G'gcode, ' '}
skipline = FALSE
call @line
endp
Параметры:
label тип: integer Имя (номер) цикличности.
loop_level тип: integer Вложенность цикличности.
loop_count тип: integer Количество повторений.
start_line тип: функция Номер кадра начала цикличности.
end_line тип: функция Номер кадра окончания цикличности.
Описание:
Эта команда генерирует G-код, необходимый для запуска цикличности.
Примеры:
@loop ; FANUC
local integer var_num
var_num = loop_level + 20
{nb, '#'var_num, ' = 0'}
{nb, 'WHILE [#'var_num, ' LT ',loop_count,'] DO ',loop_level}
endp
Подача, шпиндель.(M Feed Spin).
Праметры:
feed_unit тип: integer Размерность подачи {MM_MIN / MM_REV}
(мм/мин., мм/об).
feed тип: numeric Подача.
spin_unit тип: integer Размерность вращения шпинделя {RPM/CSS}
(постоянная скорость резания, число оборотов).
spin тип: numeric Число оборотов.
spin_direction тип: integer Направление вращения {CW/CCW}
(по часовой, против часовой).
Описание:
Эта команда генерирует G-код, который определяет подачу и скорость вращения для фрезерования.
Пример:
@feed_spin
if feed_unit eq MM_MIN then; если подача эквивалентна размерности мм/мин, тогда
gcode = 94; определение G кода как 94
else ; иначе
gcode = 95; определение G кода как 95
endif; конец «если»
{nb, 'G' gcode, [ S'spin ] }; формирование кадра
endp; конец процедуры
Сообщение.(Message )..
Описание:
Эта команда генерируют кадр УП, необходимый для выдачи сообщения.
Параметры:
message тип: string Сообщение, которое будет напечатано.
Пример:
@message; сообщение для FANUC, MAHO-432
{nb, '(', message, ')'}; формирование кадра с сообщением
endp; конец процедуры
@mirror ; MAHO-432
if mirror_type eq MIRROR_OFF then
gcode = 72
else
gcode = 73
endif
{nb, 'G'gcode}
if mirror_type eq MIRROR_X then
{' X1'}
endif
if mirror_type eq MIRROR_Y then
{' Y1'}
endif
if mirror_type eq MIRROR_XY then
{' X1 Y1'}
endif
endp
Пример:
@move4x_cartesian
gcode = 1
{nb, ['G'gcode],[' X'xpos],[' Z'zpos ],[' C'cpos]}
endp
Примечание:
move4x_cartesian актуален только при:
pos_to_machine = N.
Параметры:
xpos, ypos, zpos тип: numeric Положение инструмента в конце движения.
cpos тип: numeric Позиционирование станка по координате C.
next_direction тип: numeric Направление следующего блока XY
(если следующий блок не является блоком XY).
dc тип: numeric Delta cpos (приращение cpos ).
dir4x тип: integer Направление вращения оси C {CW, CCW}
( по часовой, против часовой).
Описание:
Эта команда генерирует быстрое позиционирование в УП при использовании одновременной 4-ой
оси. 'dir4x' параметр устанавливает станочное направление поворота..
Эта команда генерируется если параметр файла PRP set_dir = Y.
Пример:
@move4x_dir
gcode = 1
{nb, ['G'gcode],[' X'xpos],[' Z'zpos ],[' C'cpos]}
endp
Примечание:
move4x_dir is актуален только при:
pos_to_machine = N.
Параметры:
xpos, ypos, zpos тип : numeric Позиция инструмента в конце движения.
cpos тип : numeric Позиционирование станка по координате C.
next_direction тип : numeric Направление следующего блока XY
(если следующий блок не является блоком XY).
Пример:
@move4x_polar
gcode = 1
{nb, ['G'gcode],[' X'xpos],[' Z'zpos ],[' C'cpos]}
endp
Примечание:
move4x_ актуален только при:
pos_to_machine = N.
Пример:
.
@move_5x
gcode = 0
{nb,'G'gcode,[' X'xpos],[' Z'zpos ],[' A'apos] ,[' B'bpos]}
endp
Станочные Координатные оси с Текущим набором Контрольной точки (G54, G55 …):
xpos, ypos, zpos
Для переходов Поверхности и Развертки (FACE и WRAP) этими координатами являются полярные
координаты, как было разработано в старом стиле в командах @line4x_polar / @line_4x / line_4xdir .
Станочные Координатные оси с Текущим набором Контрольной точки (G54, G55 …) для вершины
инструмента:
xopos, yopos, zopos
Поскольку этот набор координирует вычисление, SolidCAM берет из учетной записи кинематические
параметры, определенные в VMID.
Начальная точка станка (home), которая определяется из источника в Машинном диалоговом окне
установки SolidCAM, не берется из учетной записи.
Длина инструмента H не берется из учетной записи.
Станочные Координатные оси с Текущим набором Контрольной точки (G54, G55 …) для точки
поворота:
xtopos, ytopos, ztopos
Поскольку этот набор координирует вычисление, SolidCAM берет из учетной записи кинематические
параметры, определенные в VMID.
Для вычисления этой координаты начальной точки, которая определяется как относительная
подстаночного источника в станочном диалоговом окне установки SolidCAM, не берется из учетной
записи.
Длина инструмента H и расстояние до центра поворота берутся из учетной записи .
Для станков с кинематической схемой HEAD_HEAD (голова_голова (есть кинематические схемы
станков голова_стол)) этот координатный набор не имеет никакого влияния при opos = hpos.
Процедура.(Proc).
Параметры:
label тип: integer Имя (номер) подпрограммы.
start_line тип: функция Номер Кадра начала подпрограммы.
end_line тип: функция Номер Кадра окончания подпрограммы.
Описание:
Эта команда генерирует header (магистраль) подпрограммы. Использование функций 'start_line' и
'end_line' ограничено, только чтобы генерировать утверждения. Для дальнейшего описания их
поведения смотрите раздел 'функции генерации'.
Примеры:
@proc; FANUC
{nl, 'O'label}; Отметьте использование 'nl' а не 'nb'.
;Этот кадр не нужно нумеровать.
endp
Кинематические параметры:
xpos ypos zpos
xhpos yhpos zhpos
xmpos ympos zmpos
xopos yopos zopos
xlpos ylpos zlpos
xtpos ytpos ztpos
xtopos ytopos ztopos
Этот набор вычисления координат может использоваться для генерации файла CL.
Это может быть полезно для специфичных станков, которые способны преобразовать координаты
проекта в станочные координаты.
Станочные Координатные оси с Текущим набором Контрольной точки (G54, G55 …):
xopos, yopos, zopos
Поскольку этот набор координирует вычисление, SolidCAM берет из учетной записи кинематические
параметры, определенные в VMID.
Для вычисления этой координаты начальной точки, которая определяется как относительная
подстаночного источника в станочном диалоговом окне установки SolidCAM, не берется из учетной
записи
Длина инструмента H не берется из учетной записи.
Для станков с кинематической схемой HEAD_HEAD (голова_голова (есть кинематические схемы
станков голова_стол)) этот координатный набор не имеет никакого влияния при opos = hpos.
Станочные Координатные оси с Текущим набором Контрольной точки (G54, G55 …) для точки
поворота:
xtopos, ytopos, ztopos
Поскольку этот набор координирует вычисление, SolidCAM берет из учетной записи кинематические
параметры, определенные в VMID.
Для вычисления этой координаты начальной точки, которая определяется как относительная
подстаночного источника в станочном диалоговом окне установки SolidCAM, не берется из учетной
записи.
Длина инструмента H и расстояние до центра поворота берутся из учетной записи .
Поворот.(Rotate).
Описание:
Эта команда генерирует кадр G-кода (УП), требуемый для старта/отмены поворота.
Параметры:
rotate_cancel тип: logical TRUE, если поворот нужно отменить.
angle тип: numeric Угол поворота.
Примеры:
@rotate; для FANUC (поворот)
; Не существует в FANUC 6M
if rotate_cancel then; если нет поворота, тогда
gcode = 69; определение функции отмены поворота G69
{nb, 'G'gcode}; формирование кадра с определенной функцией
else; иначе
gcode = 68; определение функции ввода поворота G68
{nb, 'G'gcode, ' X0 Y0 G91 R'angle}; формирование кадра с углом поворота
{nb, 'G90'}; формирование кадра
endif; конец условия «если»
endp; конец процендуры
@rotate ; MAHO-432
gcode = 92
{nb, 'G'gcode, ' B4='angle}
endp
Параметры:
first_axis_angle:0.000 second_axis_angle:0.000
opposite_first_axis_angle:0.000 opposite_second_axis_angle:0.000
change_tool_follows:1
rotate_angle_x:0.000T rotate_angle_y:90.000T rotate_angle_z:0.000T
opposite_rotate_angle_x:0.000T
opposite_rotate_angle_y:90.000T opposite_rotate_angle_z:0.000T
euler_angle_z:180.000T euler_angle_x:-90.000T euler_angle_dev_z:-90.000T
opposite_euler_angle_z:0.000T opposite_euler_angle_x:90.000T
opposite_euler_angle_dev_z:90.000T
shift_x:0.000T shift_y:0.000T shift_z:0.000T
shift_x_after_rot:0.000T shift_y_after_rot:0.000T shift_z_after_rot:0.000T
machine_offset_x:0.000 machine_offset_y:0.000 machine_offset_z:0.000
normal_to_plane_x:0.000T normal_to_plane_y:1.000T normal_to_plane_z:0.000T
tool_z_level:10.000 tool_start_plane:2.502
radial_start_tool_level:3.339 rear_start_tool_level:-2.502
xhnext_tool_z_level:0.389T yhnext_tool_z_level:10.000T zhnext_tool_z_level:0.001T
xmnext_tool_z_level:10.000T ymnext_tool_z_level:-0.389T zmnext_tool_z_level:0.001T
xhnext_start_tool_level:0.389T yhnext_start_tool_level:2.502T zhnext_start_tool_level:0.001T
xmnext_start_tool_level:2.502T ymnext_start_tool_level:-
0.389T zmnext_start_tool_level:0.001T
xonext_start_tool_level:-0.389T yonext_start_tool_level:0.000T zonext_start_tool_level:0.001T
shift_x, shift_y и shift_z являются сдвигами в системе координат проекта. Они могут
использоваться для определения рабочей плоскости системы координат (lpos установлена).
@start_of_file ; FANUC
{'%'}
{nl, 'O'program_number, ' (', g_file_name, ')'}
if rotate_used then
gcode = 69
{nb, 'G'gcode}
endif
if mirror_used then
{nb, 'G50.1 X0 Y0'}
endif
{nb, '(SUBROUTINES: O'first_proc_number}
{ ' .. O' last_proc_number, ')'}
endp
First Step:
set 'print_file_size' = 1 in '@init_post'..
Second Step:
Refer to the value of variable 'file_size' as following
@start_of_file
{nl, '$$file_size$$'}
endp
Пример:
@start_of_job
{nb,'(',job_name,')'}
if msg ne ''
{nb,'('msg,')'}
endif
if G64 ne 0
{nb,'G64'}
endif
{nb, 'D'tool_number}
{' G'gcode}
if job_type ne 'drill'
{' G40 G90 '}
skipline = false
else
skipline = true
endif
endp
Кинематические параметры:
Gpp подпрограммы @ start_of_в установках рабочих координат сначала указывают:
Рабочая Плоскость для Определенной Системы координат установлена:
xnext ynext znext
Система координат проекта установлена:
xhnext yhnext zhnext
Станочная Абсолютная Нулевая Система координат установлена для конца инструмента:
xmnext ymnext zmnext
Координатные оси с Текущей Контрольной точкой устанавлена для конца инструмента:
xonext yonext zonext
Рабочая Плоскость Определена и Смещенная Система координат установлена:
xlnext ylnext zlnext
Станочная Абсолютная Нулевая Система координат установлена для точки поворота:
xtnext ytnext ztnext
Координатные оси с Текущей Контрольной точкой и установлена для точки поворота:
xtonext ytonext ztonext
@start_of_file ; FANUC
{'%'}
{nl, 'O'program_number, ' (', g_file_name, ')'}
if rotate_used then
gcode = 69
{nb, 'G'gcode}
endif
if mirror_used then
{nb, 'G50.1 X0 Y0'}
endif
{nb, '(SUBROUTINES: O'first_proc_number}
{ ' .. O' last_proc_number, ')'}
endp
First Step:
set 'print_file_size' = 1 in '@init_post'..
Second Step:
Refer to the value of variable 'file_size' as following
@start_of_file
{nl, '$$file_size$$'}
endp
Примеры :
Пример:
В добавление к упомянутым выше параметрам, большее число параметров может быть определено
пользователем в файле [[Link]]. Эти параметры определяют 'turn_type' (тип точения) и для
каждого типа определяются требуемые для него параметры. Смотрите пример ниже.
Описание:
Эти команды генерируют кадр нарезания резьбы.
Пример:
Параметры:
rotate_angle_x:0.000T rotate_angle_y:90.000T rotate_angle_z:0.000T
rotate_angle_x_dir:cw rotate_angle_y_dir:cw rotate_angle_z_dir:cw
x_angle_const_z:0.000T y_angle_const_z:90.000T dev_angle_z:0.000T
x_angle_const_z_dir:cw y_angle_const_z_dir:cw dev_angle_z_dir:cw
x_angle_const_y:-90.000T z_angle_const_y:-90.000T dev_angle_y:-90.000T
x_angle_const_y_dir:ccw z_angle_const_y_dir:ccw dev_angle_y_dir:ccw
y_angle_const_x:-90.000T z_angle_const_x:-180.000T dev_angle_x:-180.000T
y_angle_const_x_dir:ccw z_angle_const_x_dir:ccw dev_angle_x_dir:ccw
angle_4x_around_x:0.000T angle_4x_around_y:0.000T
angle_4x_around_x_dir:cw angle_4x_around_y_dir:cw
shift_x:120.000T shift_y:0.000T shift_z:-40.000T
part_home_number:4 tool_z_level:500.000
tmatrix_I_1:0.000T tmatrix_I_2:0.000T tmatrix_I_3:-1.000T tmatrix_I_4:-40.000T
tmatrix_I_5:0.000T tmatrix_I_6:1.000T tmatrix_I_7:0.000T tmatrix_I_8:0.000T
tmatrix_I_9:1.000T tmatrix_I_10:0.000T tmatrix_I_11:0.000T tmatrix_I_12:-120.000T
tmatrix_I_13:0.000T tmatrix_I_14:0.000T tmatrix_I_15:0.000T tmatrix_I_16:1.000T
x = cosy*cosz*x - sinz*cosy*y + siny*z
y = (-sinx*siny*cosz + cosx*sinz)*x + (sinx*siny*sinz + cosx*cosz)*y - sinx*cosy*z
z = (cosx*cosz*siny + sinx*sinz)*x + (-sinz*cosx*siny + sinx*cosz)*y - cosx*cosy*z
вокруг Z
x = x*cos(dev_angle) - y*sin(dev_angle)
y = x*sin(dev_angle) + y*cos(dev_angle)
вокруг Y
z = z*cos(dev_angle) - x*sin(dev_angle)
x = z*sin(dev_angle) + x*cos(dev_angle)
вокруг X
y = y*cos(dev_angle) - z*sin(dev_angle)
z = y*sin(dev_angle) + z*cos(dev_angle)
Описание:
@tmatrix содержит информацию о стартовой точке детали, углах, сдвигах и матрице преобразования
для многостороннего фрезерования. В этой команде можно обнаружить всю необходимую
информацию, чтобы разработать GPP для различных 4 и 5 осевых обработок.
@tmatrix может присутствовать:
1.перед: @home_number.
2.после: @job_info.
Примечание:
@tmatrix актуальна только при:
pos_to_machine = N.
Параметры:
tool_path_type (тип траектории инструмента)
approach_type (тип подхода)
None (нет)
Описание:
@Tool Path Info содержит информацию о траектории инструмента и подходах, которая
необходима для упорядочения строк (кадров) и создания параметрического G - кода.
Примеры:
Пример 1.
Проверка, является ли обработка 2D обработкой (не trans_surf (не обработка поверхности) и не 3-D
model (не 3-D модель)) и tool_path_type (тип траектории инструмента) является 'start_approach'
(старт перехода):
Пример 2.
if tool_path_type eq 'start_approach'
if approach_type eq 'diagonal_approach' or approach_type eq 'helical_approach'
or approach_type eq 'linear_approach'
flag_g90_g91 = 2
endif
endif
Пример3.
if tool_path_type eq 'end_approach'
if flag_g90_g91 eq 7
flag_g90_g91 = 1
call @absolute_mode
skipline = FALSE
endif
flag_g90_g91 = 1
endif
Пример 4.
Проверка, если tool_path_type является 'start_retreat' и мы находимся под G91, и если да, то мы
генерируем G90.
if tool_path_type eq 'start_retreat'
if flag_g90_g91 eq 91
flag_g90_g91 = 1
call @absolute_mode
flag_g90_g91 = 0
endif
flag_g90_g91 = 0
flag_zpos = 4
endif
Пример 5.
if tool_path_type eq 'end_retreat'
if flag_zpos eq 5
if job_type <> '3-d model' and job_type <> 'trans_surf'
{nb, '#26 = #26 - #5 '}
endif
flag_zpos = 0
endif
endif
Параметры:
tool_number тип: integer Номер инструмента для замены.
tool_offset_long тип: integer Номер инструмента в таблице инструмента.
first_tool тип: logical TRUE (ИСТИНА), если это первый инструмент в программе.
last_tool тип: logical TRUE (ИСТИНА), если последний инструмент в программе.
next_tool_number тип: integer Номер следующего инструмента.
xnext, znext тип: numeric Позиционирование после смены инструмента.
spin тип: numeric Обороты.
spin_unit тип: integer Размерность оборотов {RPM/CSS} (постоянная скорость
резания, число оборотов).
spin_direction тип: integer Направление вращения шпинделя {CW, CCW} (по часовой,
против часовой).
tool_id_number тип: integer Идентификационный номер инструмента.
next_tool_id_number тип: integer Идентификационный номер следующего инструмента.
spin_limit тип: numeric Ограничение числа оборотов.
xtool, ztool тип: numeric Координаты позиции смены инструмента (опционально).
message тип: string Дескриптивное сообщение для изменения инструмента.
tool_direction тип: integer Направление инструмента {CW/CCW} (по часовой,
против часовой).
tool_mode тип: integer Ориентация в пространстве инструмента – левый или
правый (left/right).
tool_origin тип: integer Референтная точка инструмента (касательная, центр,
по указанию) {T_TANGENT, T_CENTER, T_DEFINE}.
tool_type тип: integer Семейство инструментов {EXT_ROUGH,
TURN_DRILLING, EXT_THREAD,
EXT_GROOVE, EXT_CONTOUR,
INT_FACE_BACK, INT_THREAD,
INT_GROOVE, INT_CONTOUR,
INT_ROUGH} (проходной наружный, сверло токарное,
резьбовой наружный, наружный канавочный, наружный
контурный, наружный для противошпинделя, внутренний
резьбовой, внутренний канавочный,
внутренний контурный, внутренний черновой).
number_of_jobs_used_tool тип: integer Число переходов, которые используют этот инструмент.
next_tool_machine_type тип: integer Станочный тип следующего инструмента.
tool_A тип: numeric параметр инструмента (в таблице инструмента).
tool_B тип: numeric параметр инструмента (в таблице инструмента).
tool_C тип: numeric параметр инструмента (в таблице инструмента).
tool_D тип: numeric параметр инструмента (в таблице инструмента).
tool_D1 тип: numeric параметр инструмента (в таблице инструмента).
tool_D2 тип: numeric параметр инструмента (в таблице инструмента).
tool_E тип: numeric параметр инструмента (в таблице инструмента).
tool_F тип: numeric параметр инструмента (в таблице инструмента).
tool_H тип: numeric параметр инструмента (в таблице инструмента).
tool_K тип: numeric параметр инструмента (в таблице инструмента).
tool_ALFA тип: numeric параметр инструмента (в таблице инструмента).
tool_BETA тип: numeric параметр инструмента (в таблице инструмента).
tool_G тип: numeric параметр инструмента (в таблице инструмента).
tool_RADIUS_ALFA тип: numeric параметр инструмента (в таблице инструмента).
tool_RADIUS_BETA тип: numeric параметр инструмента (в таблице инструмента).
Описание:
Эта команда генерирует кадр, необходимый для смены инструмента.
Пример:
@turn_change_tool ; смена инструмента для OKUMA (упрощенно)
{nb, 'G0', 'X'xtool, 'Y'ytool} ; формирование кадра для точки смены
; инструмента с G0 (с ускоренным перемещением)
{nb, 'T'tool_number, tool_number, tool_number, 'M8'}; формирование кадра с нумерацией
; инструмента и включение охлаждения (М8).
if spin_unit eq MM_MIN; если обороты в мм/мин (размерность вращения)
{nb, 'G97'}; формирование кадра с G97 (программирование чисел оборотов)
else; иначе
{nb, 'G96'}; формирование кадра с G96 (программирование постоянной скорости резания)
endif ; конец условия «если»
{'G1', 'X'xnext, 'Y'ynext} ; формирование кадра с линейным перемещением
endp; конец процедуры
Параметры:
drill_type тип: integer Тип сверления, как определено в [[Link]] файле.
d_drill_type тип: integer Внутренний тип сверления
{D_Drilling, D_F_Drill, D_Peck,
D_Tapping, D_Boring,
D_R_Boring, D_F_Boring}.
drill_upper_z тип: numeric Стартовая позиция сверления.
drill_lower_z тип: numeric Конечная позиция сверления.
drill_depth тип: numeric (drill_upper_z-drill_lower_z) (глубина сверления).
num_down_step тип: integer Число шагов (последний шаг может быть короче чем другие).
safety тип: integer Дистанция безопасности.
down_step тип: numeric Глубина шага сверления.
Пример:
@turn_drill; сверление токарного перехода для FANUC (упрощенно)
gcode = 74; определение функции G со значением 74
if drill_type eq drilling ; если тип сверления (drill_type) есть сверление (drilling)
r=0
q = drill_lower_z
endif; конец условия «если»
if drill_type eq peck; если тип сверления (drill_type) есть «клевание» (peck)
q = down_step
endif; конец условия «если»
{nb, 'G' gcode, 'R'r} ; формирование кадра
{nb, 'G' gcode, 'Z' drill_lower_z, 'Q'q, 'F'feed} ; формирование кадра
endp; конец процедуры.
Описание:
Эта команда генерирует код для завершения подпрограммы.
Пример:
Параметры:
Нет.
Параметры могут быть определены пользователем в [[Link]] файле. Эти параметры определяют
'turn_type' (тип точения), и для каждого типа определяются параметры, необходимые для
этого.
Описание:
Эта команда предоставляет Вам доступ к user_defined параметрам с экрана обработки. Обычно нет
никакой необходимости использовать эту команду для генерации цикла.
Параметры:
process_type тип: integer Тип токарного процесса {LONG/FACE} (продольно,
поперечно).
label тип: integer Имя (номер) токарной процедуры..
start_line тип: function Номер стартового кадра подпрограммы.
end_line тип: function Номер конечного кадра подпрограммы.
Описание:
Эта команда генерирует заголовок подпрограммы для описания токарной геометрии. Использование
функций 'start_line' (номер стартового кадра подпрограммы) и 'end_line' (номер конечного кадра
подпрограммы) ограничивается только генерацией операторов.
Пример:
@turn-proc ; токарная процедура для OKUMA
{nl, 'NLP' label} ; формирование строки с именем подпрограммы
if process_type eq LONG ; если тип процесса эквивалентен LONG (продольно)
gcode = 81 ; определение функции G со значением 81
else ; иначе
gcode = 82 ; определение функции G со значением 82
endif ; конец условия «если»
{'G' gcode} ; формирование строки с определенной функцией
endp ; конец процедуры.
Описание:
Эта команда генерирует кадр токарного цикла.
Пример:
@turning ; токарный цикл для OKUMA (упрощенно)
if work_type eq ROUGH then ;если рабочий тип ROUGH (черновой), тогда
{nb, 'G85', 'NLP'label} ;формирование кадра с G85 и именем подпрограммы
{'D' (z*down_step), 'U'rough_offset_x, 'W'rough_offset_z} ; добавление к строке
{'F' feed} ; добавление к строке
endif ; иначе
if work_type eq COPY then ; если рабочий тип COPY (копирование), тогда
{nb, 'G86', 'NLP'label} ; формирование кадра с G86 и именем подпрограммы
{'D' (z*down_step), 'U'rough_offset_x, 'W'rough_offset_z} ; добавление к строке
{'F' feed} ; добавление к строке
endif ; конец условия «если»
if semi_finish then ; если получистовой, тогда
{nb,'G87','NLP'label, 'U' semi_offset_x, 'W'semi_offset_z} ;формирование кадра с G87
endif ; конец условия «если»
if finish then ; если чистовой, тогда
{nb, 'G87' , 'NLP'label} ; формирование кадра с G87
endif ; конец процедуры
Параметры:
xpos, ypos, zpos type : numeric Положение инструмента в конце дуги.
feed type : numeric Подача перемещений.
xcenter, ycenter type : numeric Абсолютный центр дуги.
xcenter_rel,ycenter_rel type : numeric Центр дуги относительно точки старта.
radius type : numeric Радиус дуги.
start_angle, end_angle type : numeric Стартовый и конечный угол дуги (в градусах).
const_angle type : numeric Угол наклона.
arc_direction type : integer Направление дуги {CW, CCW} (по час., против час.)
arc_plane type : integer Плоскость дуговой интерполяции {XY, YZ, ZX}.
arc_size type : numeric Размер дуги (в градусах).
next_const_angle type : numeric Следующий константный угол (в градусах).
Описание:
Эта команда генерирует дуговое позиционирование G-кода для EDM.
Пример:
@wc_arc ; дуга в электроэрозии
if arc_direction eq CCW then ; если направление дуги против часовой стрелки, тогда
gcode = 3 ; определение функции G с значением 3
else ;(CW) иначе по часовой
gcode = 2 ; определение функции G с значением 2
endif ; конец условия «если»
if change(gcode) then ; если смена G кода, тогда
{NB' G'gcode} ; формирование кадра с определенной функцией G (строки определения выше)
else ; иначе
{NB} ; формирование только пустого кадра с нумераций
endif ; конец условия «если»
if arc_size le 360 ; если размер дуги меньше 360 градусов
{[' X'xpos] [' Y'ypos],' I'xcenter_rel, ' J'ycenter_rel } ; добавление к предыдущей строке (к пустому)
else ; иначе
if arc_size eq 360 then ; если размер дуги равен 360 градусам
{' I'xcenter_rel, ' J'ycenter_rel} ; добавление к предыдущей строке (к пустому)
endif ; конец условия «если»
endif ; конец условия «если»
endp ; конец процедуры.
Пример:
@wc_chng_condition
local integer i, a
local numeric d
;
;1 = name
;2 = type (numeric , integer , string)
;3 = value
i=1
while i <= chng_cond_num
if change(chng_cond<<3,i>>) then
if chng_cond<<2,i>> eq "NUMERIC"
d = tonum(chng_cond<<3,i>>)
; {nb, ' numeric = ' d:'5.3(*1000p)'}
endif
if chng_cond<<2,i>> eq "INTEGER"
a = tonum(chng_cond<<3,i>>)
; {nb, ' integer = ' a:'5.0(n)'}
endif
gcode = 10
{nb,'G'gcode ' L10 R'i ' P'chng_cond<<3,i>>}
endif
i=i+1
endw
endp
@wc_cut_wire
{nb,'M7'}
endp
Параметры:
tool_diameter type : numeric Диаметр проволоки.
feed type : numeric Подача.
zpos type : numeric Z позиционирование.
angle type : numeric Угол наклона.
e_group_name type : string Имя группы условий.
Описание:
Эта комманда определяет условия резания чистовых процессов.
Пример:
@wc_finish_info
local numeric aa1
aa1 = tonum(e_group_name)
{nb,'E'aa1:integer_def_f}
{nb,'H'tool_number ' = 'tool_diameter }
{nb 'H'tool_number ' F'feed}
if parm_angle <> 0
if save_angle <> angle
{nb,'H100 = 'angle}
save_angle = angle
endif
endif
endp
Пример:
@wc_insert_wire
{' M6'}
{nb, 'M17'}
endp
Пример:
@wc_line
{nb}
gcode = 1
if change(gcode) then
{' G'gcode}
else
{' '}
endif
{[' X'xpos], [' Y'ypos], [' U'upos], [' V'vpos]}
endp
@start_tool
Эта команда запускает вращение инструмента. Она вызывается из @change_tool
Параметры:
tool_direction тип: integer Направление вращения инструмента.
Spin тип: numeric Обороты.
Примеры:
@start_tool1; для FANUC (команда @start_tool1 является пользовательской
;в отличие от команды @start_tool)
if direction = CCW then; если направление против часовой, тогда
mcode = 3; определение вспомогательной функции М со значением 3
else; CW (иначе по часовой)
mcode = 4; определение вспомогательной функции М со значением 4
endif; конец условия «если»
{'S'spin:'5.0(p)', ' M'mcode}; формирование значений оборотов шпинделя S
; и направления вращения M
endp; конец процедуры
Примеры:
Это команды, которые могут использоваться для управления файлами G-кода (УП) во время
генерации УП:
Создание файла документа в начале процесса генерации документации:
{'!! open file = c:\\[Link] !!' }
Закрыть файл документа в конце процесса генерации документации:
{'!! close file = c:\\[Link] !!' }
Пример:
path_nc_ode = 'c:\\nc_code_dir'
{nl,'!!make dir='path_nc_code'!!'}
Папка, названная path_nc_code, будет создана на C.
Synopsis (резюме)
inc <literal> (inc <литерал>)
Where <literal> is a constant string. (Где <литерал> является постоянной строкой.)
Примеры:
Допустимый:
Inc "abc"
Недопустимый:
Local string fn
Fn = "abc"
Inc fn [переменные не позволяются. Только литералы]
Proc @rapid_move
…
Endp
Примеры:
Допустимый:
Файл: [Link]
Proc @line
…
Endp
Inc "xyz"
Proc @rapid_move
…
Endp
Файл: [Link]
Proc @user_p1
…
Endp
@x-font-set Gad
Сообщения об ошибках GPPL должен выводить на экран и имя файла, и номер ошибочной строки.
Только имя файла будет выведено на экран, а не полный путь файла.
Для того, чтобы работать с кинематическим стилем необходимо добавить следующий новый параметр
к файлу PRP:
pos_to_machine = Y
Кинематика станка определяется в Машинном ID в файле VMID.
Примеры. (Examples).
; FANUC
@pre_processor (препроцессор для FANUC)
;
;Internal parms (внутренние параметры препроцессора)
;
post_processor = fanuc
doc_processor = fanuc
gpp_file_ext = TAP
tool_table_name = table
max_g_name_length = 0
default_lang = DEFAULT
;
;Machine Initialize (станочная инициализация)
;
abs_coord = N
_4th_axes_around = X
first_rotation_angle = Z
;
;Program numbers (нумерация программы)
;
prog_num_min = 5000
prog_num_max = 8999
prog_num_dflt = 5000
get_prog_num = Y
proc_num_min = 1
proc_num_max = 8999
proc_num_dflt = 1
get_proc_num = Y
;
;Procedures control (контроль процедур)
;
gen_procs = N
drill_proc = N
turn_proc = Y
gen_internal_proc = N
turn_common_proc = Y
gen_1_line_proc = Y
optimize_jobs_loop = Y
seq_sub_number = N
loop_exist = Y
same_sub_numbers = N
init_var_after_split = Y
;
;Home (начальная (стартовая или начало координат обработки детали) точка)
;
home_data_at_start = N
;
;Positioning (позиционирование)
;
;
;Compensation (компенсация инструмента)
;
comp_exist = Y
comp_x_start = N
comp_by_arcs = N
delta_for_TOOL_H = 50
comp_by_zero_tool = N
Применение переменной comp_by_zero_tool будет иметь значение при выводе УП для отражения
конечной информации по вводу коррекции на радиус инструмента, т.е. функции G41 и G42,
которые формируют ввод коррекции, будут отражать разные значения координат в плоскости
подвода. Если переменная будет задана в таком виде comp_by_zero_tool = N, то вывод УП
функций G41 и G42 с координатами будет отражен без учета радиуса инструмента, т.е. так
называемый чистый контур детали. Если переменная будет задана в таком виде
comp_by_zero_tool = Y, то вывод координат уже будет с учетом радиуса инструмент, и
коррекция на станке должна будет вводиться (соответственно отрабатываться в детали) с
учетом износа или биения фрезы (применение G41 и G42 при одинаковом направлении движения
(такое положение актуально для станков группы HAAS, где ввод коррекции возможен с
положительным и отрицательным значением радиуса инструмента)). Для примера можно
предложить следующее: нужно получить методом фрезерования бобышку диаметром 20мм с
применением режущего инструмента фрезы, у которой диаметр режущей части 10мм.
G90G01G41X0.Y10.D1F20
G02X10.Y0.I0.J-10.
X0.Y-10.I-10.J0.
X-10.Y0.I0.J10.
X0.Y10.I10.J0
G01G40X0.Y25.F400
G90G01G41X0.Y10.D1F20
G02X10.Y0.R10.
X0.Y-10.R10.
X-10.Y0.R10.
X0.Y10.R10.
G01G40X0.Y25.F400
G90G01G41X0.Y10.D1F20
G02X10.Y0.I0.J-15.
X0.Y-10.I-15.J0.
X-10.Y0.I0.J15.
X0.Y10.I15.J0
G01G40X0.Y25.F400
G90G01G41X0.Y10.D1F20
G02X10.Y0.R15.
X0.Y-10.R15.
X-10.Y0.R15.
X0.Y10.R15.
G01G40X0.Y25.F400
arc_exist = Y
arc_3d = Y
arc_quadrants = Y
arc_gt_180 = N
arc_max_chord = 30.0000, 1.1811
arc_max_angle = 10.0000
arc_max_radius = 2000.0000, 78.7402
arc_min_length = 0.0000, 0.0000
arc_zx_yz = N
;
;Epsilon values (значение эпсилон)
;
;
;Feed-Spin (подача, обороты)
;
;
;Timing (фактор времени)
;
time_factor = 1.0000
block_time = 0.2000
;
;Part options (опции проекта (детали))
;
;
;Job options (опции перехода)
;
;
;Drill cycles (циклы сверления)
;
drill_type = Drilling Drilling Y
drill_type = F_Drill F_Drill Y Delay
drill_type = Peck Peck Y Delay
drill_type = Tapping Tapping Y
drill_type = Boring Boring Y Delay
drill_type = R_Boring R_Boring Y Delay
drill_type = F_Boring F_Boring Y Delay
;
;Fourth axis (четвертая ось)
;
set_dir = N
;
;Sim Five axis (симуляция пятой оси)
;
auto_angle_pair = Y
other_angle_pair = Y
angle_change_limit = 30.0000
interplat_angle_step = 3.0000
interplat_for_dist = N
interplat_distance = 5.0000, 0.1969
retract_distance = 100.0000, 3.9370
center_rot_prp_num = 20
enable_mx_edit = N
;
endp
; 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; конец процедуры (далее везде это будет обозначать конец процедуры для уменьшения
; печати)
;-------------------(строка визуального разделения при печати и корректировки постпроцессора)
@proc; процедура
endp
;-------------------
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
;-------------------
@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
;-------------------
@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
;-------------------
; =======================
; USER DEFINED PROCEDURES; ОПРЕДЕЛЯЕМЫЕ ПОЛЬЗОВАТЕЛЕМ ПРОЦЕДУРЫ
; =======================
; Integrex-e-410h
@pre_processor
;Internal parms
gpp_file_ext = EIA
;Machine Initialize
abs_coord =N
_5th_axes_around =Z
;Program numbers
prog_num_min = 0001
prog_num_max = 8999
prog_num_dflt = 5000
get_prog_num =Y
proc_num_min =1
proc_num_max = 8999
proc_num_dflt =1
get_proc_num =Y
;Procedures control
gen_procs =Y
drill_proc =Y
turn_proc =N
gen_internal_proc =Y
turn_common_proc =N
gen_1_line_proc =Y
optimize_jobs_loop = Y
seq_sub_number =y
;Home
home_data_at_start = Y
;Positioning
dflt_start = 200.0000 0.0000 200.0000, 7.8740 0.0000 7.8740
dflt_end = 200.0000 0.0000 200.0000, 7.8740 0.0000 7.8740
;Compensation
comp_exist =YY
comp_x_start =N
comp_by_arcs =N
;Arc definitions
arc_exist =Y
arc_3d =Y
arc_quadrants =N
arc_gt_180 =Y
;arc_max_chord = 10.0000, 0.3937
;arc_max_angle = 20.0000
arc_max_chord = 30.0000, 1.1811
arc_max_angle = 10.0000
arc_max_radius = 2000.0000, 78.7402
;Epsilon values
eps_angle = 0.0020, 0.0001
zero_value = 0.0010, 0.0001
min_delt_arc_rad = 0.0100, 0.0004
safety_dist = 2.0000, 0.0787
;Feed-Spin
rapid_feed = 5000.0000, 196.8504
;Timing
time_factor = 1.0000
block_time = 0.2000
;Part options
options = BACK_SPIN LOGICAL
options = GREAPER LOGICAL
options = COLENT INTEGER
options = number_of_parts integer
;Job options
job_opt_type = G_GCOD N G107 use_feed m7_m8
;Drill cycles
drill_type = Peck Peck Y Delay ; G83
drill_type = Tapping Tapping Y Delay ; G84
drill_type = G84_2 Tapping Y ; G84.2
drill_type = F_Boring F_Boring Y Delay ;G85
drill_type = G87 Peck Y Delay ; G87
drill_type = G88 Tapping Y Delay ; G88
drill_type = G88_2 Tapping Y ; G88.2
drill_type = G89 F_Boring Y Delay ;G89
;Turning cycles
turn_type = T1 N m7_m8_1
;Threading cycles
thread_type = THREAD1 Y phase no_last_cut last_cut min_down_step spin_dir1
T_angle m7_m8_3
;Grooving cycles
groove_type = GR N m7_m8_4
;Wire Cut cycles
;Turning definitions
turning_cycle =YN
groove_cycle =YN
combined_cycles =N
finish_retreat =N
semi_finish_retreat = N
fanuc_cycle =Y
;Fourth axis
set_dir =N
;Wire Cut parameters
lower_guide_level = 0.0000, 0.0000
offset_group_name =
u_max = 100.0000, 3.9370
v_max = 100.0000, 3.9370
xy_abs =Y
uv_abs =N
endp
Файл постпроцессора: [[Link]]
;Integrex-e-410h
@init_post
global string tool_diameter_f spin_f
global numeric m_feed_flag
global string f_name
GLOBAL INTEGER open_file_count pre_part_home_number
global logical main_program flag_g69 flag_start_of_job rapid_flag
global string tool_diameter_f tool_number_f spin_f xend_f
global numeric q ss
global numeric save_spin_unit save_x save_z save_tool ch_tool
global logical spin_dir_us spin_dir_us1 ben2 mill_tool flag_feed flag_plane
global logical gen_end_of_file cartez_flag
global integer prev_tool_number
global numeric first_107 first_feed
global integer plane split_sub
global numeric rot_x rot_y send_x send_y rot_angle delta_angle
delta_angle = 180
; Non GPPL variables
num_user_procs = 15
line_labels = false ; Jump to N...
; GPPL variables
pre_processor = 'Itegrex-e-410H'
numeric_def_f = '5.3'
integer_def_f = '5.1(p)'
gcode_f = '2.0(p)'
mcode_f = '2.0(p)'
xpos_f = '5.3(*2)'
xend_f = xpos_f
ypos_f = '5.3'
zpos_f = '5.3'
feed_f = '4.3(p)'
tool_diameter_f = '5.3/1'
blknum_f = '5.0(p)'
tool_number_f = 'z2.0(n)'
blknum_gen = true
blknum_exist = true
blknum = 5
blknum_delta = 5
blknum_max = 3200000
gcode_space = TRUE
spin_f = '5.0(n)'
split_sub = 1
; trace "all":1
; trace "all":5
endp
;-------------------
@start_of_file
; before tools definition
local integer st_langth
st_langth = strlen( g_file_name)
f_name = tostr(program_number)
if split_sub <> 0
{nl,'!!open file=' f_name 'EIA!!'}
{nl}
endif
{nl, 'O'program_number, ' (', g_file_name, ')'}
if rotate_used then
gcode = 69
{nb, 'G'gcode}
endif
{nb,'G91 G28 X0 Y0 Z0'}
{nb,'G0 G90 G80 G40'}
{nb,'G69'}
{NB,'#100=0'}
{NB,'#101=0'}
main_program = true
pre_part_home_number = 0
endp
;-------------------
@start_program
; after tools definition
skipline = false
;ss = 6000
;{nb , 'G92 S'ss:'5.0(p)' }
;{nb,'M7'}
gen_end_of_file = true
endp
;-------------------
@end_program
xpos=xtool
zpos=ztool
if gen_end_of_file eq true
if !mill_tool
if save_spin_unit <> rpm
gcode = 97
{nb ' G'gcode}
endif
{nb,'G69'}
{nb, 'G28 G91 X0 Y0'}
{nb, 'G28 Z0'}
{nb,'G90'}
endif
if mill_tool
{nb,'G69'}
{nb, 'G28 G91 X0 Y0'}
{nb, 'G28 Z0'}
{nb,'M108'}
{nb,'M212'}
{nb,'G0 C0 B0'}
endif
{nb, 'G90'}
{nb, 'M30'}
endif
if split_sub <> 0
{nl,'!!close file=' f_name'_''.EIA!!'}
{nl,'!!copy file=' f_name'_''.EIA!!'}
endif
main_program = FALSE
endp
;-------------------
@end_of_file
endp
;-------------------
@relative_mode
gcode = 91
{nb, 'G'gcode, ' '}
skipline = FALSE
endp
;-------------------
@absolute_mode
gcode = 90
{nb, 'G'gcode, ' '}
skipline = true
endp
;-------------------
@machine_plane
if job_machine_type eq milling
if machine_plane eq XY
gcode = 17
endif
if machine_plane eq YZ
gcode = 19
endif
if machine_plane eq ZX
gcode = 18
endif
else
gcode = 18
endif
{nb, 'G'gcode}
endp
;-------------------
@call_proc
{nb, 'M98 P'(label+10000)}
;{[' ('message, ')']}
{[' ('upper(message), ')']}
endp
;-------------------
@call_prms
gcode = 65
{nb, 'G' gcode ' P'(label+10000) ' L'ncalls}
{[' ('upper(message), ')']}
endp
;-------------------
@proc
blknum = 10
if split_sub <> 0
{nl,'!!open file='(label+10000)'.EIA!!'}
endif
cartez_flag = true
rot_x = 99999999
rot_y = 99999999
{nl}
{nl, 'O'(label+10000)}
endp
;-------------------
@end_proc
{nb, 'M99'}
if split_sub <> 0
{nl,'!!close file='(label+10000)'.EIA!!'}
{nl,'!!copy file='(label+10000)'.EIA!!'}
endif
endp
;----------------
@loop
local integer var_num
var_num = loop_level + 20
{nb, '#', var_num, ' = 0'}
{nb, 'WHILE [#', var_num, ' LT ', loop_count, '] DO ', loop_level}
call @home_number
endp
;----------------
@end_loop
local integer var_num
var_num = loop_level + 20
{nb '#', var_num, ' = #', var_num, ' + 1'}
{nb 'END ', loop_level}
endp
;----------------
@def_tool
; {nb, '(G10 L12 P', (tool_number), ' D'(tool_offset*2), ')'}
;{nb,'(N0',tool_number '-T'(tool_number+0), ' - DIA ',TOOL_message ')'}
endp
;-------------------
@rapid_move
if job_machine_type eq milling
if machine_plane <> xy ;spatial format for xy plane
xpos_f = '5.3'
else
zpos_f = '5.3'
;spatial format for zx plane
xpos_f = '5.3'
endif
call @mill_rapid_move
xpos_f = '5.3' ;returne to normal formt
zpos_f = '5.3' ;returne to normal formt
else
xpos_f = '5.3(*2)'
gcode = 0
{nb, ['G'gcode]}
{[' X'xpos] , [' Z'zpos]}
save_x = xpos
save_z = zpos
endif
endp
;--------------------------------
@mill_rapid_move
{nb,''}
gcode = 0
if change(gcode) then
{'G'gcode}
else
{' '}
endif
if flag_start_of_job
{' X'xpos, ' Y'ypos }
{nb,' Z'zpos}
{' M8'}
flag_start_of_job = false
else
{[' X'xpos], [' Y'ypos] ,[' Z'zpos]}
endif
rapid_flag = true
endp
;-------------------
@move_4x
xpos_f = '5.3'
if next_command eq '@move4x_cartesian'
{nb,'G17 G90 C0',[' X'xpos],[' Z'zpos ] }
else
gcode = 0
{nb,['G'gcode] [' X'xpos] [' Z'zpos ] [' C['cpos '+#100]'] }
endif
endp
;-------------------
@line
if job_machine_type eq milling
if machine_plane <> xy ;spatial format for xy plane
xpos_f = '5.3'
else
zpos_f = '5.3'
xpos_f = '5.3'
endif
call @line_mill
xpos_f = '5.3(*2)' ;returne to normal formt
zpos_f = '5.3' ;returne to normal formt
else
xpos_f = '5.3(*2)'
gcode = 1
{nb, [' G'gcode]}
if ben2 and work_type eq ROUGH
if process_type eq LONG then
{' X'xpos}
else
{' Z'zpos}
endif
ben2 = false
else
{[' X'xpos], [' Z'zpos]}
endif
if prev_command eq '@turn_proc' then
change(feed) = TRUE
endif
{[' F'feed]}
endif
endp
;-------------------
@line_mill
gcode = 1
if change(gcode) then
{nb,'G'gcode}
else
{nb,' '}
endif
{[' X'xpos], [' Y'ypos],[' Z'zpos]}
if m_feed_flag eq 1
{' F'feed}
m_feed_flag = 0
else
if change(feed) eq true
{[' F'feed]}
else
endif
endif
endp
;-------------------
@line_4x
local numeric x1 z1
xpos_f = '5.3'
gcode = 1
if next_command eq '@start_cartesian'
{nb,'G17 G90'}
skipline = false
if use_feed eq 0
{nb,['G'gcode] [' X'xpos] [' Z'zpos ] [' C['cpos '+#100]']}
if flag_feed eq true
{' F'feed}
flag_feed = false
else
{[' F'feed]}
endif
else
{nb,['G'gcode] [' X'xpos] [' Z'zpos ] [' C['cpos '+#100]']}
if first_feed eq 0 or first_feed eq 1
first_feed = first_feed + 1
if flag_feed eq true
{' F'feed}
flag_feed = false
else
{[' F'feed]}
endif
endif
endif
endif
ch_tool = 0
if g107 eq 1
if first_107 eq 0
first_107 = 1
{nb,'G1 G18 W0 H0'}
{nb,'G107 C'(radial_diameter/2)}
endif
endif
endp
;-------------------
@arc
if job_machine_type eq milling
if machine_plane <> zx ;spatial format for xy plane
xpos_f = '5.3 '
else
zpos_f = '5.3(*2)' ;spatial format for zx plane
endif
call @arc_mill
xpos_f = '5.3' ;returne to normal formt
zpos_f = '5.3' ;returne to normal formt
else
xpos_f = '5.3(*2)'
if arc_direction eq CCW then
gcode = 3
else ; CW
gcode = 2
endif
{nb, ['G'gcode] ' X'xend ' Z'zend}
if arc_size >= 180 then
radius = -radius
endif
{' R'radius, [' F'feed]}
endif
endp
;-------------------
@arc_mill
;-- arc plane --
if change(arc_plane) then
if arc_plane eq XY then
gcode = 17
endif
if arc_plane eq YZ then
gcode = 18
endif
if arc_plane eq ZX then
gcode = 19
endif
{nb,'G'gcode, ' '}
endif
if arc_direction eq CCW then
gcode = 3
else ; CW
gcode = 2
endif
if change(gcode) then
{nb,'G'gcode}
else
{' '}
endif
if m_feed_flag eq 1
{' F'feed}
m_feed_flag = 0
else
{[' F'feed]}
endif
{[' X'xpos] [' Y'ypos] [' Z'zpos]}
if arc_size eq 360 then
if arc_plane eq XY then
{' I'xcenter_rel, ' J'ycenter_rel}
endif
if arc_plane eq YZ then
{' J'xcenter_rel, ' K'ycenter_rel}
endif
if arc_plane eq ZX then
{' K'xcenter_rel, ' I'ycenter_rel}
endif
else
if arc_size >= 180 then
radius = -radius
endif
{' R'radius}
endif
endp
;-------------------
@compensation
if side eq COMP_LEFT then
gcode = 41
{nb 'G'gcode ' ' }
endif
if side eq COMP_RIGHT then
gcode = 42
{nb 'G'gcode ' ' }
endif
if side eq COMP_OFF then
gcode = 40
{nb 'G'gcode ' ' }
endif
skipline = false
endp
;-------------------
@delay
gcode = 4
{nb 'G'gcode, ' P'delay_period:integer_def_f}
endp
;-------------------
@change_ref_point
{nb,'G10 L10 P'home_number ' U'(-(xhome)), ' V'(-(yhome)), ' W'zhome}
{nb 'G90'}
endp
;-------------------
@home_number
gcode = 53 + home_number
; {nb, 'G'gcode}
endp
;-------------------
@rotate
; Not exist in FANUC 6M
if rotate_cancel then
gcode = 69
{nb, 'G'gcode}
else
gcode = 68
{nb, 'G'gcode, ' X0 Y0 G91 R'angle}
{nb, 'G90'}
endif
endp
;-------------------
@fourth_axis
gcode = 0
IF rot_axis_type eq axis4_none
{nb,'M212'}
{nb, 'G'gcode, ' C('angle ' + #101)'}
{nb,'M210'}
ELSE
{NB,'#100 = ' angle }
endif
endp
;-------------------
@change_tool
local numeric xx rr
{nb ,'M09'}
if mill_tool eq false
{nb,'M205'}
endif
if !first_tool
{nb,'G69'}
{nb,'G91 G28 X0'}
{nb,'G90'}
endif
local logical save_blknum_gen
gcode = 54
{nb, 'G'gcode}
{nb,'(---------------------------------------)'}
{nl 'N0'tool_number ' ( TOOL ' tool_number ' DIAMETER ' tool_diameter}
{nb,'(---------------------------------------)'}
{nb,'M200'}
{nb,'G10.9 X0'}
{nb,'T'tool_number:'2/2.0(p)'' M06 (DIA ',TOOL_message ')'}
{nb,'M8'}
call @machine_plane
tool_direction = CW
job_machine_type = 0
call @start_tool_mill
call @my_tmatrix
mill_tool = true
prev_tool_number = tool_number
endp
; -----------------------
@turn_change_tool
local numeric tool_ang
{nb, ' '}
{nb,'G10.9 X1'}
{nb,'M212'}
{nb,'M202'}
blknum=true
local numeric xx rr
{nb ,'M09'}
if mill_tool eq false
{nb,'M5'}
endif
if !first_tool
{nb,'G69'}
{nb,'G91 G28 X0'}
{nb,'G90'}
endif
local logical save_blknum_gen
gcode = 53 + home_number
{nb, 'G'gcode}
{nb,'(---------------------------------------)'}
{nl 'N0'tool_number ' ( TOOL ' tool_number ' DIAMETER ' tool_diameter}
{nb,'(---------------------------------------)'}
{nb,'T'tool_number:'2/2.0(p)'' M06 (DIA ',TOOL_message ')'}
if tool_mode eq long
tool_ang = 90.0
else
tool_ang = 0.0
endif
{nb,'M107'}
{nb, 'G0 B'tool_ang ' Y0'}
{nb, ' M108'}
;{nb, call message}
job_machine_type = 1
call @start_tool
{nb,'M51'}
xpos = xnext
zpos = znext
gcode = 1
save_spin_unit = spin_unit
save_tool = tool_number
spin_dir_us = false
spin_dir_us1 = true
mill_tool = false
blknum = true
gcode = 43
{nb, 'G0 G'gcode ' P1' ' X'xpos ' Z'zpos}
mill_tool = false
prev_tool_number = tool_number
endp
;-------------------
@message
{nb, '(', message, ')'}
endp
;------------------
@turn_drill
local string g_code
gcode = 98
{nb, 'G'gcode, ' '}
if drill_type eq Peck then;(G83)
g_code = '83'
endif
if drill_type eq Tapping then;(G84)
g_code = '84'
endif
if drill_type eq G84_2 then;(G84.2)
g_code = '84.2'
endif
if drill_type eq F_Boring then;(G85)
g_code = '85'
endif
if drill_type eq G87 then;(G87)
g_code = '87'
endif
if drill_type eq G88 then;(G88)
g_code = '88'
endif
if drill_type eq G88_2 then;(G88.2)
g_code = '88.2'
endif
if drill_type eq G89 then;(G89)
g_code = '89'
endif
{'G',g_code, ' Z'drill_lower_z, ' R'drill_upper_z}
if drill_type eq peck or drill_type eq G87 then
{' Q'(down_step*1000)}
{' P'delay:integer_def_f}
{' L0'}
endif
if drill_type eq tapping or drill_type eq G88 or drill_type eq F_Boring or drill_type
eq G89 then
{' P'delay:integer_def_f}
endif
if drill_type eq G84_2 then
endif
if drill_type eq G88_2 then
endif
{' F'feed:feed_f}
endp
;-------------------
@mill_drill1
local numeric m
m=2
local string g_code
gcode = 98
{nb, 'G'gcode, ' '}
if drill_type eq Peck then;(G83)
g_code = '83'
endif
if drill_type eq Tapping then;(G84)
g_code = '84'
endif
if drill_type eq G84_2 then;(G84.2)
g_code = '84.2'
endif
if drill_type eq F_Boring then;(G85)
g_code = '85'
endif
if drill_type eq G87 then;(G87)
g_code = '87'
endif
if drill_type eq G88 then;(G88)
g_code = '88'
endif
if drill_type eq G88_2 then;(G88.2)
g_code = '88.2'
endif
if drill_type eq G89 then;(G89)
g_code = '89'
endif
{'G',g_code, ' Z'drill_lower_z, ' R'drill_upper_z}
if drill_type eq peck or drill_type eq G87 then
if down_step == 0
down_step = drill_depth
endif
{' Q'down_step}
{' P'delay:integer_def_f}
endif
if drill_type eq tapping or drill_type eq G88 or drill_type eq F_Boring or drill_type
eq G88 or drill_type eq G89 then
{' P'delay:integer_def_f}
endif
if drill_type eq G84_2 then
endif
if drill_type eq G88_2 then
endif
{' L0'}
{' F'feed:feed_f}
endp
;-------------------
@drill
call @mill_drill1
endp
;-------------------
@drill_point
{nb, ' ', [' X'xpos], [' Y'ypos], [' Z'zpos]}
endp
;-------------------
@drill4x_pnt
if first_drill
{nb,'M212'}
endif
{nb, ' ', [' X'xpos], [' Z'zpos] , [' C'cpos]}
endp
;-------------------
@mirror
if mirror_type eq MIRROR_OFF then
{nb, 'G50.1 X0 Y0'}
else
{nb, 'G51.1 '}
if mirror_type eq MIRROR_X then
{'X1 Y0'}
endif
if mirror_type eq MIRROR_Y then
{'X0 Y1'}
endif
if mirror_type eq MIRROR_XY then
{'X1 Y1'}
endif
endif
endp
;-------------------
@end_drill
; initalizition
gcode = 80
{nb, 'G'gcode}
endp
;-------------------
@halt_program
{' M0'}
endp
;--------------------
@round_comp
; NOP
endp
;--------------------
@start_of_job
skipline = false
{' ( 'job_name,' )'}
skipline= true
flag_start_of_job = true
endp
;--------------------
@end_of_job
endp
;--------------------
@assign_axis
endp
; =======================
; =======================
@call_simple_proc
active(message) = FALSE
active(parm1) = FALSE
active(parm2) = FALSE
active(parm3) = FALSE
proc_count =1
call @call_proc
endp
;-------------------
@start_tool_mill
if tool_direction eq CW then
mcode = 3
else ; CCW
mcode = 4
endif
{nb, 'S'spin:spin_f, ' M'mcode}
endp
;-------------------
@start_tool
local numeric save_spin
save_spin = spin
if back_spin eq false
if tool_direction eq CW then
mcode = 204
else ; CCW
mcode = 203
endif
else
if tool_direction eq CW then
mcode = 304
else ; CCW
mcode = 303
endif
endif
{nb,' S'spin:spin_f, ' M'mcode}
endp
;-------------------
@stop_tool
if back_spin eq false
{nb ' M205'}
else
{nb ' M5'}
endif
endp
;-------------------
@home_data2
local numeric ang_x
local numeric a c d new_x new_y
if change (rotate_angle_x)
if flag_g69 eq false
skipline=true
{nb, 'G69'}
{nb, 'M9'}
{nb, 'G28 G91 X0 Y0'}
{nb, 'G28 Z0'}
{nb, 'G90'}
flag_g69 = true
endif
endif
{nb,'T'tool_number}
if job_machine_type eq milling
{nb,'M212'}
{nb,'G0 C'rotate_angle_z }
{nb,'M210'}
else
{nb, 'M210'}
endif
{nb,'M108'}
{nb,'G0 B' (rotate_angle_y):'3.3'}
{nb,'M107'}
send_x = shift_x
send_y = shift_y
rot_angle = rotate_angle_z
call @Rorate_x_y
{NB, 'G68 X'rot_x:'5.3' ' Y'rot_y:'5.3' ' Z'shift_z:'5.3'}
{' I0 J1 K0 R'(rotate_angle_y):'3.3'}
call @start_tool_mill
{nb,'(================ end ===================)'}
flag_g69 = false
endp
;-------------------
@Rorate_x_y
local numeric local_rot_angl
rot_x = send_x * cos(rot_angle) - send_y * sin(rot_angle)
rot_y = send_x * sin(rot_angle) + send_y * cos(rot_angle)
endp
;-------------------
@turning
local numeric ww uu rr aa bb
local logical ben1
if semi_finish then
rough_offset_x = semi_offset_x
rough_offset_z = semi_offset_z
work_type = rough
if process_type eq long
if turning_mode <> internal
uu = save_x - first_pos_x
else
uu = first_pos_x - save_x
endif
down_step = (uu+10)
else
ww = save_z - first_pos_z
down_step = (ww+10)
endif
ben1 = true
endif
if work_type eq ROUGH then
if process_type eq LONG then
gcode =271
{nb, 'G'gcode}
{' U'down_step, ' R'(down_step/2) }
{nb, 'G'gcode ' P'start_line ' Q'end_line}
{' U'rough_offset_x ' W'rough_offset_z}
else
gcode = 272
{nb, 'G'gcode }
{' W'down_step, ' R'(down_step/2) }
{nb 'G'gcode ' P'start_line ' Q'end_line}
{' U'rough_offset_x ' W'rough_offset_z}
endif
if feed_unit eq css
{' F'feed }
else
{' F'feed:'5.0(p)' }
endif
ben2 = true
endif
if work_type eq COPY then
ww = save_z - first_pos_z
uu = save_x - first_pos_x
aa = (uu - rough_offset_x)
bb = (ww - rough_offset_z)
rr = sqrt(aa * aa + bb * bb)
gcode = 273
if ben1 eq false
num_down_steps = rr / down_step + 1
else
num_down_steps = 1
endif
{nb, 'G'gcode,' U'uu, ' W'ww, ' R'num_down_steps}
{nb, 'G'gcode ' P'start_line ' Q'end_line }
{' U'rough_offset_x ' W'rough_offset_z}
if feed_unit eq css
{' F'feed }
else
{' F'feed:'5.0(p)' }
endif
endif
if semi_finish then
gcode = 150
endif
if finish then
gcode = 151
endif
endp
;-------------------
@turn_proc
endp
;-------------------
@turn_endproc
endp
;-------------------
@end_job_procs
{nb, 'M99'}
endp
;-------------------
@m_feed_spin
call @start_tool_mill
endp
;-------------------
@feed_spin
if tool_number ne 99
{nb}
if feed_unit eq mm_min
feed_f = '5.0(p)'
{'G94'}
else ; CSS
{'G95'}
feed_f = '4.3(p)'
endif
if spin_unit eq rpm ; Mm/Sec
gcode = 97
{' G'gcode}
else
gcode = 96
{' G'gcode}
endif
if change(spin) then
{' S'spin}
endif
endif
endp
;-------------------
@thread
local string for for1 for2 for3 for4
local numeric taper_angle
for = '6.0(n*10000)'
for1 = '2/2.0(P)'
for2 = '2/2.0(P*10)'
for3 = '5.0(P*1000)'
for4 = '5.3'
taper_angle = (first_pos_x-last_pos_x)
if last_pos_x <> first_pos_x
if turning_mode <> internal
xpos = (last_pos_x + depth + safety )
else
xpos = (last_pos_x - depth - safety )
endif
gcode = 0
{nb,'G'gcode ' X'xpos }
endif
if lead_unit <> mm
lead = (25.4/lead)
endif
if spin_dir1 eq 1
tool_direction = cw
if spin_dir_us eq false
call @stop_tool
call @start_tool
endif
spin_dir_us = true
else
tool_direction = ccw
if spin_dir_us1 eq false
call @stop_tool
call @start_tool
spin_dir_us = false
endif
spin_dir_us1 = true
endif
if work_type eq multiple
gcode = 276
;tool_nose_engle = 0 60 29 55 30 80
{nb, 'G'gcode, ' P'no_last_cut:for1, phase:for2 ,T_angle:for1 ' Q'min_down_step:numeric_def_f
' R'last_cut:numeric_def_f}
{nb 'G'gcode ' X'last_pos_x:xpos_f ' Z'last_pos_z }
if taper_angle <> 0
{' R'taper_angle}
endif
{' P'depth:numeric_def_f ' Q'down_step:numeric_def_f ' F'lead}
else
gcode = 92
{nb ' G'gcode ' X'last_pos_x:xpos_f ' Z'last_pos_z}
if taper_angle <> 0
{' R'taper_angle}
endif
{' F'lead}
endif
endp
;-------------------
@groove
local string for for1 for2 for3 for4
local numeric d1 d2
for1 = '2/2.0(P)'
for2 = '2/2.0(P*10)'
for3 = '5.0(P*1000)'
for4 = '5.3(P)'
d1 = abs(side_step)
d2 = abs(down_step)
if process_type eq face
gcode = 274
{nb 'G'gcode, ' R'release_dist }
{nb 'G'gcode,' X'last_pos_x:xpos_f ' Z'last_pos_z ' P'd1 :numeric_def_f '
Q'd2 :numeric_def_f }
else
gcode = 275
{nb 'G'gcode, ' R'release_dist }
{nb 'G'gcode,' X'last_pos_x:xpos_f ' Z'last_pos_z ' P'd2:numeric_def_f '
Q'd1:numeric_def_f}
endif
{' F'feed }
endp
;-------------------
@turn_opt_parms
if tool_number ne 99
if job_type eq 'turn'
if m7_m8_1 eq 0
{nb,'M7'}
else
{nb,'M8'}
endif
endif
; if job_type eq 'drill'
; if m7_m8_2 eq 0
; {nb,'M7'}
; else
; {nb,'M8'}
; endif
; endif
if job_type eq 'thread'
if m7_m8_3 eq 0
{nb,'M7'}
else
{nb,'M8'}
endif
endif
if job_type eq 'groove'
if m7_m8_4 eq 0
{nb,'M7'}
else
{nb,'M8'}
endif
endif
endif
endp
;-------------------
@rotary_info
if rot_axis_type eq axis4_radial
plane = 19
flag_plane = true
machine_plane = YZ
endif
if rot_axis_type eq axis4_top
plane = 19
flag_plane = true
machine_plane = YZ
endif
if rot_axis_type eq axis4_face
plane = 17
flag_plane = true
machine_plane = XY
endif
endp
;-------------------
@chng_tool_cnext
endp
;-------------------
@init_cpos
endp
;-------------------
@move4x_dir
endp
;-------------------
@line4x_dir
endp
;-------------------
@move4x_polar
endp
;-------------------
@line4x_polar
endp
;-------------------
@arc4x_polar
endp
;-------------------
@move4x_cartesian
{nb}
gcode = 0
if change(gcode) then
{'G'gcode}
else
{' '}
endif
{[' X'xpos], [' C'cpos],[' Z' zpos]}
endp
;-------------------
@start_cartesian
{nb,'G12.1'}
{nb,'G0 C0',[' X'xpos] }
endp
;-------------------
@end_cartesian
{nb,'G13.1'}
endp
;-------------------
@line4x_cartesian
{nb}
gcode = 1
if change(gcode) then
{'G'gcode}
else
{' '}
endif
{[' X'xpos], [' C'cpos],[' Z'zpos],[' F'feed]}
endp
;-------------------
@arc4x_cartesian
{nb}
if arc_direction eq CCW then
gcode = 3
else ; CW
gcode = 2
endif
if change(gcode) then
{'G'gcode}
else
{' '}
endif
{[' X'xpos] [' C'cpos] }
if arc_size eq 360 then
{' I'xcenter_rel, ' K'ycenter_rel}
else
if arc_size >= 180 then
radius = -radius
endif
{' R'radius}
endif
{[' F'feed]}
endp
;-------------------
@drill4x_polar
endp
;-------------------
@drill4x_cartesian
endp
;-------------------
@tmatrix
call @my_tmatrix
endp
;-------------------
@my_tmatrix
if job_machine_type eq milling
if main_program == true
if part_home_number <> pre_part_home_number
{nb,'(========== CHANGE HOME =========)'}
{nb,'( HOME = ' prp_number ' POSITION = 'position }
if prp_number eq 1
{' B0 C'rotate_angle_z ' ) ' }
{NB,'#101='rotate_angle_z}
{nb,'(================================)'}
{nb,' G91 G28 X0'}
{nb,'G90'}
if rot_axis_type eq axis4_none
{nb,'G69'}
{nb,'M108'}
{nb,'M212'}
{nb,'G0 B0. C'rotate_angle_z ' ( FACE XYZ OPERATION )'}
{nb,'M107'}
{nb,'M210'}
else
{nb,'G69'}
{nb,'M108'}
{nb,'M212'}
{nb,'G0 B0. C'rotate_angle_z ' Y0'' ( FACE XZC OPERATION )'}
{nb,'M107'}
endif
endif
if prp_number eq 2
{' B90 C'rotate_angle_x ' ) ' }
{NB,'#101='rotate_angle_z}
{nb,'(================================)'}
{nb,' G91 G28 X0'}
{nb,'G90'}
if rot_axis_type eq axis4_none
{nb,'G69'}
{nb,'M108'}
{nb,'M212'}
{nb,'G0 B90. C'rotate_angle_x ' ( SIDE XYZ OPERATION )'}
{nb,'M107'}
{nb,'M210'}
zpos = znext
ypos = ynext
change(xpos) = false
call @rapid_move
change(ypos) = false
change(zpos) = false
xpos = xnext
gcode = 43
{nb,'G'gcode}
skipline = false
call @rapid_move
else
{nb,'G69'}
{nb,'M108'}
{nb,'G0 B90. C'rotate_angle_x ' Y0' ' ( SIDE XZC OPERATION)'}
{nb,'M107'}
change(ypos) = false
change(zpos) = false
xpos = xnext
gcode = 43
{nb,'G'gcode}
skipline = false
call @rapid_move
endif
endif
if prp_number eq 3
{' B'rotate_angle_y ' C'rotate_angle_z ' PLANE ROTATION )'}
{NB,'#101='rotate_angle_z}
{nb,'(================================)'}
{nb,' G91 G28 X0'}
{nb,'G90'}
call @home_data2
endif
{nb,'G94'}
zpos = xnext
change(ypos) = false
change(xpos) = false
zpos = (tool_start_plane + 50)
gcode = 43
{nb,'G'gcode}
skipline = false
call @rapid_move
pre_part_home_number = part_home_number
endif
endif
endif
endp
P.S.
При распространении перевода ссылка на автора перевода (т.е. на
SENNIK53 ) обязательна.
SENNIK53