{5/26/88 Modified: Dynapath Sys 10M M078.53. NOTE: This Post Processor doesn't support incremental output. Deleted all blank spaces. Modified Drill Cycles. JR}
{6/22/88 Modified: Dynapath Sys 10M M078.54. Modified Feed moves to 1 decimal place. Control requires that first line of program have Prog# in parentheses. JR}
{10/24/89 Modified: Dynapath Sys 10M M078.55 For: Schobers Added GearRange. Added 'END' at end of prog to terminate Communications. Moved CoolOn to line before SpinOn. JR}
{11/29/89 Modified: Dynapath Sys 10M M078.56 Modified FormatArc subroutine to use standard format. Add '/Q' and changed Retract to Retract# in ToolPath IF PeckChipBreaker = TRUE. Modified Feed to FeedC in ToolPath. NOTE: ReverseXZArcs has no effect on literals. JR}
{7/24/90, Added InitProg globally to posts with this remark, DWB} {8/31/90, Updated: Dynapath 10M (SM) M262.63 to .76.1 format,JR}
{11/2/90 Modified: Dynapath 10M M078.76.1 For: Gibbs & Associates Made much needed corrections. DWB}
{4/16/91 Copied & modified: Dynapath 10M M 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. NOTE: This Post 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}
{1/26/95 Updated: Dynapath 10M M078.80 For: Gibbs & Associates/Dickman Enterprises Inc. Versions: ncCad 4.33/ncCAM 4.33/ncPost 4.33.04/Compost 4.21.25 Updated to Version 4.2 per Fanuc 6M M001.81.2f Format. Corrected FORMAT5 from '########;0' to '#######0'. Added RestoreScale Sub per 4-Axis Post Processor. Moved UnSkipZ from FinishSub1 to ZOnlyRep where SkipZ is set. Added FIFO? at FinishSub1, AutoCycCutSub2, ZonlyRepAutoCycle subs and end of IF Milling. Added Variable Drill Depths. Added TrackZNO# FIRST SPZ# at IF Drilling? section to allow for conditionality of MoveSXYZC command. NOTE: Did not update CRC per version 4.2 due to complexity of current handling. DWB}
{9/14/95, Updated Dynapath 10M M078.81.2 to .85 format per v2.20 Update Instructions .01, JR}
{1/18/96 Removed Program I/D, speed commands, coolant commands and M30's from subs. In accord with request from Cubic Defense Systems (David Waugh). KC}
{11/13/96, updated to .89 version, fixed SameTool section where an ELSE and END statement were left after their corresponding IF statement was deleted, MPK}
{4/15/97, Initial: Dynapath 10M (CDS) M922.89 Created: Dynapath 10M [NSN] Mxxx.89 For: NSN Machining Added support for Rigid Tapping, MPK}
{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
Get$: IF NOT EmptyLine? '$' END RETURN
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 RestoreScale END RETURN
FinishSub1: {part 1} IF NOT FeedConnect? IF AutoCycle? SeqLab '(0)' ZCP3 Get$ EOL ELSE IF FIFO? {.81} SeqLab '(1)' ZCP3 FeedEnt Get$ EOL ELSE SeqLab '(0)' ZCP3 Rapid Get$ EOL END END 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 AbsValue? MoveXYZC ELSE IF XMove? MoveX '/' END IF YMove? MoveY '/' END IF ZMove? MoveZ '/' END END RETURN
CheckDrillMove: IF AbsValue? MoveSXYZC ELSE IF SPXMove? MoveSX '/' END IF SPYMove? MoveSY '/' END IF SPZMove? MoveSZ '/' END END RETURN
DoAbsOrInc: IF Flag?('2') AND AbsoluteMoves? IF ZMove? AND AbsValue? SetInc ELSE IF NOT ZMove? AND NOT AbsValue? SetAbs END END END RETURN
DoDrillAbsOrInc: IF Flag?('2') AND AbsoluteMoves? IF SPZMove? AND AbsValue? SetInc ELSE IF NOT SPZMove? AND NOT AbsValue? SetAbs END END END RETURN
RestoreAbsOrInc: IF Flag?('2') AND AbsoluteMoves? AND NOT AbsValue? SetAbs END RETURN
FormatArc: DoAbsOrInc GetPlane CheckMove IF AbsValue? ArcIJ ELSE ArcI '/' ArcJ '/' END IF ArcCW? CWArc ELSE CCWArc END RETURN
TurnOnCRC: IF CutterRadiusCompensation? AND NOT Flag?('1') SetFlag('1') SeqLab '(1)' IF AbsValue? 'X' SPX# 'Y' SPY# ELSE 'X' SPX# '/Y' SPY# '/' END CRCOff Get$ EOL END RETURN
TurnOffCRC: IF CutterRadiusCompensation? AND Flag?('1') SeqLab '(1)' IF AbsValue? MoveXY ELSE MoveX '/' MoveY '/' END CRCOff Get$ EOL END RETURN
StdLine: {enables CRC on first call, .70} TurnOnCRC IF Decelerate? IF RoomToDecel? DecelMove1 SeqLab '(1)' DoAbsOrInc GetPlane CheckMove CRCOnC FeedRateC Get$ EOL DecelMove2 END SeqLab '(1)' DoAbsOrInc GetPlane CheckMove CRCOnC DecelFeed Get$ EOL ELSE IF XMove? OR YMove? OR ZMove? SeqLab '(1)' DoAbsOrInc GetPlane CheckMove CRCOnC FeedRateC Get$ EOL END END RETURN
ToolPath: ResetCRCNum {.72} EACHFeat IF PointFeat? IF AutoCycle? IF NOT FirstFeat? SeqLab '(0)' MoveSXYC Get$ EOL END SeqLab '(7)FÅ‚' Tag# 'L²' Tag# Get$ EOL CalcACSRXY {calc tool position after sub call, CalcAutoCycleStatusRecordXY} ELSE IF NOT FirstFeat? SeqLab '(0)' DoDrillAbsOrInc CheckDrillMove Get$ EOL END END ELSE IF RapidFeat? IF CutterRadiusCompensation? AND Flag?('1') IF XMove? OR YMove? OR ZMove? SeqLab '(1)' DoAbsOrInc GetPlane CheckMove RapidFC Get$ EOL END ELSE IF XMove? OR YMove? OR ZMove? SeqLab '(0)' DoAbsOrInc 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)' DoAbsOrInc 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 RestoreAbsOrInc RETURN
WFOStuff: { NOTE: This Post Processor doesn't support incremental output. } RETURN
AutoCycCutSub2: {part 2} ToolPath SetAbs IF Repeats? AND FeedConnect? AND ZshiftOnly? ELSE IF FIFO? SeqLab '(1)' ZCP2 FeedEnt Get$ EOL ELSE SeqLab '(0)' ZCP2 Rapid Get$ EOL END 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
G92Sub: SubWarning StdSub SeqLab IF FeedConnect? '(1)' ELSE '(0)' END StrtPos Get$ EOL Milling FinishSub1 FinishSubG92 RETURN
ZonlyRepAutoCycle: AutoCycPat {write pattern moves and main calls} StartSub TagUp TagInc EachCycle SetSRXYtoEP IF FeedConnect? IF NOT FirstCycle? IF SPXMove? OR SPYMove? IF SPXMove? AND NOT SPYMove? SeqLab '(1)' SetInc 'X' StartPosX# '/' Get$ EOL SeqLab '(1)' SetAbs ELSE IF SPYMove? and NOT SPXMove? SeqLab '(1)' SetInc 'Y' StartPosY# '/' Get$ EOL SeqLab '(1)' SetAbs ELSE SeqLab '(1)' SetInc 'X' StartPosX# '/' 'Y' StartPosY# '/' Get$ EOL SeqLab '(1)' SetAbs END END ELSE SeqLab '(1)' END ELSE SeqLab '(1)' END ZInPlusInc FeedEnt Get$ EOL ELSE IF NOT FirstCycle? IF SPXMove? OR SPYMove? IF SPXMove? AND NOT SPYMove? SeqLab '(0)' SetInc 'X' StartPosX# '/' RapidC Get$ EOL ELSE IF SPYMove? and NOT SPXMove? SeqLab '(0)' SetInc 'Y' StartPosY# '/' RapidC Get$ EOL ELSE SeqLab '(0)' SetInc 'X' StartPosX# '/' 'Y' StartPosY# '/' RapidC Get$ EOL END END IF FeedEntry? SeqLab '(0)' SetAbs ZCP2PlusInc Get$ EOL SeqLab '(1)' ZInPlusInc FeedEnt Get$ EOL ELSE SeqLab '(0)' SetAbs ZInPlusInc Get$ EOL END ELSE IF FeedEntry? SeqLab '(0)' ZCP2PlusInc Rapid Get$ EOL SeqLab '(1)' ZInPlusInc FeedEnt Get$ EOL ELSE SeqLab '(0)' ZInPlusInc Get$ EOL END END ELSE IF FeedEntry? SeqLab '(1)' ZInPlusInc FeedEnt Get$ EOL ELSE SeqLab '(0)' ZInPlusInc Rapid Get$ EOL END 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} IF FIFO? {.81} SeqLab '(1)' ZCP2 FeedEnt Get$ EOL {.69} ELSE SeqLab '(0)' ZCP2 Get$ EOL {.69} END END {.69} TagDown '<' Tag# EOL CloseSub {Element shift, not pattern} RETURN
ZonlyRep: EachCycle IF NOT FirstCycle? SeqLab IF FeedConnect? {.71.2, added Connect} '(1)' ELSE '(0)' END StrtPos Get$ EOL 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 TrackZNO# FIRST SPZ# ToolPath FinishSub1 '<' Tag# EOL TagDown CloseSub RETURN
CheckPass: IF AutoCycle? {use the correct StrtPos} SetPass2 ELSE SetPass1 END RETURN
CheckCoolantOn: { For SameTool only } IF NOT CoolOff? AND LAST CoolOff? SeqLab '(9)' CoolOn Get$ EOL 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 ReverseXZArcs SetFlood UseSeparateSubCalls SetMaxSeparateSubCalls('50') SetMaxRPM('10000') SetMaxFeed('3000') SetAbs SetFlagF('2') { Milling ZShiftOnly SepSubs } 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) 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 *********************} Plane { no output } IF FirstOperation? 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 IN SPINDLE' Get$ EOL END END IF MultipleParts? AND WorkFixtureOffsets? '( This Procesor does not Support Work Fixture Offsets! )' EOL '( The Multiple Parts are being processed with the Equally Spaced )' EOL '( Offsets values! I suggest you make sure that they are set properly! )' EOL END OpenSub RestoreScale IF MultipleParts? AND AllToolsOnePart? OpenMP END SeqLab '(9)' ToolOfst SpinOn Get$ EOL DoOpComments DoPostScript IF MultipleParts? AND OneToolAllParts? AND FullUp? OpenMP END CheckPass SeqLab '(0)' StrtPos ZCP1 Rapid 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)' ToolOfst ToolChng Get$ EOL SeqLab '(9)' SpinOn Get$ EOL DoOpComments DoPostScript IF MultipleParts? AND OneToolAllParts? AND FullUp? OpenMP END CheckPass SeqLab '(0)' StrtPos ZCP1 Rapid 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)' SpinOn 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? SetFlag('2') { Milling ZShiftOnly SepSubs } ZonlyRep SetFlagF('2') 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 '(0)' ZCP3 Get$ EOL ELSE IF FIFO? {.81} SeqLab '(1)' ZCP3 FeedEntC Get$ EOL ELSE SeqLab '(0)' ZCP3 RapidC Get$ EOL END END 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 IF RigidTap? 'F' DIV# Num#('1') FeedTapIPR#('1') 'G8' ELSE FeedEnt Cycle END Get$ EOL IF CallMasterOp? SeqLab '(7)FÅ‚' CallMasterNum# 'L²' CallMasterNum# Get$ EOL SkipToLastFeat ELSE TrackZNO# FIRST SPZ# IF MasterOp? SetFlag('2') {std sep sub Zreps in effect} TagUp NewMasterTag SeqLab '(7)FÅ‚' Tag# 'L²' Tag# Get$ EOL StartSub ToolPath '<' Tag# EOL TagDown CloseSub SetFlagF('2') {not std sep sub Zreps in effect} ELSE ToolPath END END SetDrillEndOpZ 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 IF ProgStop? SeqLab '(9)' 'M0' Get$ EOL END IF MultipleParts? AND AllToolsOnePart? CloseMP END SeqLab '(9)' PreTool EOP Get$ EOL CloseSub Post2 {organize Subs into one program} '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