{12/14/94 Updated: Fanuc 0M M062.81.3m For: Gibbs & Associates/Fructus Versions: ncCad 4.33/ncCAM 4.33/ncPost 4.33.04/Compost 4.21.23 Versions: Catalyst v2.14.22C/Catalyst v2.14.22PPC/Compost 4.21.23 Changes made per Pete Jackson/Mikael Bagge Updated to Version 4.2 per Fanuc 6M M001.81.2f Format. Added CkCRC sub for CRCOffC per version 4.2. CutterRadiusCompensation ExitLength will output G40 on LastFeat AND LineFeat at StdLine sub. Added support of CRC during multiple pocket dog-bone operation. Added condition to output CRCOnC for XMove OR YMove only at CkCRC sub. Outputs G41/G42 on First LineFeat after Z Plunge. Modified condition to output CRCOffC for LastFeat AND AutoCycle at ToolPath RapidFeat. Assures that G40 is not output prior to LastFeat. Added CRCOffC to RapidFeat at ToolPath. Outputs G40 at all ZMoveOnly Retract blocks. Modified CkCRC sub. Changed logic to output CRCOnC in OneFeat ToolPath. Added logic to suppress output of CRCOnC on ZMove Feature. DWB}
{12/14/94 Modified: Fanuc 0M M062.81.5m Created: Fanuc 0M [CTH] M723.81.5m For: Gibbs & Associates/Fructus Versions: ncCad 4.33/ncCAM 4.33/ncPost 4.33.04/Compost 4.21.23 Versions: Catalyst v2.14.22C/Catalyst v2.14.22PPC/Compost 4.21.23 Changes made per Pete Jackson/Mikael Bagge Changed Preset to 'G54' at Home blocks at FirstOperation and NewTool. Added literal 'G91G29X0.Y0.' on block to follow IncValue OfstOff at NewTool and end of Prog. Added SepSub support for all Non-AutoCycle Repeat Milling Operations Expanded SepSub scheme to support ZMoves inside ToolPath. Added SetFlagF(1) at setup and initializations. Deleted FindAnyZMoves command at IF Milling. Deleted IF NoZMoves? condition at IF Milling. Forcing call to ZOnlyRep as long as UseSeparateSubCalls AND CyclesLessThanMaxSubCalls are TRUE. Added SetFlagF(1) at end of IF Milling. Added SetFlag(1) at ZOnlyRep sub. Changed SkipZ to TrackZNO# FIRST SPZ# at ZOnlyRep sub. Deleted UnSkipZ at ZOnlyRep sub. Added SetZRepInc sub prior to FormatArc sub. Tests for Flag(1), ZMove AND AbsoluteMoves. IF TRUE, outputs IncValue, typically 'G91', and SetFlag(2). IF FALSE, SetFlagF(2) Added RestoreAbsOrInc sub prior to FormatArc sub. Tests for Flag(2). IF TRUE, outputs AbsValue, typically 'G90', and SetFlagF(2). Changed MoveXYZC to MoveXYC SetZRepInc MoveZC at FormatArc sub. Changed MoveXYZC to MoveXYC SetZRepInc MoveZC at StdLine sub. Changed MoveXYZC to MoveXYC SetZRepInc MoveZC at ToolPath RapidFeat. Changed MoveXYZC to MoveXYC SetZRepInc MoveZC at ToolPath LineFeat. Added call to RestoreAbsOrInc two places at StdLine sub. Added call to RestoreAbsOrInc at ToolPath RapidFeat. Added call to RestoreAbsOrInc two places at ToolPath LineFeat. Added call to RestoreAbsOrInc two places at ToolPath ArcFeat. Expanded SepSub scheme to support Non-AutoCycle XYZRepeats. Added XYZSepSubs sub. Main program positions to Absolute StrtPos. Sub positions to Absolute ZCP2 and ZIn. ToolPath is in incremental. End of Operation forces Absolute RapidMove to ZCP3. Added ExitMove sub. Contains RetractMoves to ZCP3 from end of IF Milling. Added call 5 places at IF Milling. Deleted RetractMoves to ZCP3 at end of IF Milling. DWB}
{12/20/94 Modified: Fanuc 0M [CTH] M723.81.5m For: Fructus Versions: ncCad 4.33/ncCAM 4.33/ncPost 4.33.04/Compost 4.21.23 Versions: Catalyst v2.14.22C/Catalyst v2.14.22PPC/Compost 4.21.23 Changes made per Mikael Bagge. Added standard WorkFixtureOffsets per Fanuc 6M M001.81.2 Changed 'G54' Home 'Z0.' to call to WFOStuff at FirstOperation and NewTool. Customer requested that G54 be output without Home 'Z0.'. Changed literal 'G91G29X0.Y0.' to 'G91G28X0.Y0.' at NewTool and end of Prog. Changed position of all calls to SetZRepInc to before MoveXYC command. Fanuc rules require that all coordinates be of same type. Was outputting X and Y in Absolute and Z in Incremental. DWB}
{1/31/95 Modified: Fanuc 0M [CTH] M723.81.6m For: Fructus Versions: ncCad 4.33/ncCAM 4.33/ncPost 4.33.04/Compost 4.21.25 Versions: Catalyst v2.14.30C/Catalyst v2.14.30PPC/Compost 4.21.25 Changes made per Mikael Bagge. Customer reported that G54 - G59 codes were missing in NC-code. I tested and verified that this is correct. I checked my ncf file when I last worked on the processor, and I was getting the G54 - G59 codes, but the current Form was outputting G0 instead. However the Prog seemed to be okay. I re-compiled the processor and the G54 - G59 codes were output as requested. Customer requested that Tool Length Offsets be output 'H' Tool#. I changed all OfstOn commands to 'G43' ZCP1 'H' Tool# at FirstOperation, NewTool and SameTool. Customer requested that Tool Diameter Offsets be output 'D' ADD# Tool# Num#('20'). I changed all CRCOffsetC commands to 'D' ADD# Tool# Num#('20') at StdLine sub. I added CkCRCOffsetC sub and used Flag('3') to control the conditionality factor. I added ADD# to Format#5. I replaced ResetCRCNum with SetFlagF('3'). Customer requested RapidC move to ZCP2C at IF Milling? be changed to FeedC ZCP2C 'F5000'. I added LoadFeat Num#('0') Num#('0') ClearancePlane2# to test for a move, and made the change. DWB}
{2/15/95 Modified: Fanuc 0M [CTH] M723.81.7m For: Fructus Versions: ncCad 4.33.01/ncCAM 4.33/ncPost 4.33.05/Compost 4.21.27 Versions: Catalyst v2.14.30C/Catalyst v2.14.30PPC/Compost 4.21.27 Changes made per Mikael Bagge. Customer again reported that G54 - G59 codes were missing in NC-code. I tested and verified that this is correct. I have determined that this was caused because the prog was missing the InitWFONum command at setup and initializations, therefore I added it and it now works. DWB}
{2/21/96 Modified: Fanuc 0M [CTH] M723.81.8m For: Fructus Versions: ncCad 4.33.02/ncCAM 4.33.01/ncPost 4.33.09/Catalyst v3.02.02/Compost 4.21.34/1.0a Changes made per Mikael Bagge. Updated for Catalyst v3.0 per Fanuc 6M M001.86 Format Changed SetMaxFeed('500') to SetMaxFeed('800') at setup and initializations. DWB}
{3/25/96, Tested ZOnlyRepAutoCycle, Changed version # to .89, MPK}
{4/11/96 Modified: Fanuc 0M [CTH] M723.89m Created: Fanuc 0M [CTH] M723.89.1m For: Fructus/Toolema Versions: ncCad 4.33.02/ncCAM 4.33.01/ncPost 4.33.09/Catalyst v3.02.11/Compost 4.21.34.1/1.0a Changes made per Mikael Bagge. Changed SetMaxFeed('800') to SetMaxFeed('5000') at setup and initializations. DWB}
{9/19/96 Modified: Fanuc 0M [CTH] M723.89.1m Created: Fanuc 0M [CTH] M723.89.2m For: Fructus Versions: Catalyst v3.05.03C/Compost 4.21.37/v1.0b1 Changes made per Mikael Bagge of Fructus. Added AbsValue block to MultipleParts OneToolAllParts FullUp condition at CloseMP sub. Needed to cancel IncValue condition of OfstOff to output correct Preset ShiftPC and UnshftPC values of EquallySpacedOffsets. Deleted SetFlagF(3) at end of ToolPath. Contrary to my notes of 1/31/95, this flag was not in use. Cleaned up ZonlyRepAutoCycle sub. Moved call to DoPostScript prior to call to WFOStuff at FirstOperation and NewTool. Post was not taking advantage of PostScript capabilities. DWB}
FinishSub1: {part 1} SeqC CRCOffC IF NOT FeedConnect? IF AutoCycle? ZCP3C ELSE IF FIFO? {.81} FeedC ZCP3C FeedEntC ELSE RapidC ZCP3C END END END EOL RETURN
CloseMP: IF WorkFixtureOffsets? SeqC EndSub EOL CloseSub SeqC WFO1 EOL ELSE IF OneToolAllParts? AND FullUp? SeqC AbsValue EOL END SeqC Preset ShiftPC EOL SeqC EndSub EOL CloseSub SeqC Preset UnshftPC EOL 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? SeqC AbsValue EOL END RETURN
FormatArc: DoAbsOrInc IF ArcCW? CWArcC ELSE CCWArcC END MoveXYZC IF ArcIJFormat? ArcIJC ELSE ArcRC END RETURN
ckCRC: IF LastFeat? CRCOffC ELSE IF NOT ZMove? CRCOnC IF NOT EmptyLine? SetFlag('2') { CRCOffsetC } END END END RETURN
ckCRCNum: IF Flag?('2') SetFlagF('2') 'D' ADD# Tool# Num#('20') { CRCOffsetC } END RETURN
ToolPath: ResetCRCNum EACHFeat IF PointFeat? IF AutoCycle? SeqC MoveSXYC EOL SeqC 'M98P1' Program# EOL CalcACSRXY {calc tool position after sub call, CalcAutoCycleStatusRecordXY} ELSE SeqC DoDrillAbsOrInc MoveSXYZC EOL {.80.01} END ELSE IF RapidFeat? IF XMove? OR YMove? OR ZMove? SeqC ckCRC DoAbsOrInc RapidC MoveXYZC ckCRCNum EOL END ELSE IF LineFeat? IF XMove? OR YMove? OR ZMove? IF Decelerate? IF RoomToDecel? DecelMove1 SeqC FormatLine FeedRateC ckCRCNum EOL DecelMove2 END SeqC FormatLine DecelFeed ckCRCNum EOL ELSE SeqC FormatLine 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 RestoreAbsOrInc RETURN
WFOStuff: IF NewWFO? IF MultipleParts? '*** WARNING *** DO NOT USE NEWWFO() WITH NCPOST MULTIPLE PARTS' EOL ELSE SeqC 'G' NewWFO# EOL END ELSE IF NOT SameTool? IF NeedWFO1? SeqC 'G' NewWFO# EOL END END END RETURN
AutoCycCutSub2: {part 2} ToolPath SeqC 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 SeqC EndSub EOL CloseSub SetSRSubXY {restore SR to 1st position value} SetSRSubMove RETURN
AutoCycPat: SetPass2 {position pattern} ToolPath {call after NewProg for correct sub calls} SetPass1 {reset} RETURN
Milling: IF AutoCycle? NewProg AutoCycCutSub1 EntryMove AutoCycCutSub2 AutoCycPat ELSE EntryMove ToolPath END RETURN
XYZSepSubs: { SepSubs, Absolute Positions, Incremental ToolPath } SubWarning StartSub AbsOrInc IF NOT FeedConnect? SeqC ZCP2 EOL END EntryMove SeqC IncValue EOL ToolPath SetStatusOff IF NOT FeedConnect? AbsOrInc END FinishSub1 SeqC EndSub EOL CloseSub EachRep IF NOT FirstCycle? SeqC AbsOrInc Connect StrtPos EOL END SeqC 'M98P1' Program# EOL NextRep SetStatusOn SeqC AbsOrInc Rapid ZCP3 EOL RETURN
ZonlyRepAutoCycle: {.86} AutoCycPat {write pattern moves and main calls} StartSub NewProg EachCycle SetSRXYtoEP IF FeedConnect? Feed IF NOT FirstCycle? IF SPXMove? OR SPYMove? SeqC IncValue StrtPosC EOL AbsOrInc END END SeqC ZInPlusInc FeedEnt EOL ELSE IF NOT FirstCycle? Rapid IF SPXMove? OR SPYMove? SeqC IncValue StrtPosC EOL AbsOrInc END IF FeedEntry? SeqC ZCP2PlusInc EOL END END IF FeedEntry? SeqC Feed ZInPlusInc FeedEnt EOL ELSE IF FirstCycle? Rapid END SeqC RapidC ZInPlusInc EOL END END IF FirstCycle? SetStatusOff {protect Z position for incremental sub} END SeqC 'M98P1' Program# EOL NextCycle SetStatusOn AutoCycCutSub1 {build element sub} AutoCycCutSub2 IF FeedConnect? {there is no Z up in the sub} IF FIFO? SeqC Feed ZCP2 FeedEnt EOL ELSE SeqC Rapid ZCP2 EOL END END SeqC EndSub EOL CloseSub {Element shift, not pattern} RETURN
ZonlyRep: EachCycle IF NOT FirstCycle? SeqC Connect StrtPos EOL {.71.2, added Connect} END IF FeedConnect? SeqC FeedC ZInPlusInc FeedEnt EOL {.71.2, changed to FeedC} ELSE {Entry/Exit Connect} IF FeedEntry? IF NOT FirstCycle? SeqC RapidC ZCP2PlusIncC EOL {can't call for cycle =1} {.69 added Rapid, reads better} {.71.2, changed to RapidC, reads better} END SeqC Feed ZInPlusInc FeedEnt EOL ELSE SeqC RapidC ZInPlusInc EOL {.69 added Rapid, reads better} {.71.2, changed to RapidC, reads better} END END SeqC 'M98P1' Program# EOL NextCycle StartSub TrackZNO# FIRST SPZ# ToolPath FinishSub1 SeqC EndSub EOL 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 ReverseXZArcs InitWFONum SetFlood UseSeparateSubCalls SetMaxSeparateSubCalls('50') SetMaxRPM('10000') SetMaxFeed('5000') SetFlagF('1') { Milling ZShiftOnly SepSubs } SetFlagF('2') { CRCOffsetC } 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 + 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 EachOp {Start of post processing *********************} IF FirstOperation? EOR EOL ProgID1 IF UseComments? AND ProgramNameComment? '( ' ProgramName$ ' )' END EOL IF ToolChangeAtHome? SetHome END 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$ ' MILLIMETERS )' EOL END IF PartsComment? '( PARTS PROGRAMMED: ' Parts# ' )' EOL END IF StartToolComment? '( FIRST TOOL NOT IN SPINDLE )' EOL END END OpenSub RestoreScale IF MultipleParts? AND AllToolsOnePart? OpenMP END Seq Plane 'G80' CRCOff EOL DoPostScript WFOStuff SeqC OpToolID ToolChng EOL DoOpComments SeqC Speed SpinOn EOL IF MultipleParts? AND OneToolAllParts? AND FullUp? OpenMP END CheckPass SeqC AbsOrInc Rapid StrtPos EOL SeqC 'G43' ZCP1 'H' Tool# EOL { OfstOn } SeqC CoolOn EOL IF MultipleParts? AND OneToolAllParts? AND ExitClearancePlane? OpenMP SeqC StrtPos EOL END ELSE IF NewTool?
{Finish off last Operation}
IF MultipleParts? AND OneToolAllParts? AND ExitClearancePlane? CloseMP END SeqC CoolOff EOL SeqC IncValue OfstOff EOL SeqC IncValue 'G28X0.Y0.' EOL IF MultipleParts? AND OneToolAllParts? AND FullUp? CloseMP END DoEndOpPS IF ToolChangeAtHome? SeqC AbsOrInc Rapid Home SpinOff EOL ELSE SeqC SpinOff EOL END IF LAST ProgStop? SeqC 'M0' EOL ELSE SeqC ProgStop EOL END
{Start new Operation}
Seq OpToolID ToolChng EOL DoOpComments SeqC Plane 'G80' CRCOff EOL DoPostScript WFOStuff SeqC Speed SpinOn EOL IF MultipleParts? AND OneToolAllParts? AND FullUp? OpenMP END CheckPass SeqC AbsOrInc Rapid StrtPos EOL SeqC 'G43' ZCP1 'H' Tool# EOL { OfstOn } SeqC CoolOn EOL IF MultipleParts? AND OneToolAllParts? AND ExitClearancePlane? OpenMP SeqC StrtPos EOL END ELSE IF SameTool? DoEndOpPS IF LAST ProgStop? SeqC CoolOff EOL SeqC IncValue OfstOff EOL SeqC SpinOff EOL SeqC 'M0' EOL
{Start new Operation}
GetStartOfSameTool SeqC PlaneC AbsOrInc Rapid StrtPos SpeedC SpinOn EOL SeqC 'G43' ZCP1 'H' Tool# EOL { OfstOn } SeqC CoolOn EOL ELSE IF CoolOff? AND LAST NOT CoolOff? SeqC CoolOff EOL END IF NewToolOffset? SeqC IncValue OfstOff EOL
GetStartOfSameTool SeqC PlaneC AbsOrInc Rapid StrtPos SpeedC EOL END IF NOT CoolOff? AND LAST CoolOff? SeqC CoolOn EOL END END END END END {common point for all operations} IF Milling? LoadFeat Num#('0') Num#('0') ClearancePlane2# IF ZMove? SeqC FeedC ZCP2C 'F5000' EOL END IF Repeats? NewProg IF ZshiftOnly? IF AutoCycle? {incremental Autocycle sub can have Z moves} ZonlyRepAutoCycle ExitMove ELSE {Z shift only, NOT Auto Cycle} IF UseSeparateSubCalls? AND CyclesLessThanMaxSubCalls? SetFlag('1') { Milling ZShiftOnly SepSubs } ZonlyRep SetFlagF('1') ExitMove ELSE {no sep subs desired} G92Sub ExitMove END END {end Auto Cycle IF} ELSE {not Z only} IF AutoCycle? G92Sub ExitMove ELSE XYZSepSubs { SepSubs, Absolute Positions, Incremental ToolPath } END END {end Z only IF} ELSE {no repeat OPs} Milling ExitMove END ELSE IF Drilling? IF Repeats? NewProg StdSub SeqC AbsOrInc Rapid StrtPos EOL END SeqC DrillCP EOL GetCycle IF RigidTap? SeqC 'M29' Speed EOL END SeqC Cycle FromCP StrtPos ZDepth RLevel Dwell Peck Retract FeedEnt EOL IF CallMasterOp? SeqC 'M98P1' CallMasterNum# EOL SkipToLastFeat ELSE TrackZNO# FIRST SPZ# IF MasterOp? SetFlag('1') {std sep sub Zreps in effect} NewMasterProg SeqC 'M98P1' Program# EOL StartSub ToolPath SeqC EndSub EOL CloseSub SetFlagF('1') {not std sep sub Zreps in effect} ELSE ToolPath END END SetDrillEndOpZ SeqC Rapid 'G80' ZCP3 EOL 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 SeqC CoolOff EOL SeqC IncValue OfstOff EOL SeqC IncValue 'G28X0.Y0.' EOL IF MultipleParts? AND OneToolAllParts? AND FullUp? CloseMP END DoEndOpPS IF FIRST ToolChangeAtHome? {.71.2 added FIRST modifier} SeqC AbsOrInc Rapid FirstHome SpinOff EOL ELSE SeqC SpinOff EOL END IF ProgStop? SeqC 'M0' EOL END IF MultipleParts? AND AllToolsOnePart? CloseMP END SeqC EOP EOL CloseSub Post2 {organize Subs into one program} 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