{10/30/95, M530.81.5, Updated for Catalyst v2.20 per Fanuc 6M M001.85 Format, DWB} {1/17/96 - Updated .85 to .86 format, MPK} {3/22/96, Tested ZOnlyRepAutoCycle, Changed version # to .89, MPK}
{8/19/96 Copied: Anilam Series M M530.89 Created: Anilam Series M [LTV] MZ19.89 For: LTV Steel Machine: Kent Knee Mill Control: Anilam Series M Versions: Catalyst v3.05.03C/Compost 4.21.37/v1.0b1 Changes made per Joe Yurkus of LTV Steel Added FORMAT#7 *####.####;0. at Prog Numeric Format Definitions. Changed TLLength# to FORMAT#7 at Prog Numeric Format Definitions. Changed ToolLength# to FORMAT#7 at Prog Numeric Format Definitions. Added TagInc following TagInit at ATOPSubs and setup and initializations. Forcing SubPrograms to start at #2. Moved OpToolID to Main Program for MultipleParts OneToolAllParts FullUp. Necessary because Tool# cancels OriginShift when inside of Sub. Deleted literal 'M1313' at IF Drilling. Deleted literal 'M1314' at IF Drilling. Control does not recognize M1313 or M1314 codes. No special code for RetractToCP1 mode. DWB}
{4/24/97 Initial: Anilam Series M [LTV] MZ19.89 Created: Anilam Series M [UPE] MY72.89 ForUser: CIM Solutions / Umisys Plymouth Engineering Control: Anilam Crusader Series M Machine: Supermax Knee Mill Develop: ComPost2 68K 1.0b11, CatalystPPC v3.33C Comment: New processor per marked up readout and conversation with Jerry Lee Added S1 subroutine and C1 calls for Tool Changes. Added 'G29 to N0 line. Deleted G29 from Tool List. Added SpinOn, CoolOn and SpinOff commands. Changed Sequencing to use ReTag to get consecutive sequence numbers thru subs. Added spaces between codes. Semi-colon at end of lines. Moved Drilling parameters to same line. Jim Radcliffe}
RestoreScale: IF Metric? {CAM file is in Metric, tools and tool path} SetScale('.03937007874') { change to English, this is an English post} END RETURN
DoSubComment: IF UseComments? AND SubComment? '( SUB NUMBER: ' Tag# ' )' EOL END RETURN
DoCycleComment: IF UseComments? AND SubComment? '( CYCLE START )' EOL END RETURN
DoOpComments: IF UseComments? SetScale('1') IF OperationIDComment? '( OPERATION ' Operation# ': ' OperationType$ ' )' EOL END IF OperationComment? '( ' OperationComment$ ' )' EOL END IF WorkGroupComment? '( ' WorkGroupComment$ ' )' EOL END IF ToolTypeComment? '( TOOL ' Tool# ': ' ToolDiameter# ' ' ToolType$ ' )' EOL END IF ToolComment? '( ' ToolComment$ ' )' EOL END RestoreScale END RETURN
PSStuff: {revised.72} IF FourthCW? FORMAT(FourthDegree#,2) SeqLab ' A' FourthDegree# EOL FourthCWF {reset flag} END IF FourthCCW? FORMAT(FourthDegree#,3) SeqLab ' A' FourthDegree# EOL FourthCCWF {reset flag} END IF FifthCW? FORMAT(FifthDegree#,2) SeqLab ' B' FifthDegree# EOL FifthCWF {reset flag} END IF FifthCCW? FORMAT(FifthDegree#,3) SeqLab ' B' FifthDegree# EOL FifthCCWF {reset flag} END RETURN
EntryMove: IF FeedEntry? SeqLab Feed ZIn FeedEnt EOL ELSE SeqLab RapidC ZIn EOL END RETURN
ExitMove: SeqLab IF FeedConnect? IF NOT AutoCycle? IF NOT NoZMoves? FeedC ZInC FeedEntC END END ELSE CRCOffC IF FIFO? { .81 } FeedC ELSE RapidC END PRIME ZCP2C IF FIFO? { .81 } FeedEntC END END EOL RETURN
StartSub: OpenSub DoSubComment SeqLab ' G29 S' Tag# EOL RETURN
CycleWarning: { NOTE: This Post Processor takes care of Z Clearance. } RETURN
SubWarning: IF NOT FeedConnect? AND UseComments? IF AnyZshift? ' ' EOL '( WARNING Z CLEARANCE WILL CHANGE WITH EACH CYCLE OF SUB REPEAT )' EOL ' ' EOL END END RETURN
StdSub: EachRep IF NOT FirstCycle? SeqLab ' M1101' EOL SeqLab ' X' CurOriginPosX# ' Y' CurOriginPosY# ' Z' ToolLength# EOL END SeqLab ' G29 C' Tag# EOL NextRep StartSub RETURN
FinishSub1: {part 1} SeqLab CRCOffC IF NOT FeedConnect? IF AutoCycle? ZCP3C ELSE IF FIFO? {.81} FeedC ZCP3C FeedEntC ELSE RapidC ZCP3C END END END EOL RETURN
ATOPSubs: { AllToolsOnePart } EachPart EachOp IF FirstOperation? OR NewTool? TagInc IF FirstOperation? IF UseComments? '( Part# ' PartNum# ' )' EOL END IF NOT FirstPart? SeqLab ' M1101' EOL SeqLab ' X' CurOriginPosX# ' Y' CurOriginPosY# ' Z' ToolLength# EOL END ELSE IF LAST ProgStop? SeqLab ' M0' EOL ELSE SeqLab ProgStop EOL END END SeqLab ' G29 C' Tag# IF UseComments? AND ToolTypeComment? ' ( TOOL ' Tool# ': ' ToolDiameter# ' ' ToolType$ ' )' EOL END EOL END IF Milling? IF Repeats? IF ZshiftOnly? IF AutoCycle? {incremental Autocycle sub can have Z moves} TagInc ELSE {Z shift only, NOT Auto Cycle} IF UseSeparateSubCalls? AND CyclesLessThanMaxSubCalls? FindAnyZMoves {for normal abs subroutine} IF NoZMoves? TagInc END END END {end Auto Cycle IF} ELSE IF AutoCycle? TagInc END END {end Z only IF} ELSE IF AutoCycle? TagInc END END END NextOp TagInit TagInc NextPart RETURN
OpenMP: IF EquallySpacedOffsets? TagUp TagInc IF OneToolAllParts? EachPart IF NOT FirstPart? SeqLab ' M1101' EOL SeqLab ' X' CurOriginPosX# ' Y' CurOriginPosY# ' Z' ToolLength# EOL END SeqLab ' G29 C' Tag# EOL NextPart END StartSub END RETURN
CloseMP: IF EquallySpacedOffsets? SeqLab EndSub ' E' EOL TagDown CloseSub END RETURN
DoAbsOrInc: IF Flag?('1') AND AbsoluteMoves? IF ZMove? AND AbsValue? IncValue ELSE IF NOT ZMove? AND NOT AbsValue? AbsValue END END END RETURN
DoDrillAbsOrInc: IF Flag?('1') AND AbsoluteMoves? IF SPZMove? AND AbsValue? IncValue ELSE IF NOT SPZMove? AND NOT AbsValue? AbsValue END END END RETURN
RestoreAbsOrInc: IF Flag?('1') AND AbsoluteMoves? AND NOT AbsValue? SeqLab AbsValue EOL END RETURN
FormatArc: DoAbsOrInc IF ArcCW? CWArc ELSE CCWArc END IF XYPlane? MoveX MoveY MoveZC { force endpoints in proper plane } ELSE IF XZPlane? MoveX MoveZ MoveYC ELSE MoveY MoveZ MoveXC { YZ plane } END END IF ArcIJFormat? ArcIJ ELSE ArcR END RETURN
ckCRC: IF LastFeat? CRCOffC ELSE IF NOT ZMove? CRCOnC END END RETURN
ToolPath: EACHFeat IF PointFeat? IF AutoCycle? SeqLab MoveSXYC EOL SeqLab ' G29 C' Tag# EOL CalcACSRXY {calc tool position after sub call, CalcAutoCycleStatusRecordXY} ELSE SeqLab DoDrillAbsOrInc MoveSXYZC EOL {.80.01} IF Tap? {uses subs} SeqLab ' G29 C' Tag# EOL END END ELSE IF RapidFeat? IF OptCyc1? AND Flag?('2') SetFlagF('2') SeqLab ' M2000' EOL { Look Ahead Off } END IF XMove? OR YMove? OR ZMove? SeqLab DoAbsOrInc ckCRC RapidC MoveXYZC EOL END ELSE IF OptCyc1? AND NOT Flag?('2') SetFlag('2') SeqLab ' M1000' EOL { Look Ahead On } END IF LineFeat? IF XMove? OR YMove? OR ZMove? IF Decelerate? IF RoomToDecel? DecelMove1 SeqLab FormatLine FeedRateC EOL DecelMove2 END SeqLab FormatLine DecelFeed EOL ELSE SeqLab FormatLine FeedRateC EOL END END ELSE IF ArcFeat? EACHQuadrant { Do not use NOT, FIRST, LAST or NEXT modifiers in this loop } IF LastFeat? AND LastQuadrant? SeqLab CRCOffC FormatArc ArcFeedC EOL ELSE IF LastQuadrant? AND Decelerate? IF RoomToDecel? DecelMove1 SeqLab CRCOnC FormatArc ArcFeedC EOL DecelMove2 END SeqLab CRCOnC FormatArc DecelFeed EOL ELSE SeqLab CRCOnC FormatArc ArcFeedC EOL END END NEXTQuadrant END END END END NEXTFeat IF OptCyc1? AND Flag?('2') SetFlagF('2') SeqLab ' M2000' EOL { Look Ahead Off } END RestoreAbsOrInc RETURN
WFOStuff: { NOTE: This Post Processor does not support WorkFixtureOffsets. } RETURN
AutoCycCutSub2: {part 2} ToolPath SeqLab AbsOrInc IF Repeats? AND FeedConnect? AND ZshiftOnly? {.69 removed RapidC} {.71.2 removed CRCOffC, gets turned off in ToolPath} ELSE IF FIFO? {.81} FeedC ZCP2 FeedEntC ELSE RapidC ZCP2 END END EOL SeqLab EndSub ' E' EOL CloseSub SetSRSubXY {restore SR to 1st position value} SetSRSubMove RETURN
AutoCycPat: SetPass2 {position pattern} ToolPath {call after TagInc for correct sub calls} SetPass1 {reset} RETURN
Milling: IF AutoCycle? TagUp TagInc AutoCycCutSub1 EntryMove AutoCycCutSub2 AutoCycPat TagDown ELSE EntryMove ToolPath END RETURN
XYZRep: CycleWarning FindAnyZMoves EachRep DoCycleComment IF FirstCycle? EntryMove ELSE CRCOffC IF FeedConnect? SeqLab FeedC StrtPosC FeedEntC EOL IF ZShiftOnly? EntryMove END ELSE SeqLab RapidC StrtPosC EOL IF FeedEntry? SeqLab ZCP2C EOL END EntryMove END END ToolPath ExitMove NextRep RETURN
G92Sub: IF MultipleParts? AND EquallySpacedOffsets? { LongHand, no double Shifting } IF AutoCycle? SubWarning Milling SetPass2 TagUp EachRep IF NOT FirstCycle? EACHFeat SeqLab MoveSX MoveSY EOL SeqLab ' G29 C' Tag# EOL CalcACSRXY {calc tool position after sub call, CalcAutoCycleStatusRecordXY} NEXTFeat END NextRep TagDown ELSE IF UseComments? ' ' EOL '( THIS REPEAT OP WILL BE LONGHAND DUE TO MULTIPLE PARTS )' EOL ' ' EOL END XYZRep END ELSE TagUp TagInc SubWarning StdSub SeqLab AbsOrInc Connect StrtPos EOL Milling FinishSub1 FinishSubG92 END RETURN
ZonlyRepAutoCycle: {.86} AutoCycPat {write pattern moves and main calls} StartSub TagUp TagInc EachCycle SetSRXYtoEP IF FeedConnect? Feed IF NOT FirstCycle? IF SPXMove? OR SPYMove? SeqLab IncValue StrtPosC EOL AbsOrInc END END SeqLab ZInPlusInc FeedEnt EOL ELSE IF NOT FirstCycle? Rapid IF SPXMove? OR SPYMove? SeqLab IncValue StrtPosC EOL AbsOrInc END IF FeedEntry? SeqLab ZCP2PlusInc EOL END END IF FeedEntry? SeqLab Feed ZInPlusInc FeedEnt EOL ELSE IF FirstCycle? Rapid END SeqLab RapidC ZInPlusInc EOL END END IF FirstCycle? SetStatusOff {protect Z position for incremental sub} END SeqLab ' G29 C' Tag# EOL NextCycle SetStatusOn AutoCycCutSub1 {build element sub} AutoCycCutSub2 IF FeedConnect? {there is no Z up in the sub} IF FIFO? SeqLab Feed ZCP2 FeedEnt EOL ELSE SeqLab Rapid ZCP2 EOL END END SeqLab EndSub ' E' EOL TagDown CloseSub {Element shift, not pattern} RETURN
ZonlyRep: EachCycle IF NOT FirstCycle? SeqLab Connect StrtPos EOL {.71.2, added Connect} END IF FeedConnect? SeqLab FeedC ZInPlusInc FeedEnt EOL {.71.2, changed to FeedC} ELSE {Entry/Exit Connect} IF FeedEntry? IF NOT FirstCycle? SeqLab RapidC ZCP2PlusIncC EOL {can't call for cycle =1} {.69 added Rapid, reads better} {.71.2, changed to RapidC, reads better} END SeqLab Feed ZInPlusInc FeedEnt EOL ELSE SeqLab RapidC ZInPlusInc EOL {.69 added Rapid, reads better} {.71.2, changed to RapidC, reads better} END END SeqLab ' G29 C' Tag# EOL NextCycle SetStatusRapid {force next G1,G2,G3,etc.} StartSub TrackZNO# FIRST SPZ# ToolPath FinishSub1 SeqLab EndSub ' E' EOL TagDown CloseSub RETURN
CheckPass: IF AutoCycle? {use the correct StrtPos} SetPass2 ELSE SetPass1 END RETURN
SkipToLastFeat: EachFeat IF LastFeat? TrackXNO# SPX# TrackYNO# SPY# END NextFeat RETURN
SetDrillEndOpZ: IF RetractToCP1? TrackZNO# ClearancePlane1# ELSE TrackZNO# ClearancePlane2# END RETURN
{Start of executable Prog **************************************************}
{setup and initializations} InitProg TagInit TagInc ReverseXZArcs SetTCZ('0') OptCyc1F UseSeparateSubCalls SetMaxSeparateSubCalls('1000') SetMaxRPM('10000') SetMaxFeed('500') SetFlagF('1') { Milling ZShiftOnly SepSubs } SetFlagF('2') { OptCyc1 M1000/M2000 Look Ahead Mode } 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: may be capital and/or lower case letters. Separate commands with a space.' 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 ' 4thAxisCW(12.5), 4ACW(12.5) -' EOL ' generates a + A move of the value you specify' EOL ' 4thAxisCCW(22.5), 4ACCW(22.5) -' EOL ' generates a - A move of the value you specify' EOL ' 5thAxisCW(30), 5ACW(30) -' EOL ' generates a + B move of the value you specify' EOL ' 5thAxisCCW(22.5), 5ACCW(22.5) -' EOL ' generates a - B move of the value you specify' EOL ' TCZ(), TOOLCHANGEZ() -' EOL ' Set the Toolchange Z value. Modal, changes all following OPs.' EOL ' Value is set to Z0 as a default.' EOL ' OptCyc1, OptionalCycle1 -' EOL ' For the selected operation to use look ahead.' EOL END
EOR EOL IF UseComments? IF ProgramNameComment? '( PROGRAM: ' ProgramName$ ' )' EOL END IF ProgramComment? '( ' ProgramComment$ ' )' EOL END IF FormatNameComment? '( FORMAT: ' FormatName$ ' )' EOL END IF TimeComment? '( ' Date$ ' AT ' Time$ ' )' EOL END IF MovesComment? '( OUTPUT IN ' MoveType$ ' ENGLISH )' EOL END IF PartsComment? '( PARTS PROGRAMMED: ' Parts# ' )' EOL END {IF StartToolComment? '( FIRST TOOL NOT IN SPINDLE )' EOL END} END OpenSub RestoreScale Plane { No Output } 'N0' Rapid ' G70' AbsValue ' G29' EOL EachTool SeqLab ' T10' TLNum# ' X' TLDia# ' Z' TLLength# EOL NextTool SeqLab DoToolChng EOL EachOp IF FirstOperation? DoPostScript StartSub SeqLab ' T0' EOL SeqLab SpinOff EOL SeqLab AbsValue Rapid ' Z' TCZ# EOL SeqLab AbsValue Rapid IF ToolChangeAtHome? Home ELSE ' X0. Y0.' END EOL SeqLab EndSub ' E' EOL CloseSub END NextOp
IF MultipleParts? IF WorkFixtureOffsets? ' ' EOL '( THIS POST PROCESSOR DOES NOT SUPPORT WORKFIXTURE OFFSETS )' EOL '( PLEASE SELECT EQUALLY SPACED OFFSETS )' EOL ' ' EOL ELSE { EquallySpacedOffsets } IF AllToolsOnePart? ATOPSubs END END END
EachOp {Start of post processing *********************} IF FirstOperation? IF MultipleParts? AND AllToolsOnePart? OpenMP END DoOpComments SeqLab OpToolID EOL IF MultipleParts? AND OneToolAllParts? AND FullUp? OpenMP END SeqLab SpinOn EOL SeqLab CoolOn EOL CheckPass SeqLab AbsOrInc StrtPos ZCP1 EOL IF MultipleParts? AND OneToolAllParts? AND ExitClearancePlane? OpenMP IF EquallySpacedOffsets? SeqLab Rapid StrtPos EOL END END ELSE IF NewTool?
{Finish off last Operation}
IF MultipleParts? AND OneToolAllParts? AND ExitClearancePlane? CloseMP END DoEndOpPS IF MultipleParts? AND OneToolAllParts? AND FullUp? SeqLab ' T0' EOL SeqLab ' Z' TCZ# EOL CloseMP END SeqLab DoToolChng EOL DoPostScript IF MultipleParts? AND AllToolsOnePart? CloseMP END
{Start new Operation}
Plane { No Output } IF MultipleParts? AND AllToolsOnePart? OpenMP DoOpComments ELSE DoOpComments IF LAST ProgStop? SeqLab ' M0' EOL ELSE SeqLab ProgStop EOL END END SeqLab OpToolID EOL IF MultipleParts? AND OneToolAllParts? AND FullUp? OpenMP END SeqLab SpinOn EOL SeqLab CoolOn EOL CheckPass SeqLab Rapid StrtPos ZCP1 EOL IF MultipleParts? AND OneToolAllParts? AND ExitClearancePlane? OpenMP IF EquallySpacedOffsets? SeqLab Rapid StrtPos EOL END END ELSE IF SameTool? DoEndOpPS IF LAST ProgStop? SeqLab ' T0' EOL SeqLab SpinOff EOL SeqLab ' Z' TCZ# EOL
GetStartOfSameTool SeqLab Rapid StrtPos EOL END END END END END {common point for all operations} IF Milling? SeqLab ZCP2C EOL IF Repeats? IF ZshiftOnly? IF AutoCycle? {incremental Autocycle sub can have Z moves} TagUp TagInc ZonlyRepAutoCycle ELSE {Z shift only, NOT Auto Cycle} IF UseSeparateSubCalls? AND CyclesLessThanMaxSubCalls? TagUp TagInc SetFlag('1') { Milling ZShiftOnly SepSubs } ZonlyRep SetFlagF('1') ELSE {no sep subs desired} G92Sub END END {end Auto Cycle IF} ELSE {not Z only} G92Sub END {end Z only IF} ELSE {no repeat OPs} Milling END IF AutoCycle? SeqLab ZCP3C EOL ELSE IF FIFO? {.81} SeqLab FeedC CRCOffC ZCP3C FeedEntC EOL ELSE SeqLab RapidC CRCOffC ZCP3C EOL END END ELSE IF Drilling? IF Repeats? TagUp TagInc StdSub SeqLab AbsOrInc StrtPos EOL END SeqLab DrillCP EOL GetCycle IF Tap? TagUp TagInc StartSub SeqLab Feed ZDepth ' F' FeedEntry# EOL SeqLab ' M4' EOL SeqLab ' Z' ClearancePlane2# EOL SeqLab ' M3' EOL SeqLab Rapid EOL SeqLab EndSub ' E' EOL CloseSub TrackZNO# FIRST SPZ# ToolPath SetDrillEndOpZ SeqLab Rapid ZCP3C EOL TagDown ELSE SeqLab ' G29 LV20=' FeedEntry# ' V21=' ClearancePlane2# IF Dwell? ' V22=' Dwell# END IF Peck? ' V23=' Peck# END IF RetractToCP1? ' V24=' ClearancePlane1# END EOL SeqLab IF FIFO? AND Dwell? ' G89' ELSE Cycle END StrtPos ZDepth EOL IF CallMasterOp? SeqLab ' G29 C' CallMasterNum# EOL SkipToLastFeat ELSE TrackZNO# FIRST SPZ# IF MasterOp? SetFlag('1') {std sep sub Zreps in effect} TagUp NewMasterTag SeqLab ' G29 C' Tag# EOL StartSub ToolPath SeqLab EndSub ' E' EOL TagDown CloseSub SetFlagF('1') {not std sep sub Zreps in effect} ELSE ToolPath END END SetDrillEndOpZ SeqLab ' G80' EOL SeqLab RapidC ZCP3C EOL END IF Repeats? FinishSubG92 END END END NextOp {loops back to EachOP until last Operation}
{End of program ************************************************************}
{finish last operation} IF MultipleParts? AND OneToolAllParts? AND ExitClearancePlane? CloseMP END DoEndOpPS IF MultipleParts? AND OneToolAllParts? AND FullUp? SeqLab ' T0' EOL SeqLab ' Z' TCZ# EOL CloseMP END SeqLab DoToolChng EOL IF MultipleParts? AND AllToolsOnePart? CloseMP END SeqLab EndSub ' E' EOL CloseSub Post2 IF UseComments? SetScale('1') {restore scale for comments} IF FileBytesComment? '( FILE LENGTH: ' FileBytes# ' CHARACTERS )' EOL END IF FileFeetComment? '( FILE LENGTH: ' FileFeet# ' FEET )' EOL END IF FileMetersComment? '( FILE LENGTH: ' FileMeters# ' METERS )' EOL END END EOR EOL Close ReTag