{9/22/95, Updated Dynapath Delta 10 M596.81.2 to .85 format per Dynapath 10M M078.85, JR}
{11/2/95 Modified: Dynapath Delta 10 M596.85 For: Gibbs & Associates Versions: ncCad 4.33.01/ncCAM 4.33.01/ncPost 4.33.08/Catalyst v2.28.04/Compost 4.21.33/1.0a Various necessary minor changes, too numerous to list due to time constraints. DWB}
{3/5/96 Initial: Dynapath Delta 10 M596.85.1 Created: Dynapath Delta 50 M000.85 ForUser: CIM Solutions / Ottawa Gage Inc Control: Dynapath Delta 50 Machine: Tree 1050 Develop: ComPost 4.21.34, Catalyst68K v3.02.02C Comment: New Processor per marked up readouts and conversation with Kirk Ferrin Summary: Added Work Fixture Offsets. Deleted PreTool. Deleted Tool Offset calls, they are not needed, they are called with the tool. Added RigidTap Moved SetFlag('4') to StartSub sub as ALL sub output goes thru this routine! 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
Get$: { For conversational output } IF NOT EmptyLine? '$' END RETURN
TurnCRCOn: IF CutterRadiusCompensation? AND NOT Flag?('2') IF NOT LastFeat? AND NOT ZMove? SetFlag('2') SetInc SeqLab '(1)' MoveSX '/' MoveSY '/' CRCOff Get$ EOL IF NOT AutoCycle? SetAbs END END END RETURN
TurnCRCOff: IF CutterRadiusCompensation? AND Flag?('2') SetFlagF('2') SetInc SeqLab '(1)' MoveX '/' MoveY '/' CRCOff Get$ EOL IF NOT AutoCycle? SetAbs END END RETURN
DoSubComment: IF UseComments? AND SubComment? SeqLab '(T) SUB NUMBER ' Tag# 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 NOT SameTool? IF ToolTypeComment? SeqLab '(T) TOOL# ' Tool# ' ' ToolDiameter# ' ' ToolType$ Get$ EOL END IF ToolComment? SeqLab '(T) ' ToolComment$ Get$ EOL END END RestoreScale END RETURN
FinishSub1: {part 1} IF NOT FeedConnect? SeqLab IF AutoCycle? '(0)' ZCP3 ELSE IF FIFO? {.81} '(1)' ZCP3 FeedEntC ELSE '(0)' ZCP3 END END Get$ EOL END RETURN
DoAbsOrInc: IF Flag?('1') { AbsoluteMoves? = TRUE } IF ZMove? AND AbsValue? SetInc ELSE IF NOT ZMove? AND NOT AbsValue? SetAbs END END END RETURN
DoDrillAbsOrInc: IF Flag?('1') { AbsoluteMoves? = TRUE } IF SPZMove? AND AbsValue? SetInc ELSE IF NOT SPZMove? AND NOT AbsValue? SetAbs END END END RETURN
RestoreAbsOrInc: IF Flag?('1') AND NOT AbsValue? { AbsoluteMoves? = TRUE } SetAbs 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 Drilling? IF Flag?('1') AND NOT AbsValue? { AbsoluteMoves? = TRUE } IF XMove? MoveSX '/' END IF YMove? MoveSY '/' END IF ZMove? MoveSZ '/' {.80.01} END ELSE MoveSXYZC {.80.01} END ELSE IF AutoCycle? { Implies Incremental } IF XMove? MoveX '/' END IF YMove? MoveY '/' END IF ZMove? MoveZ '/' END ELSE IF Flag?('1') AND NOT AbsValue? { AbsoluteMoves? = TRUE } IF XMove? MoveX '/' END IF YMove? MoveY '/' END IF ZMove? MoveZ '/' END ELSE MoveXYZC END END END RETURN
FormatArc: DoAbsOrInc GetPlane CheckMove IF AutoCycle? ArcI '/' ArcJ '/' ELSE IF Flag?('1') AND NOT AbsValue? { AbsoluteMoves? = TRUE } ArcI '/' ArcJ '/' ELSE ArcIJ END END IF ArcCW? CWArc ELSE CCWArc END RETURN
ckCRC: IF CutterRadiusCompensation? AND Flag?('2') IF NOT LastFeat? AND NOT ZMove? CRCOnC END END RETURN
ToolPath: 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 CheckMove Get$ EOL END END ELSE IF RapidFeat? IF XMove? OR YMove? OR ZMove? TurnCRCOn IF CutterRadiusCompensation? AND Flag?('2') SeqLab '(1)' FormatLine RapidFC Get$ EOL ELSE SeqLab '(0)' FormatLine Get$ EOL END END ELSE IF LineFeat? IF XMove? OR YMove? OR ZMove? TurnCRCOn IF Decelerate? IF RoomToDecel? DecelMove1 SeqLab '(1)' FormatLine FeedRateC Get$ EOL DecelMove2 END SeqLab '(1)' FormatLine DecelFeed Get$ EOL ELSE SeqLab '(1)' FormatLine FeedRateC Get$ 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 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? { Exit Length Feature } TurnCRCOff {.70} END END NEXTFeat RestoreAbsOrInc RETURN
WFOStuff: IF NewWFO? IF MultipleParts? EOL '*** WARNING *** DO NOT USE NEWWFO() WITH NCPOST MULTIPLE PARTS' EOL ELSE 'E' NewWFO# END ELSE IF NOT SameTool? IF NeedWFO1? 'E' NewWFO# END END END RETURN
AutoCycCutSub2: {part 2} ToolPath SetAbs IF Repeats? AND FeedConnect? AND ZshiftOnly? {.69 removed RapidC} {.71.2 removed CRCOffC, gets turned off in ToolPath} ELSE IF FIFO? {.81} SeqLab '(1)' ZCP2 FeedEntC Get$ EOL ELSE SeqLab '(0)' ZCP2 Get$ EOL END END '<' Tag# EOL CloseSub SetSRSubXY {restore SR to 1st position value} SetSRSubMove RETURN
AutoCycPat: SetPass2 {position pattern} ToolPath {call after TagInc 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 SetAbs IF FeedConnect? '(1)' ELSE '(0)' END SeqLab StrtPos Get$ EOL Milling FinishSub1 FinishSubG92 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} 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} TagDown RETURN
ZonlyRep: EachCycle IF NOT FirstCycle? IF FeedConnect? '(1)' ELSE '(0)' END SeqLab 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
SkipToLastFeat: EachFeat IF LastFeat? TrackXNO# SPX# TrackYNO# SPY# END NextFeat RETURN
SetDrillEndOpZ: IF RetractToCP1? TrackZNO# ClearancePlane1# ELSE TrackZNO# ClearancePlane2# END RETURN
GetStartOfSameTool: Plane { no output } DoOpComments DoPostScript CheckPass RETURN
GetCoolOn: IF NOT Flag?('3') IF NOT CoolOff? SeqLab '(9)' CoolOn Get$ EOL SetFlag('3') END END RETURN
GetCoolOff: IF Flag?('3') SeqLab '(9)' CoolOff Get$ EOL SetFlagF('3') END RETURN
{Start of executable Prog **************************************************}
{setup and initializations} InitProg InitWFONum TagInit SetAbs ReverseXZArcs SetFlood UseSeparateSubCalls SetMaxSeparateSubCalls('50') SetMaxRPM('10000') SetMaxFeed('500') SetFlagF('1') { Milling ZShiftOnly SepSubs } SetFlagF('2') { CutterRadiusCompensation } SetFlagF('3') { Coolant control, coolant is off } SetFlagF('4') { SubPrograms require 2nd M30 at end } 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 *********************} IF FirstOperation? '(' Program# '94)' 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 RestoreScale IF MultipleParts? AND AllToolsOnePart? OpenMP END Plane { no output } DoOpComments SeqLab '(9)' ToolChng OpToolID Get$ EOL SeqLab '(9)' SpinOn Speed WFOStuff Get$ EOL DoPostScript IF MultipleParts? AND OneToolAllParts? AND FullUp? OpenMP END GetCoolOn 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 GetCoolOff IF MultipleParts? AND OneToolAllParts? AND FullUp? CloseMP END DoEndOpPS IF ToolChangeAtHome? SeqLab '(0)' Home Get$ EOL END IF LAST ProgStop? SeqLab '(9)' 'M0' Get$ EOL ELSE IF OptionalStops? SeqLab '(9)' ProgStop Get$ EOL END END
{Start new Operation}
Plane { no output } DoOpComments SeqLab '(9)' ToolChng OpToolID Get$ EOL SeqLab '(9)' SpinOn Speed WFOStuff Get$ EOL DoPostScript IF MultipleParts? AND OneToolAllParts? AND FullUp? OpenMP END GetCoolOn 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? GetCoolOff SeqLab '(9)' 'M0' Get$ EOL
{Start new Operation}
GetStartOfSameTool SeqLab '(9)' SpinOn Speed WFOStuff Get$ EOL SeqLab '(0)' StrtPos ZCP1 Rapid Get$ EOL ELSE IF CoolOff? AND LAST NOT CoolOff? GetCoolOff END IF NewToolOffset?
GetStartOfSameTool SeqLab IF NotEqual? SpeedRPM# LAST SpeedRPM# '(9)' Speed WFOStuff ELSE IF NewWFO? '(9)' WFOStuff END END Get$ EOL SeqLab '(0)' StrtPos Rapid Get$ EOL END END END END END {common point for all operations} IF Milling? IF NOT RIRO? {suppress ZCP2 if the next Z move is a rapid to depth} { the following is the same as ZCP2C } IF SameTool? IF NewToolOffset? OR LAST ProgStop? {we are currently at this ops ZCP1} IF NotEqual? ClearancePlane1# ClearancePlane2# SeqLab '(0)' ZCP2 Get$ EOL END ELSE {we are currently last ops ZCP3} IF NotEqual? LAST ClearancePlane3# ClearancePlane2# SeqLab '(0)' ZCP2 Get$ EOL END END ELSE {we are currently at this ops ZCP1} IF NotEqual? ClearancePlane1# ClearancePlane2# SeqLab '(0)' ZCP2 Get$ EOL END END END 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('1') { Milling ZShiftOnly SepSubs } ZonlyRep SetFlagF('1') 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 LoadFeat Num#('0') Num#('0') ClearancePlane3# IF ZMove? IF AutoCycle? SeqLab '(0)' ZCP3 Get$ EOL ELSE IF FIFO? {.81} SeqLab '(1)' ZCP3 FeedEntC Get$ EOL ELSE SeqLab '(0)' ZCP3 Get$ EOL END END END ELSE IF Drilling? IF Repeats? TagUp TagInc StdSub SetAbs SeqLab '(0)' StrtPos Get$ EOL END IF RetractToCP1? LoadFeat Num#('0') Num#('0') ClearancePlane1# ELSE LoadFeat Num#('0') Num#('0') ClearancePlane2# END IF ZMove? SeqLab '(0)' MoveZ Get$ EOL END GetCycle SeqLab '(0)' StrtPos RLevel ZDepth IF Tap? AND NOT RigidTap? 'L.1' ELSE Dwell END Peck IF PeckChipBreaker? '/Q' Retract# END IF RigidTap? 'F' DIV# SpeedRPM# FeedEntry# '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('1') {std sep sub Zreps in effect} TagUp NewMasterTag SeqLab '(7)FÅ‚' Tag# 'L²' Tag# Get$ EOL StartSub ToolPath '<' Tag# EOL TagDown CloseSub SetFlagF('1') {not std sep sub Zreps in effect} ELSE ToolPath END END SetDrillEndOpZ SeqLab '(0)' ZCP3 Rapid Get$ 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 GetCoolOff 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)' EOP Get$ EOL CloseSub Post2 {organize Subs into one program} IF Flag?('4') { SubPrograms exist } SetFlagF('4') SeqLab '(9)M2' Get$ EOL { This is required a second time, at end of all subs } END '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