{09/29/89 Modified from Dynapath System 20M M074.40 for Pacific Packaging - DWB Created 3 new subroutines to handle special Cutter Radius Compensation formatting. They are called StartCCR1, StartCCR2 and EndCCR. The control requires a 'G45' if the first or last move is linear and an 'A' address to specify the distance from start point to next point. If the first or last move is an arc, then the control requires a 'G47' and an 'A' address to specify the radius of the arc. Added 'G04 F#.#0;0' format for all dwell occurances. The customer requested an output for handling tool changes. The output calls up their own subprogram which is stored as program#4. So to handle the case where they select multiple parts, or repeats, I called 'NewProg' 4 times, (to increment the program#), during the first operation to ensure that the next program# will be higher than their tool change subroutine. Since the control doesn't use work fixture offsets, I removed the boolean for such. This prog has all the added routines that were found in Fanuc 6M M001.60}
{1/11/90 Updated: Deckel FP2NC Dialog 4 M248.61 to .69 format. Jim Radcliffe}
{1/11/90 Copied & modified: Deckel FP2NC Dialog 4 M248.69 For: Specialty Silicone Changed CRC ofset label to a D. Add space between codes. Changed sub format to Local Subs instead of Macro Sub. Enabled SepSubs. Modified Start Up & End blocks per I/O manual 4.86-/511/874 E, page 39. NOTE: the $ sign in the start block indicates inch input. Deleted the line 'N0L0N2' from beginning of prog. Deleted the calls to macro sub number 4. Jim Radcliffe}
{2/28/90 Copied & modified: Deckel Dialog 4 (SS) M276.69 For: Specialty Silicone 1 trailing decimal place for feeds. Clear Plane values in MachSpec. Different Home & ZCP1 stuff, no 'G52' Rapids are not modal. Added MoveCCR & FeedCCR subs 4 decimal places for axis moves Modifications to drilling. Jim Radcliffe}
{4/9/90 Copied & modified: Deckel Dialog 4 (SS) M276.69.6 Changed to CP1LessCP2# command in drilling Jim Radcliffe}
{4/25/90, Updated: Deckel Dialog 4 (SS) M276.69.7 to .71.2 foramt, JR} {NOTE: the A for CRC AutoCycles still needs to addressed correctly to be fully .70}
{4/26/90 Copied & modified: Deckel Dialog 4 (SS) M276.71.2 For: Pacific Packaginq Machine: Deckel Dialog 3 Arcs need all axis & G codes, all G0 must also be defined otherwise G1 is implied. Deleted G17's Modified subs for drilling, 1 line subs only. All Z moves nust have a ToolOffset Trailing Zeros with + or - sign Two digit G M T & D codes. Change Subroutines to Program Loops. NOTE: this should be a good example for machines that do looping only and not subs. Reformated between tool stuff. Jim Radcliffe}
{7/24/90, Replaced all occurances of SetSRXYZero with SetSRXYtoSP, DWB}
{4/03/91 Modified: Deckel Dialog 3 M247.72 For: Gibbs & Associates Updated to Version 4.0 per Fanuc 6M M001.80 Format. DWB}
{2/21/95 Copied & modified: Deckel Dialog 3 M247.79 For: Rick Meide / Remmele Control: Deckel Dialog 2 Deleted ProgNum line from beginning of program. Added '0' after P in ProgNum comment line. Modified ZonlyRep sub so ToolOfst is before the FeedEnt command on the same line. Moved FeedRateC from before to after Move on same line. Changed literal L1 to L01 for specifying 1 repeat of a loop. Changed RepsLess1 & PartsLess1 to RepsLess1# & PartsLess1# and formated Changed OfstOff command to DoOfstOff to output Z0 D99. This causes a move to Z0 with the D99 offset that the operator will enter a usfull number for the program as to be equivalant to a FullUp for the tool. Added CoolOff to TCZ line. Corrected IF ZMove? arguments. They must be satisfied BEFORE the move command is called! Modified Cutter Radius Compensation. Deleted M70 commands. No Z motion while cutter comp is active. Suppress activation of CRC until the first linear non-Z move. Deleted StartCCR1 and FeedCCR subs and calls. Not using G45/G47 CRC activation commands due to the above mentioned suppression. Deleted MoveCCR sub. Changed its calles to MoveXYZC. Deleted StartCCR2. Moved its info to StdLine. Using Flag('1') to test for CRC avtivation. Deleted EndCCR sub. Changed its call to SetFlagF('1'). Only need to output G40 and reset the flag! Changed M61 (exact stop mode) to M62 (continuas contour mode) Corrected Drilling Depths, a long established "bug". Changed Drilling Dwell command to V. Jim Radcliffe}
{3/10/95 Changed DoOfstOff was outputting D99 instead of D+99. Changed to unconditional CRCOn CRCOffset commands. Added TagInit command, InitProg did not seem to be doing it! Unconditional MoveX and MoveY when turning CRCOn. Jim Radcliffe}
{3/16/95 Added ZCP1 to Drilling RetractToCP1 argument before GetCycle IF SameTool and to previous ZCP3. Jim Radcliffe}
{5/23/95 Initial: Deckel Dialog 2 M778.80.2 Created: Deckel Dialog 2 M778.80.3 Comment: Per instructions from Rudy at Remmele Added G64, turn off exact stop mode, to beginning of program to get smooth contours to. Deleted SpinOff at end of tools. Changed M0 to M00 Moved DoOpComments and DoPostScript to after OpToolID line. Cleaned up: Moved AbsOrInc at beginning of program to before MPATOP Changed SeqLabC to SeqLab on OpToolID line. Added space before M00 at end of program. Suppressed Dwell output on Peck and Tap drilling cycles. Jim Radcliffe}
{ Format: Deckel Dialog 2 Ver M778.80.4 1/5/95 For: Remmele Added G64 to non-Drilling StrtPos lines Added Rapid to follow all looping commands (Work around bug in control) Removed DoOfstOff for ProgStop? cases Moved DoOfstOff line to immediately precede the OpToolID and EOP TH}
{ Format: Deckel Dialog 2 Ver M778.80.5 1/23/95 For: Remmele Added Rapid to FinishSubG92 and CloseMP TH}
{ Format: Deckel Dialog 2 Ver M778.80.6 2/6/95 For: Remmele Removed IF NOT LAST ProgStop from SeqLabC Rapid DoOfstOff CoolOff EOL in NewTool? Added SetStatusOff and SetStatusOn in ZOnlyRep to fix multiple parts positioning TH}
{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
DoSubComment: IF UseComments? AND SubComment? '( SUB NUMBER: ' Tag# ' )' 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
PSInit: {reset flags} RotateF RETURN
PSStuff: IF FourthCW? FORMAT(FourthDegree#,2) SeqLabC ' A' FourthDegree# EOL FourthCWF {reset flag} END IF FourthCCW? FORMAT(FourthDegree#,3) SeqLabC ' A' FourthDegree# EOL FourthCCWF {reset flag} END IF FifthCW? FORMAT(FifthDegree#,2) SeqLabC ' B' FifthDegree# EOL FifthCWF {reset flag} END IF FifthCCW? FORMAT(FifthDegree#,3) SeqLabC ' B' FifthDegree# EOL FifthCCWF {reset flag} END RETURN
FormatArc: IF ArcCW? CWArc ELSE CCWArc END IF XYPlane? IF ZMove? MoveX MoveY MoveZ ToolOfst ArcIJ ELSE MoveX MoveY ArcIJ END ELSE IF XZPlane? MoveX MoveYC MoveZ ToolOfst ArcIJ ELSE MoveXC MoveY MoveZ ToolOfst ArcIJ END END RETURN
StdLine: IF CutterRadiusCompensation? AND NOT Flag?('1') SetFlag('1') SeqLabC FeedRateC EOL SeqLabC CRCOn CRCOfst MoveX MoveY Feed ' G64 M62' EOL ELSE IF Decelerate? IF RoomToDecel? DecelMove1 SeqLabC FeedC MoveXYZC FeedRateC EOL DecelMove2 END SeqLabC FeedC MoveXYZC DecelFeed EOL ELSE IF XMove? OR YMove? OR ZMove? SeqLabC FeedC MoveXYZC FeedRateC EOL END END END RETURN
ToolPath: EACHFeat IF PointFeat? IF NOT FirstFeat? IF Drilling? SeqLabC ' U' Tag# Rapid MoveSXYC EOL ELSE IF AutoCycle? SeqLabC Rapid MoveSXYC EOL SeqLabC ' L01' ' NÅ‚' Tag# ' N²' Tag# Rapid EOL END END END ELSE IF RapidFeat? IF ZMove? SeqLabC Rapid MoveXYZC ToolOfst EOL ELSE SeqLabC Rapid MoveXYZC EOL END ELSE IF LineFeat? IF ZMove? {skips CRCOn until first non-Z move line, outputs the tool offset as needed} SeqLabC FeedC MoveXYZC ToolOfst FeedRateC EOL ELSE StdLine {enables CRC on first call} END ELSE IF ArcFeat? EACHQuadrant IF LastQuadrant? AND Decelerate? IF RoomToDecel? DecelMove1 SeqLabC FormatArc ArcFeedC EOL DecelMove2 END SeqLabC FormatArc DecelFeed EOL ELSE SeqLabC FormatArc ArcFeedC EOL END NEXTQuadrant END END END END NEXTFeat RETURN
{Start of executable Prog **************************************************}
{setup and initializations} InitProg TagInit ReverseXZArcs UseSeparateSubCalls SetMaxSeparateSubCalls ('50') {?} SetFlood SetMaxRPM('6300') SetMaxFeed('500') {?} SetFlagF('1') { CRCOff } 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 ' 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 ' ToolChangeZ(10), TCZ(10) -' EOL ' The the value you specify in parantheses will be used' EOL ' for all following operations Z tool change positions.' EOL ' Command is Modal and 10.0000 is the default.' EOL END EachOp IF FirstOperation? EOR EOL '($P0' ProgNum '/0000' ')' EOL IF ToolChangeAtHome? SetHome END IF UseComments? IF ProgramNameComment? '( PROGRAM: ' ProgramName$ ' )' EOL END IF ProgramComment? '( ' ProgramComment$ ' )' EOL END IF FormatNameComment? '( FORMAT: ' FormatName$ ' )' EOL END IF TimeComment? '( ' Date$ ' AT ' Time$ ' )' EOL END IF MovesComment? '( OUTPUT IN ' MoveType$ ' )' EOL END IF PartsComment? '( PARTS PROGRAMMED: ' Parts# ' )' EOL END IF StartToolComment? '( FIRST TOOL NOT IN SPINDLE )' EOL END END OpenSub RestoreScale SeqLabC AbsOrInc EOL SeqLabC ' G64' EOL IF MultipleParts? AND AllToolsOnePart? OpenMP END Plane {no output} SeqLab OpToolID EOL DoOpComments DoPostScript IF MultipleParts? AND OneToolAllParts? AND FullUp? OpenMP END CheckPass SeqLabC Rapid StrtPos GetSpindle CoolOn IF NOT Drilling? ' G64' END EOL SeqLabC Rapid ZCP1 ToolOfst EOL IF MultipleParts? AND OneToolAllParts? AND ExitClearancePlane? OpenMP SeqLabC Rapid StrtPos 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 ToolChangeAtHome? SeqLabC Rapid Home EOL END IF LAST ProgStop? SeqLabC ' M00' EOL ELSE IF OptionalStops? SeqLabC ProgStop EOL END END
{Start new Operation}
Plane {no output} SeqLabC Rapid DoOfstOff CoolOff EOL SeqLab OpToolID EOL DoOpComments DoPostScript IF MultipleParts? AND OneToolAllParts? AND FullUp? OpenMP END CheckPass SeqLabC Rapid StrtPos GetSpindle CoolOn IF NOT Drilling? ' G64' END EOL SeqLabC Rapid ZCP1 ToolOfst EOL IF MultipleParts? AND OneToolAllParts? AND ExitClearancePlane? OpenMP SeqLabC Rapid StrtPos EOL END ELSE IF SameTool? DoEndOpPS IF LAST ProgStop? SeqLabC ' M00' EOL
{Start new Operation}
GetStartOfSameTool SeqLabC Rapid StrtPos GetSpindle CoolOn IF NOT Drilling? ' G64' END EOL SeqLabC Rapid ZCP1 ToolOfst EOL ELSE IF CoolOff? AND LAST NOT CoolOff? SeqLabC CoolOff EOL END IF NewToolOffset? SeqLabC Rapid DoOfstOff EOL
{Start new Operation}
GetStartOfSameTool SeqLabC Rapid StrtPos GetSpindle CoolOn IF NOT Drilling? ' G64' END EOL SeqLabC Rapid ZCP1 ToolOfst EOL ELSE
{Start new Operation}
GetStartOfSameTool SeqLabC Rapid StrtPos GetSpindle CoolOn IF NOT Drilling? ' G64' END EOL END IF NOT CoolOff? AND LAST CoolOff? SeqLabC CoolOn EOL END END END END END IF Milling? SeqLabC Rapid ZCP2 ToolOfst EOL IF Repeats? 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 SeqLabC Rapid ZCP3 ToolOfst EOL ELSE IF Drilling? IF Repeats? TagUp TagInc '>' Tag# EOL SeqLab Rapid StrtPos EOL END IF RetractToCP1? IF SameTool? AND NotEqual? LAST ClearancePlane3# ClearancePlane1# SeqLabC Rapid ZCP1 ToolOfst EOL ELSE {we are already at CP1} END ELSE SeqLabC Rapid ZCP2 ToolOfst EOL END GetCycle TagUp TagInc OpenSub {put the cycle in a subroutine block} { ZDepth needs to be incremental from ZCP2 } { ZDepth outputs incorrectly when in incremental and RetractToCP1 } { Using calculation to output correct Z value } 'U' Tag# Cycle FeedEnt GetSpindle ' Z' SUB# ZDepth# ClearancePlane2# IF Peck? ' Z' Peck# IF PeckChipBreaker? Retract ELSE ' Z' Retract# END ELSE Dwell END IF RetractToCP1? ' Z' CP1LessCP2# {inc value to CP1 from CP2} END EOL CloseSub SeqLabC ' U' Tag# Rapid StrtPos EOL ToolPath TagDown IF Repeats? SeqLab Preset ShiftRC EOL '<' Tag# EOL SeqLabC RepLab RepsLess1 ' NÅ‚' Tag# ' N²' Tag# Rapid EOL SeqLabC Preset UnshftRC EOL TagDown END SeqLabC Rapid ZCP3 ToolOfst EOL END END NEXTOp IF MultipleParts? AND OneToolAllParts? AND ExitClearancePlane? CloseMP END IF MultipleParts? AND OneToolAllParts? AND FullUp? CloseMP END DoEndOpPS IF FIRST ToolChangeAtHome? SeqLabC Rapid FirstHome EOL END IF ProgStop? SeqLabC ' M00' EOL END IF MultipleParts? AND AllToolsOnePart? CloseMP END SeqLabC Rapid DoOfstOff CoolOff EOL SeqLabC EOP EOL Post Close ReTag ReOpen IF UseComments? SetScale('1') IF FileBytesComment? '( FILE LENGTH: ' FileBytes# ' CHARACTERS )' EOL END IF FileFeetComment? '( FILE LENGTH: ' FileFeet# ' FEET )' EOL END IF FileMetersComment? '( FILE LENGTH: ' FileMeters# ' METERS )' EOL END END '?' EOL '0000' EOL Close