{7/27/95, Updated for Catalyst v2.20 per Fanuc 6M M001.85.01 Format. DWB}
{1/17/96, Updated .85 to .86 version, MPK} {3/22/96, Tested ZOnlyRepAutoCycle, Changed version # to .89, MPK}
{8/28/96 Updated: Fanuc 0M M062.89 Created: Fanuc 0M M062.89.1 For: Gibbs & Associates/National Machinery Versions: Catalyst v3.05.03C/Compost 4.21.37/v1.0b1 Changes made per Ken Hoffman of National Machinery. Updated for Catalyst v3.05C per Fanuc 6M M001.89 Format. DWB}
{10Aug98 Original: Fanuc 0M M062.89.1 Created: Fanuc 0M LH [RI] MU55.16 For: Rehmann Ind Changes made per: Bob Rehmann Changed to First Tool in Spindle Updated to Longhand per Fanuc 6M LH MV83ż2 Charles Winston}
{11Aug98 Original: Fanuc 0M LH [RI] MU55.16 Created: Fanuc 0M LH [RI] MU55.16.1 For: Rehmann Ind Changes made per: Bob Rehmann Deleted Preset Home 'Z0.' in FirstOp1 and NewToolOp3 Charles Winston}
RestoreScale: IF Metric? {CAM file is in Metric, tools and tool path} SetScale('.03937007874') { change to English, this is an English post} END RETURN
WFO: 'G' NewWFO# RETURN
WFOStuff: { NOTE: This Post Processor does not support WorkFixtureOffsets. } RETURN
ResetWFO: { Not supported. } RETURN
DoPartCycleComment: IF MultipleParts? AND UseComments? AND SubComment? '( PART NO. ' PartNum# ' )' 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: IF FourthCW? FORMAT(FourthDegree#,2) SeqC 'A' FourthDegree# EOL FourthCWF END IF FourthCCW? FORMAT(FourthDegree#,3) SeqC 'A' FourthDegree# EOL FourthCCWF END IF FifthCW? FORMAT(FifthDegree#,2) SeqC 'B' FifthDegree# EOL FifthCWF END IF FifthCCW? FORMAT(FifthDegree#,3) SeqC 'B' FifthDegree# EOL FifthCCWF END RETURN
EntryMove: IF FeedEntry? SeqC FeedC ZInC IF NOT EmptyLine? { Mostly for FeedConnect ZShiftOnly with ZMove } FeedEntC END EOL ELSE SeqC RapidC ZInC EOL END RETURN
ExitMove: IF NOT FeedConnect? CRCOffC IF FIFO? FeedC PRIME ZCP2C FeedEntC ELSE RapidC PRIME ZCP2C END END RETURN
ExitMove2: LoadFeat Num#('0') Num#('0') ClearancePlane3# IF ZMove? IF FIFO? FeedC ZCP3C FeedEntC ELSE RapidC ZCP3C END END RETURN
AbsValueC: IF NOT AbsValue? AbsValue END RETURN
IncValueC: IF AbsValue? IncValue END RETURN
AbsOrIncC: IF AbsoluteMoves? AbsValueC ELSE IncValueC END RETURN
FormatArc: IF ArcCW? CWArcC ELSE CCWArcC END MoveXYZC IF ArcIJFormat? ArcIJC ELSE ArcRC END RETURN
ckCRC: IF LastFeat? CRCOffC ELSE IF NOT ZMove? CRCOnC END END RETURN
ckCRCNum: IF NOT LastFeat? AND Equal? SPZ# EPZ# CRCOffsetC END RETURN
DoPeck: { LongDrillStuff } { Not supported. } RETURN
DrillFeature: { LongDrillStuff } { Not supported. } RETURN
ToolPath: EACHFeat IF PointFeat? { Drilling Only } SeqC MoveSXYZC EOL ELSE IF RapidFeat? IF XMove? OR YMove? OR ZMove? SeqC ckCRC RapidC MoveXYZC ckCRCNum EOL END ELSE IF LineFeat? IF XMove? OR YMove? OR ZMove? IF Decelerate? IF RoomToDecel? DecelMove1 SeqC ckCRC FeedC MoveXYZC FeedRateC ckCRCNum EOL DecelMove2 END SeqC ckCRC FeedC MoveXYZC DecelFeed ckCRCNum EOL ELSE SeqC ckCRC FeedC MoveXYZC FeedRateC ckCRCNum EOL END END ELSE IF ArcFeat? EACHQuadrant { Do not use NOT, FIRST, LAST or NEXT modifiers in this loop } IF LastQuadrant? AND Decelerate? IF RoomToDecel? DecelMove1 SeqC FormatArc ArcFeedC EOL DecelMove2 END SeqC FormatArc DecelFeed EOL ELSE SeqC FormatArc ArcFeedC EOL END NEXTQuadrant END END END END NEXTFeat RETURN
AutoCycCutSub1: {part 1} CalcACSRXY {calc tool position, CalcAutoCycleStatusRecordXY} SaveSubStatus {save tool position} SetPass1 {element cut moves} SetSRXYtoSP IF Repeats? AND ZShiftOnly? EntryMove END SeqC IncValue EOL RETURN
AutoCycCutSub2: {part 2} SeqC AbsOrInc CRCOffC IF FIFO? FeedC ZCP2 FeedEntC ELSE RapidC ZCP2 END EOL SetSRSubXY {restore SR to 1st position value} ReSetPass2 {restore for positioning moves} RETURN
Milling: EntryMove ToolPath RETURN
CutAutoCycle: EACHFeat DoCycleComment IF SPXMove? OR SPYMove? IF FIFO? Rapid END SeqC RapidC MoveSXYC EOL END AutoCycCutSub1 IF Repeats? IF ZShiftOnly? EachRep IF NOT FirstCycle? IF FeedConnect? DoCycleComment IF SPXMove? OR SPYMove? SeqC FeedC MoveSXYC FeedEntC EOL END AbsOrInc ELSE SeqC AbsOrInc ExitMove EOL DoCycleComment IF SPXMove? OR SPYMove? SeqC IncValue RapidC MoveSXYC EOL AbsOrInc END IF FeedEntry? AND NOT FIFO? SeqC RapidC ZCP2 EOL END END EntryMove SeqC IncValue EOL END ToolPath NextRep END ELSE Milling END AutoCycCutSub2 NEXTFeat RETURN
ZonlyRep: { NOTE: This Post Processor takes care of Z Clearance. } EachRep DoCycleComment IF NOT FirstCycle? CRCOffC IF SPXMove? OR SPYMove? IF FeedConnect? FeedC ELSE RapidC END SeqC MoveSXYC EOL END IF FeedEntry? AND NOT FeedConnect? SeqC ZCP2C EOL END END EntryMove ToolPath SeqC ExitMove EOL NextRep RETURN
SetDrillEndOpZ: IF RetractToCP1? TrackZNO# ClearancePlane1# ELSE TrackZNO# ClearancePlane2# END RETURN
CheckPass: {use the correct StrtPos} IF AutoCycle? SetPass2 ELSE SetPass1 END RETURN
OpGuts: ResetCRCNum RapidF# { No Output } IF Milling? SeqC ZCP2C EOL IF AutoCycle? CutAutoCycle IF Repeats? AND FeedConnect? ELSE SeqC ExitMove2 EOL END SetPass1 ELSE { NOT AutoCycle } IF Repeats? AND ZShiftOnly? ZonlyRep ELSE Milling END SeqC CRCOffC ExitMove2 EOL END ELSE IF Drilling? DrillStuff ToolPath SetDrillEndOpZ SeqC Rapid DrillOff ZCP3 EOL END END RETURN
ProgStart: InitProg ReverseXZArcs SetFlood SetMaxRPM('10000') IF Metric? SetMaxFeed('12700') ELSE SetMaxFeed('500') END Save# Num#('1') Num#('0') { MultipleParts Current Tool FirstOp# } Save# Num#('2') Num#('0') { MultipleParts ToolOp# Counter } Save# Num#('3') Num#('0') { LongHand PeckCycle } SetFlagF('2') { Need to output WFOStuff twice for MP-ESO-OTAP-ECP, once for all others } IF PSComment? AND UseComments? 'Utility Data:' EOL ' At Op Start: All literals and commands will appear at the beginning of the operation.' EOL ' At Op End: All literals and commands will appear at the end of the operation.' 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 END RETURN
InitOp: EOR EOL ProgID1 IF UseComments? AND ProgramNameComment? '( ' ProgramName$ ' )' END EOL EachOp IF FirstOperation? IF ToolChangeAtHome? SetHome END END NextOp 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 IF PartsComment? '( PARTS PROGRAMMED: ' Parts# ' )' EOL END IF StartToolComment? '( FIRST TOOL IN SPINDLE )' EOL END END RestoreScale RETURN
NewToolOp2: DoEndOpPS IF ToolChangeAtHome? SeqC AbsOrIncC Rapid PRIME Home SpinOff EOL ELSE SeqC SpinOff EOL END IF LAST ProgStop? SeqC 'M0' EOL ELSE SeqC ProgStop EOL END RETURN
SameToolOp1: DoEndOpPS IF LAST ProgStop? SeqC CoolOff EOL SeqC IncValueC OfstOff EOL SeqC SpinOff EOL SeqC 'M0' EOL ELSE IF CoolOff? AND LAST NOT CoolOff? SeqC CoolOff EOL END IF NewToolOffset? SeqC IncValueC OfstOff EOL END END RETURN
SameToolOp2: {Start new Operation} DoPartCycleComment DoOpComments DoPostScript CheckPass RETURN
SameToolOp3: {Start new Operation} SeqC WFOStuff EOL IF LAST ProgStop? SeqC PlaneC AbsOrInc Rapid StrtPos Speed SpinOn EOL SeqC OfstOn EOL SeqC CoolOn EOL ELSE SeqC PlaneC AbsOrInc Rapid StrtPos SpeedC EOL IF NewToolOffset? SeqC OfstOn EOL END IF NOT CoolOff? AND LAST CoolOff? SeqC CoolOn EOL END END RETURN
End1: SeqC CoolOff EOL SeqC IncValueC OfstOff EOL IF NOT FirstTool? SeqC UnTool ToolChng EOL END RETURN
End2: DoEndOpPS IF FIRST ToolChangeAtHome? {added FIRST modifier} SeqC AbsOrIncC Rapid PRIME FirstHome SpinOff EOL ELSE SeqC SpinOff EOL END IF ProgStop? SeqC 'M0' EOL ELSE IF MultipleParts? AND AllToolsOnePart? AND NOT LastPart? SeqC ProgStop EOL END END RETURN
End3: SeqC EOP EOL EOR EOL Close 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 RETURN
MPallTools1P: {Multiple Parts, All Tools 1 Part} IF FirstOperation? OR EquallySpacedOffsets? SetFlag('2') { Need to output WFOStuff twice for MP-ESO-OTAP-ECP, once for all others } END IF FirstOperation? FirstOp1 FirstOp2 FirstOp3 ELSE IF NewTool? NewToolOp1 NewToolOp2 NewToolOp3 NewToolOp4 NewToolOp5 ELSE {implied SameTool?} SameToolOp1 SameToolOp2 SameToolOp3 END END OpGuts RETURN
MP1ToollAllPfu: {Multiple Parts, 1 Tool all Parts, full up} SetFlag('2') { Need to output WFOStuff twice for MP-ESO-OTAP-ECP, once for all others } IF FirstOperation? FirstOp1 FirstOp2 FirstOp3 ELSE IF NewTool? NewToolOp1 ResetWFO NewToolOp2 NewToolOp3 NewToolOp4 NewToolOp5 ELSE {implied SameTool?} SameToolOp1 SameToolOp2 SameToolOp3 END END OpGuts RETURN
MP1ToollAllPXcp: {Multiple Parts, 1 Tool all Parts, exit Clearance plane} SetFlag('2') { Need to output WFOStuff twice for MP-ESO-OTAP-ECP, once for all others } IF FirstOperation? FirstOp1 FirstOp2 FirstOp3 ELSE IF NewTool? NewToolOp1 ResetWFO NewToolOp2 NewToolOp3 NewToolOp4 NewToolOp5 ELSE {implied SameTool?} SameToolOp1 SameToolOp2 SameToolOp3 END END OpGuts RETURN
NoMPs: {no multiple parts} SetFlag('2') { Need to output WFOStuff twice for MP-ESO-OTAP-ECP, once for all others } IF FirstOperation? FirstOp1 FirstOp2 FirstOp3 ELSE IF NewTool? NewToolOp1 NewToolOp2 NewToolOp3 NewToolOp4 NewToolOp5 ELSE {implied SameTool?} SameToolOp1 SameToolOp2 SameToolOp3 END END OpGuts RETURN
MasterSub: IF MultipleParts? IF AllToolsOnePart? MPallTools1P ELSE {implied OneToolAllParts?} IF FullUp? MP1ToollAllPfu ELSE {implied ExitClearancePlane?} MP1ToollAllPXcp END END ELSE NoMPs END RETURN
EndPartSub: {End of program ************************************************************}
{finish last operation} End1 IF MultipleParts? AND OneToolAllParts? ResetWFO END End2 RETURN
NewPart1: {Finish off last Part} IF FullUp? SeqC CoolOff EOL SeqC IncValueC OfstOff EOL END {DoEndOpPS} RETURN
NewPart2: {Start new Part} SameToolOp2 RETURN
NewPart3: {Start new Part} SetFlag('2') { Need to output WFOStuff twice for MP-ESO-OTAP-ECP, once for all others } SeqC WFOStuff EOL SeqC PlaneC AbsOrInc Rapid StrtPos Speed EOL IF FullUp? SeqC OfstOn EOL SeqC CoolOn EOL END RETURN
MPLoop: Save# Num#('2') Recall# Num#('1') IF WorkFixtureOffsets? NewWFO EachWFO ELSE EachPart END IF AllToolsOnePart? EachOp MasterSub NextOp EndPartSub ELSE { OneToolAllParts } EachOp IF Equal? Operation# Recall# Num#('2') { Valid Tool Op } IF FirstOperation? OR NewTool? IF FirstPart? MasterSub ELSE NewPart1 NewPart2 NewPart3 OpGuts END ELSE MasterSub END IF LastOp? IF LastPart? Save# Num#('1') Num#('0') END Save# Num#('2') Recall# Num#('1') ELSE IF NEXT SameTool? Save# Num#('2') NEXT Operation# ELSE IF LastPart? Save# Num#('1') NEXT Operation# Save# Num#('2') Num#('0') ELSE Save# Num#('2') Recall# Num#('1') END END END END NextOp END IF WorkFixtureOffsets? IncWFO NextWFO ELSE NextPart END RETURN
{Start of executable Prog, Top Level ****}
ProgStart {setup and initializations} InitOp
IF MultipleParts? IF WorkFixtureOffsets? {'NOTE: This Post Processor does not support Work Fixture Offsets for Multiple Parts.' EOL 'It is recommended that you change your selection to Equally Spaced Offsets.' EOL} END IF AllToolsOnePart? MPLoop ResetWFO ELSE EachOp IF FirstOperation? Save# Num#('1') Operation# END NextOp MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop EndPartSub END ELSE EachOp MasterSub NextOp EndPartSub END End3