bruga-exchange/post/GENERIC HEIDENHAIN_TNC530 3X MILL.PST
2025-03-13 08:55:14 +01:00

2827 lines
96 KiB
Plaintext

[POST_VERSION] #DO NOT MOVE OR ALTER THIS LINE# V10.00 E1 P0 T1123876832 M10.00 I0
# Post Name : Generic Heidenhain_TNC530 3X Mill.pst
# Product : Mill
# Machine Name : Generic
# Control Name : Heidenhain TNC-426/430/530
# Description : Heidenhain Conversational Mill Post
# 4-axis/Axis subs. : Yes (NOT configured yet!)
# 5-axis : No
# Subprograms : Yes
# Executable : MP 10.0
#
# WARNING: THIS POST IS GENERIC AND IS INTENDED FOR MODIFICATION TO
# THE MACHINE TOOL REQUIREMENTS AND PERSONAL PREFERENCE.
#
# Associated File List$
#
# GENERIC HEIDENHAIN_TNC530 3X.control
# GENERIC HEIDENHAIN_TNC530 3X.MMD
# GENERIC HEIDENHAIN_TNC530 3X MM.MMD
#
# Associated File List$
#
# --------------------------------------------------------------------------
# Revision log:
# --------------------------------------------------------------------------
# CNC 08/12/05 - Initial post setup for Mastercam X
#
# --------------------------------------------------------------------------
# Features:
# --------------------------------------------------------------------------
# This post supports Generic Heidenhain 426/430/530 code for 3 axis milling.
# It is designed to support the features of Mastercam X Mill.
#
# This post has several Heidenhain specific output option switches.
# Search for "Output Configuration Settings" to locate the post section.
#
# NEW FEATURES FOR X:
# - Variable initialization with CD_VAR are read directly from CD. Changing these initial values
# in the post will not effect output. These values are only processed during the update post routine.
# - Supports X comments including machine name, group name and group comment output (see pcomment2)
# - Additional date, time and data path output options (see pheader)
# - Support for 10 additional canned text options for X
#
# Drilling (canned) cycles supported in this post:
# - 200 DRILLING
# - 201 REAMING
# - 202 BORING - !!MACHINE MUST BE SETUP FOR THIS CYCLE!!
# - 203 UNIVERSAL DRILLING
# - 1.0 PECKING
# - 205 UNIVERSAL PECKING
# - 2.0 TAPPING
# - 206 TAPPING NEW
# - 17.0 RIGID TAPPING GS - !!MACHINE MUST BE SETUP FOR THIS CYCLE!!
# - 207 RIGID TAPPING NEW - !!MACHINE MUST BE SETUP FOR THIS CYCLE!!
# - 209 TAPPING W/ CHIP BRKG - !!MACHINE MUST BE SETUP FOR THIS CYCLE!!
#
# --------------------------------------------------------------------------
# Misc. Values:
# --------------------------------------------------------------------------
# Integers:
#
# mi1 - (NOT USED)
#
# mi2 - Absolute or Incremental positioning at top level
# 0 = absolute
# 1 = incremental
#
# mi3 - mi10 (NOT USED)
#
# Reals:
#
# mr1 - mr10 (NOT USED)
#
# --------------------------------------------------------------------------
#Canned text:
# Not Supported
#
# --------------------------------------------------------------------------
#Additional Notes:
# 1) Metric is applied from the NCI met_tool variable.
# 2) Incremental mode calculates motion from home position at toolchanges.
# The home position is used to define the last position of the tool
# for all toolchanges.
# 3) The variable 'absinc' is now pre-defined, set mi2 (Misc. Integer) for
# the 'top level' absolute/incremental program output. Subprograms are
# updated through the Mastercam dialog settings for sub-programs.
#
# END_HEADER$
#
# --------------------------------------------------------------------------
# Debugging and Factory Set Program Switches
# --------------------------------------------------------------------------
#Define Constants
m_one := -1
zero := 0
one := 1
two := 2
three := 3
four := 4
five := 5
c9k := 9999
fastmode$ : yes$ #CD_VAR Enable Quick Post Processing, (set to no for debug)
bug1$ : 2 #0=No display, 1=Generic list box, 2=Editor
bug2$ : 40 #Append postline labels, non-zero is column position?
bug3$ : 0 #Append whatline number to each NC line?
bug4$ : 1 #Append NCI line number to each NC line?
whatno$ : yes$ #Do not perform whatline branches? (leave as yes)
linktolvar$ : 1 #Associate X tolerance variables to V9- variable?
linkplnvar$ : 1 #Associate X plane specific variables to V9- variable?
skp_lead_flgs$ : 0 #Do NOT use v9 style contour flags
get_1004$ : 1 #Find gcode 1004 with getnextop?
rpd_typ_v7$ : 0 #Use Version 7 style contour flags/processing?
strtool_v7$ : 2 #Use Version 7+ toolname?
tlchng_aft$ : 2 #Delay call to toolchange until move line
cant_tlchng$ : 1 #Ignore cantext entry on move with tlchng_aft
newglobal$ : 1 #Error checking for global variables
getnextop$ : 1 #Build the next variable table
tooltable$ : 3 #Pre-read, call the pwrtt postblock
# --------------------------------------------------------------------------
# Output Configuration Settings
# --------------------------------------------------------------------------
modal_XY : yes$ #Are X & Y axis positions modal ?
modal_feed : yes$ #Is 'F'eedrate modal?
modal_cdc : no$ #Are 'RR' and 'RL' comp codes modal?
force_n0 : no$ #Force sequence numbering to START at '0'
blk_form : yes$ #Output the 'BLK FORM" statements at start of program?
tdef_table : yes$ #Put all the TOOL DEF blocks at the top of the program?
use_scode : no$ #Use Spindle Code lookup table?
#If = no, output the programmed RPM
setup_sign : 2 #0 = Do not change the sign of SETUP
#1 = Always make SETUP a NEGATIVE value
#2 = Always make SETUP a POSITIVE value
peckg_sign : 2 #0 = Do not change the sign of PECKG
#1 = Always make PECKG a NEGATIVE value
#2 = Always make PECKG a POSITIVE value
sextnc$ ".H" #CD_VAR Set extension on output file
output_M6 : no$ #Set to yes if M6 is required for tool change
output_M30 : yes$ #Yes = output M30, no = output END PGM block -
#Depends on setting in parameter 7300 on machine control.
# --------------------------------------------------------------------------
# General Output Settings
# --------------------------------------------------------------------------
sub_level$ : 1 #CD_VAR Enable automatic subprogram support
breakarcs$ : 0 #CD_VAR Break arcs, 0 = no, 1 = quadrants, 2 = 180deg. max arcs
arcoutput : 0 #0 = IJK, 1 = R no sign, 2 = R signed neg. over 180
arctype$ : 1 #CD_VAR Arc center 1=abs, 2=St-Ctr, 3=Ctr-St, 4=unsigned inc.,
#5 = R no sign, 6 = R signed neg. over 180
do_full_arc$ : 0 #CD_VAR Allow full circle output? 0=no, 1=yes
helix_arc$ : 2 #CD_VAR Support helix arc output, 0=no, 1=all planes, 2=XY plane only
arccheck$ : 1 #CD_VAR Check for small arcs, convert to linear
atol$ : 0.01 #CD_VAR Angularity tolerance for arccheck
ltol$ : 0.002 #CD_VAR Length tolerance for arccheck
vtol$ : 0.0001#System tolerance
maxfeedpm : 500 #Limit for feed in inch/min
ltol_m : 0.05 #Length tolerance for arccheck, metric
vtol_m : 0.0025#System tolerance, metric
maxfeedpm_m : 10000 #Limit for feed in mm/min
spaces$ : 1 #CD_VAR Number of spaces to add between fields
omitseq$ : no$ #CD_VAR Omit sequence numbers?
seqmax$ : 9999 #CD_VAR Max. sequence number
stagetool : 0 #SET_BY_CD 0 = Do not pre-stage tools, 1 = Stage tools
max_speed : 18000 #Maximum spindle speed
min_speed : 50 #Minimum spindle speed
nobrk$ : no$ #Omit breakup of x, y & z rapid moves
progname$ : 1 #Use uppercase for program name (sprogname)
# --------------------------------------------------------------------------
# Rotary Axis Settings
# --------------------------------------------------------------------------
vmc : 1 #0 = Horizontal Machine, 1 = Vertical Mill
rot_on_x : 0 #Default Rotary Axis Orientation, See ques. 164.
#0 = Off, 1 = About X, 2 = About Y, 3 = About Z
rot_ccw_pos : 1 #Axis signed dir, 0 = CW positive, 1 = CCW positive
index : 1 #Use index positioning, 0 = Full Rotary, 1 = Index only
ctable : 5 #Degrees for each index step with indexing spindle
use_frinv : no$ #Use Inverse Time Feedrates in 4 Axis, (0 = no, 1 = yes)
maxfrdeg : 2000 #Limit for feed in deg/min
maxfrinv : 999.99#Limit for feed inverse time
frc_cinit : yes$ #Force C axis reset at toolchange
ctol : 225 #Tolerance in deg. before rev flag changes
ixtol : 0.01 #Tolerance in deg. for index error
frdegstp : 10 #Step limit for rotary feed in deg/min
# --------------------------------------------------------------------------
# Enable Canned Drill Cycle Switches
# --------------------------------------------------------------------------
usecandrill$ : yes$ #CD_VAR Use canned cycle for drill
usecanpeck$ : yes$ #CD_VAR Use canned cycle for Peck
usecanchip$ : yes$ #CD_VAR Use canned cycle for Chip Break
usecantap$ : yes$ #CD_VAR Use canned cycle for Tap
usecanbore1$ : yes$ #CD_VAR Use canned cycle for Bore1
usecanbore2$ : yes$ #CD_VAR Use canned cycle for Bore2
usecanmisc1$ : yes$ #CD_VAR Use canned cycle for Misc1
usecanmisc2$ : yes$ #CD_VAR Use canned cycle for Misc2
# --------------------------------------------------------------------------
# Common User-defined Variable Initializations (not switches!)
# --------------------------------------------------------------------------
xia : 0 #Formatted absolute value for X incremental calculations
yia : 0 #Formatted absolute value for Y incremental calculations
zia : 0 #Formatted absolute value for Z incremental calculations
cia : 0 #Formatted absolute value for C incremental calculations
cuttype : 0 #Cut type flag
#0 = Tool Plane, 1 = Axis Subs, 2 = Polar, 3 = 4/5 axis
bld : 0 #Block delete active
result : 0 #Return value for functions
sav_spc : 0 #Save spaces
sav_gcode : 0 #Gcode saved
sav_absinc : 0 #Absolute/Incremental Saved Value
sav_coolant : 0 #Coolant saved
toolchng : 1 #On a toolchange flag
spdir2 : 1 #Copy for safe spindle direction calculation
thd_ttpr : 0 #Flag for tapered thread
#Drill variables
drlgsel : -1 #Drill Select Initialize
drillref : 0 #Select drill reference
peckacel$ : 0 #CD_VAR Fractional percent to reduce peck2 when usecan.. : no
drlgcode : 0 #Save Gcode in drill
sav_dgcode : 0 #Drill gcode saved
#Subprogram variables
mr_rt_actv : 0 #Flag to indicate if G51/G68 is active
#0=Off, 1=Toolchange, 2=Subprogram call/start, G68
#3=Absolute start, both
rt_csav : 0 #C saved value
end_sub_mny : 0 #Many tool setting captured at transform sub end
#Rotary/Index variables
csav : 0 #C saved value
prvcabs : 0 #Saved cabs from pe_inc_calc,
#Used for rotary feed and direction calculations
cdelta : 0 #Calculation for angle change
rev : 0 #Calculation for deg/min
sav_rev : 0 #Saved revolution counter
indx_out : c9k #Rotation direction calculation
fmt 16 indx_mc #Rotation direction calculation
#Vector Constants for Rotatary Calculations
aaxisx : 1 #A axis rotation vector constant
aaxisy : 0 #A axis rotation vector constant
aaxisz : 0 #A axis rotation vector constant
baxisx : 0 #B axis rotation vector constant
baxisy : 1 #B axis rotation vector constant
baxisz : 0 #B axis rotation vector constant
caxisx : 0 #C axis rotation vector constant
caxisy : 0 #C axis rotation vector constant
caxisz : 1 #C axis rotation vector constant
#Feedrate calculation variables
frdelta : 0 #Calculation for deg/min
frinv : 0 #Feedrate inverse time
frdeg : 0 #Feedrate deg/min actual
prvfrdeg : 0 #Feedrate deg/min actual
ldelta : 0 #Calculation for deg/min, linear
cldelta : 0 #Calculation for deg/min, linear and rotary
circum : 0 #Calculation for deg/min
ipr_type : 0 #Feedrate for Rotary, 0 = UPM, 1 = DPM, 2 = Inverse
xmove : no$ #Is this axis moving ?
ymove : no$ #Is this axis moving ?
zmove : no$ #Is this axis moving ?
# --------------------------------------------------------------------------
# Format statements - n=nonmodal, l=leading, t=trailing, i=inc, d=delta
# --------------------------------------------------------------------------
#Default english/metric position format statements
fs2 1 0.7 0.6 #Decimal, absolute, 7 place, default for initialize (:)
fs2 2 +1.4 1.3lt #Decimal, absolute, 4/3 place (Forced +/- sign output)
fs2 3 +1.4 1.3lt #Decimal, absolute, 4/3 place (Forced +/- sign output)
#Common format statements
fs2 4 1 0 1 0 #Integer, not leading
fs2 5 2 0 2 0l #Integer, force two leading
fs2 6 3 0 3 0l #Integer, force three leading
fs2 7 4 0 4 0 #Integer, four leading
fs2 8 1.3 1.2ltn #Decimal, absolute, 3/2 place, leading&trailing, non-modal
fs2 9 1.1 1.1ltn #Decimal, absolute, 1/1 place, leading&trailing, non-modal
fs2 10 0.2 0.2 #Decimal, absolute, 2 place
fs2 11 0.3 0.3 #Decimal, absolute, 3 place
fs2 12 0.4 0.4 #Decimal, absolute, 4 place
fs2 13 0.5 0.5 #Decimal, absolute, 5 place
fs2 14 0.3 0.3d #Decimal, delta, 3 place
fs2 15 1 1 1 0lt #Decimal, absolute, 1/0 place (feedrate)
fs2 16 1 0 1 0n #Integer, forced output
fs2 17 0.3 0.2 #Decimal, absolute, 3/2 place (tapping feedrate)
fs2 18 1.4 1.3lt #Decimal, absolute, 4/3 place, leading&trailing
fs2 19 +1^4 1^4l #Decimal, absolute, 4 place, force leading, omit decimal for whole numbers
fs2 20 +1^4 1^4 #Decimal, absolute, 4 place. Omit decimal for whole numbers
fs2 21 4 1 4 1t #Decimal, absolute, 1place trailing - Omit decimal
# These formats used for 'Date' & 'Time'
fs2 22 2.2 2.2lt #Decimal, force two leading & two trailing (time2)
fs2 23 2 0 2 0t #Integer, force trailing (hour)
fs2 24 0 2 0 2lt #Integer, force leading & trailing (min)
# --------------------------------------------------------------------------
#String and string selector definitions for NC output
# --------------------------------------------------------------------------
#Numbered question 164. string to detect Rotary axis y/n
sq164
#Misc. string definitions
sopen_prn " ; " #String for open parenthesis "("
sclose_prn #String for close parenthesis ")"
sdelimiter "|" #String for delimiter
# String constants
sdef "CYCL DEF"
scyclcall "CYCL CALL"
stooldef "TOOL DEF "
stoolcall "TOOL CALL "
ssetup "SET UP "
sdepth "DEPTH "
speckg "PECKG "
spitch "PITCH "
sdwell "DWELL "
sbeginpgm "BEGIN PGM"
sendpgm "END PGM"
smax "MAX"
sstop "M05"
strc "C"
strcc "CC"
strcr "CR"
strcp "CP"
#-------------------------------------------------------------------------
strf0 ""
strf "F"
strl "L"
strr "R"
strr0 "R0"
strm99 "M99"
strix "IX"
striy "IY"
striz "IZ"
strx "X"
stry "Y"
strz "Z"
smaxrate "FMAX" #"Rapid" positioning feedrate
#Drilling strings
s200q "Q200="
s200 " ;SET-UP CLEARANCE ~"
s201 " ;DEPTH ~"
s202 " ;PLUNGING DEPTH ~"
s203 " ;SURFACE COORDINATE ~"
s204 " ;2ND SET-UP CLEARANCE ~"
s205 " ;MINIMUM PLUNGING DEPTH ~"
s206 " ;FEED RATE FOR PLUNGING ~"
s208 " ;RETRACTION FEEDRATE ~"
s210 " ;DWELL TIME AT TOP ~"
s211 " ;DWELL TIME AT BOTTOM ~"
s212 " ;DECREMENT ~"
s213 " ;BREAKS ~"
s214 " ;DISENGAGING DIRECTION (0/1/2/3/4) AT BOTTOM OF HOLE ~"
s239 " ;THREAD PITCH ~"
s256 " ;DISTANCE FOR CHIP BREAK ~"
s257 " ;INFEED DEPTH FOR CHIP BREAKING ~"
s258 " ;UPPER ADVANCED STOP DISTANCE ~"
s259 " ;LOWER ADVANCED STOP DISTANCE ~"
s336 " ;ANGLE FOR ORIENTED SPINDLE STOP ~"
#Address string definitions
strm0 ""
strm "M"
strn "N"
stro "O"
strp "P"
srad "R"
srminus "R-"
sblank
#Cantext string definitions (spaces must be padded here)
sm00 "M00"
sm01 "M01"
strtextno
strcantext
#Transform mirror and rotate codes
strns_mir_on "G51.1" #Programmable mirror image code
strns_mir_off "G50.1" #Programmable mirror image cancel code
strns_rot_on "G68" #Coordinate System Rotation
strns_rot_off "G69" #Coordinate System Rotation Cancel
# --------------------------------------------------------------------------
# Error messages
# --------------------------------------------------------------------------
saxiswarn "WARNING-POST ROTARY AXIS ASSIGNMENT ('rot_on_x') OVERWRITTEN BY OPERATION"
saxisoff "ERROR-POST ROTARY AXIS ASSIGNMENT ('rot_on_x') IS DISABLED"
saxiserror "ERROR-INVALID ROTARY AXIS ASSIGNMENT ('rot_on_x') FOR CURRENT OPERATION"
sindxerror "WARNING-INDEX ANGLE DOES NOT MATCH POST SETTING ('ctable')"
stlorgerr "ERROR-TOOL ORIGIN DOES NOT MATCH CENTER OF ROTATION IN POLAR MILLING"
shomeserror "ERROR-G92 WORK OFFSET ('mi1') DOES NOT SUPPORT TRANSFORM SUBPROGRAM"
sprgnerror "ERROR-SUBPROGRAM NUMBER MATCHES THE MAIN PROGRAM NUMBER"
splnerror "ERROR-DETERMINING THE TOOL AXIS WORK PLANE"
# --------------------------------------------------------------------------
# General G and M Code String select tables
# --------------------------------------------------------------------------
# Motion G code selection
sg00 L #Rapid
sg01 L #Linear feed
sg02 DR- #Circular interpolation CW
sg03 DR+ #Circular interpolation CCW
sg04 DWELL #Dwell
sgcode #Target for string
fstrsel sg00 gcode$ sgcode 5 -1
# --------------------------------------------------------------------------
# Select tool axis work plane code
sg17 Z #XY plane code
sg19 X #YZ plane code
sg18 Y #XZ plane code
sgplane #Target string
fstrsel sg17 plane$ sgplane 3 -1
# --------------------------------------------------------------------------
#Select english/metric code
sg20 INCH #Inch code
sg21 MM #Metric code
smetric #Target string
fstrsel sg20 met_tool$ smetric 2 -1
# --------------------------------------------------------------------------
# Cutter compensation G code selection
scc0 R0 #Cancel cutter compensation
scc1 RL #Cutter compensation left
scc2 RR #Cutter compensation right
sccomp #Target for string
fstrsel scc0 cc_pos$ sccomp 3 -1
# --------------------------------------------------------------------------
# Feed mode G code selection
sg94 G94 #UPM
sg94d G94 #DPM, See pfcalc_deg if you use another gcode
sg93 G93 #Inverse
sgfeed #Target for string
fstrsel sg94 ipr_type sgfeed 3 -1
# --------------------------------------------------------------------------
# Generate string for spindle
sm04 M04 #Spindle reverse
sm05 M05 #Spindle off
sm03 M03 #Spindle forward
spindle #Target for string
fstrsel sm04 spdir2 spindle 3 -1
# --------------------------------------------------------------------------
# Coolant M code selection for V9 style coolant
sm09 M9 #Coolant Off
sm08 M8 #Coolant Flood
sm08_1 M8 #Coolant Mist
sm08_2 M8 #Coolant Tool
scoolant #Target for string
fstrsel sm09 coolant$ scoolant 4 -1
# --------------------------------------------------------------------------
# Table rotation direction, index
sindx_cw #Rotate CW code (was 'M22')
sindx_ccw #Rotate CCW code (was 'M21')
sindx_mc #Target for string
fstrsel sindx_cw indx_mc sindx_mc 2 -1
# --------------------------------------------------------------------------
# Canned drill cycle string select
sg81 "200 DRILLING ~" #pdrill
sg81d "200 DRILLING ~" #pdrill
sg83 "201 REAMING ~" #ppeck drill
sg83d "201 REAMING ~" #ppeck drill
sg73 "202 BORING ~" #pchpbrk break
sg73d "202 BORING ~" #pchpbrk break
sg84 "203 UNIVERSAL DRILLING ~" #ptap
sg84d "203 UNIVERSAL DRILLING ~" #ptap
sg85 "1.0 PECKING" #pbore1
sg85d "1.0 PECKING" #pbore1
sg86 "205 UNIVERSAL PECKING ~" #pbore2
sg86d "205 UNIVERSAL PECKING ~" #pbore2
sgm1 "2.0 TAPPING" #pmisc1 -right hand
sgm1d "2.0 TAPPING" #pmisc1 -left hand
sgm2 "206 TAPPING NEW ~" #pmisc2 -right hand
sgm2d "206 TAPPING NEW ~" #pmisc2 -left hand
sgcst8 "17.0 RIGID TAPPING GS" #pdrlcst8 -right hand
sgcst8d "17.0 RIGID TAPPING GS" #pdrlcst8 -left hand
sgcst9 "207 RIGID TAPPING NEW ~" #pdrlcst9 -right hand
sgcst9d "207 RIGID TAPPING NEW ~" #pdrlcst9 -left hand
sgcst10 "209 TAPPING W/ CHIP BRKG. ~" #pdrlcst10 -right hand
sgcst10d "209 TAPPING W/ CHIP BRKG. ~" #pdrlcst10 -left hand
sgdrill #Target for string
fstrsel sg81 drlgsel sgdrill 22 -1
# --------------------------------------------------------------------------
# Select incremental or absolute G code
sg90 A #Absolute code
sg91 I #Incremental code
sgabsinc #Target string
fstrsel sg90 absinc$ sgabsinc 2 -1
# --------------------------------------------------------------------------
# Month selector
smon0 ""
smon1 "JAN."
smon2 "FEB."
smon3 "MAR."
smon4 "APR."
smon5 "MAY."
smon6 "JUN."
smon7 "JUL."
smon8 "AUG."
smon9 "SEP."
smon10 "OCT."
smon11 "NOV."
smon12 "DEC."
smonth
fstrsel smon0 month$ smonth 13 -1
# --------------------------------------------------------------------------
# Buffer file definitions
temp_t : -1 #Tool Number (saved in Buffer1)
plane_t : 0 #Work plane (saved in Buffer1)
size1 : 0 #To hold the 'size' of Buffer1
rc1 : 1 #Buffer1 'read index'
wc1 : 1 #Buffer1 'write index'
fbuf 1 0 2 0 0#Declare Buffer1 (holds 2 values)
# --------------------------------------------------------------------------
# Lookup table definitions - for Math Functions FLOOK, FRANGE, and FINC
# --------------------------------------------------------------------------
# Spindle code lookup table
flktbl 1 45 # Lookup table no. No. of entry pairs
224 19
250 21 # Code 1 (output) Match 1
280 24 # Code 2 Match 2
315 27 # . .
355 28 # . .
400 34 # . .
450 38
500 43
560 48
630 54
710 60
800 68
900 77
1000 85
1120 95
1250 106
1400 119
1600 136
1800 153
2000 170
2240 190
2500 212
2800 238
1250 242
3150 268
1400 270
3550 302
1600 310
1800 348
2000 387
2240 434
2500 484
2800 542
1250 550
3150 610
1250 616
3550 687
1600 704
1800 792
2000 880
2240 985
2500 1100
2800 1232
3150 1386
3350 1562
# --------------------------------------------------------------------------
# Toolchange / NC output Variable Formats
# --------------------------------------------------------------------------
fmt 4 t$ #Tool number
fmt D 4 tloffno$ #Diameter offset number
fmt L 4 tlngno$ #Length offset number
fmt R 8 tlrad$ #Tool Radius
fmt L 9 tlength # Output either "L0,0" or "L+0,0"
fmt S 4 speed #Spindle speed
fmt S 4 sscode #Spindle speed code (from tbl 1)
# --------------------------------------------------------------------------
fmt 4 n$ #Sequence number
fmt X 2 xabs #X position output
fmt Y 2 yabs #Y position output
fmt Z 2 zabs #Z position output
fmt IX 3 xinc #X position output
fmt IY 3 yinc #Y position output
fmt IZ 3 zinc #Z position output
fmt Z 2 zretract #Z retract level at the end of each (drilling) tool
fmt A 11 cabs #C axis position
fmt A 14 cinc #C axis position
fmt A 4 indx_out #Index position
fmt R 14 rt_cinc #C axis position, G68
fmt X 2 i$ #Arc center description in X
fmt Y 2 j$ #Arc center description in Y
fmt Z 2 k$ #Arc center description in Z
fmt R 2 arcrad$ #Arc Radius
fmt IPA 11 sweep$ #Arc sweep angle
fmt F 15 feed #Feedrate
fmt 11 dwell$ #Dwell
fmt M 5 cantext$ #Canned text
# --------------------------------------------------------------------------
fmt 7 progno$ #Program number
fmt "LBL" 7 main_prg_no$ #Program number
fmt "LBL" 7 sub_prg_no$ #Program number
fmt X 2 sub_trnsx$ #Rotation point
fmt Y 2 sub_trnsy$ #Rotation point
fmt Z 2 sub_trnsz$ #Rotation point
# --------------------------------------------------------------------------
fmt 18 shftdrl$ #Fine bore tool shift
fmt 18 setup #Safety Distance (initht)
fmt 18 peckg #Feed Depth (peck1)
fmt 18 drldepth #Drill depth
# --------------------------------------------------------------------------
#Drilling variables
fmt Z 2 initht$ #Initial Z height for drilling
fmt " Q200=" 20 refht$ #Retract height
fmt " Q201=" 20 depth$ #Drill depth
fmt " Q202=" 20 peck1$ #Peck depth
fmt " Q203=" 20 surf_coord
fmt " Q204=" 20 clearht #Clearance height
fmt " Q205=" 20 min_plunge #Minimum plunge depth
fmt " Q206=" 15 drill_feed #Drilling feedrate
fmt " Q208=" 21 ret_feed #Retraction feedrate
fmt " Q210=" 19 top_dwell #Dwell time at top of hole
fmt " Q211=" 19 bot_dwell #Dwell time at bottom of hole
fmt " Q212=" 20 decrement #Decreasing value for pecking cycle
fmt " Q213=" 20 breaks #??
fmt " Q214=" 4 shft_dir #Disengaging direction (0/1/2/3/4) at bottom of hole
fmt " Q239=" 20 pitch #Thread pitch - New style
fmt 20 pitch2 #Thread Pitch - Old Style
fmt " Q256=" 20 chp_brk #Chip break retraction amount
fmt " Q257=" 20 infeed #Infeed depth for chip breaking
fmt " Q258=" 20 up_stop #Upper advanced stop distance
fmt " Q259=" 20 low_stop #Lower advanced stop distance
fmt " Q336=" 20 stop_ang #Angle for oriented spindle stop
# --------------------------------------------------------------------------
fmt "TOOL - " 4 tnote #Note format
fmt " DIA. OFF. - " 4 toffnote #Note format
fmt " LEN. - " 4 tlngnote #Note format
fmt " DIA. - " 1 tldia$ #Note format
# --------------------------------------------------------------------------
fmt 4 stck_crnr$ #Origin corner of stock (0 - 8)
fmt X 2 stck_x$ #X origin of block
fmt Y 2 stck_y$ #Y origin of block
fmt Z 2 stck_z$ #Z origin of block
fmt X 2 stck_ht$ #X - Stock Height
fmt Y 2 stck_wdth$ #Y - Stock Width
fmt Z 2 stck_thck$ #Z - Stock Thickness
fmt X 2 stck_x_min #Minimum stock block position (X)
fmt Y 2 stck_y_min #Minimum stock block position (Y)
fmt Z 2 stck_z_min #Minimum stock block position (Z)
fmt X 2 stck_x_max #Maximum stock block position (X)
fmt Y 2 stck_y_max #Maximum stock block position (Y)
fmt Z 2 stck_z_max #Maximum stock block position (Z)
# --------------------------------------------------------------------------
fmt 4 year2 #Calculated year value
fmt 22 time2 #Capture 24-hour time value into 'time2' variable
fmt 23 hour #Hour
fmt 24 min #Minutes
year2 = year$ + 2000
# --------------------------------------------------------------------------
# Tool Comment / Manual Entry Section
# --------------------------------------------------------------------------
ptoolcomment #Comment for tool
tnote = t$
toffnote = tloffno$
tlngnote = tlngno$
sopen_prn, pstrtool, *tnote, *toffnote, *tlngnote, *tldia$, sclose_prn, e$
pstrtool #Comment for tool
if strtool$ <> sblank,
[
strtool$ = ucase(strtool$)
*strtool$, " "
]
pcomment$ #Comment from manual entry (must call pcomment2 if booleans)
pcomment2
pcomment2 #Comment from manual entry
scomm$ = ucase (scomm$)
if gcode$ = 1005, sopen_prn, scomm$, sclose_prn, e$ #Manual entry - as comment
if gcode$ = 1006, scomm$, e$ #Manual entry - as code
if gcode$ = 1007, sopen_prn, scomm$, sclose_prn #Manual entry - as comment with move NO e$
if gcode$ = 1026, scomm$ #Manual entry - as code with move NO e$
if gcode$ = 1008, sopen_prn, scomm$, sclose_prn, e$ #Operation comment
if gcode$ = 1051, sopen_prn, scomm$, sclose_prn, e$ #Machine name
if gcode$ = 1052, sopen_prn, scomm$, sclose_prn, e$ #Group comment
if gcode$ = 1053, sopen_prn, scomm$, sclose_prn, e$ #Group name
if gcode$ = 1054, sopen_prn, scomm$, sclose_prn, e$ #File Descriptor
pblkform #Output the 'BLK FORM' statements at start of program
if blk_form,
[
if stck_crnr$ = 0, #Top - Center
[
stck_x_min = stck_x$ - stck_ht$/2
stck_y_min = stck_y$ - stck_wdth$/2
stck_z_min = stck_z$ - stck_thck$
stck_x_max = stck_x$ + stck_ht$/2
stck_y_max = stck_y$ + stck_wdth$/2
stck_z_max = stck_z$
]
if stck_crnr$ = 1, #Top - Upper Left
[
stck_x_min = stck_x$
stck_y_min = stck_y$ - stck_wdth$
stck_z_min = stck_z$ - stck_thck$
stck_x_max = stck_x$ + stck_ht$
stck_y_max = stck_y$
stck_z_max = stck_z$
]
if stck_crnr$ = 2, #Top - Upper Right
[
stck_x_min = stck_x$ - stck_ht$
stck_y_min = stck_y$ - stck_wdth$
stck_z_min = stck_z$ - stck_thck$
stck_x_max = stck_x$
stck_y_max = stck_y$
stck_z_max = stck_z$
]
if stck_crnr$ = 3, #Top - Lower Right
[
stck_x_min = stck_x$ - stck_ht$
stck_y_min = stck_y$
stck_z_min = stck_z$ - stck_thck$
stck_x_max = stck_x$
stck_y_max = stck_y$ + stck_wdth$
stck_z_max = stck_z$
]
if stck_crnr$ = 4, #Top - Lower Left
[
stck_x_min = stck_x$
stck_y_min = stck_y$
stck_z_min = stck_z$ - stck_thck$
stck_x_max = stck_x$ + stck_ht$
stck_y_max = stck_y$ + stck_wdth$
stck_z_max = stck_z$
]
if stck_crnr$ = 5, #Bottom - Upper Left
[
stck_x_min = stck_x$
stck_y_min = stck_y$ - stck_wdth$
stck_z_min = stck_z$
stck_x_max = stck_x$
stck_y_max = stck_y$
stck_z_max = stck_z$ + stck_thck$
]
if stck_crnr$ = 6, #Bottom - Upper Right
[
stck_x_min = stck_x$ - stck_ht$
stck_y_min = stck_y$ - stck_wdth$
stck_z_min = stck_z$
stck_x_max = stck_x$
stck_y_max = stck_y$
stck_z_max = stck_z$ + stck_thck$
]
if stck_crnr$ = 7, #Bottom Lower Right
[
stck_x_min = stck_x$ - stck_ht$
stck_y_min = stck_y$
stck_z_min = stck_z$
stck_x_max = stck_x$
stck_y_max = stck_y$
stck_z_max = stck_z$ + stck_thck$
]
if stck_crnr$ = 8, #Bottom - Lower Left
[
stck_x_min = stck_x$
stck_y_min = stck_y$
stck_z_min = stck_z$
stck_x_max = stck_x$ + stck_ht$
stck_y_max = stck_y$ + stck_wdth$
stck_z_max = stck_z$ + stck_thck$
]
n$, "BLK FORM 0.1 Z", *stck_x_min, *stck_y_min, *stck_z_min, e$
n$, "BLK FORM 0.2 ", *stck_x_max, *stck_y_max, *stck_z_max, e$
]
pwrtt$ #Tool Table Output
if tdef_table, # Put all the TOOL DEF blocks at the top of the program?
[
if t$ > 0 & gcode$ <> 1003, #If a "real" toolchange
#"/", n$, *stooldef, *t$, *tlength, *tlrad$, e$
n$, *stooldef, *t$, e$
]
pparameter$ #Operation parameters postblock
if prmcode$ = 12385,
[
result = rpar(sparameter$, 1)
if result <> 0, thd_ttpr = 1 #Thread milling taper angle
]
pplane #State the Tool Axis working plane
if plane$ = zero | plane$ = one | plane$ = two, *sgplane
else, result = mprint(splnerror)
# --------------------------------------------------------------------------
# Start of File and Toolchange Setup
# --------------------------------------------------------------------------
ptime #Convert 24-hour time format into 12-hour AM/PM format
if time$ >= 13, time2 = (time$ - 12)
else, time2 = time$
hour = int(time2), min = frac(time2)
*hour, ":", *min,
if time$ > 12, " PM"
else, " AM"
pheader$ #Call before start of file
if force_n0, # Force sequence numbering to START at '0' and increment by '1'
[
seqno$ = 0
n$ = seqno$
seqinc$ = 1
]
n$, *sbeginpgm, *sprogname$, *smetric, e$
sav_spc = spaces$
spaces$ = 0
#*progno$, sopen_prn, sprogname$, sclose_prn, e$
*progno$, e$
#sopen_prn, "PROGRAM NAME - ", sprogname$, sclose_prn, e$
sopen_prn, "DATE - ", date$, e$
sopen_prn, "TIME - ", time$, e$
#sopen_prn, "DATE=DD-MM-YY - ", date$, " TIME=HH:MM - ", time$, sclose_prn, e$ #Date and time output Ex. 12-02-05 15:52
#sopen_prn, "DATE - ", month$, "-", day$, "-", year$, sclose_prn, e$ #Date output as month,day,year - Ex. 02-12-05
#sopen_prn, "DATE - ", *smonth, " ", day$, " ", *year2, sclose_prn, e$ #Date output as month,day,year - Ex. Feb. 12 2005
#sopen_prn, "TIME - ", time$, sclose_prn, e$ #24 hour time output - Ex. 15:52
#sopen_prn, "TIME - ", ptime sclose_prn, e$ #12 hour time output 3:52 PM
spathnc$ = ucase(spathnc$)
smcname$ = ucase(smcname$)
stck_matl$ = ucase(stck_matl$)
snamenc$ = ucase(snamenc$)
#sopen_prn, "MCX FILE - ", *smcpath$, *smcname$, *smcext$, sclose_prn, e$
#sopen_prn, "NC FILE - ", *spathnc$, *snamenc$, *sextnc$, sclose_prn, e$
#sopen_prn, "MATERIAL - ", *stck_matl$, sclose_prn, e$
spaces$ = sav_spc
pblkform # Output the 'BLK FORM' statements at start of program
psof0$ #Start of file for tool zero
psof$
psof$ #Start of file for non-zero tool number
pcuttype
toolchng = one
sav_absinc = absinc$
pcom_moveb
c_mmlt$ #Multiple tool subprogram call
comment$
pcan
if tdef_table = no$, #Put all the TOOL DEF blocks at the top of the program?
#"/", n$, *stooldef, *t$, *tlength, *tlrad$, e$
n$, *stooldef, *t$, e$
if use_scode = yes$, #Use Spindle code lookup table?
sscode = frange(1, speed) #Get spindle code for RPM
else,
sscode = speed #Use programmed RPM
n$, *stoolcall, *t$, pplane, *sscode, e$
if output_M6, n$, "M6", e$
#ptoolcomment
!opcode$
#pindex
if mi1$ > one, absinc$ = zero
pcan1, n$, *sgcode, pfxout, pfyout, strr0, smaxrate, *spindle, e$
n$, *sgcode, pfzout, strr0, smaxrate, *scoolant, e$
zretract = zabs
prv_feed = c9k
absinc$ = sav_absinc
pcom_movea
toolchng = zero
c_msng$ #Single tool subprogram call
ptlchg0$ #Call from NCI null tool change (tool number repeats)
pcuttype
pcom_moveb
c_mmlt$ #Multiple tool subprogram call
comment$
pcan
result = newfs(15, feed) #Reset the output format for 'feed'
pspindchng
#n, scoolant, e
if cuttype = zero, ppos_cax_lin
if gcode$ = one, plinout
else, prapidout
pcom_movea
c_msng$ #Single tool subprogram call
ptlchg$ #Tool change
pcuttype
toolchng = one
pcom_moveb
c_mmlt$ #Multiple tool subprogram call
comment$
pcan
result = newfs(15, feed) #Reset the output format for 'feed'
if tdef_table = no$, # Put all the TOOL DEF blocks at the top of the program?
#"/", n$, *stooldef, *t$, *tlength, *tlrad$, e$
n$, *stooldef, *t$, e$
if use_scode = yes$, # Use Spindle code lookup table?
sscode = frange(1, speed) # Get spindle code for RPM
else,
sscode = speed #Use programmed RPM
n$, *stoolcall, *t$, pplane, *sscode, e$
if output_M6, n$, "M6", e$
#ptoolcomment
!opcode$
#pindex
sav_absinc = absinc$
if mi1$ > one, absinc$ = zero
pcan1, n$, *sgcode, pfxout, pfyout, strr0, smaxrate, *spindle, e$
n$, *sgcode, pfzout, strr0, smaxrate, *scoolant, e$
zretract = zabs
prv_feed = c9k
absinc$ = sav_absinc
pcom_movea
toolchng = zero
c_msng$ #Single tool subprogram call
pretract #End of tool path, toolchange
sav_absinc = absinc$
absinc$ = one
sav_coolant = coolant$
coolant$ = zero
#cc_pos is reset in the toolchange here
cc_pos$ = zero
gcode$ = zero
pcan
n$, sccomp, psub_end_mny, e$
if prv_opcode$ = three, # Ending a (drill) canned cycle operation
n$, *strl, *zretract, strr0, smaxrate, strm, e$
n$, *scoolant, e$ #Force coolant off
#if not(toolchng = 1003), n, *sstop, e
n$, *sstop, e$
prv_feed = c9k
pcan2
absinc$ = sav_absinc
coolant$ = sav_coolant
protretinc #Reset the C axis revolution counter
if frc_cinit & rot_on_x,
[
rev = zero
sav_rev = zero
cabs = zero
csav = zero
indx_out = zero
if index, e$, pindxcalc, pindex
else, *cabs
prvcabs = zero
!csav, !cabs
]
peof0$ #End of file for tool zero
peof$
peof$ #End of file for non-zero tool
toolchng = 1003
pretract
comment$
#n$, "TOOL CALL 0", e$
if output_M6, n$, "M6", e$
#n$, "L X+0 Y+0 Z+0 R0 FMAX M92", e$
n$, "L Z+0 R0 FMAX M92", e$
if output_M30, n$, "M30", e$
else, n$, *sendpgm, *sprogname$, *smetric, e$
mergesub$
clearsub$
mergeaux$
clearaux$
#Toolchange setup
pspindchng #Spindle speed change
if prv_spdir2 <> spdir2 & prv_speed <> zero, n$, *sm05, e$
if prv_speed <> speed | prv_spdir2 <> spdir2,
[
if use_scode = yes$, #Use Spindle code lookup table?
sscode = frange(1, speed) #Get spindle code for RPM
else,
sscode = speed #Use programmed RPM
n$, *stoolcall, *t$, *sscode, e$
n$, *sgcode, "M3", e$
#if speed, n$, *speed, *spindle, e$
]
!speed, !spdir2
pspindle #Spindle speed calculations for RPM
speed = abs(ss$)
if maxss$ = zero | maxss$ > max_speed, maxss$ = max_speed
#zero indicates spindle off (not a mistake)
if speed,
[
if speed > max_speed, speed = maxss$
if speed < min_speed, speed = min_speed
]
spdir2 = fsg3(spdir$)
pq$ #Setup post based on switch settings
if stagetool = one, bldnxtool$ = one
#Rotaxtyp = 1 sets initial matrix to top
#Rotaxtyp = -2 sets initial matrix to front
if vmc, rotaxtyp$ = one
else, rotaxtyp$ = -2
#Shut off rotary axis if, Q164. Enable Rotary Axis button? n
if ucase(sq164) = strn, rot_on_x = zero
if spaces$ < one, spaces$ = one
!arctype$ # Save current setting
ptoolend$ #End of tool path, before reading new tool data
!speed, !spdir2
thd_ttpr = 0 #Reset thread milling taper angle flag
ptlchg1002$ #Call at actual toolchange, end last path here
if cuttype <> one, sav_rev = rev #Axis Sub does not update to rev
pspindle
whatline$ = four #Required for vector toolpaths
if gcode$ = 1000,
[
#Null toolchange
]
else,
[
#Toolchange and Start of file
if gcode$ = 1002,
[
#Actual toolchange
pretract
]
prv_xia = vequ(xh$)
prv_feed = c9k
]
# --------------------------------------------------------------------------
# Motion NC output
# --------------------------------------------------------------------------
#The variables for absolute output are xabs, yabs, zabs.
#The variables for incremental output are xinc, yinc, zinc.
# --------------------------------------------------------------------------
pchk_xyz # Which axis are moving ?
if fmtrnd(xabs) <> prv_xabs, xmove = yes$
else, xmove = no$
if fmtrnd(yabs) <> prv_yabs, ymove = yes$
else, ymove = no$
if fmtrnd(zabs) <> prv_zabs, zmove = yes$
else, zmove = no$
prapidout #Output to NC of linear movement - rapid
pchk_xyz # Which axis are moving ?
if not(modal_XY) & (xmove | ymove), result = force(xabs, yabs)
if zmove = yes$,
[
if zabs > prv_zabs, # Z is coming UP
[
# Do the Z move before any X and/or Y move
pcan1, n$, *sgcode, pfzout, pcout, pccdia,
smaxrate, pspdl, e$
if xmove | ymove,
pcan1, n$, *sgcode, pxout, pyout, pcout,
pccdia, smaxrate, pspdl, e$
]
else, # Z is going DOWN
[
# Do the X and/or Y move before the Z move
if xmove | ymove,
pcan1, n$, *sgcode, pxout, pyout, pcout,
pccdia, smaxrate, pspdl, e$
pcan1, n$, *sgcode, pfzout, pcout, pccdia,
smaxrate, pspdl, e$
]
]
else, # Do the X and/or Y axis motion
[
if xmove | ymove,
[
pcan1, n$, *sgcode, pxout, pyout, pzout,
pcout, pccdia, smaxrate, pspdl, e$
]
]
plinout #Output to NC of linear movement - feed
pchk_xyz # Which axis are moving ?
if not(modal_XY) & (xmove | ymove), result = force(xabs, yabs)
if xmove | ymove | zmove,
pcan1, n$, sgfeed, *sgcode, pxout, pyout, pzout, pcout,
pccdia, pfeed, pspdl, e$
parc_cntr #Select the arc center output axis
if plane$ = zero, *i$, *j$, !k$ #XY plane
if plane$ = one , !i$, *j$, *k$ #YZ plane
if plane$ = two , *i$, !j$, *k$ #XZ plane
parc_endpt #The arc endpoint axis outputs
if plane$ = zero, pxout, pyout #XY plane
if plane$ = one , pyout, pzout #YZ plane
if plane$ = two , pxout, pzout #XZ plane
parc_helix_endpt #Helix endpoint outputs
if plane$ = zero, pzout #XY plane
if plane$ = one , pxout #YZ plane
if plane$ = two , pyout #XZ plane
pcirout #Output to NC of circular interpolation
pchk_xyz # Which axis are moving ?
if not(modal_XY) & (xmove | ymove | zmove), result = force(xabs, zabs)
if arc_pitch$, #Helical interpolation
[
n$, strcc, parc_cntr, e$
if plane$ = one, sweep$ = -(sweep$)
pcan1, n$, strcp, *sweep$, parc_helix_endpt, *sgcode, pccdia, pfeed, pspdl, e$
]
else,
[
if arcoutput$ = zero | full_arc_flg$,
[
n$, strcc, parc_cntr, e$
pcan1, n$, strc, parc_endpt, *sgcode, pccdia, pfeed, pspdl, e$
]
else,
[
#Arc output for R
pcan1, n$, strcr, parc_endpt, *arcrad$, *sgcode, pccdia,
pfeed, pspdl, e$
]
]
pcom_moveb #Common motion preparation routines, before
pxyzcout
ps_inc_calc
pncoutput #Movement output
pcom_moveb
comment$
pcan
if cuttype = zero, ppos_cax_lin #Toolplane rotary positioning
if gcode$ = zero, prapidout
if gcode$ = one, plinout
if gcode$ > one & gcode$ < four, pcirout
if mr_rt_actv, #Restore absolute/incremental for G51/G68
[
absinc$ = sav_absinc
mr_rt_actv = zero
]
pcom_movea
pcom_movea #Common motion preparation routines, after
pcan2
pe_inc_calc
pdwl_spd$ #Call from NCI gcode 4
pspindle
comment$
pspindchng
pcan
if fmtrnd(dwell$), pcan1, n$, *sgcode, *dwell$, strcantext, e$
else, pcan1, n$, strcantext, e$
pcan2
prapid$ #Output to NC of linear movement - rapid
pncoutput
pzrapid$ #Output to NC of linear movement - rapid Z only
pncoutput
plin$ #Output to NC of linear movement - feed
pncoutput
pz$ #Output to NC of linear movement - feed Z only
pncoutput
pmx$ #Output to NC of vector NCI
pncoutput
pcir$ #Output to NC of circular interpolation
pncoutput
#Pre-process rotary motion control flags
pmx0$ #5 axis gcode setup
if drillcur$ = zero,
[
if fr$ = -2, gcode$ = zero
else, gcode$ = one
]
plin0$ #Linear movement, mill motion test
pmotion_su
pcir0$ #Circular interpolation, mill arc motion test
pmotion_su
# Check the arc output format
# If user has selected 'CR' output format, make sure that we never
# output an arc move that exceeds 180 degrees in a single block.
# *Also, if the user has set for 'full arcs', make sure that we do
# NOT output in the 'CR' format mode.
# *Also, if 'acrc_pitch' is not zero (means doing helix motion)
# make sure that we are NOT in 'CR' format mode.
if arcoutput$ > zero & not(full_arc_flg$) | abs(arc_pitch$) > vtol$,
[
if abs(sweep$) > 180 & breakarcs$ <> 2, breakarcs$ = 2
]
if absinc$ = one, #Set for INCREMENTAL arc center positions
[
!absinc$
!arctype$ # Save current setting
arctype$ = 1 # Set for INCREMENTAL (Start->Center) arc centers
result = nwadrs(strix, i$)
result = nwadrs(striy, j$)
result = nwadrs(striz, k$)
]
else,
[
arctype$ = prv_arctype$ # Restore previous setting
if arctype$ = one,
[ #Set for ABSOLUTE arc center positions
result = nwadrs(strx, i$)
result = nwadrs(stry, j$)
result = nwadrs(strz, k$)
]
else,
[ #Set for INCREMENTAL arc center positions
result = nwadrs(strix, i$)
result = nwadrs(striy, j$)
result = nwadrs(striz, k$)
]
]
# --------------------------------------------------------------------------
# Motion output components
# --------------------------------------------------------------------------
pfeed # Feedrate output
if modal_feed = no$, *feed
else,
[
if fmtrnd(feed) <> prv_feed, feed # Has Feedrate changed?
else, strf0 # No, just output an 'F'
]
pccdia #Cutter Compensation
if cc_pos$ <> prv_cc_pos$, *sccomp, !cc_pos$ # CDC status changed?
else,
[
if modal_cdc = no$, *sccomp # Are 'RR' and 'RL' comp codes modal?
else, strr0 # Just output an 'R'
]
pspdl # Spindle state
if spdir2 <> prv_spdir2, spindle, !spdir2
else, strm0 # Just output an 'M'
pfxout #Force X axis output
if absinc$ = zero, *xabs, !xinc
else, *xinc, !xabs
pxout #X output
if absinc$ = zero, xabs, !xinc
else, xinc, !xabs
pfyout #Force Y axis output
if absinc$ = zero, *yabs, !yinc
else, *yinc, !yabs
pyout #Y output
if absinc$ = zero, yabs, !yinc
else, yinc, !yabs
pfzout #Force Z axis output
if absinc$ = zero, *zabs, !zinc
else, *zinc, !zabs
pzout #Z output
if absinc$ = zero, zabs, !zinc
else,
[
if fmtrnd(zinc) <> zero, zinc
!zabs
]
pfcout #Force C axis output
if index = zero & rot_on_x,
[
if absinc$ = zero, *cabs, !cinc
else, *cinc, !cabs
]
pcout #C axis output
if index = zero & rot_on_x,
[
if absinc$ = zero, cabs, !cinc
else, cinc, !cabs
]
pindex #Index output
if index & rot_on_x,
[
n$, `sindx_mc, indx_out, e$
!cabs, !cinc
]
ppos_cax_lin #Position the rotary axis before move - rapid
if index, pindex
else,
[
if fmtrnd(prv_cabs) <> fmtrnd(cabs) & rot_on_x,
[
sav_gcode = gcode$
gcode$ = zero
n$, sgcode, pcout, e$
!cia
ps_cinc_calc
gcode$ = sav_gcode
]
]
# --------------------------------------------------------------------------
# Drilling
# --------------------------------------------------------------------------
pdrill0$ #Pre-process before drill call
sav_dgcode = gcode$ #Capture gcode for 5 axis drill
pdrlcommonb #Canned Drill Cycle common call, before
if sav_dgcode = 81,
[
if drillcyc$ > 6 & drillcyc$ < 12, drlgsel = fsg1(-ss$) + drillcyc$ * two
else, drlgsel = fsg2(dwell$) + drillcyc$ * two
if initht$ <> refht$, drillref = zero
else, drillref = one
prv_dwell$ = zero
]
if cuttype = three, sav_dgcode = gcode$
else, z$ = depth$
if cuttype = one, prv_zia = initht$ + (rotdia$/two)
else, prv_zia = initht$
pcom_moveb
feed = fr_pos$
comment$
pcan
#5 axis must map the true Z, correct Z calculation here
if cuttype = three,
[
prv_zia = zabs + (-depth$) + initht$
zia = fmtrnd(zabs)
zinc = zia - prv_zia
]
pchk_xyz # Which axis are moving ?
if not(modal_XY) & (xmove | ymove), result = force(xabs, yabs)
# Drilling Calculations (for SETUP and PECKG parameters)
# 'setup_sign' setting ->
# 0 = Do not change the sign of SETUP
# 1 = Always make SETUP a NEGATIVE value
# 2 = Always make SETUP a POSITIVE value
if setup_sign,
[
if setup_sign = one, setup = abs(refht$) * m_one
else, setup = abs(refht$)
]
# 'peckg_sign' setting ->
# 0 = Do not change the sign of PECKG
# 1 = Always make PECKG a NEGATIVE value
# 2 = Always make PECKG a POSITIVE value
if peckg_sign,
[
if peckg_sign = one, peckg = abs(peck1$) * m_one
else, peckg = abs(peck1$)
]
#Get Z axis (drill depth)
if absinc$ = zero, drldepth = zabs #Drill depth (absolute)
else, drldepth = zinc #Drill depth (incremental)
pdrill$ #Cycle 200 Drilling
pdrlcommonb
top_dwell = dwell$
bot_dwell = shftdrl$
drill_feed = feed
surf_coord = tosz$
clearht = initht$
if peck1$ = 0, peck1$ = abs(depth$)
n$, *sdef, *sgdrill, e$
*refht$, *s200, e$ #SET-UP CLEARANCE
*depth$, *s201, e$ #HOLE DEPTH
*drill_feed, *s206, e$ #FEED RATE FOR PLUNGING
*peck1$, *s202, e$ #PLUNGING DEPTH
*top_dwell, *s210, e$ #DWELL TIME AT TOP
*surf_coord, *s203, e$ #SURFACE COORDINATE
*clearht, *s204, e$ #2ND SET-UP CLEARANCE
*bot_dwell, *s211, e$ #DWELL TIME AT BOTTOM
n$, *scyclcall, e$
n$, *strl, pfxout, pfyout, strr0, smaxrate, strm99, e$
pcom_movea
ppeck$ #Cycle 201 Reaming
pdrlcommonb
bot_dwell = shftdrl$
drill_feed = feed
surf_coord = tosz$
clearht = initht$
ret_feed = dwell$
n$, *sdef, *sgdrill, e$
*refht$, *s200, e$ #SET-UP CLEARANCE
*depth$, *s201, e$ #HOLE DEPTH
*drill_feed, *s206, e$ #FEED RATE FOR PLUNGING
*bot_dwell, *s211, e$ #DWELL TIME AT BOTTOM
*ret_feed, *s208, e$ #RETRACTION FEEDRATE
*surf_coord, *s203, e$ #SURFACE COORDINATE
*clearht, *s204, e$ #2ND SET-UP CLEARANCE
n$, *scyclcall, e$
n$, *strl, pfxout, pfyout, strr0, smaxrate, strm99, e$
pcom_movea
pchpbrk$ #Cycle 202 Boring
pdrlcommonb
bot_dwell = shftdrl$
drill_feed = feed
surf_coord = tosz$
clearht = initht$
ret_feed = dwell$
shft_dir = peck1$
stop_ang = peck2$
n$, *sdef, *sgdrill, e$
*refht$, *s200, e$ #SET-UP CLEARANCE
*depth$, *s201, e$ #HOLE DEPTH
*drill_feed, *s206, e$ #FEED RATE FOR PLUNGING
*bot_dwell, *s211, e$ #DWELL TIME AT BOTTOM
*ret_feed, *s208, e$ #RETRACTION FEEDRATE
*surf_coord, *s203, e$ #SURFACE COORDINATE
*clearht, *s204, e$ #2ND SET-UP CLEARANCE
*shft_dir, *s214, e$ #DISENGAGING DIRECTION (0/1/2/3/4) AT BOTTOM OF HOLE
*stop_ang, *s336, e$ #ANGLE FOR ORIENTED SPINDLE STOP
n$, *scyclcall, e$
n$, *strl, pfxout, pfyout, strr0, smaxrate, strm99, e$
pcom_movea
ptap$ #Cycle 203 Universal Drilling
pdrlcommonb
top_dwell = dwell$
bot_dwell = shftdrl$
drill_feed = feed
surf_coord = tosz$
clearht = initht$
decrement = drl_prm1$
breaks = drl_prm2$
min_plunge = drl_prm3$
ret_feed = drl_prm4$
chp_brk = drl_prm5$
n$, *sdef, *sgdrill, e$
*refht$, *s200, e$ #SET-UP CLEARANCE
*depth$, *s201, e$ #HOLE DEPTH
*drill_feed, *s206, e$ #FEED RATE FOR PLUNGING
*peck1$, *s202, e$ #PLUNGING DEPTH
*top_dwell, *s210, e$ #DWELL TIME AT TOP
*surf_coord, *s203, e$ #SURFACE COORDINATE
*clearht, *s204, e$ #2ND SET-UP CLEARANCE
*decrement, *s212, e$ #DECREMENT
*breaks, *s213, e$ #BREAKS
*min_plunge, *s205, e$ #MINIMUM PLUNGING DEPTH
*bot_dwell, *s211, e$ #DWELL TIME AT BOTTOM
*ret_feed, *s208, e$ #RETRACTION FEEDRATE
*chp_brk, *s256, e$ #DISTANCE FOR CHIP BREAK
n$, *scyclcall, e$
n$, *strl, pfxout, pfyout, strr0, smaxrate, strm99, e$
pcom_movea
pbore1$ #Cycle 1 Pecking/Drilling
pdrlcommonb
n$, sdef, *sgdrill, e$
n$, sdef, "1.1", ssetup, *setup, e$
n$, sdef, "1.2", sdepth, *drldepth, e$
n$, sdef, "1.3", speckg, *peckg, e$
n$, sdef, "1.4", sdwell, *dwell$, e$
n$, sdef, "1.5", *feed, e$
n$, *scyclcall, e$
n$, *strl, pfxout, pfyout, strr0, smaxrate, strm99, e$
pcom_movea
pbore2$ #Cycle 205 Universal Pecking
pdrlcommonb
bot_dwell = shftdrl$
drill_feed = feed
surf_coord = tosz$
clearht = initht$
decrement = drl_prm1$
min_plunge = drl_prm3$
chp_brk = drl_prm5$
up_stop = drl_prm6$
low_stop = drl_prm7$
infeed = drl_prm8$
n$, *sdef, *sgdrill, e$
*refht$, *s200, e$ #SET-UP CLEARANCE
*depth$, *s201, e$ #HOLE DEPTH
*drill_feed, *s206, e$ #FEED RATE FOR PLUNGING
*peck1$, *s202, e$ #PLUNGING DEPTH
*surf_coord, *s203, e$ #SURFACE COORDINATE
*clearht, *s204, e$ #2ND SET-UP CLEARANCE
*decrement, *s212, e$ #DECREMENT
*min_plunge, *s205, e$ #MINIMUM PLUNGING DEPTH
*up_stop, *s258, e$ #UPPER ADVANCED STOP DISTANCE
*low_stop, *s259, e$ #LOWER ADVANCED STOP DISTANCE
*infeed, *s257, e$ #INFEED DEPTH FOR CHIP BREAKING
*chp_brk, *s256, e$ #DISTANCE FOR CHIP BREAK
*bot_dwell, *s211, e$ #DWELL TIME AT BOTTOM
n$, *scyclcall, e$
n$, *strl, pfxout, pfyout, strr0, smaxrate, strm99, e$
pcom_movea
pmisc1$ #Cycle 2 Tapping - with floating holder #TODO
pdrlcommonb
n$, sdef, *sgdrill, e$
n$, sdef, "2.1", ssetup, *setup, e$
n$, sdef, "2.2", sdepth, *drldepth, e$
n$, sdef, "2.3", sdwell, *dwell$, e$
n$, sdef, "2.4", *feed, e$
n$, *scyclcall, e$
n$, *strl, pfxout, pfyout, strr0, smaxrate, strm99, e$
pcom_movea
pmisc2$ #Cycle 206 Tapping New - with floating holder
pdrlcommonb
bot_dwell = shftdrl$
drill_feed = feed
surf_coord = tosz$
clearht = initht$
n$, *sdef, *sgdrill, e$
*refht$, *s200, e$ #SET-UP CLEARANCE
*depth$, *s201, e$ #HOLE DEPTH
*drill_feed, *s206, e$ #FEED RATE FOR PLUNGING
*bot_dwell, *s211, e$ #DWELL TIME AT BOTTOM
*surf_coord, *s203, e$ #SURFACE COORDINATE
*clearht, *s204, e$ #2ND SET-UP CLEARANCE
n$, *scyclcall, e$
n$, *strl, pfxout, pfyout, strr0, smaxrate, strm99, e$
pcom_movea
pdrlcst8 #Cycle 17 Rigid Tapping - without floating holder
pdrlcommonb
if met_tool$, pitch2 = n_tap_thds$ # Tap pitch (mm per thread)
else, pitch2 = 1/n_tap_thds$ # Tap pitch (inches per thread)
if drlgsel = 17, pitch2 = -(pitch)
n$, sdef, *sgdrill, e$
n$, sdef, "17.1", ssetup, *setup, e$
n$, sdef, "17.2", sdepth, *drldepth, e$
n$, sdef, "17.3", spitch, *pitch2, e$
n$, *scyclcall, e$
n$, *strl, pfxout, pfyout, strr0, smaxrate, strm99, e$
pcom_movea
pdrlcst9 #Cycle 207 Rigid Tapping New - without floating holder
pdrlcommonb
if met_tool$, pitch = n_tap_thds$ # Tap pitch (mm per thread)
else, pitch = 1/n_tap_thds$ # Tap pitch (inches per thread)
if drlgsel = 19, pitch = -(pitch)
surf_coord = tosz$
clearht = initht$
n$, *sdef, *sgdrill, e$
*refht$, *s200, e$ #SET-UP CLEARANCE
*depth$, *s201, e$ #HOLE DEPTH
*pitch, *s239, e$ #THREAD PITCH
*surf_coord, *s203, e$ #SURFACE COORDINATE
*clearht, *s204, e$ #2ND SET-UP CLEARANCE
n$, *scyclcall, e$
n$, *strl, pfxout, pfyout, strr0, smaxrate, strm99, e$
pcom_movea
pdrlcst10 #Cycle 209 Tapping - with chip breaking #TODO
pdrlcommonb
if met_tool$, pitch = n_tap_thds$ # Tap pitch (mm per thread)
else, pitch = 1/n_tap_thds$ # Tap pitch (inches per thread)
if drlgsel = 19, pitch = -(pitch)
surf_coord = tosz$
clearht = initht$
infeed = peck1$
chp_brk = peck2$
stop_ang = peckclr$
n$, *sdef, *sgdrill, e$
*refht$, *s200, e$ #SET-UP CLEARANCE
*depth$, *s201, e$ #HOLE DEPTH
*pitch, *s239, e$ #THREAD PITCH
*surf_coord, *s203, e$ #SURFACE COORDINATE
*clearht, *s204, e$ #2ND SET-UP CLEARANCE
*infeed, *s257, e$ #INFEED DEPTH FOR CHIP BREAKING
*chp_brk, *s256, e$ #DISTANCE FOR CHIP BREAK
*stop_ang, *s336, e$ #ANGLE FOR ORIENTED SPINDLE STOP
n$, *scyclcall, e$
n$, *strl, pfxout, pfyout, strr0, smaxrate, strm99, e$
pcom_movea
pdrlcst$ #Custom drill cycles 8 - 19 (user option)
if drillcyc$ = 8, pdrlcst8
if drillcyc$ = 9, pdrlcst9
if drillcyc$ = 10, pdrlcst10
if drillcyc$ > 10,
[
pdrlcommonb
"*-> CUSTOM CYCLE IS NOT SUPPORTED BY THIS POST <-*", e$
pcom_movea
]
#Additional Holes
pdrill_2$ #Canned Drill Cycle, additional points
pdrlcommonb
n$, *strl, pfxout, pfyout, strr0, smaxrate, strm99, e$
pcom_movea
ppeck_2$ #Canned Peck Drill Cycle
pdrill_2$
pchpbrk_2$ #Canned Chip Break Cycle
pdrill_2$
ptap_2$ #Canned Tap Cycle
pdrill_2$
pbore1_2$ #Canned Bore #1 Cycle
pdrill_2$
pbore2_2$ #Canned Bore #2 Cycle
pdrill_2$
pmisc1_2$ #Canned Misc #1 Cycle
pdrill_2$
pmisc2_2$ #Canned Misc #2 Cycle
pdrill_2$
pdrlcst8_2 #Custom drill cycle 8
pdrill_2$
pdrlcst9_2 #Custom drill cycle 9
pdrill_2$
pdrlcst10_2 #Custom drill cycle 10
pdrill_2$
pdrlcst_2$ #Custom drill cycles 8 - 19, additional points (user option)
if drillcyc$ = 8, pdrlcst8_2
if drillcyc$ = 9, pdrlcst9_2
if drillcyc$ = 10, pdrlcst10_2
if drillcyc$ > 10,
[
pdrlcommonb
"*-> CUSTOM CYCLE IS NOT SUPPORTED BY THIS POST <-*", e$
pcom_movea
]
pcanceldc$ #Cancel canned drill cycle
z$ = initht$
if cuttype = one, prv_zia = initht$ + (rotdia$/two)
else, prv_zia = initht$
pxyzcout
!zabs, !zinc
prv_gcode$ = zero
# --------------------------------------------------------------------------
#Subprogram postblocks
#sub_trnstyp - 0=mirror, 1=rotate, 2=scale, 3=translate
#sub_trnmthd (mirror) - 0=X axis, 1=Y axis, 2=line
#sub_trnmthd (rotate) - 0=tplane, 1=tplane origin only, 2=coordinates
# --------------------------------------------------------------------------
psub_call_m$ #Call to main level, single tool
psub_call_trans
psub_call_mm$ #Call to main level, multiple tools
psub_call_trans
psub_call_trans #Translate level calls from toolchange, user
if mi1$ <= one, result = mprint(shomeserror)
sav_absinc = absinc$
#pindex
#Mirror or Rotate Coord's
if sub_trnstyp$ = zero | (sub_trnstyp$ = one & mr_rt_actv),
[
#The original pattern is not mirrored or rotated
if sub_sec_no$,
[
absinc$ = zero
if sub_trnstyp$, psub_rotate
else, psub_mirror
]
mr_rt_actv = three
]
else, #Translate
[
if sub_mny_t$,
[
if mi1$ > one, absinc$ = zero
n$, *sgcode, pfxout, pfyout, pfzout, pfcout, e$
pe_inc_calc
ps_inc_calc
]
]
absinc$ = sav_absinc
if progno$ = main_prg_no$, result = mprint(sprgnerror)
n$, "CALL", *main_prg_no$, e$
prv_feed = c9k #Force feed in sub
psub_mirror #Mirror start code, user
#Mirror Y axis
if sub_trnmthd$, n$, strns_mir_on, *sub_trnsx$, e$
#Mirror X axis
else, n$, strns_mir_on, *sub_trnsy$, e$
psub_rotate #Rotate start code, user
n$, *sgcode, strns_rot_on, *sub_trnsx$, *sub_trnsy$,
[absinc$ = one], *rt_cinc, e$
psub_st_m$ #Header in main level
" ", e$
n$, *main_prg_no$, e$
#G51/G68 requires absolute position on first move
if mr_rt_actv & absinc$ = one,
[
sav_absinc = absinc$
absinc$ = zero
prv_absinc$ = m_one
prv_xabs = m_one
prv_yabs = m_one
]
psub_end_m$ #End in main level
n$, "LBL 0", e$
prv_absinc$ = m_one
#Reset update variables for subs at main level
#Mirror or Rotate cancel, output is forced
if (sub_trnstyp$ = zero & esub_sec_no$ > zero)
| (sub_trnstyp$ = one & esub_sec_no$ = esub_totl_no$-one
& sub_trnmthd$ = two),
[
subout$ = zero
no_nc_out$ = m_one
sav_absinc = absinc$
#Mirror cancel
if sub_trnstyp$ = zero,
[
absinc$ = zero
n$, strns_mir_off, *sub_trnsx$, *sub_trnsy$, e$
]
else, #Rotate cancel
[
n$, strns_rot_off, e$
]
absinc$ = sav_absinc
no_nc_out$ = zero
]
end_sub_mny = sub_mny_t$
psub_end_mny #End in main level for many tools sub, user
#Check for coming out of xform with stage tool.
if end_sub_mny & stagetool = one,
[
*t$
end_sub_mny = zero
]
psub_call_s$ #Call to sub level
sub_prg_no$ = sub_prg_no$ #+ 1000 #Add sub number offset
if progno$ = sub_prg_no$, result = mprint(sprgnerror)
n$, "CALL ", *sub_prg_no$, e$
psub_st_s$ #Header in sub leveln
" ", e$
n$, *sub_prg_no$, e$
psub_end_s$ #End in sub level
n$, "LBL 0", e$
prv_absinc$ = m_one
# --------------------------------------------------------------------------
# Canned Text
# --------------------------------------------------------------------------
pcan #Canned text - before output call
strcantext = sblank
if cant_no$ > zero,
[
if cant_pos1$ = zero | cant_pos1$ = three, pcant_1
if cant_pos2$ = zero | cant_pos2$ = three, pcant_2
if cant_pos3$ = zero | cant_pos3$ = three, pcant_3
if cant_pos4$ = zero | cant_pos4$ = three, pcant_4
if cant_pos5$ = zero | cant_pos5$ = three, pcant_5
if cant_pos6$ = zero | cant_pos6$ = three, pcant_6
if cant_pos7$ = zero | cant_pos7$ = three, pcant_7
if cant_pos8$ = zero | cant_pos8$ = three, pcant_8
if cant_pos9$ = zero | cant_pos9$ = three, pcant_9
if cant_pos10$ = zero | cant_pos10$ = three, pcant_10
if cant_pos11$ = zero | cant_pos11$ = three, pcant_11
if cant_pos12$ = zero | cant_pos12$ = three, pcant_12
if cant_pos13$ = zero | cant_pos13$ = three, pcant_13
if cant_pos14$ = zero | cant_pos14$ = three, pcant_14
if cant_pos15$ = zero | cant_pos15$ = three, pcant_15
if cant_pos16$ = zero | cant_pos16$ = three, pcant_16
if cant_pos17$ = zero | cant_pos17$ = three, pcant_17
if cant_pos18$ = zero | cant_pos18$ = three, pcant_18
if cant_pos19$ = zero | cant_pos19$ = three, pcant_19
if cant_pos20$ = zero | cant_pos20$ = three, pcant_20
n$, strcantext, e$
strcantext = sblank
]
pcan1 #Canned text - with move
strcantext = sblank
if cant_no$ > zero,
[
if cant_pos1$ = one | cant_pos1$ = four, pcant_1
if cant_pos2$ = one | cant_pos2$ = four, pcant_2
if cant_pos3$ = one | cant_pos3$ = four, pcant_3
if cant_pos4$ = one | cant_pos4$ = four, pcant_4
if cant_pos5$ = one | cant_pos5$ = four, pcant_5
if cant_pos6$ = one | cant_pos6$ = four, pcant_6
if cant_pos7$ = one | cant_pos7$ = four, pcant_7
if cant_pos8$ = one | cant_pos8$ = four, pcant_8
if cant_pos9$ = one | cant_pos9$ = four, pcant_9
if cant_pos10$ = one | cant_pos10$ = four, pcant_10
if cant_pos11$ = one | cant_pos11$ = four, pcant_11
if cant_pos12$ = one | cant_pos12$ = four, pcant_12
if cant_pos13$ = one | cant_pos13$ = four, pcant_13
if cant_pos14$ = one | cant_pos14$ = four, pcant_14
if cant_pos15$ = one | cant_pos15$ = four, pcant_15
if cant_pos16$ = one | cant_pos16$ = four, pcant_16
if cant_pos17$ = one | cant_pos17$ = four, pcant_17
if cant_pos18$ = one | cant_pos18$ = four, pcant_18
if cant_pos19$ = one | cant_pos19$ = four, pcant_19
if cant_pos20$ = one | cant_pos20$ = four, pcant_20
]
if cstop$, strcantext = strcantext + sm00
if cgstop$, strcantext = strcantext + sm01
#Output of strcantext occurs at the end of the output line
pcan2 #Canned text - after output call
strcantext = sblank
if cant_no$ > zero,
[
if cant_pos1$ = two | cant_pos1$ = five, pcant_1
if cant_pos2$ = two | cant_pos2$ = five, pcant_2
if cant_pos3$ = two | cant_pos3$ = five, pcant_3
if cant_pos4$ = two | cant_pos4$ = five, pcant_4
if cant_pos5$ = two | cant_pos5$ = five, pcant_5
if cant_pos6$ = two | cant_pos6$ = five, pcant_6
if cant_pos7$ = two | cant_pos7$ = five, pcant_7
if cant_pos8$ = two | cant_pos8$ = five, pcant_8
if cant_pos9$ = two | cant_pos9$ = five, pcant_9
if cant_pos10$ = two | cant_pos10$ = five, pcant_10
if cant_pos11$ = two | cant_pos11$ = five, pcant_11
if cant_pos12$ = two | cant_pos12$ = five, pcant_12
if cant_pos13$ = two | cant_pos13$ = five, pcant_13
if cant_pos14$ = two | cant_pos14$ = five, pcant_14
if cant_pos15$ = two | cant_pos15$ = five, pcant_15
if cant_pos16$ = two | cant_pos16$ = five, pcant_16
if cant_pos17$ = two | cant_pos17$ = five, pcant_17
if cant_pos18$ = two | cant_pos18$ = five, pcant_18
if cant_pos19$ = two | cant_pos19$ = five, pcant_19
if cant_pos20$ = two | cant_pos20$ = five, pcant_20
n$, strcantext, e$
strcantext = sblank
]
pcant_1 #Canned text - output call
cantext$ = cant_val1$
pcant_out
pcant_2 #Canned text - output call
cantext$ = cant_val2$
pcant_out
pcant_3 #Canned text - output call
cantext$ = cant_val3$
pcant_out
pcant_4 #Canned text - output call
cantext$ = cant_val4$
pcant_out
pcant_5 #Canned text - output call
cantext$ = cant_val5$
pcant_out
pcant_6 #Canned text - output call
cantext$ = cant_val6$
pcant_out
pcant_7 #Canned text - output call
cantext$ = cant_val7$
pcant_out
pcant_8 #Canned text - output call
cantext$ = cant_val8$
pcant_out
pcant_9 #Canned text - output call
cantext$ = cant_val9$
pcant_out
pcant_10 #Canned text - output call
cantext$ = cant_val10$
pcant_out
pcant_11 #Canned text - output call
cantext$ = cant_val11$
pcant_out
pcant_12 #Canned text - output call
cantext$ = cant_val12$
pcant_out
pcant_13 #Canned text - output call
cantext$ = cant_val13$
pcant_out
pcant_14 #Canned text - output call
cantext$ = cant_val14$
pcant_out
pcant_15 #Canned text - output call
cantext$ = cant_val15$
pcant_out
pcant_16 #Canned text - output call
cantext$ = cant_val16$
pcant_out
pcant_17 #Canned text - output call
cantext$ = cant_val17$
pcant_out
pcant_18 #Canned text - output call
cantext$ = cant_val18$
pcant_out
pcant_19 #Canned text - output call
cantext$ = cant_val19$
pcant_out
pcant_20 #Canned text - output call
cantext$ = cant_val20$
pcant_out
pcant_out #Canned text - build the string for output
#Assign string select type outputs
if cantext$ = three, bld = one
if cantext$ = four, bld = zero
#Build the cantext string
if cantext$ = one, strcantext = strcantext + sm00
if cantext$ = two, strcantext = strcantext + sm01
if cantext$ > four,
[
strtextno = no2str(cantext$)
strcantext = strcantext + strm + strtextno
]
# --------------------------------------------------------------------------
# Position calculations, generally these do not need to be modified
# --------------------------------------------------------------------------
pmiscint$ #Capture the top level absinc for subprograms
if sub_level$ <= zero, absinc$ = mi2$
#Disable cutpos2 if not 4 axis, saves time
if rot_on_x = zero, cutpos2$ = m_one
pmotion_su #Motion Setup (Set brklinestype & linarc)
brklinestype$ = zero
linarc$ = zero
if rot_on_x,
[
if cuttype = one, linarc$ = one #Axis subs
if cuttype = two, #Polar
[
brklinestype$ = rotary_axis$ + three
linarc$ = one
]
]
if tool_op$ = 100, #Threadmill operation
[
if thd_ttpr = 1, linarc$ = 1 #If tapered thread, linearize output
]
pcuttype #Determine the cut type
#cuttype (0 = Tool Plane, 1 = Axis Subs, 2 = Polar, 3 = 4/5 axis)
cuttype = rotary_type$
if cuttype = three, cuttype = zero
if mill5$,
[
if rot_on_x = zero, result = mprint(saxisoff)
cuttype = three
]
if rotary_axis$,
[
if rotary_axis$ <> rot_on_x, result = mprint(saxiswarn)
rot_on_x = rotary_axis$
]
#Check for Tool Origin in Polar Milling
if cuttype = two & (tox$ | toy$ | toz$), result = mprint(stlorgerr)
#Transform Rotate, set mr_rt_actv if user selected 'coordinates'
if sub_trnstyp$ = one & sub_trnmthd$ = two,
[
#Calculate the rotation incremental angle for G68
rt_csav = atan2(sub_m2$, sub_m1$)
rt_cinc = prv_rt_csav - rt_csav
while rt_cinc > 180, rt_cinc = rt_cinc - 360
while rt_cinc < -180,rt_cinc = rt_cinc + 360
if rot_ccw_pos = one, rt_cinc = -rt_cinc
!rt_csav
if sub_sec_no$, mr_rt_actv = two
else, mr_rt_actv = one
]
else, mr_rt_actv = zero
pfcalc_u_min
pmotion_su
pxyzcout #Map coordinates
if rot_on_x,
[
if cuttype = zero, pxyzcout0 #Toolplane Positioning
if cuttype = one, pxyzcout1 #Axis Substitution
if cuttype = two, pxyzcout2 #Polar Conversion
if cuttype = three, pxyzcout3 #Simulatneous 4 axis (Multi-axis)
if rot_ccw_pos = one, csav = -csav
if mr_rt_actv <> two,
[
pcoutrev
if index, pindxcalc
pfcalc
]
else, feed = fr_pos$
]
else,
[
xabs = vequ (x$)
feed = fr_pos$
]
pxyzcout0 #Toolplane Positioning
xabs = vequ (x$)
if rot_on_x = two, csav = -c$
else, csav = c$
pxyzcout1 #Axis substitution
if rot_on_x = one, #X axis substitution
[
xabs = x$
yabs = zero
zabs = z$ + (rotdia$ / two)
csav = y$ * (360 / (pi$ * rotdia$))
]
else, #Y axis substitution
[
xabs = zero
yabs = y$
zabs = z$ + (rotdia$ / two)
csav = x$ * (360 / (pi$ * rotdia$))
]
pxyzcout2 #polar interpolation
#Drill polar is toolplane drilling toward center
#if not a coincident axis
#Also, Capture initial index position for Polar Milling
if (opcode$ = three & rot_on_x <> three), pxyzcout0
else,
[
if rot_on_x = one, #X axis rotation
[
csav = atan2(y$, z$) #Z+ zero
axisx$ = vequ(aaxisx)
xabs = rotp(csav, x$)
]
if rot_on_x = two, #Y axis rotation
[
csav = atan2(-x$, z$) #Z+ zero
axisx$ = vequ(baxisx)
xabs = rotp(csav, x$)
]
if rot_on_x = three, #Z axis rotation
[
csav = atan2(-y$, x$) #X+ zero
axisx$ = vequ(caxisx)
xabs = rotp(csav, x$)
]
csav = csav + c$
]
pxyzcout3 #Multisurf rotary axis motion
if rot_on_x = one, #Multisurf Rotary about X
[
csav = atan2 (vtooly$, vtoolz$)
axisx$ = vequ (aaxisx)
]
if rot_on_x = two, #Multisurf Rotary about Y
[
csav = atan2 (-vtoolx$, vtoolz$)
axisx$ = vequ (baxisx)
]
xabs = rotp (csav, x$)
u$ = rotp (csav, u$)
csav = csav + c$
pcoutrev #Rotary axis revolution calculation (Modify for wind-up)
cdelta = csav - prv_csav
while abs(cdelta) > ctol, #If motion exceeds ctol, add wind-up
[
if cdelta > zero,
[
rev = rev - one
cdelta = cdelta - 360
]
else,
[
rev = rev + one
cdelta = cdelta + 360
]
]
if cuttype <> one, cabs = rev * 360 + csav
else, cabs = sav_rev * 360 + csav
!csav
pindxcalc #Index move calculations, direction is shortest
#Check if in tolerance
cdelta = frac(abs(csav)/ctable)
if cdelta > ixtol & cdelta < 1-ixtol,
result = mprint(sindxerror)
cdelta = prvcabs - cabs
#Phase shift delta 10 revolutions, check odd/even
if frac(int((cdelta + 3600)/180)/two), indx_mc = one
else, indx_mc = zero
#Set range 0-360
indx_out = csav
while indx_out < 0, indx_out = indx_out + 360
while indx_out > 360, indx_out = indx_out - 360
#Feedrate calculations
pfcalc #Feedrate calculations, gcode 0 does not evaluate
if gcode$ <> zero,
[
if fmtrnd(cabs) = prvcabs | index, pfcalc_u_min
else,
[
if cuttype = one & (cutpos2$ <= one | cutpos2$ = four),
pfcalc_u_min
else, pfclc_deg_inv
]
if ipr_type <> prv_ipr_type, prv_feed = c9k
]
pfcalc_u_min #Feedrate unit/min
ipr_type = zero
feed = fr_pos$
if feed > maxfeedpm, feed = maxfeedpm
prvfrdeg = feed
pfclc_deg_inv #Feedrate deg/min
circum = zabs * two * pi$
if circum = zero, circum = c9k #Don't allow Zero
ldelta = sqrt((xabs-prv_xabs)^2+(yabs-prv_yabs)^2+(zabs-prv_zabs)^2)
cdelta = ((abs(cabs - prvcabs))/360)*circum
if ldelta = zero, cldelta = cdelta
else, cldelta = sqrt(cdelta^two + ldelta^two)
if cldelta = zero, cldelta = c9k
if use_frinv,
[
#Feedrate inverse calculation
ipr_type = two
prv_feed = c9k #Always force feed
if cuttype = three, cldelta = sqrt((x$-prv_x$)^2+(y$-prv_y$)^2+(z$-prv_z$)^2)
frinv = fr_pos$/cldelta
if frinv > maxfrinv, frinv = maxfrinv
feed = frinv
]
else,
[
#Feedrate deg/min control and calculation
ipr_type = zero #Change to ipr_type = one to force new DPM
frdeg = abs(cdelta/cldelta) * abs(fr_pos$ * (360/circum))
if abs(frdeg - prvfrdeg) > frdegstp | ipr_type <> prv_ipr_type,
[
#Control output of frdeg
prvfrdeg = frdeg
feed = frdeg
]
if frdeg > maxfrdeg, feed = maxfrdeg
]
#Incremental calculations
ps_inc_calc #Incremental calculations, start
xia = fmtrnd(xabs)
yia = fmtrnd(yabs)
zia = fmtrnd(zabs)
xinc = vsub (xia, prv_xia)
ps_cinc_calc
ps_cinc_calc #Incremental calculations, start rotary
cia = fmtrnd(cabs)
cinc = cia - prv_cia
pe_inc_calc #Incremental calculations, end
prvcabs = fmtrnd(cabs) #Avoid updating until called explicitly
!xia, !yia, !zia, !cia
!x$, !y$, !z$
# --------------------------------------------------------------------------
# Numbered questions for Mastercam Mill - Read during post update only
# --------------------------------------------------------------------------
38. Rapid feedrate? 300.0
1538. Rapid feedrate (metric)? 10000.0
80. Communications port number for receive and transmit (1 or 2) ? 2
81. Data rate (110,150,300,600,1200,2400,4800,9600,14400,19200,38400)? 1200
82. Parity (E/O/N)? E
83. Data bits (7 or 8)? 7
84. Stop bits (1 or 2)? 2
85. Strip line feeds? N
86. Delay after end of line (seconds)? 0
87. Ascii, Eia, or Binary (A/E/B)? A
88. Echo keyboard to screen in terminal emulation? n
89. Strip carriage returns? N
90. Drive and subdirectory for NC files?
91. Name of executable post processor? MP
92. Name of reverse post processor? RP
93. Reverse post PST file name? RPFAN
100. Number of places BEFORE the decimal point for sequence numbers? 3
101. Number of places AFTER the decimal point for sequence numbers? 0
103. Maximum spindle speed? 18000
107. Average time for tool change (seconds)? 2.0
159. Show first and last position as fully compensated in simulation? n
161. Enable Home Position button? y
162. Enable Reference Point button? y
163. Enable Misc. Values button? y
164. Enable Rotary Axis button? n
165. Enable Tool Plane button? y
166. Enable Construction Plane button? y
167. Enable Tool Display button? y
168. Check tplane during automatic work origin creation? y
# --------------------------------------------------------------------------
# Default Miscellaneous Real Values - Read during post update only - Set in CD
# --------------------------------------------------------------------------
201. Default miscellaneous real variable 1 (mr1)? 0.0
202. Default miscellaneous real variable 2 (mr2)? 0.0
203. Default miscellaneous real variable 3 (mr3)? 0.0
204. Default miscellaneous real variable 4 (mr4)? 0.0
205. Default miscellaneous real variable 5 (mr5)? 0.0
206. Default miscellaneous real variable 6 (mr6)? 0.0
207. Default miscellaneous real variable 7 (mr7)? 0.0
208. Default miscellaneous real variable 8 (mr8)? 0.0
209. Default miscellaneous real variable 9 (mr9)? 0.0
210. Default miscellaneous real variable 10 (mr10)? 0.0
# --------------------------------------------------------------------------
# Default Miscellaneous Real Values (METRIC) - Read during post update only - Set in CD
# --------------------------------------------------------------------------
1601. Default miscellaneous real variable 1 (mr1) (metric)? 0.0
1602. Default miscellaneous real variable 2 (mr2) (metric)? 0.0
1603. Default miscellaneous real variable 3 (mr3) (metric)? 0.0
1604. Default miscellaneous real variable 4 (mr4) (metric)? 0.0
1605. Default miscellaneous real variable 5 (mr5) (metric)? 0.0
1606. Default miscellaneous real variable 6 (mr6) (metric)? 0.0
1607. Default miscellaneous real variable 7 (mr7) (metric)? 0.0
1608. Default miscellaneous real variable 8 (mr8) (metric)? 0.0
1609. Default miscellaneous real variable 9 (mr9) (metric)? 0.0
1610. Default miscellaneous real variable 10 (mr10) (metric)? 0.0
# --------------------------------------------------------------------------
# Enable/Disable Miscellaneous Real Variable switches - Read during post update only - Set in CD
# --------------------------------------------------------------------------
1611. Enable miscellaneous real variable 1? y
1612. Enable miscellaneous real variable 2? y
1613. Enable miscellaneous real variable 3? y
1614. Enable miscellaneous real variable 4? y
1615. Enable miscellaneous real variable 5? y
1616. Enable miscellaneous real variable 6? y
1617. Enable miscellaneous real variable 7? y
1618. Enable miscellaneous real variable 8? y
1619. Enable miscellaneous real variable 9? y
1620. Enable miscellaneous real variable 10? y
# --------------------------------------------------------------------------
# Default Miscellaneous Integer Values - Read during post update only - Set in CD
# --------------------------------------------------------------------------
301. Default miscellaneous integer variable 1 (mi1)? 0
302. Absolute or Incremental [0=ABS, 1=INC] (mi2)? 0
303. Default miscellaneous integer variable 3 (mi3)? 0
304. Default miscellaneous integer variable 4 (mi4)? 0
305. Default miscellaneous integer variable 5 (mi5)? 0
306. Default miscellaneous integer variable 6 (mi6)? 0
307. Default miscellaneous integer variable 7 (mi7)? 0
308. Default miscellaneous integer variable 8 (mi8)? 0
309. Default miscellaneous integer variable 9 (mi9)? 0
310. Default miscellaneous integer variable 10 (mi10)? 0
# --------------------------------------------------------------------------
# Enable/Disable Miscellaneous Integer Variable switches - Read during post update only - Set in CD
# --------------------------------------------------------------------------
1621. Enable miscellaneous integer variable 1? y
1622. Enable miscellaneous integer variable 2? y
1623. Enable miscellaneous integer variable 3? y
1624. Enable miscellaneous integer variable 4? y
1625. Enable miscellaneous integer variable 5? y
1626. Enable miscellaneous integer variable 6? y
1627. Enable miscellaneous integer variable 7? y
1628. Enable miscellaneous integer variable 8? y
1629. Enable miscellaneous integer variable 9? y
1630. Enable miscellaneous integer variable 10? y
# --------------------------------------------------------------------------
# Configuration File association parameters (default is "y") - Read during post update only - Set in CD
# --------------------------------------------------------------------------
401. Read SYSTEM COLORS section? y
402. Read ALLOCATIONS section? y
403. Read TOLERANCES section? y
404. Read DATA PATHS section? y
405. Read COMMUNICATIONS section? y
406. Read DRAFT SETTINGS section? y
407. Read MISCELLANEOUS section? y
408. Read NC SETTINGS section? y
409. Read DIALOG SCRIPTS section? y
410. Read DESIGN SETTINGS section? y
411. Read PLOTTER SETTINGS section? y
412. Read ALT-KEY ASSIGNMENTS section? y
413. Read CAD section? y
414. Read START/EXIT section? y
415. Read SCREEN section? y
416. Read FILE NAMES section? y
1500. Chook to execute from 'Misc. values' button?
1501. Insert parameter information in the ascii NCI? n
1502. Write operation information to binary file (.ops)? y
1503. Write transform operations (0=transform ops, 1=source ops, 2=both)? 1
1520. Display a warning when cutter compensation in control simulation finds an error? n
1521. Number of controller look-ahead blocks for CDC in control? 2
1530. Ignore work offset numbers when processing subprograms? y
1531. Ignore contour flags when processing subprograms? y
# Do NOT manually change the answer for Q.1999 !
1999. Product major version number that post supports? 9
3001. Machine acceleration? 2
3002. timing size? .1
# --------------------------------------------------------------------------
# POST TEXT
# --------------------------------------------------------------------------
[CTRL_MILL|DEFAULT]
[misc integers]
2. "Absolute or Incremental [0=ABS, 1=INC]"
[simple drill]
1. "Cycle 200 - Drilling"
3. "Dwell - Top"
7. "Peck"
8. ""
9. ""
10. ""
11. "Dwell - Bottom"
[peck drill]
1. "Cycle 201 - Reaming"
3. "Dwell - Top"
7. ""
8. ""
9. ""
10. "Retract Rate"
11. "Dwell - Bottom"
[chip break]
1. "Cycle 202 - Boring"
4. "Clearance"
5. "Retract"
6. "Depth"
7. "Disengage Dir."
8. "Angle - spdl stop"
9. ""
10. ""
11. "Dwell - Bottom"
[tap]
1. "Cycle 203 - Universal Drilling"
3. "Dwell - Top"
7. "Peck"
8. ""
9. ""
10. ""
11. "Dwell - Bottom"
[bore1]
1. "Cycle 1 - Pecking/Drilling"
4. "Clearance"
5. "Retract"
6. "Depth"
7. "Peck"
8. ""
9. ""
10. ""
11. ""
[bore2]
1. "Cycle 205 - Universal Pecking"
3. ""
4. "Clearance"
5. "Retract"
6. "Depth"
7. "Peck"
8. ""
9. ""
10. ""
11. "Dwell - Bottom"
[misc1]
1. "Cycle 2 - Tapping"
4. "Clearance"
5. "Retract"
6. "Depth"
7. ""
8. ""
9. ""
10. ""
11. ""
[misc2]
1. "Cycle 206 - Tapping"
3. ""
4. "Clearance"
5. "Retract"
6. "Depth"
7. ""
8. ""
9. ""
10. ""
11. "Dwell - Bottom"
[drill cycle 9]
1. "Cycle 17 - Rigid Tapping"
3. ""
4. "Clearance"
5. "Retract"
6. "Depth"
7. ""
8. ""
9. ""
10. ""
11. ""
[drill cycle 10]
1. "Cycle 207 - Rigid Tapping"
3. ""
4. "Clearance"
5. "Retract"
6. "Depth"
7. ""
8. ""
9. ""
10. ""
11. ""
[drill cycle 11]
1. "Cycle 209 - Tapping with chip breaking"
3. ""
4. "Clearance"
5. "Retract"
6. "Depth"
7. "Infeed Depth"
8. "Retract Dist."
9. "Spindle Angle"
10. ""
11. ""
[drill cycle 12]
4. "Clearance"
5. "Retract"
6. "Depth"
[drill cycle 13]
4. "Clearance"
5. "Retract"
6. "Depth"
[drill cycle 14]
4. "Clearance"
5. "Retract"
6. "Depth"
[drill cycle 15]
4. "Clearance"
5. "Retract"
6. "Depth"
[drill cycle 16]
4. "Clearance"
5. "Retract"
6. "Depth"
[drill cycle 17]
4. "Clearance"
5. "Retract"
6. "Depth"
[drill cycle 18]
4. "Clearance"
5. "Retract"
6. "Depth"
[drill cycle 19]
4. "Clearance"
5. "Retract"
6. "Depth"
[drill cycle 20]
4. "Clearance"
5. "Retract"
6. "Depth"
[simple drill custom parameters]
1. "Custom Drill Parameters 1"
[peck drill custom parameters]
1. "Custom Drill Parameters 2"
[chip break drill custom parameters]
1. "Custom Drill Parameters 3"
[tap custom parameters]
1. "Universal Drilling Parameters"
2. "Decrement Value"
3. "Number of Breaks"
4. "Minimum Plunging Depth"
5. "Retraction Feed Rate"
6. "Distance for Chip Breaking"
7. ""
8. ""
9. ""
10. ""
11. ""
[bore1 custom parameters]
1. "Custom Drill Parameters 5"
[bore2 custom parameters]
1. "Universal Pecking Parameters"
2. "Decrement Value"
3. ""
4. "Minimum Plunging Depth"
5. ""
6. "Distance for Chip Breaking"
7. "Upper Advanced Stop Distance"
8. "Lower Avanced Stop Distance"
9. "Infeed Depth for Chip Breaking"
10. ""
11. ""
[misc1 custom parameters]
1. "Custom Drill Parameters 7"
[misc2 custom parameters]
1. "Custom Drill Parameters 8"
[drill cycle 9 custom parameters]
1. "Custom Drill Parameters 9"
[drill cycle 10 custom parameters]
1. "Custom Drill Parameters 10"
[drill cycle 11 custom parameters]
1. "Custom Drill Parameters 11"
[drill cycle 12 custom parameters]
1. "Custom Drill Parameters 12"
[drill cycle 13 custom parameters]
1. "Custom Drill Parameters 13"
[drill cycle 14 custom parameters]
1. "Custom Drill Parameters 14"
[drill cycle 15 custom parameters]
1. "Custom Drill Parameters 15"
[drill cycle 16 custom parameters]
1. "Custom Drill Parameters 16"
[drill cycle 17 custom parameters]
1. "Custom Drill Parameters 17"
[drill cycle 18 custom parameters]
1. "Custom Drill Parameters 18"
[drill cycle 19 custom parameters]
1. "Custom Drill Parameters 19"
[drill cycle 20 custom parameters]
1. "Custom Drill Parameters 20"
[drill cycle descriptions]
1. "Cycle 200 - Drilling/Pecking"
2. "Cycle 201 - Reaming"
3. "Cycle 202 - Boring"
4. "Cycle 203 - Universal Drilling"
5. "Cycle 1 - Pecking/Drilling"
6. "Cycle 205 - Universal Pecking"
7. "Cycle 2 - Tapping with floating holder"
8. "Cycle 206 - Tapping NEW with floating holder"
9. "Cycle 17 - Rigid Tapping w/o floating holder"
10. "Cycle 207 - Rigid Tapping NEW w/o floating holder"
11. "Cycle 209 - Tapping with chip breaking"
[canned text]
1. "Stop"
2. "Ostop"
3. ""
4. ""
5. "M5"
6. "M6"
7. "M7"
8. "M8"
9. "M9"
10. "M10"
[CTRL_MILL|GENERIC HEIDENHAIN_TNC530 3X MILL]
[misc integers]
2. "Absolute or Incremental [0=ABS, 1=INC]"
[simple drill]
1. "Cycle 200 - Drilling"
3. "Dwell - Top"
7. "Peck"
8. ""
9. ""
10. ""
11. "Dwell - Bottom"
[peck drill]
1. "Cycle 201 - Reaming"
3. "Dwell - Top"
7. ""
8. ""
9. ""
10. "Retract Rate"
11. "Dwell - Bottom"
[chip break]
1. "Cycle 202 - Boring"
4. "Clearance"
5. "Retract"
6. "Depth"
7. "Disengage Dir."
8. "Angle - spdl stop"
9. ""
10. ""
11. "Dwell - Bottom"
[tap]
1. "Cycle 203 - Universal Drilling"
3. "Dwell - Top"
7. "Peck"
8. ""
9. ""
10. ""
11. "Dwell - Bottom"
[bore1]
1. "Cycle 1 - Pecking/Drilling"
4. "Clearance"
5. "Retract"
6. "Depth"
7. "Peck"
8. ""
9. ""
10. ""
11. ""
[bore2]
1. "Cycle 205 - Universal Pecking"
3. ""
4. "Clearance"
5. "Retract"
6. "Depth"
7. "Peck"
8. ""
9. ""
10. ""
11. "Dwell - Bottom"
[misc1]
1. "Cycle 2 - Tapping"
4. "Clearance"
5. "Retract"
6. "Depth"
7. ""
8. ""
9. ""
10. ""
11. ""
[misc2]
1. "Cycle 206 - Tapping"
3. ""
4. "Clearance"
5. "Retract"
6. "Depth"
7. ""
8. ""
9. ""
10. ""
11. "Dwell - Bottom"
[drill cycle 9]
1. "Cycle 17 - Rigid Tapping"
3. ""
4. "Clearance"
5. "Retract"
6. "Depth"
7. ""
8. ""
9. ""
10. ""
11. ""
[drill cycle 10]
1. "Cycle 207 - Rigid Tapping"
3. ""
4. "Clearance"
5. "Retract"
6. "Depth"
7. ""
8. ""
9. ""
10. ""
11. ""
[drill cycle 11]
1. "Cycle 209 - Tapping with chip breaking"
3. ""
4. "Clearance"
5. "Retract"
6. "Depth"
7. "Infeed Depth"
8. "Retract Dist."
9. "Spindle Angle"
10. ""
11. ""
[drill cycle 12]
4. "Clearance"
5. "Retract"
6. "Depth"
[drill cycle 13]
4. "Clearance"
5. "Retract"
6. "Depth"
[drill cycle 14]
4. "Clearance"
5. "Retract"
6. "Depth"
[drill cycle 15]
4. "Clearance"
5. "Retract"
6. "Depth"
[drill cycle 16]
4. "Clearance"
5. "Retract"
6. "Depth"
[drill cycle 17]
4. "Clearance"
5. "Retract"
6. "Depth"
[drill cycle 18]
4. "Clearance"
5. "Retract"
6. "Depth"
[drill cycle 19]
4. "Clearance"
5. "Retract"
6. "Depth"
[drill cycle 20]
4. "Clearance"
5. "Retract"
6. "Depth"
[simple drill custom parameters]
1. "Custom Drill Parameters 1"
[peck drill custom parameters]
1. "Custom Drill Parameters 2"
[chip break drill custom parameters]
1. "Custom Drill Parameters 3"
[tap custom parameters]
1. "Universal Drilling Parameters"
2. "Decrement Value"
3. "Number of Breaks"
4. "Minimum Plunging Depth"
5. "Retraction Feed Rate"
6. "Distance for Chip Breaking"
7. ""
8. ""
9. ""
10. ""
11. ""
[bore1 custom parameters]
1. "Custom Drill Parameters 5"
[bore2 custom parameters]
1. "Universal Pecking Parameters"
2. "Decrement Value"
3. ""
4. "Minimum Plunging Depth"
5. ""
6. "Distance for Chip Breaking"
7. "Upper Advanced Stop Distance"
8. "Lower Avanced Stop Distance"
9. "Infeed Depth for Chip Breaking"
10. ""
11. ""
[misc1 custom parameters]
1. "Custom Drill Parameters 7"
[misc2 custom parameters]
1. "Custom Drill Parameters 8"
[drill cycle 9 custom parameters]
1. "Custom Drill Parameters 9"
[drill cycle 10 custom parameters]
1. "Custom Drill Parameters 10"
[drill cycle 11 custom parameters]
1. "Custom Drill Parameters 11"
[drill cycle 12 custom parameters]
1. "Custom Drill Parameters 12"
[drill cycle 13 custom parameters]
1. "Custom Drill Parameters 13"
[drill cycle 14 custom parameters]
1. "Custom Drill Parameters 14"
[drill cycle 15 custom parameters]
1. "Custom Drill Parameters 15"
[drill cycle 16 custom parameters]
1. "Custom Drill Parameters 16"
[drill cycle 17 custom parameters]
1. "Custom Drill Parameters 17"
[drill cycle 18 custom parameters]
1. "Custom Drill Parameters 18"
[drill cycle 19 custom parameters]
1. "Custom Drill Parameters 19"
[drill cycle 20 custom parameters]
1. "Custom Drill Parameters 20"
[drill cycle descriptions]
1. "Cycle 200 - Drilling/Pecking"
2. "Cycle 201 - Reaming"
3. "Cycle 202 - Boring"
4. "Cycle 203 - Universal Drilling"
5. "Cycle 1 - Pecking/Drilling"
6. "Cycle 205 - Universal Pecking"
7. "Cycle 2 - Tapping with floating holder"
8. "Cycle 206 - Tapping NEW with floating holder"
9. "Cycle 17 - Rigid Tapping w/o floating holder"
10. "Cycle 207 - Rigid Tapping NEW w/o floating holder"
11. "Cycle 209 - Tapping with chip breaking"
[canned text]
1. "Stop"
2. "Ostop"
3. ""
4. ""
5. "M5"
6. "M6"
7. "M7"
8. "M8"
9. "M9"
10. "M10"
[CTRL_TEXT_END]