Перейти к публикации

постпроцессоры SolidCam


Рекомендованные сообщения

Даите пожалуйсто кто нить какоинбудь пост для токарнофрезерного стоика фанук. (Самый любой, похожий и т.д.) Софт Solid CAM.

Ссылка на сообщение
Поделиться на других сайтах
  • 3 недели спустя...


  • 1 месяц спустя...

Здравствуйте, столкнулся с проблемой (впервые работаю в CAD и CAM) что он просит выбрать постпроцессор для станка. Я в этом не разбираюсь, и прошу помощи. Подскажите что делать, станок Esfero 3D-014. Использовать ли стандартный gMilling 3x или нужно писать постпроцессор?

Ссылка на сообщение
Поделиться на других сайтах
  • 2 недели спустя...
  • 1 месяц спустя...
  • 2 года спустя...

Здравствуйте, коллеги помогите с постом для станка Doosan Lynx 2100 LMB стойка Fanuc 0i plus. поделитесь пожалуйста рабочим постом пожалуйста .

Ссылка на сообщение
Поделиться на других сайтах
  • SHARit изменил заголовок на постпроцессоры SolidCam
  • 2 недели спустя...

Всем доброго времени суток, есть тут кто может помочь с постом на окуму OSP-P200M, все станки на фануках а этот свежий завезли, заранее спасибо

 

Только что, serghei133 сказал:

Всем доброго времени суток, есть тут кто может помочь с постом на окуму OSP-P200M, все станки на фануках а этот свежий завезли, заранее спасибо

 

Пост нужен для солида

 

 

 

Ссылка на сообщение
Поделиться на других сайтах
  • 3 года спустя...
UnPinned posts

Добрый день, поделитесь пожалуйста постпроцессором для токарно-фрезерного станка Hwacheon cutex 180 с осями X Y Z C...стойка Fanuc 0i-TF...Solidcam 2016

почта: solexcnc@gmail.com

Заранее спасибо!

 

hqdefault.jpg

Изменено пользователем solexcnc
добавил фото станка
Ссылка на сообщение
Поделиться на других сайтах

Обновленная версия постпроцессора на фрезерный 3-х осевой станок HAAS.

 

v.15

 

Что нового:

 

+ Цикл жесткого нарезания резьбы G84, поддерживает функцию ускоренного выкручивания метчика - J.

 

N463 G98  (Set Surface Retract Z axes after cycle)
N465 G95  (Set Feed Mode: Feed Per Rotate)
N467 G84 Z-11. R2. J3 F0.7 L0 (Rigid Taping)
N469 X60. Y-57.
N471 X120. Y-57.
N473 G94  (Set Feed Mode: Feed Per Minute)
N475 G80

 

 

 

gMill_Haas_3x_eval_v15_RW.rar

Ссылка на сообщение
Поделиться на других сайтах

 Колеги у кого есть пост под  стойку Heidenhain millplus pilot1290. киньте на почту ozhelevskiy01@gmail.com буду очень благодарен.

Ссылка на сообщение
Поделиться на других сайтах
В 19.07.2019 в 17:15, MobSent сказал:

Добрый день. Поделитесь, пожалуйста, постпроцессором с переводом gMilling_3x. Думаю вряд ли у кого найдется под Sinumerik 808D. MobSent@list.ru

Скрытый текст

; General Post Processor
; Machine : Haas_VF3SS
; Type : 3-axis Vertical
; SubRoutines : No
; Comp Type : Wear
; Customer : n/a
; Rev 0.1 :01.02.2009 Anthony : Created new General Post Processor for Haas_VF3SS_3x
; Rev 0.2 :02.20.2009 Anthony : Release for Zac to start using
; Rev 0.3 :03.05.2009 Anthony : Fixed Feed not outputing for NonSyncRapidMoves between tool changes
; Rev 0.4 :09.18.2009 Anthony : Updated to SC2009 New Tool Coolant options
; Rev 0.41:10.06.2009 Anthony : Corrected Skipline problem when not using coolant (zpos after tool change)
; Rev 0.5 :10.28.2009 Anthony : Updated to SC2009 (New Modality)
; Rev 0.6 :11.03.2009 Anthony : Converted gMilling to add support Okuma
; : Added parameters for drill cycles (G71, G84 with G95/G94)
; : Added parameter for Height Comp (Okuma G54 = Fanuc G43)
; Rev 0.61:03.10.2010 Anthony : Added fix for cWo changebit problem, also tightened the arc_max_angle in MAC
; Rev 0.69:03.25.2010 Anthony : Added ~11 gMilling UserOptions from Russ and Anthony
; Rev 0.70:03.29.2010 Anthony : Releasing gMilling Rev 0.70
; Rev 0.71:04.29.2010 Anthony : Added iWorkoffsetmode = 0 to disable Work Offset output
; : Fixed possible bug with 3D Drilling, Z clearance move was being output between drill cycels without G80
; ---Список задач-----
;
@init_post
global string sUS_date sUS_time sUsrmsg sHomestr sHomestrbegin sHomestrtc sHomestrend sHomestrstpdiff sHomestrstpsame sHomeline
global string sCamfilepath sSubspath cWo cPb cPe cG84 cG84p cCycs cHomep cTCcodep cTCcodes fG84spin cDr cCb cCe cDrZp cDrZs
global string cDrCys cDrPts cG84endl cPn cHoffset cDoffset
global logical bStartFile bTlchg bSkipxyrapid bWorkoffsettc
global logical bSubs bTlseperation bTcseperation bDateTimeOutput bStopM00difftool bToolPreselect bToolChangeAtEnd
global logical bFromendprogram bFrombeginchangetool bFromendchangetool bFromendoffile bMultiplefixtures
global logical bSafetyprep bSyncdrapid bFeedoutput bNnumtc
global logical bOptstpbegin bOptstptc bOptstpend bUseprognum bUseprogname bCoolspinaftertc bCoolAfterHeightComp
global logical bCoolExist bCoolofftc bSpinofftc bCooloffend bSpinoffend bG84spin bTest bHeightComp bHeightCompOffset
global logical bHeightCompZsameLine bTCSplit bSpinOnlyUseS bDiameterCompOutputD bCompTypeOutput bPostRevOutput bUseFileName
global logical bOutputToolList bOutputToolMessage bOutputUserMessages bSimpleformat
global integer iMplane iAbsincmode iWorkoffset iHeightcomp iStopmode iMotionmode
global integer iDiametercomp iDrillmode iTcnumber iNumpecks iPworkoffset iSpindleDir
global integer iSlength_g_file_name iSlength_full_g_file_name iSlengthcampartpath iDiameteroffset iArcmode iG84feed
global integer iHomingmode iWorkOffsetmode iProgendmode iG187_P_gpp iSplit_ProgName_Num iNumSeparationLines iOperationMessage
global integer iCoolantM1 iCoolantM2 iCoolantM3 iCoolantM4 iCoolantM5 iCoolantM6 iCoolantM7 iCoolantM8
global integer iCoolantM1ON iCoolantM2ON iCoolantM3ON iCoolantM4ON iCoolantM5ON iCoolantM6ON iCoolantM7ON iCoolantM8ON
global integer iCoolantM1OFF iCoolantM2OFF iCoolantM3OFF iCoolantM4OFF iCoolantM5OFF iCoolantM6OFF iCoolantM7OFF iCoolantM8OFF
global numeric nTcXnext nTcYnext nTcZnext nTcCnext nCorrectedpeck nRapidfeed nG187_E_gpp nHeightCompcode nG84feed
; Non GPPL variables
num_user_procs = 1
remove_blanks = FALSE
line_labels = FALSE ; Jump to N...
clear_change_after_gen = 1
; GPPL variables
numeric_def_f = '5.3'
integer_def_f = '5.0(p)'
gcode_f = '2/2.0(p)'
mcode_f = '2/2.0(p)'
xpos_f = '5.3'
ypos_f = '5.3'
zpos_f = '5.3'
feed_f = '4.3'
blknum_f = '5.0(p)'
blknum_gen = true
call @usr_ip_useroptions
call @usr_ip_postwriteroptions
endp
@usr_ip_useroptions
; Handle setting of options -- For end users & post writers
;--------- Tool Change ---------
bToolPreselect = true ;0.70: True = Инструмент cледующего блока подготовлен для смены (вертикальный мазазин)
bTCSplit = false ;0.70: True = Вывод «M06» и «T1» в отдельных строках (установите «M06» в суффикс в cTCcodep, а не в префикс cTCcodes)
cTCcodep = '' ;0.70: Устанавливает код(ы) в префикс, используемые для смены инструмента (т.е. «M06» «T1»)
cTCcodes = 'M06' ;0.70: Устанавливает код(ы) в суффикс, используемые для смены инструмента (т.е. «T1» «M06»)
bHeightComp = true ;0.70: True = Вывод кода компенсации высоты (т.е. G43)
bHeightCompOffset = true ;0.70: True = Вывод буквенного символа компенсации высоты (т.е. H1)
nHeightCompcode = 43 ;0.70: Устанавливает код компенсации высоты (т.е. 43,56)
cHoffset = 'H' ;0.70: Устанавливает символ(ы) для смещения высоты (т.е. H)
bHeightCompZsameLine = true ;0.70: True = Вывод Z в одной строке с компенсацией высоты (т.е. G43 H1 Z1.0)
bToolChangeAtEnd = true ;0.70: True = Вызов первого инструмента в конце программы
bOutputToolMessage = true ;0.70: True = Вывод сообщения об инструменте при смене инструмента
;--------- Program Header & End ---------
bUseprognum = true ;0.70: True = Вывод номера программы
bUseprogname = true ;0.70: True = Вывод имени программы
iSplit_ProgName_Num = 0 ;0.70: Устанавливает когда Имя и Номер программы находятся в одной или отдельных строках (0 = Нет, 1 = Имя-> Номер, 2 = Номер-> Имя)
bUseFileName = false ;0.70: True = Вывод имя файла УП в начале программы
cPn = 'O' ;0.70: Устанавливает символ(ы) перед номером программы (т.е. 'O', ':' или ничего)
iProgendmode = 1 ;0.70: Устанавливает код завершения программы (1 = M30,2 = M2)
cPb = '%' ;0.70: Устанавливает символ(ы), используемые в начала файла (т.е.%)
cPe = '%' ;0.70: Устанавливает символ(ы), используемые в конце файла (т.е.%)
bCompTypeOutput = false ;0.70: True = Вывод сообщения о типе коррекции на инструмент в виде (т.е. (КОМПЕНСАЦИЯ-ИЗНОС)
bPostRevOutput = false ;0.70: True = Вывод сообщения о доработках поста в виде (т.е. (REV-0.61))
bDateTimeOutput = true ;0.70: True = Дата и время вывода
cCb = '(' ;0.70: Устанавливает начальные символ(ы) для комментариев
cCe = ')' ;0.70: Устанавливает конечные символы для комментариев
bOutputToolList = true ;0.70: True = Вывод списока инструмента в начале программы
;--------- Motion (Lines, Arc, etc) ---------
bSyncdrapid = true ;0.70: True = Быстрое движение машинной синхронизации (прямая передача)
nRapidfeed = 10000. ;0.70: Установите значение для максимальной подачи в G1 (используется с несинхронными быстрыми движениями)
iArcmode = 1 ;0.70: Устанавливает режим вывода дуги (1 = AbsIJK, 2 = IncIJK, 3 = R 360AbsIJK, 4 = R 360IncIJK)
;--------- Work Offset ---------
cWo = 'G' ;0.70: Устанавливает символ(ы) используемые для рабочего смещения (т.е G, E, G54.1 P)
iWorkOffsetmode = 1 ;0.70: Устанавливает режим используемый для рабочего смещения (0 = OFF, 1 = G54, 2 = E1, 3 = G54.1 P1)
bWorkoffsettc = true ;0.70: True = Принудительный вывод рабочего смещения при каждой смене инструмента
;--------- Drilling ---------
cDr = 'G98 ' ;0.70: Устанавливает символ(ы), используемые в начале цикла сверления (т.е. G98 или ничего ' ')
cG84 = 'G84' ;0.70: Устанавливает используемый символ(ы) цикла сверления (т.е. G84, G84.1)
cG84p = '' ;0.70: Устанавливает строку подготовки используемую для нарезания резьбы G84 (т.е. G84.2) ** Настройка FADAL
bG84spin = false ;0.70: True = Вывод об/мин во время циклов нарезания резьбы G84
fG84spin = '5.1' ;0.70: Устанавливает форматирование для скорости вращения используемой для циклов нарезания резьбы G84 («5.1» = десятичная точка 1 знак)
iG84feed = 1 ;0.70: Устанавливает режим подачи для нарезания резьбы G84, когда (1 = скорость подачи 2 = шаг)
cG84endl = '' ;0.70: Устанавливает строку после G80 для цикла G84 нарезание резьбы метчиком (т. е. G94, или ничего)
cCycs = 'L0 ' ;0.70: Устанавливает код подавления для игнорирования циклов сверления (т.е. L0)
cDrZp = '' ;0.70: Устанавливает код(ы) префикса, используемый для установки позиции отвода для растачивания (то есть G71 или ничего)
cDrZs = '' ;0.70: Устанавливает суффикс код(ы) используемый(ые) для установки позиции отвода для растачивания (т.е. G71 или ничего)
cDrCys = '' ;0.70: Устанавливает суффикс код(ы) используемые в строке цикла сверления (т.е. M53 или ничего)
cDrPts = '' ;0.70: Устанавливает суффикс код(ы) используемые в строке цикла сверления (т.е. M53 или ничего)
;--------- Coolant and Spindle ---------
bCoolExist = true ;0.70: True = Вывод кодов охлаждающей жидкости (охлаждающая жидкость, воздух, туман и т.д.)
bCoolofftc = true ;0.70: True = Вывод кода отключения охлаждающей жидкости между сменами инструмента
bSpinofftc = true ;0.70: True = Вывод кода выключения шпинделя между сменами инструмента
bCooloffend = true ;0.70: True = Вывод кода отключения охлаждающей жидкости в конце программы
bSpinoffend = true ;0.70: True = Вывод кода выключения шпинделя в конце программы
bCoolspinaftertc = false ;0.70: True = Вывод кода включения охлаждающей жидкости и шпинделя непосредственно после смены инструмента
bCoolAfterHeightComp = true ;0.70: True = Вывод кода включения охлаждающей жидкости на отдельной строке, после G43 H1 Z1.0.
iCoolantM1ON = 8 ;0.70: Code : Охлаждающая жидкость включена
iCoolantM1OFF = 9 ;0.70: Code : Охлаждающая жидкость выключена
iCoolantM2ON = 8 ;0.70: Code : Охлаждение туманом включено
iCoolantM2OFF = 9 ;0.70: Code : Охлаждение туманом выключено
iCoolantM3ON = 8 ;0.70: Code : Охлаждающая жидкость высокого давления включена
iCoolantM3OFF = 9 ;0.70: Code : Охлаждающая жидкость высокого давления выключена
iCoolantM4ON = 8 ;0.70: Code : Охлаждающая жидкость низкого давления включена
iCoolantM4OFF = 9 ;0.70: Code : Охлаждающая жидкость низкого давления выключена
iCoolantM5ON = 88 ;0.70: Code : Охлаждающая жидкость высокого давления через инструмент включена
iCoolantM5OFF = 89 ;0.70: Code : Охлаждающая жидкость высокого давления через инструмент выключена
iCoolantM6ON = 8 ;0.70: Code : Охлаждающая жидкость низкого давления через инструмент включена
iCoolantM6OFF = 9 ;0.70: Code : Охлаждающая жидкость низкого давления через инструмент выключена
iCoolantM7ON = 83 ;0.70: Code : Охлаждение воздухом включено
iCoolantM7OFF = 84 ;0.70: Code : Охлаждение воздухом выключено
iCoolantM8ON = 8 ;0.70: Code : Минимальное количество смазки включено
iCoolantM8OFF = 9 ;0.70: Code : Минимальное количество смазки выключено
bSpinOnlyUseS = false ;0.70: True = Отключение вывода кода M3 / M4, используется только S (т.е. "S1000" вместо "S1000 M3")
;--------- Block/Line Numbering ---------
bNnumtc = false ;0.70: True = Упорядоченный вывод номеров инструмента (т.е. N1,N2,N3)
blknum_exist = true ;0.70: True = Вывод номера строки
blknum = 1 ;0.70: Устанавливает номер стартовой строки
blknum_delta = 1 ;0.70: Устанавливает дельту для номеров строк
blknum_max = 3200000 ;0.70: Устанавливает максимальное значение для номеров строк
;--------- Cutter Compensation ---------
bDiameterCompOutputD = true ;0.70: True = Вывод числовое значение D при включении коррекции на режущий инструмент (т.е. G41 D1)
;--------- Optional Stops (M01) ---------
bOptstpbegin = false ;0.70: True = Вывод опциональной останновки в начале программы (M01)
bOptstptc = true ;0.70: True = Вывод опциональной останновки между сменой инструмента
bOptstpend = false ;0.70: True = Вывод опциональной останновки в конце программы
;--------- Gcode Separation (Visual setting) ---------
bTlseperation = true ;0.70: True = Разделяет список инструмента пустой строкой
bTcseperation = true ;0.70: True = Разделяет список инструмента пустой строкой
iNumSeparationLines = 2 ;0.70: Количество пустых строк при использовании разделения списка инструмента
;--------- Misc. Options ---------
iOperationMessage = 2 ;0.70: Вывод сообщения операции (0 = выключено, 1 = длинный стиль, 2 = короткий стиль)
bOutputUserMessages = true ;0.70: true = Вывод пользовательского сообщения (поле сообщения находится на вкладке «Операция - Разные параметры»)
bSimpleformat = false ;0.70: true = Простой G / M формат кода для специальных контроллеров (WinCNC, Millpwr и т.д.)
;--------- Возврат в ноль по осям ---------
;--------- Инструкции и пояснения определения ниже ---------
; Format: [x][integer:][Prepstr :][AxisStr1 ;][AxisStrN]
; x = Putting 'x' as the first character means "Homing Mode" must be set for each line (i.e. 'x2:G00 :Z0 ;3:G00 :X-15.0 ' )
; integer = Homing Output Mode (1=G28, 2=G28 G91, 3=G53 Non-Modal, 4=G53 Modal, 5=G30, 6=G30 G91, 7= any string)
; PrepStr = Sets the code(s) for the begging of line used for Homing Axis (i.e. 'G00')
; AxisStr = Homing Axis Definition (i.e. 'Z0.0', 'H0.0 W0.')
; Note: You can define up to 49 "Homing Lines" seperated by ";"
; Note: Only use ";" if using more then 1 "Homing Line"
; Note: Define string as empty '' to ignore Specific Homing Definition
sHomestrbegin = '' ; Программа начинается с выхода в референт
sHomestrtc = '2:Z0. Y0.' ; Выход в референт в конце блока перед сменой инструмента
sHomestrend = '2:Z0. Y0.' ; Выход в референт в конце программы
sHomestrstpsame = '2:Z0. ' ; M00 тот же самый инструмент возвращается в исходное положение
sHomestrstpdiff = '2:Z0. ' ; M00 другой инструмент возвращается в исходное положение
endp
@usr_ip_postwriteroptions
; Обращение к настройкам для продвинутых пользователей
bSubs = false ;True = использование подпрограмм, False = не использование подпрограмм
; ------ Tracing functions -----
; trace "all":5 ; Mode 1 (standard)
; trace "all":1 ; Mode 2 (standard)
; trace "@rapid_move, @move_4x, @move_5x":5 ; Mode 3
; trace "@line, @arc, @line_4X, @line_5x, @compensation":5 ; Mode 4
; trace "@drill, @drill_point, @drill4x_pnt, @end_drill":5 ; Mode 5
; trace "@tool_path_info":5 ; Mode 6
; trace "@start_of_job, @end_of_job, @tmatrix":5 ; Mode 7
; trace "@change_tool, @turn_change_tool, @def_tool, @def_turn_tool":5 ; Mode 8
; trace "@feed_spin, @m_feed_spin":5 ; Mode 9
; trace "@rotate, @rotary_info":5 ; Mode 10
endp
;-------------------
@start_of_file
; Обработка выходных данных в начале файла
; Это первая процедура, которая называется (lie...@init_post на самом деле является первой)
if iNumber_of_Fixtures > 1
bMultiplefixtures = true
blknum_exist = false
endif
call @usr_campart_path
call @usr_init_gmstates
call @usr_sof_character
call @usr_sof_progname
call @usr_sof_commentsbeforecodes
call @usr_sof_gmcodes
call @usr_sof_commentsaftercodes
bStartFile = true
endp
@usr_sof_character
; Handle start of file character
{,cPb}
endp
@usr_sof_progname
; Handle Program Number and/or Name
if iSplit_ProgName_Num and bUseprognum and bUseprogname
if iSplit_ProgName_Num == 1
{nl, cCb, part_name,cCe}
{nl, cPn, program_number}
else
{nl, cPn, program_number}
{nl, cCb, part_name,cCe}
endif
else
if bUseprognum
{nl, cPn,program_number}
if bUseprogname
{' 'cCb, part_name,cCe}
endif
else
if bUseprogname
{nl, cCb, part_name,cCe}
endif
endif
endif
if bUseFileName
{nl, cCb, g_file_name,cCe}
endif
endp
@usr_sof_commentsbeforecodes
; Handle HardCoded or PartControlled comments (Before G/M codes)
if bCompTypeOutput
; {nb,cCb'COMPENSATION-WEAR'cCe}
endif
if bPostRevOutput
; {nb,cCb'REV-0.70'cCe}
endif
call @usr_US_date
call @usr_US_time
if bDateTimeOutput
{nb,cCb,sUS_date'-'sUS_time,cCe}
endif
endp
@usr_sof_gmcodes
; Handle HardCoded or PartControlled G/M codes
endp
@usr_sof_commentsaftercodes
; Handle HardCoded or UserDefined comments (After G/M codes)
if bTlseperation and bOutputToolList
local integer i ii
i = 0
if iNumSeparationLines == 0
ii = 1
else
ii = iNumSeparationLines
endif
while i < ii
{nl}
i = i + 1
endw
endif
endp
@usr_US_date
; Converts Europe Date format to US format
Local Integer iInt1
iInt1 = instr(date,'-')
sUS_date = substr(date,(iInt1+1),3) + '-' + substr(date,1,(iInt1-1)) + '-' + right(date,4)
endp
@usr_US_time
; Converts Military time to 12hr format
Local Integer iInt1 iHr_Mil_int iHour
Local String iHr_Mil iTm_of_day
iInt1 = instr(time,':')
iHr_Mil = left(time,(iInt1-1))
iHr_Mil_int = tonum(iHr_Mil)
if iHr_Mil_int < 12
if iHr_Mil_int < 1
iHour = 12
else
iHour = iHr_Mil_int
endif
iTm_of_day = 'AM'
else
if iHr_Mil_int < 13
iHour = 12
else
iHour = iHr_Mil_int - 12
endif
iTm_of_day = 'PM'
endif
sUS_time = tostr(iHour:'5.0(p)') + substr(time,iInt1,8) + iTm_of_day
endp
@usr_init_gmstates
; Handle initializing G/M codes for correct modality from beginning of file
iMplane = 9999
iAbsincmode = 9999
iWorkoffset = 9999
iHeightcomp = 9999
iMotionmode = 9999
iDiametercomp = 9999
iDiameteroffset = 9999
iDrillmode = 9999
iTcnumber = 1
iCoolantM1 = iCoolantM1OFF
iCoolantM2 = iCoolantM2OFF
iCoolantM3 = iCoolantM3OFF
iCoolantM4 = iCoolantM4OFF
iCoolantM5 = iCoolantM5OFF
iCoolantM6 = iCoolantM6OFF
iCoolantM7 = iCoolantM7OFF
iCoolantM8 = iCoolantM8OFF
iG187_P_gpp = 2
nG187_E_gpp = 0
endp
;-------------------
@def_tool
; Handle Tool List Output at top of program
; Use bTlchg to use different message for tool_change
if bOutputToolList
if tool_message == '' then
{nb, cCb'T'tool_number'-'tool_user_type' D='(tool_offset*2)' R='(corner_radius)' L='(tool_length) tool_work_time cCe }
else
{nb, cCb'T'tool_number,'-', tool_message,' R='(corner_radius), ' L='(tool_length), tool_work_time,cCe }
if msg_mill_tool1 ne ''
{nb,cCb'---' msg_mill_tool1,cCe}
endif
if msg_mill_tool2 ne ''
{nb,cCb'---' msg_mill_tool2,cCe}
endif
if msg_mill_tool3 ne ''
{nb,cCb'---' msg_mill_tool3,cCe}
endif
if msg_mill_tool4 ne ''
{nb,cCb'---' msg_mill_tool4,cCe}
endif
if msg_mill_tool5 ne ''
{nb,cCb'---' msg_mill_tool5,cCe}
endif
endif
endif
if next_command ne '@def_tool' and bTlchg eq false
if bTlseperation and bOutputToolList
local integer i ii
i = 0
if iNumSeparationLines == 0
ii = 1
else
ii = iNumSeparationLines
endif
while i < ii
{nl}
i = i + 1
endw
endif
if bOptstpbegin
call @usr_optionalstop
endif
if bNnumtc
{nl,'N'iTcnumber' '}
else
{nb}
endif
endif
endp
;-------------------
@start_program
; Handle any safety G/M codes for top of program
if !bSimpleformat
;call @usr_ct_before_firsttool
;call @usr_abs_inc_output
;call @usr_mp_output
side = COMP_OFF
;call @compensation
;call @usr_compensation_output
skipline = false
;call @end_drill
endif
if sHomestrbegin ne ''
sHomestr = sHomestrbegin
call @usr_prep_home_axis
endif
endp
;-------------------
@end_program
; Handle output for end of program
if bMultiplefixtures eq True
bFromendprogram = True
call @Multiple_Fixtures
endif
if bCooloffend and bCoolExist
iCoolantM1 = iCoolantM1OFF
iCoolantM2 = iCoolantM2OFF
iCoolantM3 = iCoolantM3OFF
iCoolantM4 = iCoolantM4OFF
iCoolantM5 = iCoolantM5OFF
iCoolantM6 = iCoolantM6OFF
iCoolantM7 = iCoolantM7OFF
iCoolantM8 = iCoolantM8OFF
call @usr_coolant_output
endif
if bSpinoffend
iSpindleDir = 5
{nb}
call @usr_spindle_mcode_output
endif
if sHomestrend ne ''
sHomestr = sHomestrend
call @usr_prep_home_axis
endif
if change(iAbsincmode)
{nb}
call @usr_abs_inc_output
endif
if change(iWorkoffset)
;{nb}
;call @usr_homenumber_output
endif
if bOptstpend
call @usr_optionalstop
endif
if bToolChangeAtEnd
;{nb,cTCcodep'T'next_tool_number' 'cTCcodes}
endif
if iProgendmode eq 1
{nb, 'M30 '}
endif
if iProgendmode eq 2
{nb, 'M2 '}
endif
endp
;-------------------
@end_of_file
; Handle end of file character
if cPe ne ''
{nl,cPe}
endif
if bMultiplefixtures eq True
bFromendoffile = True
call @Multiple_Fixtures
endif
endp
;-------------------
@relative_mode
; Handle setting of IncrementalMode Gcode
iAbsincmode = 91
if bSimpleformat
if change(iAbsincmode)
{nb}
call @usr_abs_inc_output
endif
endif
endp
@absolute_mode
; Handle setting of AbsoluteMode Gcode
iAbsincmode = 90
if bSimpleformat
if change(iAbsincmode)
{nb}
call @usr_abs_inc_output
endif
endif
endp
@usr_abs_inc_output
; Handle output of Absolute/Incremental Mode Gcode
{['G'iAbsincmode, ' ']}
endp
;-------------------
@machine_plane
; Handle setting of MachinePlane Gcode
; We not use this procedure to output code
; We create our own procedure for this so that we may Sync with arc_zx_yz
if machine_plane eq XY
iMplane = 17
endif
if machine_plane eq ZX
iMplane = 18
endif
if machine_plane eq YZ
iMplane = 19
endif
if bSimpleformat
if change(iMplane)
{nb}
call @usr_mp_output
endif
endif
endp
@usr_mp_output
; Handle output of MachinePlane Gcode
; Use bStartFile variable to ignore this output at beginning of file
{['G'iMplane' ']}
endp
;-------------------
@home_number
; Handle setting WorkOffset Gcode
if iWorkOffset_Method eq 0
if iWorkOffsetmode eq 1
if home_number <= 6
iWorkoffset = 53 + home_number
else
iWorkoffset = 103 + home_number
endif
endif
if iWorkOffsetmode eq 2 or iWorkOffsetmode eq 3
iWorkoffset = home_number
endif
else
iWorkoffset = tonum(home_user_name)
endif
if iWorkOffsetmode eq 0
change(iWorkOffset) = false
endif
if bSimpleformat
if change(iWorkoffset)
{nb}
call @usr_homenumber_output
endif
endif
endp
@usr_homenumber_output
; Handle output WorkOffset Gcode
if iWorkOffsetmode eq 0
change(iWorkOffset) = false
endif
{[cWo,iWorkoffset' ']}
change(cWo) = FALSE ;!@#$%AC Исправлена проблема с изменяющимся битом
endp
;-------------------
@change_tool
; Delayed Tool Change handling to @start_of_job to have access to Operation(Job) data
nTcXnext = xnext
nTcYnext = ynext
nTcZnext = znext
nTcCnext = cnext
bTlchg = true
endp
@usr_ct
; Handle all aspects of Tool Change
if bMultiplefixtures eq True
bFrombeginchangetool = True
call @Multiple_Fixtures
endif
if !first_tool
iTcnumber = iTcnumber + 1
endif
bStartFile = false
if !first_tool
call @usr_ct_before_notfirsttool
endif
if first_tool
call @usr_ct_before_firsttool
endif
call @usr_ct_toolchange
call @usr_ct_init_gmstates
call @usr_ct_after
if !bMultiplefixtures
bSkipxyrapid = true
endif
if bMultiplefixtures eq True
bFromendchangetool = True
call @Multiple_Fixtures
endif
endp
;-------------------
@usr_ct_before_firsttool
; Handle output before the first tool change
if !bStopM00difftool
if bCoolofftc and bCoolExist
; iCoolantM1 = iCoolantM1OFF
; iCoolantM2 = iCoolantM2OFF
;iCoolantM3 = iCoolantM3OFF
;iCoolantM4 = iCoolantM4OFF
; iCoolantM5 = iCoolantM5OFF
; iCoolantM6 = iCoolantM6OFF
; iCoolantM7 = iCoolantM7OFF
; iCoolantM8 = iCoolantM8OFF
;call @usr_coolant_output
endif
if bSpinofftc
iSpindleDir = 5
; {nb}
; call @usr_spindle_mcode_output
endif
if sHomestrtc ne ''
sHomestr = sHomestrtc
;call @usr_prep_home_axis
endif
if bOptstptc
; call @usr_optionalstop
endif
endif
if bTcseperation
; {nl}
endif
if !bSimpleformat
bSafetyprep = true
call @usr_ct_init_gmstates
endif
if bNnumtc
; {nl,'N'iTcnumber' '}
else
;{nb}
endif
if !bSimpleformat
call @usr_homenumber_output
call @usr_abs_inc_output
call @usr_mp_output
call @usr_compensation_output
skipline = false
call @end_drill
endif
endp
;-------------------
@usr_ct_before_notfirsttool
; Handle output before the next tool change
; This is not called before the first tool change
if !bStopM00difftool
if bCoolofftc and bCoolExist
iCoolantM1 = iCoolantM1OFF
iCoolantM2 = iCoolantM2OFF
iCoolantM3 = iCoolantM3OFF
iCoolantM4 = iCoolantM4OFF
iCoolantM5 = iCoolantM5OFF
iCoolantM6 = iCoolantM6OFF
iCoolantM7 = iCoolantM7OFF
iCoolantM8 = iCoolantM8OFF
call @usr_coolant_output
endif
if bSpinofftc
iSpindleDir = 5
{nb}
call @usr_spindle_mcode_output
endif
if sHomestrtc ne ''
sHomestr = sHomestrtc
call @usr_prep_home_axis
endif
if bOptstptc
call @usr_optionalstop
endif
endif
if bTcseperation
{nl}
endif
if !bSimpleformat
bSafetyprep = true
call @usr_ct_init_gmstates
endif
if bNnumtc
{nl,'N'iTcnumber' '}
else
{nb}
endif
if !bSimpleformat
call @usr_homenumber_output
call @usr_abs_inc_output
call @usr_mp_output
call @usr_compensation_output
skipline = false
call @end_drill
endif
endp
@usr_ct_toolchange
; Handle G/M code output to make tool change
if bTCSplit
{nb,cTCcodep'T'tool_number}
if bOutputToolMessage
{' 'cCb,tool_message,cCe}
endif
{nb,cTCcodes}
else
{nb,cTCcodep'T'tool_number' 'cTCcodes}
if bOutputToolMessage
{cCb,tool_message,cCe}
endif
endif
if bToolPreselect
if !last_tool
{nb,'T'next_tool_number}
else
if !bToolChangeAtEnd
{nb,'T'next_tool_number}
endif
endif
endif
endp
@usr_ct_after
; Handle output after tool change
; *Note: Coolant & job Options need handling
local integer i poz1 l1b pr1
local string msg1 msg1a msg1b
if iOperationMessage eq 2
{nb, cCb,job_name,cCe}
endif
if msg ne '' and bOutputUserMessages
i = 1
while i < 50
i = i + 1
poz1=instr(msg,'\n')
if poz1 eq 0
poz1=strlen(msg)
msg1=msg
else
poz1 = poz1-2
msg1=left(msg,poz1)
endif
{nb, cCb,msg1,cCe}
poz1=instr(msg,'\n')
if poz1 eq 0
i = 51
else
l1b=strlen(msg)-strlen(msg1)
pr1=poz1+1
msg1b=substr(msg,pr1,l1b)
msg=msg1b
endif
endw
endif
if bCoolspinaftertc
skipline = true
call @start_tool
if bCoolExist
skipline = true
call @usr_coolant
endif
xpos = nTcXnext
ypos = nTcYnext
change(zpos) = false
call @usr_rapid
call @usr_heightcomp_on
else
xpos = nTcXnext
ypos = nTcYnext
change(zpos) = false
call @usr_rapid
skipline = false
call @start_tool
call @usr_heightcomp_on
if bCoolExist
if !bCoolAfterHeightComp
skipline = false
endif
call @usr_coolant
skipline = true ;!@#$%AC Incase no coolant output, need to override 'skipline = false' 3 lines above
endif
endif
endp
@usr_ct_init_gmstates
; Handle initializing G/M codes for correct modality after tool change
if first_tool
iMotionmode = 9999
iDiametercomp = 40
if !bSimpleformat
change(iAbsincmode) = true
if iWorkOffsetmode eq 0
change(iWorkOffset) = false
else
change(iWorkoffset) = true
endif
endif
change(iDiameteroffset) = false
iHeightcomp = 9999
iDrillmode = 9999
iCoolantM1 = iCoolantM1OFF
iCoolantM2 = iCoolantM2OFF
iCoolantM3 = iCoolantM3OFF
iCoolantM4 = iCoolantM4OFF
iCoolantM5 = iCoolantM5OFF
iCoolantM6 = iCoolantM6OFF
iCoolantM7 = iCoolantM7OFF
iCoolantM8 = iCoolantM8OFF
else
if bSafetyprep
change(iMplane) = true
;change(iWorkoffset) = true
;change(iAbsincmode) = true
change(iDiametercomp) = true
iDrillmode = 9999
bSafetyprep = false
else
iMotionmode = 9999
if bWorkoffsettc and iWorkoffsetmode ne 0
change(iWorkoffset) = true
endif
if !bSimpleformat
change(iAbsincmode) = true
endif
iDiametercomp = 40
change(iDiameteroffset) = false
iHeightcomp = 9999
iDrillmode = 9999
iCoolantM1 = iCoolantM1OFF
iCoolantM2 = iCoolantM2OFF
iCoolantM3 = iCoolantM3OFF
iCoolantM4 = iCoolantM4OFF
iCoolantM5 = iCoolantM5OFF
iCoolantM6 = iCoolantM6OFF
iCoolantM7 = iCoolantM7OFF
iCoolantM8 = iCoolantM8OFF
change(nRapidfeed) = true
endif
endif
endp
@usr_heightcomp_on
; Handle line to turn on Height Compensation (Typically after tool change)
iHeightcomp = nHeightCompcode
if bHeightComp or bHeightCompOffset
{nb}
endif
if bHeightComp
{'G'iHeightcomp' '}
endif
if bHeightCompOffset
{cHoffset,tool_number' '} ; Управление по номеру инструмента
;{cHoffset,h_offset' '} ; Управление из программы
endif
if (bHeightComp or bHeightCompOffset) and bHeightCompZsameLine
skipline = false
endif
zpos = nTcZnext
change(xpos) = false
change(ypos) = false
call @rapid_move
endp
@usr_heightcomp_off
; Handle line to turn off Height Compensation (Typically don't use)
iHeightcomp = 49
if change(iHeightcomp)
{nb, 'G'iHeightcomp' '}
endif
endp
@usr_coolant
; Handle setting of coolant variable
if flood_coolant eq 1
iCoolantM1 = iCoolantM1ON
endif
if flood_coolant eq 0 or flood_coolant eq 2
iCoolantM1 = iCoolantM1OFF
endif
if mist_coolant eq 1
iCoolantM2 = iCoolantM2ON
endif
if mist_coolant eq 0 or mist_coolant eq 2
iCoolantM2 = iCoolantM2OFF
endif
if hp_flood_coolant eq 1
iCoolantM3 = iCoolantM3ON
endif
if hp_flood_coolant eq 0 or hp_flood_coolant eq 2
iCoolantM3 = iCoolantM3OFF
endif
if lp_flood_coolant eq 1
iCoolantM4 = iCoolantM4ON
endif
if lp_flood_coolant eq 0 or lp_flood_coolant eq 2
iCoolantM4 = iCoolantM4OFF
endif
if HP_Through_coolant eq 1
iCoolantM5 = iCoolantM5ON
endif
if HP_Through_coolant eq 0 or HP_Through_coolant eq 2
iCoolantM5 = iCoolantM5OFF
endif
if lp_through_coolant eq 1
iCoolantM6 = iCoolantM6ON
endif
if lp_through_coolant eq 0 or lp_through_coolant eq 2
iCoolantM6 = iCoolantM6OFF
endif
if Air_Blast_coolant eq 1
iCoolantM7 = iCoolantM7ON
endif
if Air_Blast_coolant eq 0 or Air_Blast_coolant eq 2
iCoolantM7 = iCoolantM7OFF
endif
if minimum_quantity_l eq 1
iCoolantM8 = iCoolantM8ON
endif
if minimum_quantity_l eq 0 or minimum_quantity_l eq 2
iCoolantM8 = iCoolantM8OFF
endif
call @usr_coolant_output
endp
@usr_coolant_output
; Handle output of coolant variable
if change(iCoolantM1)
{nb,['M'iCoolantM1:mcode_f' ']}
endif
if change(iCoolantM2)
{nb,['M'iCoolantM2:mcode_f' ']}
endif
if change(iCoolantM3)
{nb,['M'iCoolantM3:mcode_f' ']}
endif
if change(iCoolantM4)
{nb,['M'iCoolantM4:mcode_f' ']}
endif
if change(iCoolantM5)
{nb,['M'iCoolantM5:mcode_f' ']}
endif
if change(iCoolantM6)
{nb,['M'iCoolantM6:mcode_f' ']}
endif
if change(iCoolantM7)
{nb,['M'iCoolantM7:mcode_f' ']}
endif
if change(iCoolantM8)
{nb,['M'iCoolantM8:mcode_f' ']}
endif
endp
@usr_HSM_mode
; Handle output of HSM code
if iG187_P eq 0
iG187_P = 2 ;Default = 2
endif
iG187_P_gpp = iG187_P
nG187_E_gpp = nG187_E
if change(iG187_P_gpp) or change (nG187_E_gpp)
if change(nG187_E_gpp) and nG187_E_gpp eq 0
{nb,'G187 '}
change(nG187_E_gpp) = false
change(iG187_P_gpp) = false
if (iG187_P_gpp) ne 2
change(iG187_P_gpp) = true
endif
endif
if change(iG187_P_gpp) or change (nG187_E_gpp)
{nb,'G187 '['P'iG187_P_gpp' ']['E'nG187_E_gpp' ']}
endif
change(iG187_P_gpp) = false
change(nG187_E_gpp) = false
endif
endp
;--------------------
@start_of_job
; Handle what happens at start of operation(job)
; If using Subs we do not make tool change in @start_of_job
if bSubs
{nb, cCb,job_name,cCe}
else
if bTlchg
call @usr_ct
bTlchg = false
else
{nb, cCb,job_name,cCe}
if iPworkoffset ne iWorkoffset
{nb}
call @usr_homenumber_output
skipline = false
change(xpos) = false
change(ypos) = false
zpos = znext
change(zpos) = true
call @rapid_move
xpos = xnext ;(переход между G54-G56)
;change(xpos) = true
ypos = ynext ;(переход между G54-G56)
;change(ypos) = true
change(zpos) = false
call @rapid_move
bSkipxyrapid = true
endif
endif
endif
if job_type eq 'drill_hr'
bSkipxyrapid = false
endif
if bCoolExist
call @usr_coolant
endif
call @usr_HSM_mode
endp
;--------------------
@end_of_job
; Handle what happens at end of operation(job)
; If using Subs we do not make tool change in @start_of_job
if bStopM00
if tool_number eq next_job_tool_number
call @usr_StopM00_sametool
else
call @usr_StopM00_difftool
endif
endif
bSkipxyrapid = false
bStopM00difftool = false
iPworkoffset = iWorkoffset
endp
;-------------------
@rapid_move
; Handle GPP direct call to Rapid Move (G00)
; We not use this procedure to output code
; We create our own procedure for this so that we may...
; Sync with @rapid_move, @move_5x, @move_4x, @move4x_polar, @move4x_cartesian
call @usr_rapid
endp
@usr_rapid
; Handle output for Rapid Move (G00)
; Note: XYZ not allowed together on a single line
if !bSkipxyrapid
if !bSyncdrapid
if job_type eq '3-d model'
iMotionmode = 1
else
iMotionmode = 0
endif
else
iMotionmode = 0
endif
if (change(xpos)or change(ypos)) and change(zpos) ;!@#$% clear change
bTest = true
endif
;{nb,[cWo,iWorkoffset' '],['G'iAbsincmode ' '],['G'iMotionmode:mcode_f ' '],['G'iMplane' '],['X'xpos ' '],['Y'ypos ' ']}
{nb['G'iMotionmode:mcode_f ' '],['X'xpos ' '],['Y'ypos ' ']}
if change(zpos)
;if change(xpos) eq true or change(ypos) eq true
if bTest ;!@#$% clear change
{nb,['Z'zpos ' ']}
bTest = false
else
{['Z'zpos ' ']}
endif
endif
if !bSyncdrapid
if job_type eq '3-d model'
{['F'nRapidfeed' ']}
endif
endif
bSkipxyrapid = false
else
{nb,['Z'zpos ' ']}
{['Z'zpos ' ']}
if !bSyncdrapid
if job_type eq '3-d model'
{['F'nRapidfeed' ']}
endif
endif
bSkipxyrapid = false
endif
if !bSyncdrapid
bFeedoutput = true
endif
change(cWo) = FALSE ;!@#$%AC Fix for ChangeBit Intermittent problem
endp
;-------------------
@line
; Handle GPP direct call to Line Movement (G01)
; We not use this procedure to output code
; We create our own procedure for this so that we may...
; Sync with @line, @line_5x, @line_4x, @line4x_polar, @line4x_cartesian
call @usr_line
endp
@usr_line
; Handle output for line movement (G01)
if bFeedoutput
change(feed) = true
bFeedoutput = false
endif
iMotionmode = 1
;{nb,['G'iMotionmode:mcode_f ' '],['G'iMplane' '],['G'iDiametercomp' '],[cWo,iWorkoffset' '],['G'iAbsincmode ' ']}
{nb,['G'iMotionmode:mcode_f ' ']['G'iDiametercomp' ']}
{['D'iDiameteroffset' '],['X'xpos ' '],['Y'ypos ' '],['Z'zpos ' '],['F'feed ' ']}
change(cWo) = FALSE ;!@#$%AC Fix for ChangeBit Intermittent problem
endp
; -----------
@arc
; SolidCAM call to normal arc movement
; We do not use this procedure to output code
; We create our own procedure for this so that we have one arc formatting section
call @usr_arc
endp
@arc_yz
; SolidCAM call to YZ arc movement
; We not use this procedure to output code
; We create our own procedure for this so that we have one arc formatting section
call @usr_arc
endp
@arc_zx
; SolidCAM call to ZX arc movement
; We not use this procedure to output code
; We create our own procedure for this so that we have one arc formatting section
call @usr_arc
endp
@usr_arc
; Handle output for arc movement (G02/G03)
if bFeedoutput
change(feed) = true
bFeedoutput = false
endif
if arc_direction eq CCW then
iMotionmode = 3
else
iMotionmode = 2
endif
if arc_plane eq XY
iMplane = 17
endif
if arc_plane eq ZX
iMplane = 18
endif
if arc_plane eq YZ
iMplane = 19
endif
;{nb,['G'iMotionmode:mcode_f ' '],['G'iMplane' '],['G'iDiametercomp' '],[cWo,iWorkoffset' '],['G'iAbsincmode ' ']}
{nb,['G'iMotionmode:mcode_f ' '],['G'iDiametercomp' ']}
{['D'iDiameteroffset' '],['X'xpos ' '],['Y'ypos ' '],['Z'zpos ' ']}
if arc_plane eq XY then
if iArcmode eq 1 or (arc_size eq 360 and iArcmode eq 3)
{'I'xcenter ' ', 'J'ycenter ' '}
endif
if iArcmode eq 2 or (arc_size eq 360 and iArcmode eq 4)
{'I'xcenter_rel ' ', 'J'ycenter_rel ' '}
endif
if (iArcmode eq 3 or iArcmode eq 4) and arc_size ne 360
if arc_size >= 180 then
radius = -radius
endif
{'R'radius' '}
endif
endif
if arc_plane eq ZX then
if iArcmode eq 1 or (arc_size eq 360 and iArcmode eq 3)
{'I'xcenter ' ', 'K'zcenter ' '}
endif
if iArcmode eq 2 or (arc_size eq 360 and iArcmode eq 4)
{'I'xcenter_rel ' ', 'K'zcenter_rel ' '}
endif
if (iArcmode eq 3 or iArcmode eq 4) and arc_size ne 360
if arc_size >= 180 then
radius = -radius
endif
{'R'radius' '}
endif
endif
if arc_plane eq YZ then
if iArcmode eq 1 or (arc_size eq 360 and iArcmode eq 3)
{'J'ycenter ' ', 'K'zcenter ' '}
endif
if iArcmode eq 2 or (arc_size eq 360 and iArcmode eq 4)
{'J'ycenter_rel ' ', 'K'zcenter_rel ' '}
endif
if (iArcmode eq 3 or iArcmode eq 4) and arc_size ne 360
if arc_size >= 180 then
radius = -radius
endif
{'R'radius' '}
endif
endif
{['F'feed ' ']}
change(nRapidfeed) = true
change(cWo) = FALSE ;!@#$%AC Fix for ChangeBit Intermittent problem
endp
;-------------------
@compensation
; Handle setting of Diameter Compensation Gcode
; We not use this procedure to output code
; We create our own procedure for this so that we..
; have can control placement during @line,@arc
if side eq COMP_LEFT then
iDiametercomp = 41
if bDiameterCompOutputD
change(iDiameteroffset) = true
endif
endif
if side eq COMP_RIGHT then
iDiametercomp = 42
if bDiameterCompOutputD
change(iDiameteroffset) = true
endif
endif
if side eq COMP_OFF then
iDiametercomp = 40
change(iDiameteroffset) = false
endif
endp
@usr_compensation_output
; Handle output of Diameter Compensation Gcode
if change(iDiametercomp)
if iDiametercomp eq 40 or !bDiameterCompOutputD
{'G'iDiametercomp' '}
else
;{'G'iDiametercomp, ' D'tool_number' '} ; Управление по номеру инструмента
{['G'iDiametercomp], [cDoffset,d_offset' ']} ; Управление из программы
endif
endif
endp
;-------------------
@usr_optionalstop
; Handle line for Optional Stop G/M code
iStopmode = 1
{nb, 'M'iStopmode:mcode_f' '}
endp
@usr_forcedstop
; Handle line for forced Stop gmcode
iStopmode = 0
{nb, 'M'iStopmode:mcode_f' '}
endp
@usr_StopM00_sametool
; Handle output for forced stopM00 between operations using the same tool
if bCoolExist
iCoolantM1 = iCoolantM1OFF
iCoolantM2 = iCoolantM2OFF
iCoolantM3 = iCoolantM3OFF
iCoolantM4 = iCoolantM4OFF
iCoolantM5 = iCoolantM5OFF
iCoolantM6 = iCoolantM6OFF
iCoolantM7 = iCoolantM7OFF
iCoolantM8 = iCoolantM8OFF
call @usr_coolant_output
endif
iSpindleDir = 5
{nb}
call @usr_spindle_mcode_output
if sHomestrstpsame ne ''
sHomestr = sHomestrstpsame
call @usr_prep_home_axis
endif
call @usr_forcedstop
sUsrmsg = sStopMessage
call @usr_message
{nb}
call @usr_abs_inc_output
call @m_feed_spin
call @usr_spindle_mcode_output
change(xpos) = true
change(ypos) = true
change(zpos) = false
call @rapid_move
call @usr_heightcomp_on
endp
@usr_StopM00_difftool
; Handle output for forced stopM00 between operations using different tools
if bCoolExist
iCoolantM1 = iCoolantM1OFF
iCoolantM2 = iCoolantM2OFF
iCoolantM3 = iCoolantM3OFF
iCoolantM4 = iCoolantM4OFF
iCoolantM5 = iCoolantM5OFF
iCoolantM6 = iCoolantM6OFF
iCoolantM7 = iCoolantM7OFF
iCoolantM8 = iCoolantM8OFF
call @usr_coolant_output
endif
iSpindleDir = 5
{nb}
call @usr_spindle_mcode_output
if sHomestrstpdiff ne ''
sHomestr = sHomestrstpdiff
call @usr_prep_home_axis
endif
call @usr_forcedstop
sUsrmsg = sStopMessage
call @usr_message
bStopM00difftool = true
endp
;-------------------
@change_ref_point
; @change_ref_point Not Supported in this template
endp
;-------------------
@rotate
; @rotate Not Supported in this template
endp
;-------------------
@mirror
; @mirror Not Supported in this template
endp
;-------------------
@fourth_axis
; @fourth_axis Not Supported in this template
endp
;-------------------
@message
; We don't always use messages directly from SolidCAM
if iOperationMessage eq 1
{nb, cCb,message,cCe}
endif
endp
@usr_message
; Handle output for messages
; We don't use messages directly from SolidCAM
{nb, cCb,sUsrmsg,cCe}
endp
;-------------------
@drill
; Handle output for drill cycles
local logical skipZpos
skipZpos = false
if job_type eq '3-d drill' and prev_command eq '@drill_point'
skipZpos = true
endif
if !skipZpos
{nb,cDrZp'Z'zpos' 'cDrZs}
endif
if drill_type eq G81
iDrillmode = 81
{nb, cDr'G'iDrillmode ' X'xpos' Y'ypos' Z'drill_lower_z' R'drill_upper_z' F'feed ' 'cDrCys}
endif
if drill_type eq G82
iDrillmode = 82
{nb, cDr'G'iDrillmode ' X'xpos' Y'ypos' Z'drill_lower_z' R'drill_upper_z' P'P_Dwell' F'feed' 'cDrCys}
endif
if drill_type eq G83
iDrillmode = 83
if P_Dwell eq 0
change(P_Dwell) = false
endif
if I_FirstPeck eq 0
{nb, cDr'G'iDrillmode ' X'xpos' Y'ypos' Z'drill_lower_z' R'drill_upper_z' Q'Q_Peck,[' P'P_Dwell],' F'feed' 'cDrCys}
else
{nb, cDr'G'iDrillmode ' X'xpos' Y'ypos' Z'drill_lower_z' R'drill_upper_z' I'I_FirstPeck' J'J_ReduceAmount' K'K_MinimumDepth,[' P'P_Dwell],' F'feed' 'cDrCys}
endif
endif
if drill_type eq G73
iDrillmode = 73
if P_Dwell eq 0
change(P_Dwell) = false
endif
if I_FirstPeck eq 0
{nb, cDr'G'iDrillmode ' X'xpos' Y'ypos' Z'drill_lower_z' R'drill_upper_z' Q'Q_Peck' K'K_MinimumDepth,[' P'P_Dwell],' F'feed' 'cDrCys}
else
{nb, cDr'G'iDrillmode ' X'xpos' Y'ypos' Z'drill_lower_z' R'drill_upper_z' I'I_FirstPeck' J'J_ReduceAmount' K'K_MinimumDepth,[' P'P_Dwell],' F'feed' 'cDrCys}
endif
endif
if drill_type eq G84
iDrillmode = 84
if cG84p ne ''
{nb,cG84p}
endif
if bG84spin
change(spin) = true
else
change(spin) = false
endif
if iG84feed eq 1
nG84feed = tool_drill_lead*spin
endif
if iG84feed eq 2
nG84feed = tool_drill_lead
endif
{nb, cDr,cG84 ' X'xpos' Y'ypos' Z'drill_lower_z' R'drill_upper_z,[' S'spin:fG84spin],' F'nG84feed ' 'cDrCys}
endif
if drill_type eq G84_Peck
iDrillmode = 84
if cG84p ne ''
{nb,cG84p}
endif
if bG84spin
change(spin) = true
else
change(spin) = false
endif
if iG84feed eq 1
nG84feed = tool_drill_lead*spin
endif
if iG84feed eq 2
nG84feed = tool_drill_lead
endif
{nb, cDr,cG84 ' Z'drill_lower_z' R'drill_upper_z' 'cCycs,['S'spin:fG84spin' '],'F'nG84feed ' 'cDrCys}
endif
if drill_type eq G85
if P_Dwell eq 0
iDrillmode = 85
{nb, cDr'G'iDrillmode ' X'xpos' Y'ypos' Z'drill_lower_z' R'drill_upper_z' F'feed ' 'cDrCys}
else
iDrillmode = 89
{nb, cDr'G'iDrillmode ' X'xpos' Y'ypos' Z'drill_lower_z' R'drill_upper_z' P'P_Dwell' F'feed' 'cDrCys}
endif
endif
if drill_type eq G86
iDrillmode = 86
{nb, cDr'G'iDrillmode ' X'xpos' Y'ypos' Z'drill_lower_z' R'drill_upper_z' F'feed ' 'cDrCys}
endif
if drill_type eq G87
if P_Dwell eq 0
iDrillmode = 87
{nb, cDr'G'iDrillmode ' X'xpos' Y'ypos' Z'drill_lower_z' R'drill_upper_z' F'feed ' 'cDrCys}
else
iDrillmode = 88
{nb, cDr'G'iDrillmode ' X'xpos' Y'ypos' Z'drill_lower_z' R'drill_upper_z' P'P_Dwell' F'feed' 'cDrCys}
endif
endif
endp
;-------------------
@drill_point
; Handle output for drill positions
local integer i
if drill_type eq G84_Peck
iNumpecks = (drill_depth/Q_Peck)+1.
nCorrectedpeck = drill_depth/iNumpecks
i = 1
while i <= iNumpecks
{nb,'X'xpos ' ', 'Y'ypos ' ', 'Z'(drill_upper_z-(nCorrectedpeck*i))' 'cDrPts}
i = i + 1
endw
else
if !first_drill then
{nb,['X'xpos ' '], ['Y'ypos ' '], ['Z'zpos ' ']cDrPts}
endif
endif
endp
;-------------------
@end_drill
; Handle output to cancel drill cycles
iDrillmode = 80
if change(iDrillmode)
{nb, 'G'iDrillmode' '}
endif
if (cG84endl ne '') and (drill_type eq G84_Peck or drill_type eq G84)
{nb,cG84endl}
endif
endp
;-------------------
@m_feed_spin
; Handle output for spindle change
if tool_direction eq CW then
iSpindleDir = 3
else
iSpindleDir = 4
endif
if change(spin)
call @usr_spindle_output
endif
endp
@start_tool
; Ручная настройка вывода для запуска шпинделя
if tool_direction eq CW then
iSpindleDir = 3
else
iSpindleDir = 4
endif
{nb}
call @usr_spindle_output
if !bSpinOnlyUseS
if bSimpleformat
;{nb}
endif
call @usr_spindle_mcode_output
endif
endp
@usr_spindle_output
; Ручной вывод для шпинделя
;{nb}
{nb,'S'spin:integer_def_f ' '}
endp
@usr_spindle_mcode_output
; Handle output for spindle
{'M'iSpindleDir:mcode_f ' '}
endp
;-------------------
@offset_change
; Handle setting of Diameter offset
iDiameteroffset = d_offset
endp
;-------------------
@job_plane
; @job_plane Not Supported in this template
endp
;-------------------
@call_proc
; Handle call to subroutine
if bTlchg
call @usr_ct
bTlchg = false
endif
{nb, 'M98 P'label}
{[' ('message, ')']}
endp
;-------------------
@proc
; Handle beggining of subroutine
{nl, 'O'label}
endp
;-------------------
@end_proc
; Handle end of subroutine
{nb, 'M99'}
endp
;----------------
@loop_matrix_info
bSkipxyrapid = false
endp
@loop
; Loops Not Supported in this template
endp
;----------------
@end_loop
; Loops Not Supported in this template
endp
;-------------------
@usr_prep_home_axis
; Handle parsing of homing string and preping of output for homing
local integer i line l mode p1 xMode
local string s s1 s2 l1 pstr
s = sHomestr ;Original String
s1 = s ;Temp String
l = strlen(s1) ;Get string length of Temp String
s2 = substr(s1,1,1) ;*Check for 'x' in first character to flag separate iHomingmode for each line
if s2 eq 'x'
xMode = 1
s1 = substr(s1,2,l) ;Remove 'x' from Temp String
l = strlen(s1) ;Get string length of Temp String
else
xMode = 0
endif
if !xMode ;*Pull out Homing mode (when not using xMode)
p1 = instr(s1,':') ;Find the position of first ":"
l1 = left(s1,p1-1) ;Pull out the left of first ":"
mode = tonum(l1) ;Convert string into Integer for "Mode" variable
s1 = substr(s1,p1+1,l) ;Remove Homing mode from Temp String
l = strlen(s1) ;Get string length of Temp String
;*Pull out Preperation String
p1 = instr(s1,':') ;Find the position of second ":"
if p1 ne 0 ;Check if PrepStr is defined
pstr = left(s1,p1-1) ;Pull out the left of second ":"
s1 = substr(s1,p1+1,l) ;Remove PrepString from Temp String
l = strlen(s1) ;Get string length of Temp String
endif
endif ;*Pull out homing lines and send to output procedure
i = 1
while i < 50
i = i + 1
if xMode ;*Pull out Homing mode (when using xMode)
p1 = instr(s1,':') ;Find the position of first ":"
l1 = left(s1,p1-1) ;Pull out the left of first ":"
mode = tonum(l1) ;Convert string into Integer for "Mode" variable
s1 = substr(s1,p1+1,l) ;Remove Homing mode from Temp String
l = strlen(s1) ;Get string length of Temp String
;*Pull out Preperation String
p1 = instr(s1,':') ;Find the position of second ":"
if p1 ne 0 ;Check if PrepStr is defined
pstr = left(s1,p1-1) ;Pull out the left of second ":"
s1 = substr(s1,p1+1,l) ;Remove PrepString from Temp String
l = strlen(s1) ;Get string length of Temp String
endif
endif
p1 = instr(s1,';') ;Find the position of ";"
if p1 ne 0
line = line + 1 ;Keep track of lines. Not Used!!
l1 = left(s1,p1-1) ;Pull out the left of ";"
iHomingmode = mode ;Send Homing Mode
cHomep = pstr ;Send Preperation String
sHomeline = l1 ;Send Homing Line
call @usr_home_axis
else
line = line + 1 ;Keep track of lines. Not Used!!
iHomingmode = mode ;Send Homing Mode
cHomep = pstr ;Send Preperation String
sHomeline = s1 ;Send Homing Line
call @usr_home_axis
i = 50 ;Force end of While-Loop
endif
if i ne 50
s1 = substr(s1,p1+1,l) ;Remove Homing mode from Temp String
l = strlen(s1) ;Get string length of Temp String
endif
endw
endp
@usr_home_axis
; Handle output for homing the X-axis
local integer sav_iWorkOffset
sav_iWorkOffset = iWorkOffset
if iHomingmode eq 1
{nb,cHomep'G28 'sHomeline}
endif
if iHomingmode eq 2
{nb,cHomep'G28 '}
iAbsincmode = 91
change(iAbsincmode) = true
call @usr_abs_inc_output
{ sHomeline}
iAbsincmode = 90
change(iAbsincmode) = true
endif
if iHomingmode eq 3 or iHomingmode eq 4
if iWorkOffsetmode eq 1 or iWorkOffsetmode eq 3
iWorkOffset = 53
{nb,cHomep,[cWo,iWorkoffset' ']}
endif
if iWorkOffsetmode eq 2
iWorkOffset = 0
{nb,cHomep,[cWo,iWorkoffset' ']}
endif
call @usr_abs_inc_output
{ sHomeline}
iWorkOffset = sav_iWorkOffset
if iHomingmode eq 3
change(iWorkOffset) = false
endif
change(cWo) = FALSE ;!@#$%AC Fix for ChangeBit Intermittent problem
endif
if iHomingmode eq 5
{nb,cHomep'G30 'sHomeline}
endif
if iHomingmode eq 6
{nb,cHomep'G30 '}
iAbsincmode = 91
change(iAbsincmode) = true
call @usr_abs_inc_output
{ sHomeline}
iAbsincmode = 90
change(iAbsincmode) = true
endif
if iHomingmode eq 7
{nb, sHomeline}
endif
endp
;-------------------
@usr_campart_path
; Uses String Functions to get the Windows Folder Path to the CAM-Part
iSlength_g_file_name = strlen( g_file_name)
iSlength_full_g_file_name = strlen(full_g_file_name)
iSlengthcampartpath = iSlength_full_g_file_name - iSlength_g_file_name
sCamfilepath = left(full_g_file_name,iSlengthcampartpath)
endp
;-------------------
@Multiple_Fixtures
; Handle multiple fixture support
local integer i
;----From tools 2 and up
;----Closes the sSubspath(tempfile) for the previous tool change
;----Runs loop to print G5x and copy in the tempfile
;----Sets the tempfile to new name for next tool
if bFrombeginchangetool eq True
if !first_tool
{nl,'!!close file=' sSubspath '!!'}
i = 1
while i <= iNumber_of_Fixtures
{nl,cCb'-----LOOPING CODE-----'cCe}
if i ne 1
{nb,cWo,((iWorkoffset-1)+i)}
endif
{nl,'!!copy file=' sSubspath '!!'}
i = i + 1
endw
sSubspath = sCamfilepath + 'TEMPFILE' + tostr(iTcnumber:'5.0(n)')
endif
bFrombeginchangetool = False
endif
;----At end of tool_change
;----Opens tempfile to print out gcode
if bFromendchangetool eq True
sSubspath = sCamfilepath + 'TEMPFILE' + tostr(iTcnumber:'5.0(n)')
{nl,'!!open file=' sSubspath '!!'}
bFromendchangetool = False
endif
;----At end_program
;----Closes the sSubspath(tempfile) for the current tool change
;----Runs loop to print G5x and copy in the tempfile
if bFromendprogram eq True
{nl,'!!close file=' sSubspath '!!'}
i = 1
while i <= iNumber_of_Fixtures
{nl,cCb'-----LOOPING LAST TOOL CHANGE CODE-----'cCe}
if i ne 1
{nb,cWo,((iWorkoffset-1)+i)}
endif
{nl,'!!copy file=' sSubspath '!!'}
i = i + 1
endw
bFromendprogram = False
endif
;----At eng_of_file
;----Delete all tempfiles
if bFromendoffile eq True
i = 1
while i <= iTcnumber
sSubspath = sCamfilepath + 'TEMPFILE' + tostr(i:'5.0(n)')
{nl,'!!delete file=' sSubspath '!!'}
i = i + 1
endw
bFromendoffile = false
endif
endp
;-------------------

 

Ссылка на сообщение
Поделиться на других сайтах
В 9 октября 2019 г. в 12:12, DesertRod сказал:

Здраствуйте, уважаемые форумчане! Ковырял я тут постпроцессор для Sinumerik 840D, настроил шапку и хвост, а вот в середине проблема. Дело в том, что мой станок воспринимает все оси в обратном направлении и теперь мне нужно, чтобы значения X,Y,Z перед выводом в УП меняли знак на противоположный. Т.е. сейчас выводятся X, Y, Z а мне нужно -X, -Y, -Z. Все мои попытки шаманства ничем не увенчались, делать костыль и менять во всём постпроцессоре значения на отрицательные слишком опасно. Требуется помощь гуру постпроцессоров, буду премного благодарен.

Orsha_4x_Simens840D.zip

нужно изменить направление осей в настройках станка *vmid

Ссылка на сообщение
Поделиться на других сайтах

Ищу постпроцессор для токарной обработки под SC2019 для стойки Siemens Sinumerik 808D, обработка только по XZ, 

ivan_sova@rambler.ru

Ссылка на сообщение
Поделиться на других сайтах
1 час назад, bazalt сказал:

Добрый день!

 

Кто cможет поделиться ПП для HAAS ST10?

(CamWorks или SolidCAM)

Точнее - ST-10Y

и для NX тоже подойдет...

Ссылка на сообщение
Поделиться на других сайтах

Здравствуйте! Обращаюсь с просьбой, кто уже освоил SolidCam. Пытаюсь победить данную прогу. Стойка Sinumeric 828 -3х осевая. Нужен пост, для корректной работы. Возможно подойдет и для 840. Почта для связи igokon@mail.ru  Заранее спасибо всем откликнувшимся! Всех с прошедшими праздниками!

Изменено пользователем Igokon73
Ссылка на сообщение
Поделиться на других сайтах
В 14.01.2020 в 14:45, bazalt сказал:

Добрый день!

 

Кто cможет поделиться ПП для HAAS ST10?

(CamWorks или SolidCAM)

Это вроде с CamWorks 2017

HAAS ST10.rar

Ссылка на сообщение
Поделиться на других сайтах

Добрый час всем. Очень нужен ПП на DMC 635 V ecoline и Ecomill под Sinumerik 840d и Heidenhain iTNC620

Начальник купил 2 станка с разными стойками... Вот теперь мучаемся. 

Ссылка на сообщение
Поделиться на других сайтах
В 13.02.2013 в 20:45, sennik53 сказал:

Иструкция для составления пре- и постпроцессоров SolidCAM2012.Есть мой перевод на эту тему.

Кому интересно?

Доброго времени!

Мне очень интересно! Постепенно погружаюсь в эту тему и есть некоторые сложности, поэтому надеюсь благодаря этому материалу получше разобраться в этом.

Видел пост в видео Эдуарда и он очень полезный!

В общем, если есть возможность - буду очень благодарен!!! alseraz@mail.ru.

Ссылка на сообщение
Поделиться на других сайтах

Здравствуйте уважаемые коллеги !))  Если вдруг есть у кого постпроцессор на fanuc 0i-td с приводным инструментом , mitsubishi 70 для Solid-a Поделитесь пожалуйста! Буду ну очень признателен! nikolay.vinogradov.84@mail.ru 

Ссылка на сообщение
Поделиться на других сайтах
В 21.01.2020 в 17:09, Kitlus сказал:

Добрый час всем. Очень нужен ПП на DMC 635 V ecoline и Ecomill под Sinumerik 840d и Heidenhain iTNC620

Начальник купил 2 станка с разными стойками... Вот теперь мучаемся. 

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

Ссылка на сообщение
Поделиться на других сайтах
В 21.01.2020 в 20:09, Kitlus сказал:

Добрый час всем. Очень нужен ПП на DMC 635 V ecoline и Ecomill под Sinumerik 840d и Heidenhain iTNC620

Начальник купил 2 станка с разными стойками... Вот теперь мучаемся. 

чукча не читатель, чукча писатель,

в теме ищут ТОКАРНЫЙ постпроцессор

Ссылка на сообщение
Поделиться на других сайтах

Ищу пост под токарку НЦ-31, если нет то хотя бы под 2-ох осевой под токарку, так как в SolidCam все посты под токарные станки много осевые.

Ссылка на сообщение
Поделиться на других сайтах
40 минут назад, SashaM7 сказал:

Ищу пост под токарку НЦ-31, если нет то хотя бы под 2-ох осевой под токарку, так как в SolidCam все посты под токарные станки много осевые.

вот у этого человека есть, пост под НЦ-31
контакты в описании под видео !!!!!

 

Ссылка на сообщение
Поделиться на других сайтах

А есть у кого хоть не под НЦ, 2ох осевой, этот человек денег хочет, а мне для выполнения пожелания начальства, которое навряд ли даст денег, поэтому хочу сам допилять его под НЦ, чтоб не с нуля.

Ссылка на сообщение
Поделиться на других сайтах
  • SHARit закрепил это тему

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




×
×
  • Создать...