老哥,人家不顶我也没办法啊,求你了,给小弟解决一下把作者: lxing00000 时间: 2004-10-25 16:45
又有5位先生下了,却不谢????????作者: chenyilin 时间: 2004-10-25 16:56
我这里有我改好的,你试试看,# Post Name : MPFAN
# Product : MILL
# Machine Name : GENERIC FANUC
# Control Name : GENERIC FANUC
# Description : GENERIC FANUC MILL POST
# Associated Post : NONE
# Mill/Turn : NO
# 4-axis/Axis subs. : YES
# 5-axis : NO
# Subprograms : YES
# Executable : MP v9.0
#
# WARNING: THIS POST IS GENERIC AND IS INTENDED FOR MODIFICATION TO
# THE MACHINE TOOL REQUIREMENTS AND PERSONAL PREFERENCE.
#
# --------------------------------------------------------------------------
# Revision log:
# --------------------------------------------------------------------------
# Programmers Note:
# CNC 01/12/01 - Initial post update for V8.1, grt
# CNC 07/02/01 - Add cantext to cancel drill and tool retract, jph
# CNC 01/09/02 - Initial post update for V9.0, rjm
# CNC 01/31/02 - Set usecandrill, usecanpeck, force_wcs to YES, rjm
# CNC 02/22/02 - Forces output of I,J,K arc centers (arcoutput:0), rjm
# CNC 04/12/02 - Use original position for inverse feed and 4 ax paths, jph
# CNC 05/01/02 - Set "helix_arc:2", support helix arc output in XY plane, rjm
# CNC 05/07/02 - Do not update sav_rev with axis substitution, jph
#
# --------------------------------------------------------------------------
# Features:
# --------------------------------------------------------------------------
# This post supports Generic Fanuc code output for 3 and 4 axis milling.
# It is designed to support the features of Mastercam Mill V8.
#
# Following Misc. Integers are used:
#
# mi1 - 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.
#
# mi2 - Absolute or Incremental positioning at top level
# 0 = absolute
# 1 = incremental
#
# mi3 - Select G28 or G30 reference point return.
# 0 = G28, 1 = G30
#
#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
#
#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.
#
# --------------------------------------------------------------------------
# Debugging and Factory Set Program Switches
# --------------------------------------------------------------------------
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
fastmode : yes #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)
get_1004 : 1 #Find gcode 1004 with getnextop?
rpd_typ_v7 : 0 #Use Version 7 style contour flags/processing?
strtool_v7 : 0 #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 : 0 #Build the next variable table
# --------------------------------------------------------------------------
# General Output Settings
# --------------------------------------------------------------------------
sub_level : 1 #Enable automatic subprogram support
breakarcs : 2 #Break arcs, 0 = no, 1 = quadrants, 2 = 180deg. max arcs
arcoutput : 1 #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.
do_full_arc : 0 #Allow full circle output? 0=no, 1=yes
helix_arc : 2 #Support helix arc output, 0=no, 1=all planes, 2=XY plane only
arccheck : 3 #Check for small arcs, convert to linear
atol : .01 #Angularity tolerance for arccheck = 2
ltol : .002 #Length tolerance for arccheck = 1
vtol : .0001 #System tolerance
maxfeedpm : 500 #Limit for feed in inch/min
ltol_m : .05 #Length tolerance for arccheck = 1, metric
vtol_m : .0025 #System tolerance, metric
maxfeedpm_m : 10000 #Limit for feed in mm/min
force_wcs : yes #Force WCS output at every toolchange?
spaces : 0 #Number of spaces to add between fields
omitseq : no #Omit sequence numbers?
seqmax : 9999 #Max. sequence number
stagetool : 0 #0 = Do not pre-stage tools, 1 = Stage tools
use_gear : 0 #Output gear selection code, 0=no, 1=no
max_speed : 10000 #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 : 1 #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 : 0 #Use index positioning, 0 = Full Rotary, 1 = Index only
ctable : 5 #Degrees for each index step with indexing spindle
use_frinv : 0 #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 : 1 #Force C axis reset at toolchange
ctol : 225 #Tolerance in deg. before rev flag changes
ixtol : .01 #Tolerance in deg. for index error
frdegstp : 10 #Step limit for rotary feed in deg/min
# --------------------------------------------------------------------------
# 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_frc_wcs : 0 #Force work offset flag 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 : 0 #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
#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"
# --------------------------------------------------------------------------
# General G and M Code String select tables
# --------------------------------------------------------------------------
# Motion G code selection
sg00 G0 #Rapid
sg01 G1 #Linear feed
sg02 G2 #Circular interpolation CW
sg03 G3 #Circular interpolation CCW
sg04 G4 #Dwell
sgcode #Target for string
fstrsel sg28 mi3 sg28ref
# --------------------------------------------------------------------------
# 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
# --------------------------------------------------------------------------
# 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
sgdrill #Target for string
fstrsel sg81 drlgsel sgdrill
# --------------------------------------------------------------------------
# Select incremental or absolute G code
sg90 G90 #Absolute code
sg91 G91 #Incremental code
sgabsinc #Target string
fstrsel sg90 absinc sgabsinc
# --------------------------------------------------------------------------
# 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
# --------------------------------------------------------------------------
#Canned drill cycle reference height
sg98 G98 #Reference at initht
sg99 G99 #Reference at refht
sgdrlref #Target for string
fstrsel sg98 drillref sgdrlref # Drill cycle G string select
# --------------------------------------------------------------------------
# Generate string for spindle
sm04 M4 #Spindle reverse
sm05 M5 #Spindle off
sm03 M3 #Spindle forward
spindle #Target for string
fstrsel sm09 coolant scoolant
# --------------------------------------------------------------------------
# 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
# --------------------------------------------------------------------------
# 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 Number
fmt T 4 first_tool #First Tool Used
fmt T 4 next_tool #Next Tool Used
fmt D 4 tloffno #Diameter Offset Number
fmt H 4 tlngno #Length Offset Number
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 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 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 Q 2 shftdrl #Fine bore tool shift
fmt R 2 refht_a #Reference height
fmt R 2 refht_i #Reference height
# --------------------------------------------------------------------------
fmt " OFFSET= " 4 toffnote # Note format
fmt " L= " 4 tlngnote # Note format
fmt " D= " 1 tldia # Note format
# --------------------------------------------------------------------------
# Start of File and Toolchange Setup
# --------------------------------------------------------------------------
psof0 #Start of file for tool zero
psof
psof #Start of file for non-zero tool number
pcuttype
toolchng = one
if ntools = one,
[
#skip single tool outputs, stagetool must be on
stagetool = m_one
!next_tool
]
"%", e
*progno, e
"(PROGRAM NAME - ", sprogname, ")", e
"(BIANCHENGREN:chenyilin c_yl7912@163.com)",e
"(jisuanji:CNC1)",e
"(DATE=DD-MM-YY - ", date, " TIME=HH:MM - ", time, ")", e
pbld, n, *smetric, e
pbld, n, *sgcode, *sgplane, "G40", "G49", "G80", *sgabsinc, e
sav_absinc = absinc
if mi1 <= one, #Work coordinate system
[
absinc = one
pfbld, n, sgabsinc, *sg28ref, "Z0.", e
pfbld, n, *sg28ref, "X0.", "Y0.", e
pfbld, n, "G92", *xh, *yh, *zh, e
absinc = sav_absinc
]
pcom_moveb
c_mmlt #Multiple tool subprogram call
ptoolcomment
comment
pcan
if stagetool < zero, pbld, n, *t, "M6", e
pindex
if mi1 > one, absinc = zero
pcan1, pbld, n, *sgcode, *sgabsinc, pwcs, pfxout, pfyout,
pfcout, *speed, *spindle, pgear, strcantext, e
pbld, n, "G43", *tlngno, pfzout, scoolant, next_tool, e
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
pbld, n, sgplane, e
pspindchng
pbld, n, scoolant, e
if mi1 > one & workofs <> prv_workofs,
[
sav_absinc = absinc
absinc = zero
pbld, n, sgabsinc, pwcs, pfxout, pfyout, pfzout, pfcout, e
pe_inc_calc
ps_inc_calc
absinc = sav_absinc
]
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
if mi1 = one, #Work coordinate system
[
pfbld, n, *sg28ref, "X0.", "Y0.", e
pfbld, n, "G92", *xh, *yh, *zh, e
]
pbld, n, "M01", e
pcom_moveb
c_mmlt #Multiple tool subprogram call
ptoolcomment
comment
pcan
pbld, n, *t, "M6", e
pindex
sav_absinc = absinc
if mi1 > one, absinc = zero
pcan1, pbld, n, *sgcode, *sgabsinc, pwcs, pfxout, pfyout,
pfcout, *speed, *spindle, pgear, strcantext, e
pbld, n, "G43", *tlngno, pfzout, scoolant, next_tool, e
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
pbld, n, sccomp, *sm05, psub_end_mny, e
pcan1, pbld, n, sgabsinc, sgcode, *sg28ref, "Z0.", scoolant, strcantext, 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
comment
#Remove pound character to output first tool with staged tools
#if stagetool = one, pbld, n, *first_tool, e
n, "M30", e
mergesub
clearsub
mergeaux
clearaux
"%", e
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 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)
]
pheader #Call before start of file
if met_tool = one, #Metric constants and variable adjustments
[
ltol = ltol_m
vtol = vtol_m
maxfeedpm = maxfeedpm_m
]
ptoolend #End of tool path, before reading new tool data
!speed, !spdir2
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
]
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, scoolant, e
plinout #Output to NC of linear movement - feed
pcan1, pbld, n, sgfeed, sgplane, `sgcode, sgabsinc, pccdia,
pxout, pyout, pzout, pcout, feed, strcantext, scoolant, e
pcirout #Output to NC of circular interpolation
pcan1, pbld, n, `sgfeed, sgplane, sgcode, sgabsinc, pccdia,
pxout, pyout, pzout, pcout, parc, feed, strcantext, scoolant, e
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
pindex #Index output
if index & rot_on_x,
[
pbld, n, `sindx_mc, indx_out, 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
pbld, 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,
[
result = newfs (two, zinc)
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 = initht
feed = fr_pos
pcom_moveb
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
]
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
pbld, n, *sgcode, *sgabsinc, pwcs, pfxout, pfyout, pfzout,
pfcout, e
pe_inc_calc
ps_inc_calc
]
]
absinc = sav_absinc
result = nwadrs(strp, main_prg_no)
if progno = main_prg_no, result = mprint(sprgnerror)
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)
" ", e
*main_prg_no, e
#G51/G68 requires absolute position on first move
if mr_rt_actv & absinc = one,
[
sav_absinc = absinc
absinc = 作者: 雪人2000 时间: 2004-10-25 18:46
楼上的后处理钻孔有问题哦。作者: anqin 时间: 2004-10-25 21:21
lxing00000 哥哥,小弟晚谢了 作者: lxing00000 时间: 2004-10-26 09:24
“lxing00000 哥哥,小弟晚谢了”