{7/19/89 Copied & modified: Dynapath Sys 10M M078.55 For: Bob Lewis Machine Machine: QMC Control: Bendix Dynapath System 10M Added IF FirstFeat? to CRCPlane & CRC Subs to eliminate excessive codes. Deleted literal 'G' from ToolPath LineFeat IF NOT Decelerate?. Deleted CoolOn & CoolOff commands. Control automatically turns coolant on and off. Modified to 'FIRST TOOL NOT IN SPINDLE' FORMAT. Added ToolChng to FirstOperation, and deleted ToolChng from end of prog. Moved OptoolID from Speed line to ToolChng line. Moved Speed line to follow StrtPos line. Moved Drill Cycle line out of ToolPath to Drilling. Modified to output on position moves to eliminate excessive codes. JR}
{7/24/90, Added InitProg globally to posts with this remark, DWB}
{4/16/91 Copied & modified: Dynapath Sys 10M QMC M224.56 For: Gibbs & Associates Machine: Control: Dynapath 10M Updated to Version 4.0 per Fanuc 6M M001.80 Format. Made major modifications per conversation with Dale Bachman at Dynapath Systems, Inc. This processor is totally conversational. This processor does not support WorkFixtureOffsets. Added Flag('1') to check if CRCOn (C1) has been output. CutterRadiusCompensation rules: CRCOn (C1) must only be activated when Feed (1) or CWArc/CCWArc (2) are active. Control requires CRCOff (C0) DummyMove on line preceeding CRCOn (C1). Added logic to output SPX# SPY# CRCOff (C0) in TurnOnCRC Sub. Rapid (0) must NOT be output while CRCOn (C1) is active. When RapidFeat, CutterRadiusCompensation and Flag('1') are TRUE: Added logic to output FeedC (1) MoveXYZC RapidFC (F199.1) in ToolPath. RapidFC set to output F199.1 in Mach Spec. Control requires CRCOff (C0) DummyMove when cancelling CRCOn (C1). Added logic to output MoveXY CRCOff (C0) in TurnOffCRC Sub. DWB}
{Prog Numeric Format Definitions *******************************************}
DoSubComment: NewProg IF UseComments? AND SubComment? SeqLab '(T) SUB NUMBER ' Program# Get$ EOL END RETURN
DoOpComments: IF UseComments? SetScale('1') IF OperationIDComment? SeqLab '(T) OPERATION ' Operation# ' ' OperationType$ Get$ EOL END IF OperationComment? SeqLab '(T) ' OperationComment$ Get$ EOL END IF WorkGroupComment? SeqLab '(T) ' WorkGroupComment$ Get$ EOL END IF ToolTypeComment? SeqLab '(T) TOOL# ' Tool# ' ' ToolDiameter# ' ' ToolType$ Get$ EOL END IF ToolComment? SeqLab '(T) ' ToolComment$ Get$ EOL END IF Metric? {CAM file is in metric, tools and tool path} SetScale('.03937007874') { change to English, this is an English post} END END RETURN
PSInit: {reset flags} RotateF RETURN
PSStuff: {revised.72} IF FourthCW? FORMAT(FourthDegree#,2) SeqLab '(0)' 'A' FourthDegree# Get$ EOL FourthCWF {reset flag} END IF FourthCCW? FORMAT(FourthDegree#,3) SeqLab '(0)' 'A' FourthDegree# Get$ EOL FourthCCWF {reset flag} END IF FifthCW? FORMAT(FifthDegree#,2) SeqLab '(0)' 'B' FifthDegree# Get$ EOL FifthCWF {reset flag} END IF FifthCCW? FORMAT(FifthDegree#,3) SeqLab '(0)' 'B' FifthDegree# Get$ EOL FifthCCWF {reset flag} END RETURN
GetPlane: IF XYPlane? IF NOT AutoCycle? IF FirstFeat? IF XMove? OR YMove? 'P0' { This is the default Plane select } END END END ELSE IF XZPlane? 'P2' ELSE {YZPlane} 'P1' END END RETURN
CheckMove: IF AutoCycle? IF XMove? MoveX '/' END IF YMove? MoveY '/' END IF ZMove? MoveZ '/' END ELSE MoveXYZC END RETURN
FormatArc: GetPlane CheckMove IF AutoCycle? ArcI '/' ArcJ '/' ELSE ArcIJ END IF ArcCW? CWArc ELSE CCWArc END RETURN
TurnOnCRC: IF CutterRadiusCompensation? AND NOT Flag?('1') SetFlag('1') SeqLab '(1)' IF AutoCycle? 'X' SPX# '/Y' SPY# '/' ELSE 'X' SPX# 'Y' SPY# END CRCOff Get$ EOL END RETURN
TurnOffCRC: IF CutterRadiusCompensation? AND Flag?('1') SeqLab '(1)' IF AutoCycle? MoveX '/' MoveY '/' ELSE MoveXY END CRCOff Get$ EOL END RETURN
StdLine: {enables CRC on first call, .70} TurnOnCRC IF Decelerate? IF RoomToDecel? DecelMove1 SeqLab '(1)' GetPlane CheckMove CRCOnC FeedRateC Get$ EOL DecelMove2 END SeqLab '(1)' GetPlane CheckMove CRCOnC DecelFeed Get$ EOL ELSE IF XMove? OR YMove? OR ZMove? SeqLab '(1)' GetPlane CheckMove CRCOnC FeedRateC Get$ EOL END END RETURN
ToolPath: ResetCRCNum {.72} EACHFeat IF PointFeat? IF NOT FirstFeat? SeqLab '(0)' MoveSXYC Get$ EOL END IF AutoCycle? SeqLab '(7)FÅ‚' Tag# 'L²' Tag# Get$ EOL CalcACSRXY {calc tool position after sub call, CalcAutoCycleStatusRecordXY} END ELSE IF RapidFeat? IF CutterRadiusCompensation? AND Flag?('1') IF XMove? OR YMove? OR ZMove? SeqLab '(1)' GetPlane CheckMove RapidFC Get$ EOL END ELSE IF XMove? OR YMove? OR ZMove? SeqLab '(0)' GetPlane CheckMove Get$ EOL END END ELSE IF LineFeat? IF AutoCycle? {.70} IF ZMove? {skip CRCOn until first non-Z move line, skipping ramps} SeqLab '(1)' CheckMove FeedRateC Get$ EOL ELSE StdLine {enables CRC on first call} 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 SeqLab '(2)' FormatArc ArcFeedC Get$ EOL DecelMove2 END SeqLab '(2)' FormatArc DecelFeed Get$ EOL ELSE SeqLab '(2)' FormatArc ArcFeedC Get$ EOL END NEXTQuadrant END END END IF LastFeat? TurnOffCRC END END NEXTFeat RETURN
WFOStuff: { NOTE: This post processor does not support WorkFixtureOffsets. } RETURN
AutoCycCutSub2: {part 2} ToolPath SetAbs IF Repeats? AND FeedConnect? AND ZshiftOnly? ELSE SeqLab '(0)' ZCP2 Rapid Get$ EOL {.71.2 removed CRCOffC, gets turned off in ToolPath} END '<' Tag# 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? TagUp TagInc AutoCycCutSub1 EntryMove AutoCycCutSub2 AutoCycPat TagDown ELSE EntryMove ToolPath END RETURN
ZonlyRepAutoCycle: AutoCycPat {write pattern moves and main calls} StartSub TagUp TagInc EachCycle IF FeedConnect? SeqLab '(1)' ZInPlusInc FeedEnt Get$ EOL ELSE IF FeedEntry? IF NOT FirstCycle? SeqLab '(0)' ZCP2PlusInc Get$ EOL {.69 added Rapid, reads better} {can't call for cycle = 1, .69 changed to ZCP2PlusInc} END SeqLab '(1)' ZInPlusInc FeedEnt Get$ EOL ELSE SeqLab '(0)' ZInPlusInc Get$ EOL {.69 added Rapid, reads better} END END IF FirstCycle? SetStatusOff {protect Z position for incremental sub} END SeqLab '(7)FÅ‚' Tag# 'L²' Tag# Get$ EOL NextCycle SetStatusOn AutoCycCutSub1 {build element sub} AutoCycCutSub2 {.69, removed FinishSub1} IF FeedConnect? {there is no Z up in the sub, .69} SeqLab '(0)' ZCP2 Rapid Get$ EOL {.69} END {.69} TagDown '<' Tag# EOL CloseSub {Element shift, not pattern} RETURN
ZonlyRep: EachCycle IF NOT FirstCycle? IF FeedConnect? {.71.2, added Connect} SeqLab '(1)' StrtPos Get$ EOL ELSE SeqLab '(0)' StrtPos Get$ EOL END END IF FeedConnect? SeqLab '(1)' ZInPlusInc FeedEnt Get$ EOL {.71.2, changed to FeedC} ELSE {Entry/Exit Connect} IF FeedEntry? IF NOT FirstCycle? SeqLab '(0)' ZCP2PlusInc Get$ EOL {can't call for cycle =1} {.69 added Rapid, reads better} {.71.2, changed to RapidC, reads better} END SeqLab '(1)' ZInPlusInc FeedEnt Get$ EOL ELSE SeqLab '(0)' ZInPlusInc Get$ EOL {.69 added Rapid, reads better} {.71.2, changed to RapidC, reads better} END END SeqLab '(7)FÅ‚' Tag# 'L²' Tag# Get$ EOL NextCycle StartSub SkipZ ToolPath FinishSub1 '<' Tag# EOL TagDown CloseSub RETURN
CheckPass: IF AutoCycle? {use the correct StrtPos} SetPass2 ELSE SetPass1 END RETURN
CheckRapid: IF NOT AutoCycle? IF Repeats? IF FeedConnect? Rapid END ELSE Rapid END END RETURN
{Start of executable Prog **************************************************}
{setup and initializations} InitProg ReverseXZArcs SetFlood UseSeparateSubCalls SetMaxSeparateSubCalls ('50') SetMaxRPM('10000') SetMaxFeed('500') SetAbs IF PSComment? AND UseComments? SeqLab '(T) PostScript:' Get$ EOL SeqLab '(T) Literals: put between single or double quotes.' Get$ EOL SeqLab '(T) Separate commands and literals with at least one space.' Get$ EOL SeqLab '(T) A CR ( RETURN key ) will start a new line.' Get$ EOL SeqLab '(T) Commands: may be capital and/or lower case letters. Separate commands with a space.' Get$ EOL SeqLab '(T) EndOP -' Get$ EOL SeqLab '(T) all literals and commands before an ENDOP command' Get$ EOL SeqLab '(T) will appear at the beginning of the operation. All' Get$ EOL SeqLab '(T) literals and commands after an ENDOP command will appear' Get$ EOL SeqLab '(T) at the end of the operation.' Get$ EOL SeqLab '(T) NewWFO(56), NWFO(56) -' Get$ EOL SeqLab '(T) The Work Fixture Offset # you specify will be used for all following operations.' Get$ EOL SeqLab '(T) Do not use with the ncPost multiple part option.' Get$ EOL SeqLab '(T) 4thAxisCW(12.5), 4ACW(12.5) -' Get$ EOL SeqLab '(T) generates a + A move of the value you specify' Get$ EOL SeqLab '(T) 4thAxisCCW(22.5), 4ACCW(22.5) -' Get$ EOL SeqLab '(T) generates a - A move of the value you specify' Get$ EOL SeqLab '(T) 5thAxisCW(30), 5ACW(30) -' Get$ EOL SeqLab '(T) generates a + B move of the value you specify' Get$ EOL SeqLab '(T) 5thAxisCCW(22.5), 5ACCW(22.5) -' Get$ EOL SeqLab '(T) generates a - B move of the value you specify' Get$ EOL END EachOp {Start of post processing *********************} SetFlagF('1') { Flag to set-up CutterRadiusCompensation } Plane { no output } IF FirstOperation? '(' Program# ')' EOL IF ToolChangeAtHome? SetHome END IF UseComments? IF ProgramNameComment? SeqLab '(T) PROGRAM ' ProgramName$ Get$ EOL END IF ProgramComment? SeqLab '(T) ' ProgramComment$ Get$ EOL END IF FormatNameComment? SeqLab '(T) FORMAT ' FormatName$ Get$ EOL END IF TimeComment? SeqLab '(T) ' Date$ ' AT ' Time$ Get$ EOL END IF MovesComment? SeqLab '(T) OUTPUT IN ABSOLUTE INCHES' Get$ EOL END IF PartsComment? SeqLab '(T) PARTS PROGRAMMED ' Parts# Get$ EOL END IF StartToolComment? SeqLab '(T) FIRST TOOL NOT IN SPINDLE' Get$ EOL END END OpenSub IF Metric? {CAM file is in metric, tools and tool path} SetScale('.03937007874') { change to English, this is an English post} END IF MultipleParts? AND AllToolsOnePart? OpenMP END SeqLab '(9)' ToolChng ToolOfst Get$ EOL DoOpComments DoPostScript IF MultipleParts? AND OneToolAllParts? AND FullUp? OpenMP END CheckPass SeqLab '(0)' StrtPos ZCP1 Rapid Get$ EOL SeqLab '(9)' SpinOn Speed Get$ EOL IF MultipleParts? AND OneToolAllParts? AND ExitClearancePlane? OpenMP SeqLab '(0)' StrtPos Rapid Get$ EOL END ELSE IF NewTool?
{Finish off last Operation}
IF MultipleParts? AND OneToolAllParts? AND ExitClearancePlane? CloseMP END IF MultipleParts? AND OneToolAllParts? AND FullUp? CloseMP END DoEndOpPS IF LAST ProgStop? SeqLab '(9)' 'M0' Get$ EOL ELSE IF OptionalStops? SeqLab '(9)' ProgStop Get$ EOL END END
{Start new Operation}
SeqLab '(9)' ToolChng ToolOfst Get$ EOL DoOpComments DoPostScript IF MultipleParts? AND OneToolAllParts? AND FullUp? OpenMP END CheckPass SeqLab '(0)' StrtPos ZCP1 Rapid Get$ EOL SeqLab '(9)' SpinOn Speed Get$ EOL IF MultipleParts? AND OneToolAllParts? AND ExitClearancePlane? OpenMP SeqLab '(0)' StrtPos Rapid Get$ EOL END ELSE IF SameTool? DoEndOpPS IF LAST ProgStop? SeqLab '(9)' 'M0' Get$ EOL
GetStartOfSameTool SeqLab '(9)' Speed Get$ EOL SeqLab '(0)' StrtPos Rapid Get$ EOL END END END END END {common point for all operations} IF Milling? SeqLab '(0)' ZCP2 Get$ EOL IF Repeats? TagUp TagInc IF ZshiftOnly? IF AutoCycle? {incremental Autocycle sub can have Z moves} ZonlyRepAutoCycle ELSE {Z shift only, NOT Auto Cycle} IF UseSeparateSubCalls? AND CyclesLessThanMaxSubCalls? FindAnyZMoves {for normal abs subroutine} IF NoZMoves? ZonlyRep ELSE G92Sub {pattern shift, not element} END 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 SeqLab '(0)' ZCP3 CheckRapid Get$ EOL ELSE IF Drilling? IF Repeats? TagUp TagInc StdSub SeqLab '(0)' StrtPos Get$ EOL END IF NOT RetractToCP1? SeqLab '(0)' ZCP2 Get$ EOL END GetCycle SeqLab '(0)' StrtPos RLevel ZDepth Dwell Peck IF PeckChipBreaker? '/Q' Retract# END FeedEnt Cycle Get$ EOL ToolPath IF Repeats? FinishSubG92 END SeqLab '(0)' ZCP3 Rapid Get$ EOL END END NextOp {loops back to EachOP until last Operation}
{End of program ************************************************************}
{finish last operation} IF MultipleParts? AND OneToolAllParts? AND ExitClearancePlane? CloseMP END IF MultipleParts? AND OneToolAllParts? AND FullUp? CloseMP END DoEndOpPS IF FIRST ToolChangeAtHome? {.71.2 added FIRST modifier} SeqLab '(0)' FirstHome Get$ EOL END SeqLab '(9)' SpinOff Get$ EOL IF ProgStop? SeqLab '(9)' 'M0' Get$ EOL END IF MultipleParts? AND AllToolsOnePart? CloseMP END SeqLab '(9)' EOP Get$ EOL CloseSub Post2 {organize Subs into one program} SeqLab '(9)' EOP Get$ EOL { This is required a second time, at end of all subs } 'END' EOL Close ReTag IF UseComments? SetScale('1') {restore scale for comments} Reopen IF FileBytesComment? 'N9997(T) FILE LENGTH: ' FileBytes# ' CHARACTERS' Get$ EOL END IF FileFeetComment? 'N9998(T) FILE LENGTH: ' FileFeet# ' FEET' Get$ EOL END IF FileMetersComment? 'N9999(T) FILE LENGTH: ' FileMeters# ' METERS' Get$ EOL END Close END