{6/14/93 Modified: Fanuc 11M Toyoda [TS] M.81.2 For: Gibbs & Associates Machine: Swedish Machine Group SMG 48 Verticle Control: Fanuc Conversational. Changes made per Don Wright at Tool Sales & Service Moved OpToolID to ToolChng at FirstOperation. Deleted PreTool at FirstOperation and NewTool. Change literal 'G53' to IncValue at all occurances of OfstOff. Moved call to WFOStuff prior to all occurances of call to Rotate sub. Added OpToolID to ToolChng at NewTool. Deleted IndexHome blocks at end of Prog. DWB}
{9/14/93 Modified: Fanuc SMG 48V [TS] M576.81.2 For: Tool Sales & Service Moved the program stop, M0, to the beginning of the operation specified in ncCAM. Jim Radcliffe}
{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
DoPartCycleComment: IF MultipleParts? AND UseComments? AND SubComment? '( PART NO. ' 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
Rotate: IF FourthCW? FORMAT(FourthDegree#,2) SeqC 'M11' EOL SeqC AbsOrInc Rapid 'B' FourthDegree# EOL SeqC 'M10' EOL FourthCWF {reset flag} END IF FourthCCW? FORMAT(FourthDegree#,3) SeqC 'M11' EOL SeqC AbsOrInc Rapid 'B' FourthDegree# EOL SeqC 'M10' EOL FourthCCWF {reset flag} END IF FifthCW? FORMAT(FifthDegree#,2) SeqC 'M11' EOL SeqC AbsOrInc Rapid 'A' FifthDegree# EOL SeqC 'M10' EOL FifthCWF {reset flag} END IF FifthCCW? FORMAT(FifthDegree#,3) SeqC 'M11' EOL SeqC AbsOrInc Rapid 'A' FifthDegree# EOL SeqC 'M10' EOL FifthCCWF {reset flag} END RETURN
EntryMove: IF FeedEntry? SeqC FeedC ZInC FeedEntC EOL ELSE SeqC RapidC ZInC EOL END RETURN
GetConnect: IF FeedConnect? FeedC ELSE RapidC END RETURN
ExitMove: IF NOT FeedConnect? SeqC IF FIFO? { .81 } FeedC ELSE IF NOT AutoCycle? RapidC END END PRIME ZCP2C IF FIFO? { .81 } FeedEntC END EOL END RETURN
ExitMove2: IF FIFO? FeedC ZCP3C FeedEntC ELSE RapidC ZCP3C END RETURN
CycleWarning: { NOTE: This Post Processor takes care of Z Clearance. } RETURN
FormatArc: IF ArcCW? CWArcC ELSE CCWArcC END MoveXYZC IF ArcIJFormat? ArcIJC ELSE ArcRC END RETURN
CkThreadHob: SetAbs TrackXNO# EPX# TrackYNO# EPY# TrackZNO# EPZ# IF NEXT NOT XMove? AND NEXT NOT YMove? CRCOffC END TrackXNO# SPX# TrackYNO# SPY# TrackZNO# SPZ# SetInc RETURN
CkCRC: IF LastFeat? CRCOffC ELSE IF AutoCycle? AND NEXT LastFeat? CkThreadHob ELSE CRCOnC END END RETURN
StdLine: {enables CRC on first call, .70} IF Decelerate? IF RoomToDecel? DecelMove1 SeqC CkCRC FeedC MoveXYZC FeedRateC CRCOffsetC EOL DecelMove2 END SeqC CkCRC FeedC MoveXYZC DecelFeed CRCOffsetC EOL ELSE IF XMove? OR YMove? OR ZMove? SeqC CkCRC FeedC MoveXYZC FeedRateC CRCOffsetC EOL END END RETURN
ToolPath: ResetCRCNum { Do not move, customer wants offset on all G41/G42 blocks. } EACHFeat IF PointFeat? { Drilling Only } SeqC MoveSXYZC EOL {.80.01} ELSE IF RapidFeat? IF LastFeat? AND AutoCycle? {.70} SeqC CRCOffC RapidC MoveXYZC EOL ELSE IF XMove? OR YMove? OR ZMove? SeqC RapidC MoveXYZC EOL END END ELSE IF LineFeat? IF AutoCycle? {.70} IF LastFeat? SeqC CRCOffC FeedC MoveXYZC FeedRateC EOL ELSE IF ZMove? {skip CRCOn until first non-Z move line, skipping ramps} SeqC FeedC MoveXYZC FeedRateC EOL ELSE StdLine {enables CRC on first call} END END ELSE StdLine 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 IF AutoCycle? SetAbs Save# Num#('6') SUB# EPX# CurOriginPosX# Save# Num#('7') SUB# EPY# CurOriginPosY# SetInc END END NEXTFeat RETURN
WFOStuff: IF NewWFO? IF MultipleParts? IF NOT SameTool? IF WorkFixtureOffsets? 'G' Recall# Num#('9') END END EOL '*** WARNING *** DO NOT USE NEWWFO() WITH NCPOST MULTIPLE PARTS' EOL ELSE 'G' NewWFO# END ELSE IF NOT SameTool? IF MultipleParts? AND WorkFixtureOffsets? 'G' Recall# Num#('9') ELSE IF NeedWFO1? 'G' NewWFO# END END END END RETURN
AutoCycCutSub2: {part 2} IF FIFO? {.81} SeqC AbsOrInc FeedC ZCP2 FeedEntC EOL {.71.2 removed CRCOffC, gets turned off in ToolPath} ELSE SeqC AbsOrInc RapidC ZCP2 EOL END SetSRSubXY {restore SR to 1st position value} ReSetPass2 {restore for positioning moves} RETURN
Milling: EntryMove ToolPath RETURN
XYZRep: CycleWarning EachRep IF NOT FirstCycle? SeqC GetConnect StrtPosC EOL END DoCycleComment IF FirstCycle? EntryMove ELSE IF FeedConnect? IF ZshiftOnly? EntryMove END ELSE IF FeedEntry? SeqC ZCP2C EOL END EntryMove END END ToolPath ExitMove NextRep RETURN
NoRepAutoCycle: EACHFeat IF SPXMove? OR SPYMove? SeqC RapidC MoveSXYC EOL END AutoCycCutSub1 DoCycleComment Milling AutoCycCutSub2 NEXTFeat RETURN
ZonlyRepAutoCycle: EACHFeat IF SPXMove? OR SPYMove? SeqC GetConnect MoveSXYC EOL END AutoCycCutSub1 EachRep IF FirstCycle? DoCycleComment EntryMove ELSE IF NOT FeedConnect? ExitMove END IF SPXMove? OR SPYMove? SeqC GetConnect MoveSXYC EOL END DoCycleComment IF NOT FeedConnect? EntryMove END END ToolPath NextRep AutoCycCutSub2 ReSetPass2 {restore for positioning moves} NEXTFeat RETURN
DrillStuff: SeqC DrillCP EOL GetCycle IF FIFO? AND Dwell? 'G89' ELSE Cycle END SeqC FromCP StrtPos ZDepth RLevel Dwell Peck Retract FeedEnt EOL TrackZNO# FIRST SPZ# {.81.2} RETURN
CheckPass: IF AutoCycle? {use the correct StrtPos} SetPass2 ELSE SetPass1 END RETURN
MasterSub: IF FirstOperation? IF MultipleParts? AND OneToolAllParts? AND NOT FirstPart? ELSE IF ToolChangeAtHome? SetHome END Seq OpToolID ToolChng EOL SeqC Plane CRCOff DrillOff EOL DoPartCycleComment DoOpComments DoPostScript SeqC WFOStuff EOL Rotate IF ProgStop? SeqC 'M0' EOL END SeqC Speed SpinOn EOL CheckPass SeqC AbsOrInc Rapid StrtPos EOL SeqC OfstOn EOL SeqC CoolOn EOL END ELSE IF NewTool? IF MultipleParts? AND OneToolAllParts? AND NOT FirstPart? ELSE
{Finish off last Operation}
SeqC CoolOff EOL IF MultipleParts? AND OneToolAllParts? IF WorkFixtureOffsets? SeqC 'G' Recall# Num#('8') EOL END END SeqC IncValue OfstOff 'Y0.M19' EOL DoEndOpPS Rotate SeqC ProgStop EOL
{GetStartOfSameTool} DoPartCycleComment DoOpComments DoPostScript IF Rotate? SeqC IncValue OfstOff EOL SeqC WFOStuff EOL Rotate CheckPass SeqC PlaneC AbsOrInc Rapid StrtPos SpeedC EOL SeqC OfstOn EOL ELSE SeqC WFOStuff EOL CheckPass SeqC PlaneC AbsOrInc Rapid StrtPos SpeedC EOL END END END IF NOT CoolOff? AND LAST CoolOff? SeqC CoolOn EOL END END END END END {common point for all operations} RapidF# { No Output } IF Milling? SeqC ZCP2C EOL IF AutoCycle? IF Repeats? IF ZshiftOnly? ZonlyRepAutoCycle ELSE XYZRepAutoCycle END IF NOT FeedConnect? SeqC ExitMove2 EOL END ELSE NoRepAutoCycle SeqC ExitMove2 EOL END ELSE { NOT AutoCycle } IF Repeats? XYZRep ELSE Milling END SeqC ExitMove2 EOL END ELSE IF Drilling? IF Repeats? EachRep DoCycleComment IF FirstCycle? DrillStuff END ToolPath NextRep ELSE DrillStuff ToolPath END IF RetractToCP1? {.81} TrackZNO# ClearancePlane1# ELSE TrackZNO# ClearancePlane2# END SeqC DrillOff EOL SeqC RapidC ZCP3C EOL END END RETURN
EndPartSub: {End of program ************************************************************}
{finish last operation} SeqC CoolOff EOL IF MultipleParts? AND OneToolAllParts? IF WorkFixtureOffsets? SeqC 'G' Recall# Num#('8') EOL END END SeqC IncValue OfstOff 'X0.Y0.M19' EOL DoEndOpPS Rotate IF MultipleParts? AND AllToolsOnePart? AND NOT LastPart? SeqC ProgStop EOL END RETURN
MPLoop: TagInit IF AllToolsOnePart? Save# Num#('9') Recall# Num#('8') { NewWFO# } EachPart TagInc EachOp MasterSub NextOp EndPartSub Save# Num#('9') ADD# Recall# Num#('9') Num#('1') { NewWFO# } NextPart ELSE { OneToolAllParts } Save# Num#('2') Recall# Num#('1') IF LTEqual? Recall# Num#('1') Recall# Num#('3') EachOp IF Equal? Operation# Recall# Num#('2') Save# Num#('2') ADD# Operation# Num#('1') IF NewTool? IF Equal? Recall# Num#('1') Recall# Num#('3') Save# Num#('2') Operation# ELSE IF NotEqual? Recall# Num#('1') SUB# Recall# Num#('2') Num#('1') Save# Num#('2') SUB# Operation# Num#('1') END END END END NextOp EachPart TagInc EachOp IF GTEqual? Operation# Recall# Num#('1') IF LTEqual? Operation# Recall# Num#('2') IF Equal? Operation# Recall# Num#('1') IF FirstPart? Save# Num#('9') Recall# Num#('8') { NewWFO# } ELSE Save# Num#('9') ADD# Recall# Num#('9') Num#('1') { NewWFO# }
{Finish off last Operation}
IF FullUp? SeqC CoolOff EOL SeqC IncValue OfstOff EOL END {DoEndOpPS}
{Start new Operation}
{GetStartOfSameTool} DoPartCycleComment DoOpComments DoPostScript IF Rotate? AND NOT FullUp? SeqC IncValue OfstOff EOL END SeqC WFOStuff EOL Rotate CheckPass SeqC PlaneC AbsOrInc Rapid StrtPos SpeedC EOL IF FullUp? SeqC OfstOn EOL SeqC CoolOn EOL ELSE IF Rotate? SeqC OfstOn EOL END END END END MasterSub END END NextOp NextPart Save# Num#('1') ADD# Recall# Num#('2') Num#('1') END END RETURN
{Start of executable Prog **************************************************}
{setup and initializations} InitProg ReverseXZArcs InitWFONum SetFlood SetMaxRPM('10000') SetMaxFeed('500') Save# Num#('1') Num#('0') Save# Num#('2') Num#('0') Save# Num#('3') Num#('0') 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 ' NewWFO(56), NWFO(56) -' EOL ' The Work Fixture Offset # you specify will be used for all following operations.' EOL ' Do not use with the ncPost multiple part option.' EOL ' 4thAxisCW(12.5), 4ACW(12.5) -' EOL ' generates a + B move of the value you specify' EOL ' 4thAxisCCW(22.5), 4ACCW(22.5) -' EOL ' generates a - B move of the value you specify' EOL ' 5thAxisCW(30), 5ACW(30) -' EOL ' generates a + A move of the value you specify' EOL ' 5thAxisCCW(22.5), 5ACCW(22.5) -' EOL ' generates a - A move of the value you specify' EOL END 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 IF PartsComment? '( PARTS PROGRAMMED - ' Parts# ' )' EOL END IF StartToolComment? '( FIRST TOOL NOT IN SPINDLE )' EOL END END OpenSub RestoreScale IF MultipleParts? Save# Num#('1') Num#('1') Save# Num#('8') NewWFO# EachOp IF LastOp? Save# Num#('3') Operation# END NextOp MPLoop IF OneToolAllParts? 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 ELSE IF WorkFixtureOffsets? SeqC 'G' Recall# Num#('8') EOL END END ELSE EachOp MasterSub NextOp EndPartSub END SeqC EOP EOL EOR EOL Post 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