0% found this document useful (0 votes)
892 views62 pages

Post Mastercam 4 Axis

This document provides information about a generic milling post processor for Fanuc control. It supports 3-axis and 4-axis milling and contains settings for outputting rotational movements and work coordinate systems. The post is designed to support common features in Mastercam Mill software such as canned cycles and tool changes.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
892 views62 pages

Post Mastercam 4 Axis

This document provides information about a generic milling post processor for Fanuc control. It supports 3-axis and 4-axis milling and contains settings for outputting rotational movements and work coordinate systems. The post is designed to support common features in Mastercam Mill software such as canned cycles and tool changes.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 62

[POST_VERSION] #DO NOT MOVE OR ALTER THIS LINE# V23.00 P0 E1 W23.

00 T1613710284
M23.00 I0 O0
# Post Name : MPMASTER
# Product : MILL
# Machine Name : MACHINE
# Control Name : CONTROL
# Description : IHS MASTER GENERIC MILL G-CODE POST
# 4-axis/Axis subs. : YES
# 5-axis : NO
# Subprograms : YES
# Executable : MP v9.17
# Post Revision : 9.1.03346 (MC_FULL.MC_MINOR.YYDDD)
#
# WARNING: THIS POST IS GENERIC AND IS INTENDED FOR MODIFICATION TO
# THE MACHINE TOOL REQUIREMENTS AND PERSONAL PREFERENCE.
#
# --------------------------------------------------------------------------
# Revision log:
# --------------------------------------------------------------------------
# Programmers Note:
# IHS 01/30/02 - Mpmaster based on CNC Software's V8/V9 Mpfan, dat
# IHS 01/30/02 - Initial post update for V9, dat
# IHS 04/01/02 - Comments repeated in translational subs, dat
# IHS 05/01/02 - lock_codes logic tweak, dat
# IHS 05/07/02 - arccheck set to 3, dat
# IHS 05/17/02 - Removed null comment from subs, dat
# IHS 05/24/02 - Rotary subprograms mod, dat
# IHS 07/17/02 - Incremental drilling calculation mod, dat
# IHS 07/25/02 - Switch added to control rotary index move retracts, dat
# IHS 10/07/02 - force_dpts switch added, dat
# IHS 10/28/02 - Additional rotary sub logic mod, dat
# IHS 11/06/02 - Switch added for 4/3 decimal place tapping feeds, dat
# IHS 03/10/03 - Synched with updates to Mpfan from V9.1, dat
# IHS 04/30/03 - arccheck set to 1, dat
# IHS 05/08/03 - A2100-style G18/G19 helical move corrections, dat
# IHS 06/27/03 - Initial post update for V9.1 SP1, dat
# IHS 10/23/03 - Roughed out auto-launch of HTML.set, dat
# IHS 12/12/03 - Comp on arc move warning added, dat
# XXX MM/DD/03 - Written for Company X from Mpmaster, xxx
#
# --------------------------------------------------------------------------
# Features:
# --------------------------------------------------------------------------
# This post supports Generic Fanuc code output for 3 and 4 axis milling.
# It is designed to support the features of Mastercam Mill V9.
#
# Following Misc. Integers are used:
# mi2 - Absolute or Incremental positioning at top level
# 0 = absolute
# 1 = incremental
#
# mi9 - Lock on First WCS - Set in first operation
# 0 = No
# 1 = Yes
#
# mi10 - M00 before operation
# 0 = No
# 1 = Yes
#
# Work offsets:
# wcstype - Work coordinate system
# 0 = Reference return is generated and G92 with the
# X, Y and Z home positions at file head.
# 1 = Reference return is generated and G92 with the
# X, Y and Z home positions at each tool.
# 2 = WCS of G54, G55.... based on Mastercam settings.
# 0 thru 5 = The WCS of G54 thru G59 respectively.
# 6 and up = The WCS of G54.1 P1 and up.
# 3 = Off
#
#Canned text:
# Entering cantext on a contour point from within Mastercam allows the
# following functions to enable/disable.
# Cantext value:
# 1 = Stop = output the "M00" stop code
# 2 = Ostop = output the "M01" optional stop code
# 3 = Bld on = turn on block delete codes in NC lines
# 4 = bLd off = turn off block delete codes in NC lines
# 5 = Dwell = Input G04 P1 command
#
#Milling toolpaths (4 axis)
#Layout:
# The term "Reference View" refers to the coordinate system associated
# with the Top view (Alt-F9, the upper gnomon of the three displayed).
# Create the part drawing with the axis of rotation about the axis
# of the "Reference View" according to the setting you entered for
# 'vmc' (vertical or horizontal) and 'rot_on_x' (machine relative
# axis of rotation).
# vmc = 1 (vertical machine) uses the top toolplane as the base machine
# view.
# vmc = 0 (horizontal machine) uses the front toolplane as the base machine
# view.
# Relative to the machine matrix -
# Rotation zero position is on the Z axis for rotation on X axis.
# Rotation zero position is on the Z axis for rotation on Y axis.
# Rotation zero position is on the X axis for rotation on Z axis.
# The machine view rotated about the selected axis as a "single axis
# rotation" are the only legal views for 4 axis milling. Rotation
# direction around the part is positive in the CCW direction when
# viewed from the plus direction of the rotating axis. Set the variable
# 'rot_ccw_pos' to indicate the signed direction. Always set the work
# origin at the center of rotation.
#
#Toolplane Positioning:
# Create the Cplane and Tplane as the rotation of the machine view about
# the selected axis of rotation. The toolplane is used to calculate
# the position of the rotary axis. This is the default setting.
#
#3 Axis Rotary (Polar)
# Polar positioning is offered in Mastercam 3 axis toolpaths through the
# rotary axis options dialog. The selected toolpath is converted to angle
# and radius position. The axis of rotation is forced to zero.
#
#Axis substitution:
# Use the Rotary axis substitution by drawing the geometry flattened
# from the cylinder. The rotary axis button must be active for axis
# substitution information to be output to the NCI file. The radius of
# the rotary diameter is added to all the Z positions at output.
#
#Simultaneous 4 Axis (11 gcode):
# Full 4 axis toolpaths can be generated from various toolpaths under the
# 'multi-axis' selection (i.e. Rotary 4 axis). All 5 axis paths are
# converted to 4 axis paths where only the angle about the rotation axis
# is resolved.
#
#Drill:
# All drill methods are supported in the post. See Simultaneous 4 Axis.
#
#Additional Notes:
# 1) Disable 4 axis by setting the numbered question 164. to 'n'.
# 2) G54 calls are generated where the work offset entry of 0 = G54,
# 1 = G55, etc.
# 3) Metric is applied from the NCI met_tool variable.
# 4) 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.
# 5) 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.
# 6) Always avoid machining to the center of rotation with rotary axis!
# 7) Transform subprograms are intended for use with G54.. workshifts.
#
# END_HEADER$
#
# --------------------------------------------------------------------------
# General Output Settings
# --------------------------------------------------------------------------
spaces$ : 1 #Number of spaces to add between fields
omitseq$ : yes$ #Omit sequence numbers?
seqmax$ : 9999 #Max. sequence number
arcoutput$ : 0 #0 = IJK, 1 = R no sign, 2 = R signed neg. over 180
arctype$ : 2 #Arc center 1=abs, 2=St-Ctr, 3=Ctr-St, 4=unsigned inc.
breakarcs$ : 0 #Break arcs, 0 = no, 1 = quadrants, 2 = 180deg. max arcs
do_full_arc$ : 1 #Allow full circle output? 0=no, 1=yes
helix_arc$ : 1 #Support helix arc output, 0=no, 1=all planes, 2=XY plane only
compwarn : 1 #Warn if cutter comp applied on arc, 0=no, 1=yes
maxrad$ : 999 #Maximum arc radius
hel_2100 : no$ #Acramatic 2100 style helical moves, 0=no, 1=yes
usecanned : yes$ #Use canned drilling cycles? Set to no for long output.
force_dpts : no$ #Force XY output on all drilling lines including cycle call?
wcstype : 2 #0 = G92 at start, 1 = G92 at toolchanges, 2 = G54, 3 = Off
force_wcs : yes$ #Force WCS output at every toolchange?
stagetool : 1 #0 = Do not pre-stage tools, 1 = Stage tools
tool_table : 1 #Tool table, 0=no, 1=yes, 2=Predator VCNC, 3=MetaCut View
output_z : yes$ #Output Z Min and Z Max values (yes or no)
cool_zmove : yes$ #Coolant off with last move
use_pitch : 1 #0 = Use feed for tapping, 1 = Use pitch for tapping
tap_feed : 0 #0 = 2/1 (in/mm) decimal places, 1 = 4/3 (in/mm) decimal places
maxfeedpm : 500 #Limit for feed in inch/min
maxfeedpm_m : 10000 #Limit for feed in mm/min
use_gear : 0 #Output gear selection code, 0=no, 1=yes
max_speed : 10000 #Maximum spindle speed
min_speed : 50 #Minimum spindle speed
sextnc$ : ".NC" #NC extension override

# --------------------------------------------------------------------------
# Rotary Axis Settings
# --------------------------------------------------------------------------
# Typical Vertical
srotary : "A" #Rotary axis prefix
vmc : 1 #0 = Horizontal Machine, 1 = Vertical Mill
rot_on_x : 1 #Default Rotary Axis Orientation, See ques. 164.
#0 = Off, 1 = About X, 2 = About Y, 3 = About Z
# Typical Horizontal
#srotary "B" #Rotary axis prefix
#vmc : 0 #0 = Horizontal Machine, 1 = Vertical Mill
#rot_on_x : 2 #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
ret_on_indx : 1 #Machine home retract on rotary index moves, (0 = no, 1 = yes)
index : 0 #Use index positioning, 0 = Full Rotary, 1 = Index only
ctable : 5 #Degrees for each index step with indexing spindle
one_rev : 0 #Limit rotary indexing between 0 and 360? (0 = No, 1 = Yes)
lock_codes : 0 #Use rotary axis unlock/lock M-Codes? (0 = No, 1 = Yes)
use_frinv : 0 #Use Inverse Time Feedrates in 4 Axis, (0 = no, 1 = yes)
rot_feed : 1 #Use calculated rotary feed values, (0 = no, 1 = yes)
maxfrdeg : 2000 #Limit for feed in deg/min
maxfrinv : 999.99#Limit for feed inverse time
frc_cinit : 1 #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

# --------------------------------------------------------------------------
# Debugging and Factory Set Program Switches
# --------------------------------------------------------------------------
fastmode$ : yes$ #Posting speed optimizition
bug1$ : 2 #0=No display, 1=Generic list box, 2=Editor
bug2$ : 60 #Append postline labels, non-zero is column position?
#CNC<<?ㅽ뙣>>bug3$ : 0 #Append whatline no. to each NC line?
#CNC<<硫붿떆吏
bug4$ : 0 #Append NCI line no. 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?

# --------------------------------------------------------------------------
# Additional General Output Settings
# --------------------------------------------------------------------------
nobrk$ : no$ #Omit breakup of x, y & z rapid moves
progname$ : 1 #Use uppercase for program name (sprogname)
sub_level$ : 1 #Enable automatic subprogram support
sub_seq_typ$ : 1 #Enable subprogram sequence number reset at sub call
arccheck$ : 1 #Check for small arcs, convert to linear
atol$ : 0.01 #Angularity tolerance for arccheck = 2
ltol$ : 0.002 #Length tolerance for arccheck = 1
vtol$ : 0.0001#System tolerance
ltol_m : 0.05 #Length tolerance for arccheck = 1, metric
vtol_m : 0.0025#System tolerance, metric
tooltable$ : 1 #Read for tool table and pwrtt - use tool_table to disable

m_one : -1 #Define constant


zero : 0 #Define constant
one : 1 #Define constant
two : 2 #Define constant
three : 3 #Define constant
four : 4 #Define constant
five : 5 #Define constant
c9k : 9999 #Define constant

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? [0=Filename,1=Name,2=Path\Name]
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
error_msg$ : 1 #0=file and prompt, 1=to screen, 2=one to screen
err_file$ : 1 #0=fatal, 1=all errors, 2=inc mprint, 3=inc prompts, 4=always
# --------------------------------------------------------------------------
# Enable Canned Drill Cycle Switches
# --------------------------------------------------------------------------
usecandrill$ : yes$ #Use canned cycle for drill
usecanpeck$ : yes$ #Use canned cycle for Peck
usecanchip$ : yes$ #Use canned cycle for Chip Break
usecantap$ : yes$ #Use canned cycle for Tap
usecanbore1$ : yes$ #Use canned cycle for Bore1
usecanbore2$ : yes$ #Use canned cycle for Bore2
usecanmisc1$ : yes$ #Use canned cycle for Misc1
usecanmisc2$ : yes$ #Use canned cycle for Misc2

# --------------------------------------------------------------------------
# Common User-defined Variable Initializations (not switches!)
# --------------------------------------------------------------------------
xia : 0 #Formated absolute value for X incremental calculations
yia : 0 #Formated absolute value for Y incremental calculations
zia : 0 #Formated absolute value for Z incremental calculations
cia : 0 #Formated 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
sav_workofs : 0 #Saved work offset
sav_frc_wcs : 0 #Force work offset flag saved
sav_progno : 0 #Saved program number
#sav_n1 : 0 #Saved sequence number
#sav_n2 : 0 #Saved sequence number
sav_rot_on_x : 0 #Rotary configuration saved
toolchng : 1 #On a toolchange flag
spdir2 : 1 #Copy for safe spindle direction calculation

#Drill variables
drlgsel : -1 #Drill Select Initialize
drillref : 0 #Select drill reference
peckacel$ : -1 #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

#Misc variables
tcnt : 0 # Count the number of tool changes
toolcount : 1 # Tool counter for logic control
toolcountn : 0 # Next tool counter for logic control
toolcountp : 0 # Previous tool counter for logic control
tooltotal : 0 # Tool tool count
nexttool : 0 # Next actual tool
nexttp : 0 # Next tool plane
prvtp : 0 # Previous tool plane
counter : 0 # Counter
nstrlen : 0 # Length of string
last_op_id : 0 # Previous internal operation id
last_cuttype : 0 # Previous cuttype
stock_typ : 0 # Predator Stock Type
cyl_typ : 0 # Predator Cyl Stock Type
z_min$ : 99999 # Min Z
z_tmin : 99999 # Overall min Z
z_max$ : -99999 # Max Z
z_tmax : -99999# Overall max Z
tapflg : 0 # Flag for tap cycle
sav_mi9 : 0 # Saved mi9 value
rotretflg : 0
compwarnflg : 0

# --------------------------------------------------------------------------
# FORMULAS - global formulas
# --------------------------------------------------------------------------
toolcountn = toolcount + 1 # Index!
toolcountp = toolcount - 1 # Index!

# --------------------------------------------------------------------------
# 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 0.4 0.3 #Decimal, absolute, 4/3 place
fs2 3 0.4 0.3d #Decimal, delta, 4/3 place
#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 0l #Integer, force four leading
fs2 8 5 0 5 0l #Integer, force five leading
fs2 9 0.1 0.1 #Decimal, absolute, 1 place
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 0.2 0.1 #Decimal, absolute, 2/1 place (feedrate)
fs2 16 1 0 1 0n #Integer, forced output
fs 17 1.4lt #Decimal, absolute, four trailing

# --------------------------------------------------------------------------
#String and string selector definitions for NC output
# --------------------------------------------------------------------------
#Numbered question 164. string to detect Rotary axis y/n
sq164 : ""

#Address string definitions


stri : "I"
strj : "J"
strk : "K"
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"
sm02 : "G05P1"
scant5 : "G04 P1"
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

#Launch HTML.set during posting


sdll : "C:\Mcam9\Chooks\MP_Multi.dll" # Name of the .DLL to be called
spost1 : "HTML.SET"
snci : ""
sparams1 : ""
sspace : " " # Contains a SPACE character
ssq : "'" # Contains a Single Quote character
sdq : '"' # Contains a Double Quote character

# --------------------------------------------------------------------------
# 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 ('wcstype') DOES NOT SUPPORT TRANSFORM
SUBPROGRAM"
sprgnerror : "ERROR-SUBPROGRAM NUMBER MATCHES THE MAIN PROGRAM NUMBER"
scompwarn : "WARNING-CUTTER COMP APPLIED ON ARC MOVE"

# --------------------------------------------------------------------------
# Misc strings
# --------------------------------------------------------------------------
snull : "" # Null character string
sdot : "." # dot string
stest1 : "" # Test string 1
stilde : "~" # Tidle string
snocomm : "DEFINE TOOL NAMES"
stoper : "" # String for tool notes
spostname : "" # Post name
snullop : "UNDEFINED OPERATION"
slicense : "IN-HOUSE SOLUTIONS"

# ------------------------------------------------------------------------
# Parameter Tables
# ------------------------------------------------------------------------
fprmtbl 13 2 # Multisurf Finish
10010 stock # Amount of stock to leave on drive surfs
10227 check # Amount of stock to leave on check surfs

fprmtbl 14 2 # Multisurf Rough


10010 stock # Amount of stock to leave on drive surfs
10227 check # Amount of stock to leave on check surfs

# --------------------------------------------------------------------------
# Buffer 3 - Holds the variable 'tlplnno' for each toolpath segment
# --------------------------------------------------------------------------
rc3 : 1
wc3 : 1
fbuf 3 0 1 0 0 # Buffer 3

# --------------------------------------------------------------------------
# Buffer 4 - Holds the variable 't' for each toolpath segment
# --------------------------------------------------------------------------
rc4 : 1
wc4 : 1
fbuf 4 0 1 0 0 # Buffer 4

# --------------------------------------------------------------------------
# Buffer 5 - Min / Max
# --------------------------------------------------------------------------
b5_gcode : 0
b5_zmin : 0
b5_zmax : 0
rc5 : 2
wc5 : 1
size5 : 0

fbuf 5 0 3 0 0 #Min / Max

# --------------------------------------------------------------------------
# Question format statements
# --------------------------------------------------------------------------
fq 1 stock_typ "Predator Stock [0=Box,1=Cylindrical]"
fq 2 cyl_typ "Cylindrical Stock Axis [1=X,2=Y,3=Z]"

# --------------------------------------------------------------------------
# Strings - String labels must start with 's' - they are not pre-assigned
# --------------------------------------------------------------------------
#Select operation note
sop00 : "NULL......." # String definition
sop01 : "CONTOUR...." # " "
sop02 : "CONTOUR...." # " "
sop03 : "DRILL/MISC." # " "
sop04 : "POCKET....." # " "
sop05 : "RULED......" # " "
sop06 : "2D-SWEPT..." # " "
sop07 : "3D-SWEPT..." # " "
sop08 : "REVOLVED..." # " "
sop09 : "LOFT......." # " "
sop10 : "COONS......" # " "
sop11 : "FILLET....." # " "
sop12 : "FLOWLINE..." # " "
sop13 : "M.FINISH..." # " "
sop14 : "M.ROUGH...." # " "
sop15 : "POINT......" # " "
sop16 : "DRILL5AX..." # " "
sop17 : "CURVE5AX..." # " "
sop18 : "SWARF5AX..." # " "
sop19 : "FACING....." # " "
sop20 : "OP20......." # " "

sopnote : "" # Target string


fstrsel sop00 opcode$ sopnote 21 -1

# --------------------------------------------------------------------------
#Select operation note
sdr00 : "DRILL/CBORE" # String definition
sdr01 : "PECK DRILL." # " "
sdr02 : "CHIP BREAK." # " "
sdr03 : "TAP........" # " "
sdr04 : "BORE 1....." # " "
sdr05 : "BORE 2....." # " "
sdr06 : "FINE BORE.." # " "
sdr07 : "MISC 2....." # " "
sdr08 : "CUST 9....." # " "
sdr09 : "CUST 10...." # " "
sdr10 : "CUST 11...." # " "
sdr11 : "CUST 12...." # " "
sdr12 : "CUST 13...." # " "
sdr13 : "CUST 14...." # " "
sdr14 : "CUST 15...." # " "
sdr15 : "CUST 16...." # " "
sdr16 : "CUST 17...." # " "
sdr17 : "CUST 18...." # " "
sdr18 : "CUST 19...." # " "
sdr19 : "CUST 20...." # " "
sdrnote : "" # Target string

fstrsel sdr00 nextdc$ sdrnote 20 -1

# --------------------------------------------------------------------------
# Select month
smon00 : ""
smon01 : "JAN"
smon02 : "FEB"
smon03 : "MAR"
smon04 : "APR"
smon05 : "MAY"
smon06 : "JUN"
smon07 : "JUL"
smon08 : "AUG"
smon09 : "SEP"
smon10 : "OCT"
smon11 : "NOV"
smon12 : "DEC"
smonth : ""

fstrsel smon00 month$ smonth 13 -1

# --------------------------------------------------------------------------
# General G and M Code String select tables
# --------------------------------------------------------------------------
# Motion G code selection
sg00 : "G00" #Rapid
sg01 : "G01" #Linear feed
sg02 : "G02" #Circular interpolation CW
sg03 : "G03" #Circular interpolation CCW
sg04 : "G04" #Dwell
sgcode : "" #Target for string

fstrsel sg00 gcode$ sgcode 5 -1


# --------------------------------------------------------------------------
# Select work plane G code
sg17 : "G17" #XY plane code
sg19 : "G19" #YZ plane code
sg18 : "G18" #XZ plane code
sgplane : "" #Target string

fstrsel sg17 plane$ sgplane 3 -1


# --------------------------------------------------------------------------
#Select english/metric code
sg20 : "G20" #Inch code
sg21 : "G21" #Metric code
smetric : "" #Target string

fstrsel sg20 met_tool$ smetric 2 -1


# --------------------------------------------------------------------------
# Cutter compensation G code selection
scc0 : "G40" #Cancel cutter compensation
scc1 : "G41" #Cutter compensation left
scc2 : "G42" #Cutter compensation right
sccomp : "" #Target for string

fstrsel scc0 cc_pos$ sccomp 3 -1


# --------------------------------------------------------------------------
# Canned drill cycle string select
sg81 : "G81" #drill - no dwell
sg81d : "G82" #drill - with dwell
sg83 : "G83" #peck drill - no dwell
sg83d : "G83" #peck drill - with dwell
sg73 : "G73" #chip break - no dwell
sg73d : "G73" #chip break - with dwell
sg84 : "G84" #tap - right hand
sg84d : "G74" #tap - left hand
sg85 : "G85" #bore #1 - no dwell
sg85d : "G89" #bore #1 - with dwell
sg86 : "G86" #bore #2 - no dwell
sg86d : "G86" #bore #2 - with dwell
sgm1 : "G76" #misc #1 - no dwell
sgm1d : "G76" #misc #1 - with dwell
sgm2 : "G81" #misc #2 - no dwell
sgm2d : "G82" #misc #2 - with dwell
sgc9 : "G81" #custom #9 - no dwell
sgc9d : "G82" #custom #9 - with dwell
sgdrill : "" #Target for string

fstrsel sg81 drlgsel sgdrill 18 -1


# --------------------------------------------------------------------------
# Select incremental or absolute G code
sg90 : "G90" #Absolute code
sg91 : "G91" #Incremental code
sgabsinc : "" #Target string

fstrsel sg90 absinc$ sgabsinc 2 -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


# --------------------------------------------------------------------------
#Canned drill cycle reference height
sg98 : "G98" #Reference at initht
sg99 : "G99" #Reference at refht
sgdrlref : "" #Target for string

fstrsel sg98 drillref sgdrlref 2 -1 # Drill cycle G string select


# --------------------------------------------------------------------------
# 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
sm09 : "M09" #Coolant Off (Use sm09_0 through sm09_2)
sm08 : "M08" #Coolant Flood
sm08_1 : "M07" #Coolant Mist
sm08_2 : "M08" #Coolant Tool
sm09_0 : "M09" #Coolant Flood Off
sm09_1 : "M09" #Coolant Mist Off
sm09_2 : "M09" #Coolant Tool Off
scoolant : "" #Target for string

fstrsel sm09 coolant$ scoolant 7 -1


# --------------------------------------------------------------------------
# Table unlock and lock codes
slock : "M10" #Axis lock
sunlock : "M11" #Axis unlock
# --------------------------------------------------------------------------
# Table rotation direction
# Table rotation direction, index
sindx_cw : "M22" #Rotate CW code
sindx_ccw : "M21" #Rotate CCW code
sindx_mc : "" #Target for string

fstrsel sindx_cw indx_mc sindx_mc 2 -1


# --------------------------------------------------------------------------
# Define the gear selection code
flktbl 1 3 #Lookup table definition - table no. - no. entries
40 0 #Low gear range
41 400 #Med gear range
42 2250 #Hi gear range

# --------------------------------------------------------------------------
# Toolchange / NC output Variable Formats
# --------------------------------------------------------------------------
fmt "T" 4 t$ #Tool No
fmt "T" 4 first_tool$ #First Tool Used
fmt "T" 4 next_tool$ #Next Tool Used
fmt "D" 4 tloffno$ #Diameter Offset No
fmt "H" 4 tlngno$ #Length Offset No
fmt "G" 4 g_wcs #WCS G address
fmt "P" 4 p_wcs #WCS P address
fmt "S" 4 speed #Spindle Speed
fmt "M" 4 gear #Gear range
# --------------------------------------------------------------------------
fmt "N" 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 "X" 3 xinc #X position output
fmt "Y" 3 yinc #Y position output
fmt "Z" 3 zinc #Z position output
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 "I" 3 i$ #Arc center description in X
fmt "J" 3 j$ #Arc center description in Y
fmt "K" 3 k$ #Arc center description in Z
fmt "K" 2 lead #Helical lead
fmt "R" 2 arcrad$ #Arc Radius
fmt "F" 15 feed #Feedrate
fmt "P" 11 dwell$ #Dwell
fmt "M" 5 cantext$ #Canned text
# --------------------------------------------------------------------------
#Move comment (pound) to output colon with program numbers
fmt "O" 7 progno$ #Program number
#fmt ":" 7 progno$ #Program number
fmt "O" 7 main_prg_no$ #Program number
#fmt ":" 7 main_prg_no #Program number
fmt "O" 7 sub_prg_no$ #Program number
#fmt ":" 7 sub_prg_no$ #Program number
fmt "P" 7 sub_prg_call#Program number
fmt "X" 2 sub_trnsx$ #Rotation point
fmt "Y" 2 sub_trnsy$ #Rotation point
fmt "Z" 2 sub_trnsz$ #Rotation point
# --------------------------------------------------------------------------
fmt "Q" 2 peck1$ #First peck increment (positive)
fmt 2 peck2$ #Second or last peck (positive)
fmt 2 peckclr$ #Safety distance
fmt 2 retr$ #Retract height
fmt "Q" 2 shftdrl$ #Fine bore tool shift
fmt "Z" 2 zdrl$ #Depth of drill point
fmt "Z" 2 tosz$ #Drilling top of stock
fmt "N" 4 n_tap_thds$ #Number of threads per inch (tpi) / Pitch (mm)
fmt "F" 2 pitch #Tap pitch (inches per thread)
fmt "R" 2 refht_a #Reference height
fmt "R" 2 refht_i #Reference height
# --------------------------------------------------------------------------
fmt "TOOL - " 4 tnote # Note format
fmt " DIA. OFF. - " 4 toffnote # Note format
fmt " LEN. - " 4 tlngnote # Note format
fmt " DIA. - " 1 tldianote # Note format
# --------------------------------------------------------------------------
fmt "D" 17 tldia$ # Note format
fmt "R" 4 tcr$ # Note format
fmt "D" 2 tldia_pred # Predator VCNC format
fmt "C" 2 tcr_pred # Predator VCNC format

fmt "D" 2 tldia_meta # MetaCut View format


fmt "R" 2 tcr_meta # MetaCut View format
fmt "F" 2 flute_meta # MetaCut View format
fmt "L" 2 oa_meta # MetaCut View format
fmt "A" 2 ta_meta # MetaCut View format
fmt "TD" 2 td_meta # MetaCut View format
fmt "CD" 2 cd_meta # MetaCut View format
fmt "CL" 2 cl_meta # MetaCut View format
fmt "SD" 2 sd_meta # MetaCut View format
fmt "C" 4 tipcomp # MetaCut View format

fmt 2
slot # 20004 Parameter line
fmt 2
tool_type
fmt 2
matl_type
fmt 2
corner_rad_type
fmt 2
diameter
fmt 2
corner_rad
fmt 2
threads
fmt "A" 2 tip_angle
fmt 2 dia_off
fmt 2 len_off
fmt 2 tool_feed
fmt 2 plunge
fmt 2 retract
fmt 2 rpm
fmt 2 coolant1
fmt 2 n_flutes1
fmt "A" 2 tip_angle_ch

fmt 2 cut_ability # 20006 Parameter line


fmt 2 step_r_xy
fmt 2 step_r_z
fmt 2 step_f_xy
fmt 2 step_f_z
fmt 2 tip_dia
fmt 2 min_dia
fmt 2 thd_ang

fmt 2 pilot_dia # 20007 Parameter line


fmt "H" 2 flute_len
fmt 2 oa_len
fmt 2 shldr_len
fmt 2 arbor_dia
fmt 2 hldr_dia
fmt 2 hldr_len
fmt 2 spindle_ccw
fmt 2 sfm
fmt 2 fpt
fmt 2 metric

fmt 2 stock # Amount of Stock left on drive surfs


fmt 2 check # Amount of Stock left on check surfs
fmt "S" 4 cyl_typ # Predator Cylindral Stock Type
fmt "L" 2 stck_ht$
fmt "W" 2 stck_wdth$
fmt "H" 2 stck_thck$
fmt "D" 2 stck_diam
fmt "X" 2 stck_x$
fmt "Y" 2 stck_y$
fmt "Z" 2 stck_z$
fmt "X" 2 stck_x_min
fmt "Y" 2 stck_y_min
fmt "Z" 2 stck_z_min

fmt "X" 2 stck_meta_ht


fmt "Y" 2 stck_meta_wdth
fmt "Z" 2 stck_meta_thck
fmt "OX" 2 stck_meta_ox
fmt "OY" 2 stck_meta_oy
fmt "OZ" 2 stck_meta_oz

fmt "X" 2 x_tmin # Total x_min


fmt "X" 2 x_tmax # Total x_max
fmt "Y" 2 y_tmin # Total y_min
fmt "Y" 2 y_tmax # Total y_max
fmt "Z" 2 z_tmin # Total z_min
fmt "Z" 2 z_tmax # Total z_max
fmt "Z" 2 min_depth# Tool z_min
fmt "Z" 2 max_depth# Tool z_max

fmt 2 vers_no$ # Mastercam version


fmt 2 m_vers_no$ # Minor version number
fmt 2 dll_vers$ # Mp.dll version

fmt 5 year$
fmt 5 month$
fmt 5 day$
fmt 4 hour
fmt 5 min

# --------------------------------------------------------------------------
# Tool Comment / Manual Entry Section
# --------------------------------------------------------------------------
ptoolcomment #Comment for tool
tnote = t$
toffnote = tloffno$
tlngnote = tlngno$
tldianote = tldia$
"(", pstrtool, *tnote, *toffnote, *tlngnote, *tldianote, ")", 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


spaces$ = 0
scomm$ = ucase (scomm$)
#1005 - Comment option 1
#1006 - Comment option 2
#1007 - Define comment with output line
#1008 - Define NC parameter comment
#1026 - ?
if gcode$ = 1005, pbld, n$, pspc, "(", scomm$, ")"
if gcode$ = 1006, pbld, n$, pspc, "(", scomm$, ")" #Comments
#if gcode = 1006, pbld, n, pspc, scomm #Codes
if gcode$ = 1007, "(", scomm$, ")"
if gcode$ >= 1008, pbld, n$, pspc, "(", scomm$, ")"
if gcode$ = 1026, pbld, scomm$
if gcode$ <> 1007 & gcode$ <> 1026, e$
spaces$ = sav_spc

ptoolcomm # Comments from tool library


spaces$ = 0
strtool$=ucase(strtool$)
if strtool$<>snull, pspc1, "(", *strtool$, ")", e$
else, pspc1, "(", "DEFINE TOOL NAMES", ")", e$
spaces$ = sav_spc

plistcomm # Comments from tool library


strtool$=ucase(strtool$)
if strtool$<>snull, *strtool$
else, "DEFINE TOOL NAMES"

if strtool$=snull, stest1=snocomm+stilde
else, stest1=strtool$+stilde
nstrlen = strstr(stilde,stest1)-1
counter = 1
while counter <= (25-nstrlen), pspace

pmetacomm # Comments from tool library


strtool$=ucase(strtool$)
if strtool$<>snull, *strtool$
else, "DEFINE TOOL NAMES"

pspace # Creates spaces based on tool comment length


" "
counter = counter + 1

ptspace # Creates spaces based on tool number


if t$<10, " "

phspace # Creates spaces based on length offset number


if tlngno$<10, " "
else, " "

pdspace # Creates spaces based on diameter offset number


if tloffno$<10, " "

pdiamspc # Creates spaces based on diameter offset number


if tldia$<10, " "

pspc # Creates spaces based tool level setting


if sav_spc = one & omitseq$ = no$, " "

pspc1 # Creates spaces based tool level setting


if sav_spc = one, " "

popnote # Operation note for tool table


if opcode$ = 3, *sdrnote
else, *sopnote

pstock # Comment amount of stock to leave


spaces$=0
if (opcode$=13 | opcode$=14),
[
pbld, n$, pspc, "(TOOLPATH - ", *stoper, ")", e$
pbld, n$, pspc, "(STOCK LEFT ON DRIVE SURFS = ", *stock, ")", e$
if check<>0, pbld, n$, pspc, "(STOCK LEFT ON CHECK SURFS = ", *check,
")", e$
]
spaces$=sav_spc

ppredstck # Predator stock


spaces$=0
q1
if stock_typ = 1,
[
cyl_typ = rot_on_x
q2
]
if stock_typ = 0, ppredbox
if stock_typ = 1,
[
if cyl_typ = 1, ppredcylx
if cyl_typ = 2, ppredcyly
if cyl_typ = 3, ppredcylz
]
spaces$=sav_spc

ppredbox # Predator Box Stock


if stck_crnr$ = 0,
[
stck_x_min = stck_x$ - stck_ht$/2
stck_y_min = stck_y$ - stck_wdth$/2
]
if stck_crnr$ = 1 | stck_crnr$ = 5,
[
stck_x_min = stck_x$
stck_y_min = stck_y$ - stck_wdth$
]
if stck_crnr$ = 2 | stck_crnr$ = 6,
[
stck_x_min = stck_x$ - stck_ht$
stck_y_min = stck_y$ - stck_wdth$
]
if stck_crnr$ = 3 | stck_crnr$ = 7,
[
stck_x_min = stck_x$ - stck_ht$
stck_y_min = stck_y$
]
if stck_crnr$ = 4 | stck_crnr$ = 8,
[
stck_x_min = stck_x$
stck_y_min = stck_y$
]
if stck_crnr$ <= 4, stck_z_min = stck_z$ - stck_thck$
else, stck_z_min = stck_z$

"(SBOX ", *stck_x_min, " ", *stck_y_min, " ", *stck_z_min, " ",
*stck_ht$, " ", *stck_wdth$, " ", *stck_thck$, ")"

ppredcylx # Predator Cyl-X Stock


if stck_crnr$ = 0,
[
stck_x_min = stck_x$ - stck_ht$/2
stck_y_min = stck_y$
]
if stck_crnr$ = 1 | stck_crnr$ = 5,
[
stck_x_min = stck_x$
stck_y_min = stck_y$ - stck_wdth$/2
]
if stck_crnr$ = 2 | stck_crnr$ = 6,
[
stck_x_min = stck_x$ - stck_ht$
stck_y_min = stck_y$ - stck_wdth$/2
]
if stck_crnr$ = 3 | stck_crnr$ = 7,
[
stck_x_min = stck_x$ - stck_ht$
stck_y_min = stck_y$ + stck_wdth$/2
]
if stck_crnr$ = 4 | stck_crnr$ = 8,
[
stck_x_min = stck_x$
stck_y_min = stck_y$ + stck_wdth$/2
]
if stck_crnr$ <= 4, stck_z_min = stck_z$ - stck_thck$/2
else, stck_z_min = stck_z$ + stck_thck$/2

stck_diam = stck_wdth$
if stck_thck$ > stck_wdth$, stck_diam = stck_thck$
stck_ht$ = stck_ht$
"(SCYL ", *cyl_typ, " ", *stck_x_min, " ", *stck_y_min, " ", *stck_z_min,
" ", *stck_diam, " ", *stck_ht$, ")"

ppredcyly # Predator Cyl-Y Stock


if stck_crnr$ = 0,
[
stck_x_min = stck_x$
stck_y_min = stck_y$ - stck_wdth$/2
]
if stck_crnr$ = 1 | stck_crnr$ = 5,
[
stck_x_min = stck_x$ + stck_ht$/2
stck_y_min = stck_y$ - stck_wdth$
]
if stck_crnr$ = 2 | stck_crnr$ = 6,
[
stck_x_min = stck_x$ - stck_ht$/2
stck_y_min = stck_y$ - stck_wdth$
]
if stck_crnr$ = 3 | stck_crnr$ = 7,
[
stck_x_min = stck_x$ - stck_ht$/2
stck_y_min = stck_y$
]
if stck_crnr$ = 4 | stck_crnr$ = 8,
[
stck_x_min = stck_x$ + stck_ht$/2
stck_y_min = stck_y$
]
if stck_crnr$ <= 4, stck_z_min = stck_z$ - stck_thck$/2
else, stck_z_min = stck_z$ + stck_thck$/2

stck_diam = stck_ht$
if stck_thck$ > stck_ht$, stck_diam = stck_thck$
stck_ht$ = stck_wdth$
"(SCYL ", *cyl_typ, " ", *stck_x_min, " ", *stck_y_min, " ", *stck_z_min,
" ", *stck_diam, " ", *stck_ht$, ")"

ppredcylz # Predator Cyl-Z Stock


if stck_crnr$ = 0,
[
stck_x_min = stck_x$
stck_y_min = stck_y$
]
if stck_crnr$ = 1 | stck_crnr$ = 5,
[
stck_x_min = stck_x$ + stck_ht$/2
stck_y_min = stck_y$ - stck_wdth$/2
]
if stck_crnr$ = 2 | stck_crnr$ = 6,
[
stck_x_min = stck_x$ - stck_ht$/2
stck_y_min = stck_y$ - stck_wdth$/2
]
if stck_crnr$ = 3 | stck_crnr$ = 7,
[
stck_x_min = stck_x$ - stck_ht$/2
stck_y_min = stck_y$ + stck_wdth$/2
]
if stck_crnr$ = 4 | stck_crnr$ = 8,
[
stck_x_min = stck_x$ + stck_ht$/2
stck_y_min = stck_y$ + stck_wdth$/2
]
if stck_crnr$ <= 4, stck_z_min = stck_z$ - stck_thck$
else, stck_z_min = stck_z$

stck_diam = stck_ht$
if stck_wdth$ > stck_ht$, stck_diam = stck_wdth$
stck_ht$ = stck_thck$
"(SCYL ", *cyl_typ, " ", *stck_x_min, " ", *stck_y_min, " ", *stck_z_min,
" ", *stck_diam, " ", *stck_ht$, ")"

pmetastck # MetaCut View stock


if stck_crnr$ = 0,
[
stck_meta_ox = stck_x$ * m_one - (tox$ * m_one)
stck_meta_oy = stck_y$ * m_one - (toy$ * m_one)
]
if stck_crnr$ = 1 | stck_crnr$ = 5,
[
stck_meta_ox = (stck_x$ + stck_ht$/2) * m_one - (tox$ * m_one)
stck_meta_oy = (stck_y$ - stck_wdth$/2) * m_one - (toy$ * m_one)
]
if stck_crnr$ = 2 | stck_crnr$ = 6,
[
stck_meta_ox = (stck_x$ - stck_ht$/2) * m_one - (tox$ * m_one)
stck_meta_oy = (stck_y$ - stck_wdth$/2) * m_one - (toy$ * m_one)
]
if stck_crnr$ = 3 | stck_crnr$ = 7,
[
stck_meta_ox = (stck_x$ - stck_ht$/2) * m_one - (tox$ * m_one)
stck_meta_oy = (stck_y$ + stck_wdth$/2) * m_one - (toy$ * m_one)
]
if stck_crnr$ = 4 | stck_crnr$ = 8,
[
stck_meta_ox = (stck_x$ + stck_ht$/2) * m_one - (tox$ * m_one)
stck_meta_oy = (stck_y$ + stck_wdth$/2) * m_one - (toy$ * m_one)
]
if stck_crnr$ <= 4, stck_meta_oz = stck_z$ * m_one - (toz$ * m_one)
else, stck_meta_oz = (stck_z$ + stck_thck$) * m_one - (toz$ * m_one)

stck_meta_ht = stck_ht$
stck_meta_wdth = stck_wdth$
stck_meta_thck = stck_thck$

#(NWDSTOCK X8. Y8. Z1.25 OTC OX-4. OY-4. OZ0.)


spaces$=0
"(NWDSTOCK ", *stck_meta_ht, " ", *stck_meta_wdth, " ", *stck_meta_thck,
" OTC ", *stck_meta_ox, " ", *stck_meta_oy, " ", *stck_meta_oz, ")"
spaces$=sav_spc

pstop # Stop routine


pretract
pcom_moveb
if mi10$=one, n$, *sm00, e$
sav_absinc = absinc$
if wcstype > one, absinc$ = zero
if lock_codes = 1 & not(index) & rot_on_x, pbld, n$, *sunlock,
"(UNLOCK)", e$
pcan1, pbld, n$, *sgcode, *sgplane, *sgabsinc, pwcs, pfxout, pfyout,
pfcout, *speed, *spindle, pgear, strcantext, e$
if lock_codes = 1 & not(index) & rot_on_x & cuttype = 0, pbld, n$,
*slock, "(LOCK)", e$
pbld, n$, "G43", *tlngno$, pfzout, scoolant, e$
sav_coolant = coolant$
if coolant$ = 1, sm09 = sm09_0
if coolant$ = 2, sm09 = sm09_1
if coolant$ = 3, sm09 = sm09_2
absinc$ = sav_absinc

# --------------------------------------------------------------------------
# Misc. Output
# --------------------------------------------------------------------------
pparameter$ # Run parameter table
if opcode$=13 | opcode$=14, result = fprm (opcode$)
if prmcode$ = 10000, stoper = ucase(sparameter$)
if prmcode$ = 10055, spostname = ucase(sparameter$)
#CNC<<메시지-오류(1148)>> Mastercam MP 포스트블럭 파라미터 문제:파라미터 번호 10055 이(가) 제
거되었습니다
#CNC<<메시지-오류(1148)>> 데이터 위치 참고 pre-X3 ASCII NCI information
#CNC<<메시지-오류(1148)>> 파라미터 참고 문서를 참고하거나 Mastercam 딜러에게 연락해 포스트 수정
또는 교체를 요청하십시오., 변수, 포스트블럭 또는 다른 키워드는 더이상 지원되지 않습니다 .
#CNC<<硫붿떆吏
#CNC<<硫붿떆吏
#CNC<<硫붿떆吏
if stoper=snull, stoper = snullop

pwrttparam$ #Information from parameters


if prmcode$ = 20004, slot = rpar(sparameter$, 16)
if prmcode$ = 20006, cut_ability = rpar(sparameter$,8)
if prmcode$ = 20007, pilot_dia = rpar(sparameter$, 11)

# --------------------------------------------------------------------------
# Start of File and Toolchange Setup
# --------------------------------------------------------------------------
psof0$ #Start of file for tool zero
psof$

psof$ #Start of file for non-zero tool number


ptravel
pwritbuf5
pcuttype
toolchng = one
if ntools$ = one,
[
#skip single tool outputs, stagetool must be on
#stagetool = m_one
!next_tool$
]
tooltotal = rbuf(4,0) #Reads total tool and null tool changes
if toolcountn <= tooltotal, nexttool = rbuf(4,toolcountn)
else, nexttool = first_tool$

if tool_table = 2, ppredstck,e$
if tool_table = 3, pmetastck,e$

spaces$=0
if output_z = yes$ & tcnt > 0,

# [
n$, pspc, "(", "OVERALL MAX - ", *z_tmax, ")", e$
n$, pspc, "(", "OVERALL MIN - ", *z_tmin, ")", e$

# ]

spaces$=sav_spc

if plane$ < 0, plane$ = 0


pbld, n$,*smetric, e$
pbld, n$, *sgcode, *sgplane,, "G40", "G49", "G80", *sgabsinc, e$
sav_absinc = absinc$
absinc$ = one
if wcstype <= one, #Work coordinate system
[
pfbld, n$, sgabsinc, "G28", "Z0.", e$
pfbld, n$, "G28", "X0.", "Y0.", e$
pfbld, n$, "G92", *xh$, *yh$, *zh$, e$
]
else,
[
pbld, n$, sgabsinc, "G28", "Z0.", e$
]
absinc$ = sav_absinc
sav_mi9 = mi9$
sav_workofs = workofs$
if sav_workofs < 0, sav_workofs = 0
ptlchg_com

ptlchg_com #Tool change common blocks


pcom_moveb
c_mmlt$ #Multiple tool subprogram call
#ptoolcomment
comment$
pcan
if plane$ < 0, plane$ = 0
if stagetool >= zero, pbld, *n$, *t$, "M6", ptoolcomm, e$
spaces$=0
if output_z = yes$,
[
preadbuf5
if (opcode$ > 0 & opcode$ < 16) | opcode$ = 19,
[
n$, pspc, "(", "MAX - ", *max_depth, ")", e$
n$, pspc, "(", "MIN - ", *min_depth, ")", e$
]
]
spaces$=sav_spc
pstock
pindex
sav_absinc = absinc$
if wcstype > one, absinc$ = zero
if lock_codes = 1 & not(index) & rot_on_x, pbld, n$, *sunlock, "(UNLOCK)", e$
#n$, "M01", e$
pcan1, pbld, n$, *sgcode, *sgabsinc, *sgplane, pwcs, pfxout, pfyout,
pfcout, *speed, *spindle, pgear, strcantext, e$
if lock_codes = 1 & not(index) & rot_on_x & cuttype = 0, pbld, n$, *slock,
"(LOCK)", e$
pbld, n$, "G43", *tlngno$, pfzout,scoolant, e$
#scoolant, e$
sav_coolant = coolant$
if coolant$ = 1, sm09 = sm09_0
if coolant$ = 2, sm09 = sm09_1
if coolant$ = 3, sm09 = sm09_2
absinc$ = sav_absinc
pcom_movea
toolchng = zero
c_msng$ #Single tool subprogram call
last_op_id = op_id$
last_cuttype = cuttype

ptlchg0$ #Call from NCI null tool change (tool number repeats)
pcuttype
pcom_moveb
toolcount = toolcount + 1
prvtp = rbuf(3,toolcountp)
if toolcountn <= tooltotal, nexttool = rbuf(4,toolcountn)
else, nexttool = first_tool$
if mi10$=one & op_id$<>last_op_id | (tlplnno$ <> prvtp & ret_on_indx), pstop
c_mmlt$ #Multiple tool subprogram call
comment$
pcan
if plane$ < 0, plane$ = 0
pbld, n$, sgplane, e$
pspindchng
if coolant$ <> 0 & coolant$ <> sav_coolant & sav_coolant, pbld, n$, sm09, e$
pbld, n$, scoolant, e$
sav_coolant = coolant$
if coolant$ = 1, sm09 = sm09_0
if coolant$ = 2, sm09 = sm09_1
if coolant$ = 3, sm09 = sm09_2
if op_id$<>last_op_id, pstock
if sav_mi9 = 1, workofs$ = sav_workofs
if (wcstype > one & workofs$ <> prv_workofs$) | (tlplnno$ <> prvtp &
ret_on_indx),
[
sav_absinc = absinc$
absinc$ = zero
if fmtrnd(prv_cabs) <> fmtrnd(cabs),
[
if lock_codes = 1 & not(index) & rot_on_x, pbld, n$, *sunlock, "(UNLOCK)",
e$
pbld, n$, sgabsinc, pwcs, pfxout, pfyout, pfzout, pfcout, e$
if lock_codes = 1 & not(index) & rot_on_x & cuttype = 0, pbld, n$, *slock,
"(LOCK)", e$
]
else,
[
pbld, n$, sgabsinc, pwcs, pfxout, pfyout, pfzout, pcout, e$
]
pe_inc_calc
ps_inc_calc
absinc$ = sav_absinc
]
if lock_codes = 1 & cuttype <> last_cuttype & cuttype > 0, pbld, n$, *sunlock,
"(UNLOCK)", e$
if cuttype = zero, ppos_cax_lin
if lock_codes = 1 & cuttype <> last_cuttype & cuttype = 0 & fmtrnd(prv_cabs) =
fmtrnd(cabs), pbld, n$, *slock, "(LOCK)", e$
if gcode$ = one, plinout
else, prapidout
pcom_movea
c_msng$ #Single tool subprogram call
last_op_id = op_id$
last_cuttype = cuttype

ptlchg$ #Tool change


pcuttype
toolchng = one
toolcount = toolcount + 1
if toolcountn <= tooltotal, nexttool = rbuf(4,toolcountn)
else, nexttool = first_tool$
if wcstype = one, #Work coordinate system
[
pfbld, n$, "G28", "X0.", "Y0.", e$
pfbld, n$, "G92", *xh$, *yh$, *zh$, e$
]
pbld, n$, *sm01, e$
if mi10$=one, n$, *sm00, e$
ptlchg_com

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
pbld, n$, sccomp, *sm05, psub_end_mny, e$
pcan1, pbld, n$, sgabsinc, sgcode, "G28", "Z0.", scoolant, strcantext, e$
#pcan2, pbld, n$, sgabsinc, sgcode, "G17", "G40", "G49", "G80", "G94",
scoolant, strcantext, e$
#if lock_codes = 1 & rot_on_x, pbld, n, *sunlock, "(UNLOCK)", e
#pbld, n, "G28", "X0.", "Y0.", protretinc, e
#if lock_codes = 1 & rot_on_x & cuttype = 0, pbld, n, *slock, "(LOCK)", e
if abs(cabs) > 360 & nextop$ <> 1003,
[
if lock_codes = 1, pbld, n$, *sunlock, "(UNLOCK)", e$
rotretflg = 1
pbld, n$, 'G28', protretinc, e$
rotretflg = 0
if lock_codes = 1 & cuttype = 0, pbld, n$, *slock, "(LOCK)", e$
]
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


pretract
if lock_codes = 1 & rot_on_x, pbld, n$, *sunlock, "(UNLOCK)", e$
rotretflg = 1
pbld, n$,"G91","G28", "Y0.", protretinc, e$
rotretflg = 0
if lock_codes = 1 & rot_on_x, pbld, n$, *slock, "(LOCK)", e$
comment$

#pbld, n,"G53","Z0.", e
#pbld, n$, "G90","G53", "X-360.", "Y0.", protretinc, e$

#Remove pound character to output first tool with staged tools


#if stagetool = one, pbld, n, *first_tool, e$
#n, *sg90, e$
n$, "M30", e$
mergesub$
clearsub$
mergeaux$
clearaux$
"%", e$

#snci = spathnci + snamenci + sextnci


#sparams1 = ssq + sdq + snci + sdq + sspace + sdq + spathpst + spost1 + sdq +
sspace + sdq + spathnc + sdq + ssq

#ppost #Called after posting is complete and all files are closed
#result = fexist(sdll)
#if result = 1, result = dll(sdll,sparams1)

pwcs #G54+ coordinate setting at toolchange


if wcstype = two | wcstype > three,
[
sav_frc_wcs = force_wcs
if sub_level$ > 0, force_wcs = zero
if sav_mi9 = 1, workofs$ = sav_workofs
if workofs$ < 0, workofs$ = 0
if workofs$ <> prv_workofs$ | (force_wcs & toolchng),
[
if workofs$ < 6,
[
g_wcs = workofs$ + 54
*g_wcs
]
else,
[
p_wcs = workofs$ - five
"G54.1", *p_wcs
]
]
force_wcs = sav_frc_wcs
!workofs$
]

pgear #Find spindle gear from lookup table


if use_gear = one,
[
gear = frange (one, speed)
*gear
]

#Toolchange setup
pspindchng #Spindle speed change
if prv_spdir2 <> spdir2 & prv_speed <> zero, pbld, n$, *sm05, e$
if prv_speed <> speed | prv_spdir2 <> spdir2,
[
if speed, pbld, n$, *speed, *spindle, pgear, 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


sav_spc = spaces$
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 arctype$ = one | arctype$ = four,
[
result = newfs(two, i$)
result = newfs(two, j$)
result = newfs(two, k$)
]
else,
[
result = newfs(three, i$)
result = newfs(three, j$)
result = newfs(three, k$)
]
if usecanned = yes$, pusecannedyes
else, pusecannedno

pheader$ #Call before start of file


if met_tool$ = one, #Metric constants and variable adjustments
[
ltol$ = ltol_m
vtol$ = vtol_m
maxfeedpm = maxfeedpm_m
]
result = nwadrs(srotary, cabs)
result = nwadrs(srotary, cinc)
result = nwadrs(srotary, indx_out)
hour = int(time$)
min = int((time$ - hour)* 100)
if hour > 12, hour = hour - 12
if hour = 0, hour = 12
year$ = year$ + 2000

"%", e$
spaces$=0
progno$, "(",sprogname$,")", e$
#*progno$, "(",sprogname$,")", e$
spathnc$ = ucase(spathnc$)
smcname$ = ucase(smcname$)
"(Date-",*day$,"/",*month$,"/",*year$, " Time-",time$, ")", e$
"(Programmer Cuongnc",")", e$
#"(DATE=DD-MM-YY - ", date, " TIME=HH:MM - ", time, ")", e$
#"(DATE=DD-MM-YY - ", date, " TIME=HH:MM - ", time, ")", e$
#"(MASTERCAM - V", *vers_no, ")", e$
#"(MC9 FILE - ", smcpath, smcname, smcext, ")", e$
#"(POST - ", spostname, ")", e$
stck_matl$ = ucase(stck_matl$)
#"(MATERIAL - ", stck_matl, ")", e$
#"(PROGRAM - ",sprogname,sextnc,")", e$
#"(DATE - ", *smonth, "-", *day, "-", *year, ")", e$
#"(TIME - ", *time, ")", e$
#"(POST DEV - ", *slicense, ")", e$
spaces$=sav_spc

if seqno$ = 0, omitseq$ = yes$


sav_rot_on_x = rot_on_x
rot_on_x = 0
sav_progno = progno$

#seqno = 10
#seqinc = 10
#n = seqno

ptoolend$ #End of tool path, before reading new tool data


!speed, !spdir2

ptlchg1002$ #Call at actual toolchange, end last path here


if op_id$ <> last_op_id,
[
#if cuttype <> one, sav_rev = rev #Axis Sub does not update to rev # CNC
Mpfan V9.1
sav_rev = rev #Axis Sub does not update to rev
if one_rev = one | workofs$ <> prv_workofs$, sav_rev = 0
]
pspindle
whatline$ = four #Required for vector toolpaths
if gcode$ = 1000,
[
#Null toolchange
]
else,
[
#Toolchange and Start of file
if gcode$ = 1002,
[
#Actual toolchange
pretract
]
if stagetool = one, prv_next_tool$ = m_one
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.
# --------------------------------------------------------------------------
prapidout #Output to NC of linear movement - rapid
pcan1, pbld, n$, sgplane, `sgcode, sgabsinc, pccdia,
pxout, pyout, pzout, pcout, strcantext, e$
scoolant, e$

plinout #Output to NC of linear movement - feed


pcan1, pbld, n$, sgfeed, sgplane, `sgcode, sgabsinc, pccdia,
pxout, pyout, pzout, pcout, `feed, strcantext, e$
scoolant, e$

pcirout #Output to NC of circular interpolation


if compwarn, pcompwarn
if hel_2100 = one, pcirout2
else, pcirout1
pcirout1 #Output to NC of circular interpolation
pcan1, pbld, n$, `sgfeed, sgplane, sgcode, sgabsinc, pccdia,
pxout, pyout, pzout, pcout, parc, feed, strcantext, e$
scoolant, e$

pcirout2 #Output to NC of circular interpolation


if (plane$ = zero & abs(zinc)>=0.0005)
| (plane$ = one & abs(xinc)>=0.0005)
| (plane$ = two & abs(yinc)>=0.0005), phelout
else, pcirout1

phelout #Output to NC of helical interpolation


if plane$ = zero,
[
result = nwadrs(strk, lead)
lead = abs(zinc/sweep$*360)
]
if plane$ = one,
[
result = nwadrs(stri, lead)
lead = abs(xinc/sweep$*360)
]
if plane$ = two,
[
result = nwadrs(strj, lead)
lead = abs(yinc/sweep$*360)
]
pcan1, pbld, n$, `sgfeed, sgplane, sgcode, sgabsinc, pccdia,
pxout, pyout, pzout, *lead, pcout, parc, feed, strcantext, scoolant, e$

pcom_moveb #Common motion preparation routines, before


pxyzcout
ps_inc_calc

pncoutput #Movement output


pcom_moveb
comment$
if coolant$ <> 0 & coolant$ <> sav_coolant,
[
pbld, n$, sm09, e$
sav_coolant = coolant$
]
if coolant$ = 1, sm09 = sm09_0
if coolant$ = 2, sm09 = sm09_1
if coolant$ = 3, sm09 = sm09_2
if cool_zmove = yes$ & (nextop$=1003 | (nextop$=1011 & t$<>abs(nexttool))),
coolant$ = zero
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, pbld, n$, *sgcode, *dwell$, strcantext, e$
else, pcan1, pbld, 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

# --------------------------------------------------------------------------
# Motion output components
# --------------------------------------------------------------------------
pbld #Canned text - block delete
if bld, '/'

pfbld #Force - block delete


"/"

pcompwarn #Cutter Compensation Check


if prv_cc_pos$ <> cc_pos$ & cc_pos$ & gcode$ > 1,
[
if compwarnflg = 0, result = mprint(scompwarn,1)
spaces$ = 0
pbld, n$, pspc, *sm00, pspc, "(", scompwarn, ")", e$
spaces$ = sav_spc
compwarnflg = 1
]

pccdia #Cutter Compensation


#Force Dxx#
if prv_cc_pos$ <> cc_pos$ & cc_pos$, prv_tloffno$ = c9k
sccomp
if cc_pos$, tloffno$

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, 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,
[
if fmtrnd(prv_indx_out) <> fmtrnd(indx_out),
[
if lock_codes = 1 & rotretflg = 0, pbld, n$, *sunlock, "(UNLOCK)", e$
pbld, n$, `sindx_mc, indx_out, e$
if lock_codes = 1 & cuttype = 0 & rotretflg = 0, pbld, n$, *slock,
"(LOCK)", e$
]
!cabs, !cinc
]

parc #Select the arc output


if arcoutput$ = zero | full_arc_flg$ | arc_pitch$,
[
#Arc output for IJK
# If you do NOT want to force out the I,J,K values,
# remove the "*" asterisks on the *i, *j, *k 's below...
if plane$ = zero, *i$, *j$, k$ #XY plane code - G17
if plane$ = one, i$, *j$, *k$ #YZ plane code - G19
if plane$ = two, *i$, j$, *k$ #XZ plane code - G18
]
else,
[
#Arc output for R
if abs(sweep$)<=180 | arcoutput$=one, result = nwadrs(srad, arcrad$)
else, result = nwadrs(srminus, arcrad$)
*arcrad$
]

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
if lock_codes = 1 & not(index), pbld, n$, *sunlock, "(UNLOCK)", e$
pbld, n$, sgcode, pcout, e$
if lock_codes = 1 & not(index) & cuttype = 0, pbld, n$, *slock, "(LOCK)",
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,
[
result = newfs (two, zinc)
if tap_feed = one & drillcyc$ = three, result = newfs (two, feed) #Tap
feeds with 4/3 decimal places
if drillcyc$ = three, drlgsel = fsg1(-ss$) + drillcyc$ * two
else, drlgsel = fsg2(dwell$) + drillcyc$ * two
if initht$ <> refht$, drillref = zero
else, drillref = one
prv_refht_a = c9k
prv_refht_i = c9k
prv_dwell$ = zero
]
if cuttype = three, sav_dgcode = gcode$
else, z$ = depth$
if cuttype = one, prv_zia = initht$ + (rotdia$/two)
else, prv_zia = refht$ #Fanuc style - G91 Z depth from R level
#else, prv_zia = initht #G91 Z depth from initial height
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
]
pbld, n$, sgabsinc, e$

prdrlout #R drill position


if cuttype = one, refht_a = refht$ + (rotdia$ / two)
else, refht_a = refht$
refht_i = refht$ - initht$
if cuttype = three, refht_a = w$
if absinc$ = zero, refht_a, !refht_i
else, refht_i, !refht_a

pdrlxy #Drill XY coordinates


if force_dpts, pfxout, pfyout
else, pxout, pyout

pdrill$ #Canned Drill Cycle


pdrlcommonb
pcan1, pbld, n$, *sgdrlref, *sgdrill, pdrlxy, pfzout, pcout,
prdrlout, dwell$, *feed, strcantext, e$
pcom_movea

ppeck$ #Canned Peck Drill Cycle


pdrlcommonb
pcan1, pbld, n$, *sgdrlref, *sgdrill, pdrlxy, pfzout, pcout,
prdrlout, *peck1$, *feed, strcantext, e$
pcom_movea

pchpbrk$ #Canned Chip Break Cycle


pdrlcommonb
pcan1, pbld, n$, *sgdrlref, *sgdrill, pdrlxy, pfzout, pcout,
prdrlout, *peck1$, *feed, strcantext, e$
pcom_movea

ptap$ #Canned Tap Cycle


pdrlcommonb
#RH/LH based on spindle direction
if use_pitch, pbld, n$, "G95", e$

if use_pitch = 0,
[
pcan1, pbld, n$, *sgdrlref, *sgdrill, pdrlxy, pfzout, pcout,
prdrlout, *feed, strcantext, e$
]
else,
[
if met_tool$, pitch = n_tap_thds$ # Tap pitch (mm per thread)
else, pitch = 1/n_tap_thds$ # Tap pitch (inches per thread)
pcan1, pbld, n$, "M29", *speed , e$
pbld, n$, *sgdrlref, *sgdrill, pdrlxy, pfzout, pcout,
prdrlout, *pitch, !feed, strcantext, e$
]
pcom_movea
tapflg = 1

pbore1$ #Canned Bore #1 Cycle


pdrlcommonb
pcan1, pbld, n$, *sgdrlref, *sgdrill, pdrlxy, pfzout, pcout,
prdrlout, dwell$, *feed, strcantext, e$
pcom_movea

pbore2$ #Canned Bore #2 Cycle


pdrlcommonb
pcan1, pbld, n$, *sgdrlref, *sgdrill, pdrlxy, pfzout, pcout,
prdrlout, *feed, strcantext, e$
pcom_movea

pmisc1$ #Canned Misc #1 Cycle


pdrlcommonb
pcan1, pbld, n$, *sgdrlref, *sgdrill, pdrlxy, pfzout, pcout,
prdrlout, shftdrl$, dwell$, *feed, strcantext, e$
pcom_movea

pmisc2$ #Canned Misc #2 Cycle (User Option)


pdrill$

pdrill_2$ #Canned Drill Cycle, additional points


pdrlcommonb
pcan1, pbld, n$, pdrlxy, pzout, pcout, prdrlout, dwell$,
feed, strcantext, 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$

pdrlcst$ #Custom drill cycles 8 - 19 (user option)


#Use this postblock to customize drilling cycles 8 - 19
pdrlcommonb
#if drillcyc = 8, pcan1, pbld, n, *sgdrlref, *sgdrill, pdrlxy, pfzout, pcout,
# prdrlout, dwell, *feed, strcantext, e
if drillcyc$ = 8,
[
sub_prg_call = peck1$
pcan1, pbld, n$, *sg00, *sgabsinc, pfxout, pfyout, strcantext, e$
pbld, n$, "M98", *sub_prg_call, e$
]
else, "CUSTOMIZABLE DRILL CYCLE ", pfxout, pfyout, pfzout, pfcout, e$
pcom_movea

pdrlcst_2$ #Custom drill cycles 8 - 19, additional points (user option)


#Use this postblock to customize drilling cycles 8 - 19
pdrlcommonb
#if drillcyc = 8, pcan1, pbld, n, pdrlxy, pzout, pcout, prdrlout, dwell,
# feed, strcantext, e
if drillcyc$ = 8,
[
sub_prg_call = peck1$
pcan1, pbld, n$, *sg00, *sgabsinc, pfxout, pfyout, strcantext, e$
pbld, n$, "M98", *sub_prg_call, e$
]
else, "CUSTOMIZABLE DRILL CYCLE ", pfxout, pfyout, pfzout, pfcout, e$
pcom_movea

pcanceldc$ #Cancel canned drill cycle


result = newfs (three, zinc)
if tap_feed = one & drillcyc$ = three, result = newfs (15, feed) #Cancel tap
feeds with 4/3 decimal places
z$ = initht$
!z$
if cuttype = one, prv_zia = initht$ + (rotdia$/two)
else, prv_zia = initht$
pxyzcout
!zabs, !zinc
prv_gcode$ = zero
if cool_zmove = yes$ & (nextop$=1003 | (nextop$=1011 & t$<>abs(nexttool))),
coolant$ = zero
pcan
if drillcyc$ <> 8, pcan1, pbld, n$, "G80", e$
#scoolant, e$
strcantext, e$
if use_pitch & tapflg = 1, pbld, n$, "G94", e$
scoolant, e$
pcan2
tapflg = 0

# --------------------------------------------------------------------------
#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 wcstype <= one, result = mprint(shomeserror,1)
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 wcstype > one, absinc$ = zero
if lock_codes = 1 & not(index) & rot_on_x, pbld, n$, *sunlock, "(UNLOCK)",
e$
pbld, n$, *sgcode, *sgabsinc, pwcs, pfxout, pfyout, pfzout,
pfcout, e$
if lock_codes = 1 & not(index) & rot_on_x & cuttype = 0, pbld, n$, *slock,
"(LOCK)", e$
pe_inc_calc
ps_inc_calc
]
]
absinc$ = sav_absinc
result = nwadrs(strp, main_prg_no$)
main_prg_no$ = main_prg_no$ + sav_progno #Add sub number offset
if sav_progno = main_prg_no$, result = mprint(sprgnerror,1)
pbld, n$, "M98", *main_prg_no$, e$
prv_feed = c9k #Force feed in sub

psub_mirror #Mirror start code, user


#Mirror Y axis
if sub_trnmthd$, pbld, n$, *sgabsinc, strns_mir_on, *sub_trnsx$, e$
#Mirror X axis
else, pbld, n$, *sgabsinc, strns_mir_on, *sub_trnsy$, e$

psub_rotate #Rotate start code, user


pbld, n$, *sgcode, *sgabsinc, strns_rot_on, *sub_trnsx$, *sub_trnsy$,
[absinc$ = one], *sgabsinc, *rt_cinc, e$

psub_st_m$ #Header in main level


result = nwadrs(stro, main_prg_no$)
#sav_n1 = n
#n = seqno
" ", e$
*main_prg_no$, e$
spaces$ = 0
if scomm0$ <> snull, "(", *scomm0$, ")", e$
spaces$ = sav_spc
#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
]
else, pbld, n$, sgabsinc, e$

psub_end_m$ #End in main level


n$, "M99", e$
prv_absinc$ = -1
#n = sav_n1
#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
pbld, n$, *sgabsinc, strns_mir_off, *sub_trnsx$, *sub_trnsy$, e$
]
else, #Rotate cancel
[
pbld, 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


result = nwadrs(strp, sub_prg_no$)
sub_prg_no$ = sub_prg_no$ + sav_progno + 1000 #Add sub number offset
if sav_progno = sub_prg_no$, result = mprint(sprgnerror,1)
pbld, n$, "M98", *sub_prg_no$, e$

psub_st_s$ #Header in sub level


result = nwadrs(stro, sub_prg_no$)
#sav_n2 = n
#n = seqno
" ", e$
*sub_prg_no$, e$
spaces$ = 0
if scomm0$ <> snull, "(", *scomm0$, ")", e$
spaces$ = sav_spc
pbld, n$, sgabsinc, e$

psub_end_s$ #End in sub level


n$, "M99", e$
prv_absinc$ = -1
#n = sav_n2

# --------------------------------------------------------------------------
# Canned Text
# --------------------------------------------------------------------------
pcan #Canned text - before output call
strcantext = sblank
if cant_no$ > zero,
[
if cant_pos1$ = zero, pcant_1
if cant_pos2$ = zero, pcant_2
if cant_pos3$ = zero, pcant_3
if cant_pos4$ = zero, pcant_4
if cant_pos5$ = zero, pcant_5
if cant_pos6$ = zero, pcant_6
if cant_pos7$ = zero, pcant_7
if cant_pos8$ = zero, pcant_8
if cant_pos9$ = zero, pcant_9
if cant_pos10$ = zero, pcant_10
pbld, n$, strcantext, e$
strcantext = sblank
]

pcan1 #Canned text - with move


strcantext = sblank
if cant_no$ > zero,
[
if cant_pos1$ = one, pcant_1
if cant_pos2$ = one, pcant_2
if cant_pos3$ = one, pcant_3
if cant_pos4$ = one, pcant_4
if cant_pos5$ = one, pcant_5
if cant_pos6$ = one, pcant_6
if cant_pos7$ = one, pcant_7
if cant_pos8$ = one, pcant_8
if cant_pos9$ = one, pcant_9
if cant_pos10$ = one, pcant_10
]
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, pcant_1
if cant_pos2$ = two, pcant_2
if cant_pos3$ = two, pcant_3
if cant_pos4$ = two, pcant_4
if cant_pos5$ = two, pcant_5
if cant_pos6$ = two, pcant_6
if cant_pos7$ = two, pcant_7
if cant_pos8$ = two, pcant_8
if cant_pos9$ = two, pcant_9
if cant_pos10$ = two, pcant_10
pbld, 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_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$ = three, strcantext = strcantext + sm02
if cantext$ = four, strcantext = strcantext + sm03
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

pusecannedyes # Use canned drilling cycles


usecandrill$ = yes$ # Use canned cycle for drill
usecanpeck$ = yes$ # Use canned cycle for Peck
usecanchip$ = yes$ # Use canned cycle for Chip Break
usecantap$ = yes$ # Use canned cycle for Tap
usecanbore1$ = yes$ # Use canned cycle for Bore1
usecanbore2$ = yes$ # Use canned cycle for Bore2
usecanmisc1$ = yes$ # Use canned cycle for Misc1
usecanmisc2$ = yes$ # Use canned cycle for Misc2

pusecannedno # Use canned drilling cycles


usecandrill$ = no$ # Use canned cycle for drill
usecanpeck$ = no$ # Use canned cycle for Peck
usecanchip$ = no$ # Use canned cycle for Chip Break
usecantap$ = no$ # Use canned cycle for Tap
usecanbore1$ = no$ # Use canned cycle for Bore1
usecanbore2$ = no$ # Use canned cycle for Bore2
usecanmisc1$ = no$ # Use canned cycle for Misc1
usecanmisc2$ = no$ # Use canned cycle for Misc2

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
]
]

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,1)
cuttype = three
]
if rotary_axis$,
[
if rotary_axis$ <> rot_on_x, result = mprint(saxiswarn,1)
rot_on_x = rotary_axis$
]
#Check for Tool Origin in Polar Milling
if cuttype = two & (tox$ | toy$ | toz$), result = mprint(stlorgerr,1)
#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 cuttype = 2 & rot_on_x = two & vmc, c$ = atan2(vtoolx$,-vtooly$)
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$))
]
if c$ <> 0,
[
if rot_on_x = two, csav = -c$
else, csav = c$
]

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
#csav = -atan2(y, -x) #X- zero
#csav = -atan2(x, y) #Y+ zero
#csav = -atan2(-x, -y) #Y- 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
if (cuttype = zero | opcode$ = 3 | (gcode$ = 0 & cuttype <> one)) & one_rev =
one,
[
while fmtrnd(cabs) >= 360,
[
cabs = cabs - 360
rev = rev - 1
]
while fmtrnd(cabs) < 0,
[
cabs = cabs + 360
rev = rev + 1
]
#while fmtrnd(cabs) < -360,
# [
# cabs = cabs + 720
# rev = rev + 2
# ]
if abs(cdelta) >= 0.0005, prv_cabs = c9k
]
!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,1)
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 abs(fmtrnd(cabs)-prvcabs) <= 0.001 | index | not(rot_feed) | opcode$ = 3,
pfcalc_u_min
else,
[
#if cuttype = one & (cutpos2 <= one), #Proposed change
if cuttype = one & (cutpos2$ <= one | cutpos2$ = four & (opcode$ < 5 &
opcode$ > 12)),
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 cuttype = two & rot_on_x = three, circum = sqrt(xabs^2 + yabs^2) * 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
result = force(feed, feed) #Always force feed
if cuttype = three, cldelta =
sqrt((x$-prv_x$)^2+(y$-prv_y$)^2+(z$-prv_z$)^2)
frinv = fr_pos$/cldelta # 1/min
#frinv = fr_pos/(60*cldelta) # 1/sec
if rot_feed & opcode$ <> 3 & opcode$ <> 16,
[
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))
frdeg = fr_pos$ * abs((cabs - prvcabs)/cldelta)
if abs(frdeg - prvfrdeg) > frdegstp | ipr_type <> prv_ipr_type,
[
#Control output of frdeg
if rot_feed & opcode$ <> 3 & opcode$ <> 16,
[
prvfrdeg = frdeg
feed = frdeg
]
]
if frdeg > maxfrdeg & rot_feed, 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$

# --------------------------------------------------------------------------
# Tooltable Output
# --------------------------------------------------------------------------
pwrtt$ # Write tool table, scans entire file, null tools are negative
if rotaxis$ > 0 | rotary_type$ > 0 | mill5$ <> 0,
[
rot_on_x = sav_rot_on_x
output_z = no$
]
#if vmc = 0 & tlplnno <> 2, rot_on_x = sav_rot_on_x
#if vmc = 1 & tlplnno > 1, rot_on_x = sav_rot_on_x
if tlplnno$ > 1, rot_on_x = sav_rot_on_x
tlplnno$ = wbuf(3,wc3) #Buffers out tool plane values
t$ = wbuf(4,wc4) #Buffers out tool number values
if tool_table = 1, ptooltable,e$
if tool_table = 2, ppredtool,e$
if tool_table = 3, pmetatool,e$
if t$ >= zero, tcnt = tcnt + one
ptravel
pwritbuf5

ptooltable # Write tool table, scans entire file, null tools are negative
tnote = t$
toffnote = tloffno$
tlngnote = tlngno$
spaces$=0
#if t$ >= zero,
# [
#if tcr$>0, "(", *t$, ptspace, "|", plistcomm, "|", *tlngno$, phspace,
"|", *tloffno$, pdspace, "|", *tldia$,pdiamspc "|", *tcr$, "|", popnote, ")"
#if tcr$=0, "(", *t$, ptspace, "|", plistcomm, "|", *tlngno$, phspace,
"|", *tloffno$, pdspace, "|", *tldia$,pdiamspc "|", " |", popnote, ")"
#]
if t$ >= zero,
[
if tcr$>0, "(", *t$, ptspace, "|", plistcomm, "|",*tlngno$, phspace,
"|", popnote, ")"
if tcr$=0, "(", *t$, ptspace, "|", plistcomm, "|",*tlngno$, phspace,
"|", popnote, ")"
]

#if t >= zero,


# [
# "(", *t, ptspace, " - ", plistcomm, ")"
# ]
#if t >= zero,
# [
# if tcr>0, "(", *tnote, " ", *toffnote, " ", *tlngnote, " ", *tldia,
" ", *tcr, " ", popnote, ")"
# if tcr=0, "(", *tnote, " ", *toffnote, " ", *tlngnote, " ", *tldia,
" ", popnote, ")"
# ]
spaces$=sav_spc

punit # Tool unit


if met_tool$, "mm"
else, 34

ptravel # Tool travel limit calculation


if x_min$ < x_tmin, x_tmin = x_min$
if x_max$ > x_tmax, x_tmax = x_max$
if y_min$ < y_tmin, y_tmin = y_min$
if y_max$ > y_tmax, y_tmax = y_max$
if z_min$ < z_tmin, z_tmin = z_min$
if z_max$ > z_tmax, z_tmax = z_max$

ppredtool # Write tool setup info for Predator Virtual CNC


#if tool_typ = 1, styp1 # CENTER DRILL 1 - NTG/S4
#if tool_typ = 2, styp2 # SPOT DRILL 2 - S4
#if tool_typ = 3, styp3 # DRILL 3 - S4
#if tool_typ = 4, styp4 # TAP-RH 4 - S4 - MAX 179 ANGLE
#if tool_typ = 5, styp5 # TAP-LH 5 - S4 - MAX 179 ANGLE
#if tool_typ = 6, styp6 # REAMER 6 - S3/S1/S2
#if tool_typ = 7, styp7 # BORING BAR 7 - S3/S1/S2
#if tool_typ = 8, styp8 # COUNTER BORE 8 - NTG
#if tool_typ = 9, styp9 # COUNTER SINK 9 - NTG/S4
#if tool_typ = 10, styp10 # END MILL FLAT 10 - S1
#if tool_typ = 11, styp11 # END MILL SPHERE 11 - S2
#if tool_typ = 12, styp12 # CHAMFER MILL 12 - S7/NTG
#if tool_typ = 13, styp13 # FACE MILL 13 - S7/S9/NTG
#if tool_typ = 14, styp14 # SLOT MILL 14 - NTG/S1
#if tool_typ = 15, styp15 # CORNER RAD MILL 15 - S5/FLAT
#if tool_typ = 16, styp16 # DOVETAIL MILL 16 - DOVETAIL/NTG
#if tool_typ = 17, styp17 # TAPER MILL 17 - S7/S9/S10
#if tool_typ = 18, styp18 # LOLLIPOP MILL 18 - S6
#if tool_typ = 19, styp19 # END MILL BULL 19 - S3

tcr_pred = tcr$
tldia_pred = tldia$
tip_angle_ch = tip_angle*2
spaces$=0

if t$ >= zero,
[
# CENTER DRILL
if tool_typ$ = 1, "(MTOOL ", *t$, " ", *tldia_pred, " ", *tip_angle, "
", *flute_len, " S4)"
# SPOT DRILL
if tool_typ$ = 2, "(MTOOL ", *t$, " ", *tldia_pred, " ", *tip_angle, "
", *flute_len, " S4)"
# DRILL
if tool_typ$ = 3, "(MTOOL ", *t$, " ", *tldia_pred, " ", *tip_angle, "
", *flute_len, " S4)"
# TAP-RH
if tool_typ$ = 4,
[
if tip_angle <= 179, "(MTOOL ", *t$, " ", *tldia_pred, " ",
*tip_angle, " ", *flute_len, " S4)"
else, "(MTOOL ", *t$, " ", *tldia_pred, " ", "A179.", " ",
*flute_len, " S4)"
]
# TAP-LH
if tool_typ$ = 5,
[
if tip_angle <= 179, "(MTOOL ", *t$, " ", *tldia_pred, " ",
*tip_angle, " ", *flute_len, " S4)"
else, "(MTOOL ", *t$, " ", *tldia_pred, " ", "A179.", " ",
*flute_len, " S4)"
]
# REAMER
if tool_typ$ = 6,
[
if tcr$ = 0, "(MTOOL ", *t$, " ", *tldia_pred, " ", *flute_len, "
S1)"
if tcr$ = tlrad$, "(MTOOL ", *t$, " ", *tldia_pred, " ", *flute_len,
" S2)"
if tcr$ > 0 & tcr$ < tlrad$, "(MTOOL ", *t$, " ", *tldia_pred, " ",
*tcr_pred, " ", *flute_len, " S3)"
]
# BORING BAR
if tool_typ$ = 7,
[
if tcr$ = 0, "(MTOOL ", *t$, " ", *tldia_pred, " ", *flute_len, "
S1)"
if tcr$ = tlrad$, "(MTOOL ", *t$, " ", *tldia_pred, " ", *flute_len,
" S2)"
if tcr$ > 0 & tcr$ < tlrad$, "(MTOOL ", *t$, " ", *tldia_pred, " ",
*tcr_pred, " ", *flute_len, " S3)"
]
# COUNTER BORE
if tool_typ$ = 8,
[
if tcr$ = 0, "(MTOOL ", *t$, " ", *tldia_pred, " ", *flute_len, "
S1)"
if tcr$ = tlrad$, "(MTOOL ", *t$, " ", *tldia_pred, " ", *flute_len,
" S2)"
if tcr$ > 0 & tcr$ < tlrad$, "(MTOOL ", *t$, " ", *tldia_pred, " ",
*tcr_pred, " ", *flute_len, " S3)"
]
# COUNTER SINK
if tool_typ$ = 9, "(MTOOL ", *t$, " ", *tldia_pred, " ", *tip_angle, "
", *flute_len, " S4)"
# END MILL FLAT
if tool_typ$ = 10, "(MTOOL ", *t$, " ", *tldia_pred, " ", *flute_len, "
S1)"
# END MILL SPHERE
if tool_typ$ = 11, "(MTOOL ", *t$, " ", *tldia_pred, " ", *flute_len, "
S2)"
# CHAMFER MILL
if tool_typ$ = 12, "(MTOOL ", *t$, " ", *tldia_pred, " ",
*tip_angle_ch, " ", *flute_len, " S7)"
# FACE MILL
if tool_typ$ = 13, "(MTOOL ", *t$, " ", *tldia_pred, " ", *flute_len, "
S1)"
# SLOT MILL
if tool_typ$ = 14, "(MTOOL ", *t$, " ", *tldia_pred, " ", *flute_len, "
S1)"
# CORNER RAD MILL
if tool_typ$ = 15,
[
if tcr$ = 0, "(MTOOL ", *t$, " ", *tldia_pred, " ", *flute_len, "
S1)"
else, "(MTOOL ", *t$, " ", *tldia_pred, " ", *tcr_pred, " ",
*flute_len, " S5)"
]
# DOVETAIL MILL
if tool_typ$ = 16, "(MTOOL ", *t$, " ", *tldia_pred, " ", *tip_angle, "
", *flute_len, " S8)"
# TAPER MILL
if tool_typ$ = 17,
[
if tcr$ = 0, "(MTOOL ", *t$, " ", *tldia_pred, " ", *tip_angle, " ",
*flute_len, " S7)"
if tcr$ = tlrad$, "(MTOOL ", *t$, " ", *tldia_pred, " ", *tip_angle,
" ", *flute_len, " S9)"
if tcr$ > 0 & tcr$ < tlrad$, "(MTOOL ", *t$, " ", *tldia_pred, " ",
*tcr_pred, " ", *tip_angle, " ", *flute_len, " S10)"
]
# LOLLIPOP MILL
if tool_typ$ = 18, "(MTOOL ", *t$, " ", *tldia_pred, " S6)"
# END MILL BULL
if tool_typ$ = 19, "(MTOOL ", *t$, " ", *tldia_pred, " ", *tcr_pred, "
", *flute_len, " S3)"
]
spaces$=sav_spc

pmetatool # Write tool setup info for MetaCut View


tcr_meta = tcr$
if tool_typ$ = 13 | tool_typ$ = 17, tldia_meta = tldia$ + (2 *(flute_len
* tan(tip_angle)))
else, tldia_meta = tldia$
if cctotip$ = 0, tipcomp = 1
else, tipcomp = 0
if tool_typ$ = 10 | opcode$ = 3, tipcomp = 0
if tool_typ$ = 12, td_meta = tip_dia
else, td_meta = 0
if tool_typ$ = 13 | tool_typ$ = 17, td_meta = tldia$
flute_meta = flute_len
oa_meta = oa_len
ta_meta = tip_angle
cd_meta = hldr_dia
cl_meta = hldr_len
sd_meta = cd_meta

#(NWDTOOL NAME"1/2 CHAMFER MILL" T1 D.5 R0. F2. L3. A45. TD.06 CD2. CL1.
SD2. C0)
# N = "Tool name"
# T = Tool No.
# D = Tool Dia.
# R = Corner Radius
# F = Flute Length
# L = Tool over all length
# A = Tip angle or Taper angle
# TD = Tip Dia.
# CD = Colllet/Holder Dia.
# CL = Collet/Holder Height
# SD = Spindle Dia. (set equal to Collet Diameter)
# C = tip or center 0 = tip 1 = center

spaces$=0
if t$ >= zero, "(NWDTOOL N", 34, pmetacomm, 34, " ", *t$, " ",
*tldia_meta, " ",
[if tcr_meta > 0, *tcr_meta, " "], *flute_meta, " ",
*oa_meta, " ",
[if ta_meta<>180, *ta_meta, " "], [if td_meta > 0,
*td_meta, " "],
*cd_meta, " ", *cl_meta, " ", *sd_meta, " ", *tipcomp, ")"
spaces$=sav_spc

# --------------------------------------------------------------------------
# Buffer 5 Read / Write Routines
# --------------------------------------------------------------------------
pwritbuf5 # Write Buffer 1
b5_gcode = gcode$
b5_zmin = z_min$
b5_zmax = z_max$
b5_gcode = wbuf(5, wc5)

preadbuf5 # Read Buffer 1


size5 = rbuf(5,0)
b5_gcode = 1000
min_depth = 99999
max_depth = -99999
while rc5 <= size5 & b5_gcode = 1000,
[
if rc5 <= size5, b5_gcode = rbuf(5,rc5)
if b5_zmin < min_depth, min_depth = b5_zmin
if b5_zmax > max_depth, max_depth = b5_zmax
]

#region Post text


# Do not add an #endregion tag -- or any other #region tags -- below this line.
# --------------------------------------------------------------------------
# POST TEXT
# --------------------------------------------------------------------------
[CTRL_TEXT_XML_BEGIN] # Post text edits MUST be made with Control Definition
Manager.
<?xml version="1.0" encoding="UTF-8"?>
<mp_xml_post_text xml:space="preserve">
<control>
<control_label>CTRL_MILL|DEFAULT</control_label>
<language>ko-KR</language>
<misc_integers>
<misc_1>
<text>Work Coordinates [0-1=G92, 2=G54's]</text>
<value>2</value>
</misc_1>
<misc_2>
<text>Absolute/Incremental, top level [0=ABS,
1=INC]</text>
</misc_2>
<misc_3>
<text>Reference Return [0=G28, 1=G30]</text>
</misc_3>
</misc_integers>
<simple_drill>
<first_peck>
<text>""</text>
</first_peck>
<subsequent_peck>
<text>""</text>
</subsequent_peck>
<peck_clearance>
<text>""</text>
</peck_clearance>
<retract_amount>
<text>""</text>
</retract_amount>
<shift>
<text>""</text>
</shift>
</simple_drill>
<peck_drill>
<dwell>
<text>""</text>
</dwell>
<first_peck>
<text>Peck</text>
</first_peck>
<subsequent_peck>
<text>""</text>
</subsequent_peck>
<peck_clearance>
<text>""</text>
</peck_clearance>
<retract_amount>
<text>""</text>
</retract_amount>
<shift>
<text>""</text>
</shift>
</peck_drill>
<chip_break>
<dwell>
<text>""</text>
</dwell>
<first_peck>
<text>Peck</text>
</first_peck>
<subsequent_peck>
<text>""</text>
</subsequent_peck>
<peck_clearance>
<text>""</text>
</peck_clearance>
<retract_amount>
<text>""</text>
</retract_amount>
<shift>
<text>""</text>
</shift>
</chip_break>
<tap>
<dwell>
<text>""</text>
</dwell>
<first_peck>
<text>""</text>
</first_peck>
<subsequent_peck>
<text>""</text>
</subsequent_peck>
<peck_clearance>
<text>""</text>
</peck_clearance>
<retract_amount>
<text>""</text>
</retract_amount>
<shift>
<text>""</text>
</shift>
</tap>
<bore1>
<description>
<text>Bore #1 (feed-out)</text>
</description>
<first_peck>
<text>""</text>
</first_peck>
<subsequent_peck>
<text>""</text>
</subsequent_peck>
<peck_clearance>
<text>""</text>
</peck_clearance>
<retract_amount>
<text>""</text>
</retract_amount>
<shift>
<text>""</text>
</shift>
</bore1>
<bore2>
<description>
<text>Bore #2 (stop spindle, rapid out)</text>
</description>
<dwell>
<text>""</text>
</dwell>
<first_peck>
<text>""</text>
</first_peck>
<subsequent_peck>
<text>""</text>
</subsequent_peck>
<peck_clearance>
<text>""</text>
</peck_clearance>
<retract_amount>
<text>""</text>
</retract_amount>
<shift>
<text>""</text>
</shift>
</bore2>
<misc1>
<description>
<text>Fine Bore (shift)</text>
</description>
<first_peck>
<text>""</text>
</first_peck>
<subsequent_peck>
<text>""</text>
</subsequent_peck>
<peck_clearance>
<text>""</text>
</peck_clearance>
<retract_amount>
<text>""</text>
</retract_amount>
</misc1>
<misc2>
<description>
<text>Rigid Tapping Cycle</text>
</description>
<dwell>
<text>""</text>
</dwell>
<first_peck>
<text>""</text>
</first_peck>
<subsequent_peck>
<text>""</text>
</subsequent_peck>
<peck_clearance>
<text>""</text>
</peck_clearance>
<retract_amount>
<text>""</text>
</retract_amount>
<shift>
<text>""</text>
</shift>
</misc2>
<drill_cycle_descriptions>
<misc_drill_1>
<text>Fine bore (shift)</text>
</misc_drill_1>
<misc_drill_2>
<text>Rigid Tapping Cycle</text>
</misc_drill_2>
</drill_cycle_descriptions>
<canned_text>
<canned_text_1>
<text>Stop</text>
</canned_text_1>
<canned_text_2>
<text>Ostop</text>
</canned_text_2>
<canned_text_3>
<text>Bld on</text>
</canned_text_3>
<canned_text_4>
<text>bLd off</text>
</canned_text_4>
<canned_text_5>
<text>M5</text>
</canned_text_5>
<canned_text_6>
<text>M6</text>
</canned_text_6>
<canned_text_7>
<text>M7</text>
</canned_text_7>
<canned_text_8>
<text>M8</text>
</canned_text_8>
<canned_text_9>
<text>M9</text>
</canned_text_9>
<canned_text_10>
<text>M10</text>
</canned_text_10>
</canned_text>
</control>
</mp_xml_post_text>
[CTRL_TEXT_XML_END]

You might also like