{9/18/95, L201.82.1, Updated for Catalyst v2.20 per Fanuc 10T MS [-] L001.85.02 Format, DWB}
{8/14/96, Initial: Fanuc 0TA Colchester L201.85 Created: Fanuc 0T Col [HS] L501.85 Added custom line# at tool changes, see Fanuc 6T MS SL4 [HS] L472.85.1 for details Moved tool comments out of DoOpComments, added them to FirstOperation and NewTool after custom line# Moved output of lathe offset into Approach sub Eliminated GearRange stuff, made output of M41/M42 contingent upon whether Tap? was true (M41 for tapping, M42 for all others) Changed ckCRC to output G41 for OD cutting, G42 for all others Changed LineFeat to output Dwell value after each peck of a manual peck drilling cycle Eliminated saftey G97 at the end of CSS operation in NewTool and end section Added CRCOff to G97 block athe beginning of operations Put Speed on separate line after G97 line Added checking for spindle direction reversal, stops spindle before changing directions Deleted UnTool block at program end Added Optional stop at program end Fanuc 16T MS SL25 [HS] L500.85 MPK}
{8/14/96, Initial: Fanuc 0T Col [HS] L500.85 Created: Fanuc 16T MS SL25 L501.85 Added Support for custom cutoff routine (see comments for Fanuc 6T MS SL2 [HS-SF] L482.85) Added custom bar pull routine (see comments for Fanuc 6T MS SL2 [HS-SF] L482.85) Removed all moves to home, added literal G53X0.Y0. at tool change positions Changed Rapid at beginning of Approach to RapidC Changed ckCRC to output G42 for OD approach, G41 for all others Cahnged MaxRPM to 3000 Delteted output of M41/M42 codes Deleted output of offset from AppMove, changed '00' literal after OpToolID in FirstOp and NewTool to LatheOffset Customized Tapping non-canned tapping cycle per customer request, MPK}
{10/2/96 Initial: Fanuc 16T MS SL25 L501.85 Created: Fanuc 16T MS SL25 L501.85.1 changed format for X taper at Z to *####.####;0, MPK}
{11/18/96 Initial: Fanuc 16T MS SL25 L501.85.1 Created: Fanuc 16T MS SL25 L501.85.2 added literal 'F' before FeedTapIPR(1)# in ToolPath LineFeat, moved CoolOn up to saftey start block when doing a cutoff op, Changed literal 'G53X0.Y0.' to G53X0.Z0.' in all occurances, Moved G20 line before G53 line in FirstOp, changed literal 'X-.5' to 'X.5' in hardcoded cutoff section, Added literal 'M89' after tool cancel in end section when doing cutoff, MPK}
{1/22/97, Initial: Fanuc 16T MS SL25 L501.85.2 Created: Fanuc 16T MS SL25 L501.85.3 Added FeedC to line after Stepmove in Canned RoughContour section, MPK}
{6/16/98, Initial : Fan 16T MS SL25 [HS] L501.85.3 Created: Fan 16T MS SL25 [HS] L501.85.4 Customer: Hydrasun Limited, UK - Ian Pullen
Changes to "Form":
1. Under Threading, removed * from the X Taper at Start Z (R) Format.
Changes to "Prog":
1. Replaced XStkLeft with 'U' & calcXStkLeft sub for RoughContour and PatternShift. 2. Added #9 FORMAT to reverse the U sign. JHE}
{Prog Numeric Format Definitions *******************************************}
RestoreScale: IF Metric? {CAM file is in Metric, tools and tool path} SetScale('.03937007874') { change to English, this is an English post} END RETURN
calcXStkLeft: {Added this sub - JHE} IF ApproachID? FORMAT(MUL#,9) {reverse sign - JHE} MUL# Num#('2') StockXRadius# FORMAT(MUL#,2) ELSE MUL# Num#('2') StockXRadius# END RETURN
DoOpComments: IF UseComments? SetScale('1') IF OperationIDComment? '( OPERATION ' Operation# ': ' OperationType$ ' )' EOL END IF OperationComment? '( ' OperationComment$ ' )' EOL END IF WorkGroupComment? '( ' WorkGroupComment$ ' )' EOL END RestoreScale END RETURN
StockOnNoCan: IF NOT CannedCycle? StockOn {need stock for SP positioning, if not a canned cycle} END RETURN
FeedNoCan: IF NOT CannedCycle? FeedC END RETURN
FeedRateNoCan: IF NOT CannedCycle? FeedRateC END RETURN
ApproachSP: IF ApproachFace? SeqLabC StockOnNoCan XSPC EOL SeqLabC StockOff ZOpCPC EOL StockOnNoCan IF NotEqual? CycleStartZ# ZOpCP# SeqLabC FeedNoCan ZSPC FeedRateNoCan EOL END ELSE { ODApproach/IDApproach } SeqLabC StockOnNoCan ZSPC EOL SeqLabC StockOff XOpCDC EOL StockOnNoCan IF NotEqual? CycleStartX# XOpCD# AND NOT CutOff? SeqLabC FeedNoCan XSPC FeedRateNoCan EOL END END RETURN
AppMove: StockOff ThisOpEntryZCP If CutOff? 'M73' ELSE CoolOn END RETURN
Approach: { NOT FOR TAILSTOCK, .82 } RapidC RapidF# { RapidF# Forces FeedRate } IF ApproachOD? SeqLabC ThisOpEntryXCP AppMove EOL ELSE IF ApproachID? SeqLabC XOpCD AppMove EOL ELSE {ApproachFace} SeqLabC StockOnNoCan XSP AppMove EOL END END ApproachSP RETURN
CheckOffset: DoEndOpPS IF LAST ProgStop? SeqLabC 'M0' EOL ELSE IF NOT CWSpindle? AND LAST CWSpindle? SpinOff ELSE IF CWSpindle? AND LAST NOT CWSpindle? SpinOff END END IF CoolOff? AND LAST NOT CoolOff? SeqLabC CoolOff EOL END END IF NewToolOffset? SeqLabC LOfstOff '00' EOL SeqLabC OpToolID LatheOffset EOL END CSSOff IF ConstantSurfaceFeed? IF LAST ConstantSurfaceFeed? IF NotEqual? MaxRPM# LAST MaxRPM# SeqLabC Preset MaxRPM EOL END IF LAST ProgStop? SeqLabC CSSOn 'G96' Speed ELSE IF NotEqual? SpeedRPM# LAST SpeedRPM# SeqLabC CSSOn 'G96' Speed END END ELSE SeqLabC Preset MaxRPM EOL SeqLabC CSSOn 'G96' Speed END ELSE IF LAST ConstantSurfaceFeed? SeqLabC 'G97' Speed ELSE IF LAST ProgStop? SeqLabC 'G97' Speed ELSE IF NotEqual? SpeedRPM# LAST SpeedRPM# SeqLabC 'G97' Speed END END END END IF LAST ProgStop? SeqLabC {SpeedC} SpinOn EOL SeqLabC CoolOn EOL ELSE SeqLabC {SpeedC} EOL IF NOT CoolOff? AND LAST CoolOff? SeqLabC CoolOn EOL END END DoPostScript RETURN
FormatArc: IF ArcCW? CWArcC ELSE CCWArcC END MoveXC MoveZC IF ArcIJFormat? ArcIJC ELSE ArcRC END RETURN
CkCRC: { 4.2 } IF XMove? OR ZMove? { Approach Length Feature and Multiple Pockets } IF NOT LastFeat? AND CutterRadiusCompensation? IF NOT Flag?('5') IF ApproachOD? 'G42' CRCOnC ELSE 'G41' CRCOnC END SetFlag('5') END END END IF LastFeat? AND EmptyLine? { Exit Length Feature } CRCOffC SetFlagF('5') END RETURN
ToolPath: EACHFeat GetToolTip IF LastFeat? IF Drilling? IF Tap? SeqLabC SpinOff EOL ELSE IF Dwell? AND NOT Peck? SeqLabC 'G4P' Dwell# EOL END END ELSE IF CannedCycle? SeqLab END END END IF PointFeat? SeqLabC MoveSXYC EOL ELSE IF RapidFeat? SeqLabC RapidC MoveXC MoveZC EOL ELSE IF LineFeat? IF Tap? SeqLabC Feed MoveZC IF LastFeat? 'F' FeedTapIPR#('1') InverseSpinOn EOL ELSE FeedRate EOL END ELSE SeqLabC CkCRC FeedC MoveXC MoveZC FeedRateC EOL END IF Peck? And Dwell? SeqLabC 'G04P' Dwell# EOL END ELSE IF ArcFeat? EACHQuadrant { Do not use NOT, LAST, FIRST or NEXT modifiers in this loop } SeqLabC FormatArc FeedRateC EOL NEXTQuadrant ELSE IF ThreadFeat? SeqLabC 'G33' MoveXC MoveZC ThrdLead EOL Rapid END END END END END NEXTFeat RETURN
CheckRapid: CRCOffC IF LAST CannedCycle? Rapid ELSE RapidC END RETURN
{Start of executable Prog **************************************************}
{setup and initializations} InitProg PosSideLathe StandardXZArcs OptCyc1F {Clear BarFeeder Flag} SetMaxRPM('3000') SetMaxFeed('200') SetFlagF('5') {For CRC handling} Save# Num#('1') Num#('1') Save# Num#('2') Num#('2') Save# Num#('3') Num#('3') Save# Num#('4') Num#('4') Save# Num#('5') Num#('5') Save# Num#('6') Num#('6') Save# Num#('7') Num#('7') Save# Num#('8') Num#('8') Save# Num#('9') Num#('9') Save# Num#('10') Num#('10') Save# Num#('11') Num#('11') Save# Num#('12') Num#('12') Save# Num#('13') Num#('13') Save# Num#('14') Num#('14') Save# Num#('15') Num#('15') Save# Num#('16') Num#('16') Save# Num#('17') Num#('17') Save# Num#('18') Num#('18') Save# Num#('19') Num#('19') Save# Num#('20') Num#('20') Save# Num#('21') Num#('21') Save# Num#('22') Num#('22') Save# Num#('23') Num#('23') Save# Num#('24') Num#('24') Save# Num#('25') Num#('25') IF PSComment? AND UseComments? 'PostScript:' EOL ' Literals: put between single or double quotes.' EOL ' Separate commands and literals with at least one space.' EOL ' A CR ( RETURN key ) will start a new line.' EOL ' Commands: must be all capital letters when typed in.' EOL ' ENDOP -' EOL ' all literals and commands before an ENDOP command' EOL ' will appear at the beginning of the operation. All ' EOL ' literals and commands after an ENDOP command will appear' EOL ' at the end of the operation. ' EOL END EachOp {Start of post processing *********************} GetLCycle IF FirstOperation? EOR EOL ProgID1 IF UseComments? AND ProgramNameComment? '( ' ProgramName$ ' )' END EOL IF UseComments? IF ProgramComment? '( ' ProgramComment$ ' )' EOL END IF FormatNameComment? '( FORMAT: ' FormatName$ ' )' EOL END IF TimeComment? '( ' Date$ ' AT ' Time$ ' )' EOL END IF MovesComment? '( OUTPUT IN ' MoveType$ ' INCHES )' EOL END END RestoreScale OpenSub StockOff {.71.2} SetHome Plane DoOpComments ' ' EOL SeqLabC 'G20' EOL SeqlabC 'G53X0.Z0.' EOL ' ' EOL Save# Tool# Add# Recall# Tool# Num#('1000') 'N' Recall# Tool# EOL Save# Num#('50') Recall# Tool# IF ToolTypeComment? ' ' EOL '( TOOL ' Tool# ': ' ToolSize$ ' ' ToolType$ ' )' EOL END IF ToolComment? ' ' EOL '( ' ToolComment$ ' )' EOL END ' ' EOL DoPostScript Plane IF ConstantSurfaceFeed? SeqLabC Preset MaxRPM EOL END SeqLabC CSSOff 'G97' CRCOff EOL SeqLabC Rapid IF ConstantSurfaceFeed? CalcRPM1 ELSE Speed END OpToolID LatheOffset SpinOn EOL Approach ELSE IF NewTool?
{Finish off last Operation}
StockOff {.62} CheckRapid IF LAST ApproachOD? SeqLabC LAST OpExitXCPC EOL ELSE IF LAST ApproachID? SeqLabC LAST XOpECDC EOL END END SeqLabC LAST OpExitZCPC EOL DoEndOpPS IF NOT CWSpindle? AND LAST CWSpindle? SeqLabC SpinOff EOL ELSE IF CWSpindle? AND LAST NOT CWSpindle? SeqLabC SpinOff EOL END END SeqLabC 'G53X0.Z0.' EOL SeqLabC LOfstOff '00' EOL IF LAST ProgStop? SeqLabC 'M0' EOL ELSE SeqLabC ProgStop EOL END
{Start new Operation}
' ' EOL DoOpComments ' ' EOL Save# Tool# Add# Recall# Tool# Num#('1000') 'N' Recall# Tool# EOL ' ' EOL IF ToolTypeComment? '( TOOL ' Tool# ': ' ToolSize$ ' ' ToolType$ ' )' EOL END ' ' EOL IF ToolComment? '( ' ToolComment$ ' )' EOL END ' ' EOL DoPostScript IF ConstantSurfaceFeed? SeqLabC Preset MaxRPM EOL END SeqLabC CSSOff 'G97' CRCOff IF CutOff? CoolOn END EOL SeqLabC Rapid IF ConstantSurfaceFeed? CalcRPM1 ELSE Speed END OpToolID LatheOffset SpinOn EOL Approach ELSE IF SameTool? {.62}
{Start new Operation}
StockOff IF LAST StraightConnect? CheckOffset CheckRapid SeqLabC StockOnNoCan XSPC ZSPC EOL ELSE CheckRapid IF ApproachOD? IF LAST ApproachOD? SeqLabC LAST XOpECDC EOL ELSE {around} IF LAST ApproachID? SeqLabC LAST XOpECDC EOL END SeqLabC LAST OpExitZCPC EOL SeqLabC LAST OpExitXCPC EOL END ELSE IF ApproachID? IF LAST ApproachID? SeqLabC LAST XOpECDC EOL ELSE IF LAST ApproachOD? {around} SeqLabC LAST OpExitXCPC EOL END SeqLabC LAST OpExitZCPC EOL SeqLabC XOpCDC EOL END ELSE {ApproachFace} IF LAST ApproachFace? SeqLabC LAST ZOpECPC EOL ELSE IF LAST ApproachOD? {around} SeqLabC LAST OpExitXCPC EOL ELSE {LAST ApproachID} SeqLabC LAST XOpECDC EOL END SeqLabC LAST OpExitZCPC EOL END END END CheckOffset ApproachSP END END END END {common point for all operations} IF ConstantSurfaceFeed? AND NOT SameTool? SeqLabC CSSOn 'G96' Speed EOL END IF CannedCycle? StockOff IF Roughing? IF RoughSimple? StockOn SetPass1 SeqLabC LCycle IF ApproachFace? 'Z' FirstMoveEPZ# XatFinZ ELSE XatFinZ FinZ END XTapAtZ FeedRate EOL SimpleRough ELSE TagInc SetPass2 IF RoughContour? SeqLabC LCycle CutDepth 'R' CutDepth# EOL SeqLabC LCycle 'PÅ‚' Tag# 'Q²' Tag# 'U' calcXStkLeft ZStkLeft FeedRate EOL '>' Tag# EOL IF ApproachFace? SeqLab StepMove 'Z' SPZ# EOL SeqLabC FeedC 'X' SPX# EOL ELSE SeqLab StepMove 'X' SPX# EOL SeqLabC FeedC 'Z' SPZ# EOL END ELSE IF RoughPatternShift? SeqLabC LCycle XminusU ZminusW NumCuts EOL SeqLabC LCycle 'PÅ‚' Tag# 'Q²' Tag# 'U' calcXStkLeft ZStkLeft FeedRate EOL '>' Tag# EOL SeqLab Rapid StrtPos EOL END END ToolPath '<' Tag# EOL IF AutoFinish? SeqLabC 'G70' 'PÅ‚' Tag# 'Q²' Tag# EOL END SetPass1 TrackXNO# CycleStartX# TrackZNO# CycleStartZ# END ELSE IF Threading? SeqLabC LCycle 'P' IF AutoFinish? '02' {2 finish passes} ELSE '01' END IF Chamfer? '07' {.7 thread lead distance for chamfer} ELSE '00' END IF SingleEdgeCut? '60' {using 60 for standard tool angle, need ToolAnge# command} ELSE '00' END 'Q' IF ConstantVolumeCut? '20' {.0020 minimum cut depth} ELSE CutDepth# {if not ConstantVolumeCut? CutDepth is min depth, volume increases with depth} END 'R0' {using zero for no finish stock allowance, need XStckLeft# command} EOL SeqLabC LCycle XatFinZ FinZ XTapAtZ ThrdHeight CutDepth ThrdLead EOL IF AutoFinish? SeqLabC 'G92' XatFinZ FinZ XTapAtZ ThrdLead EOL END ELSE IF Drilling? IF PeckChipBreaker? SeqLabC LCycle Retract EOL SeqLabC LCycle ZDepth Peck 'R0' FeedRate EOL SeqLabC DrillOff EOL IF AutoFinish? SeqLabC FeedC ZDepth EOL IF Dwell? SeqLabC 'G4P' Dwell# EOL END SeqLabC Rapid ZSP EOL END ELSE SeqLabC 'G98' EOL SeqLabC LCycle XSP 'C0' ZDepth 'R0' IF Peck? Peck END Dwell FeedRate IF AutoFinish? 'K2' ELSE 'K1' END EOL SeqLabC DrillOff EOL END ELSE IF Grooving? StockOn SetPass1 SeqLabC StrtPos EOL ToolPath END END END END ELSE StockOn SetPass1 IF NOT CutOff? ToolPath ELSE SeqLabC Feed 'X.5' FeedRate EOL SeqLabC 'X0.F.001' EOL SeqLabC 'Z' Add# EPZ# Num#('0.01') EOL SeqLabC Rapid OpExitXCP CoolOff EOL END IF AutoFinish? { .82.1c } StockOff IF Turning? IF ApproachFace? SeqLabC RapidC ZOpECPC EOL ELSE SeqLabC RapidC XOpECDC EOL END ApproachSP SeqLabC StockOff StrtPosC EOL ToolPath ELSE IF Roughing? AND NOT RoughSimple? SetPass2 SeqLabC RapidC XSPC ZSPC EOL SeqLabC StockOff StrtPosC EOL ToolPath SetPass1 ELSE IF Threading? SeqLabC 'X' MUL# Num#('2') ADD# FinishXRadius# Taper# EOL SeqLabC 'G33' IF Taper? XatFinZ END FinZ ThrdLead EOL SeqLabC Rapid XSP EOL SeqLabC ZSP EOL END END END END END IF Drilling? AND Tap? IF Dwell? SeqLabC 'G04P' Dwell# EOL END SeqLabC SpinOff EOL END NextOp {loops back to EachOP until last Operation}
{End of program ************************************************************}
{finish last operation} StockOff CRCOffC IF CannedCycle? Rapid ELSE RapidC END IF ApproachOD? SeqLabC OpExitXCPC EOL ELSE IF ApproachID? SeqLabC XOpECDC EOL END END IF NOT Cutoff? SeqLabC OpExitZCPC CoolOff EOL END DoEndOpPS SeqLabC 'G53X0.Z0.' IF CutOff? 'M74' END EOL SeqLabC OpToolID '00' IF CutOff? 'M89' END EOL IF ProgStop? SeqLabC 'M0' EOL ELSE SeqLabC ProgStop EOL END IF OptCyc1? ' ' EOL 'N1001' EOL ' ' EOL '( PULL TO STOP )' EOL ' ' EOL SeqLabC CSSOff 'G97' CRCOff EOL SeqLabC Rapid 'T0101' SpinOff EOL SeqLabC 'X0.Z' Add# EPZ# Num#('.05') EOL SeqLabC 'M11' EOL SeqLabC 'G04U1.' EOL SeqLabC Feed 'G98Z.015F60.' EOL SeqLabC 'M01' EOL SeqLabC 'M10' EOL SeqLabC 'G04U2.' EOL SeqLabC 'G99' EOL SeqLabC Rapid 'G53X0.Z0.' EOL SeqLabC 'T0100' EOL ProgStop EOL SeqLabC '/M99P' Recall# Num#('50') EOL END SeqLabC EOP EOL Post EOR EOL OptCyc1F {Reset Bar Feeder Flag} Close Retag IF UseComments? SetScale('1') {restore scale for comments} Reopen IF FileBytesComment? '( FILE LENGTH: ' FileBytes# ' CHARACTERS )' EOL END IF FileFeetComment? '( FILE LENGTH: ' FileFeet# ' FEET )' EOL END IF FileMetersComment? '( FILE LENGTH: ' FileMeters# ' METERS )' EOL END Close END