Made changes to ZOnlyRep and FinishSub1 subs to properly handle Feed connects and clearance moves. }
{11/8/94 Modified: Fanuc 6M (FW) B001.81.4 For: Gibbs & Associates Versions: Catalyst v2.14.12C/Compost 4.21.23 Changes made per Pete Jackson Charles reported a problem involving operations that do not change coordinate systems from previous operations. Added ClearCSOffset at NotSameToolWFO and SameToolWFO subs. DWB}
{ 12/01/94 B001.81.6 Changed FirstOp3 to call out A0B0 to move to the first CS. When possible, this should be changed to check the MDD and only call out the axes that make sense.
Added RecallWFO sub-routine to NotSameToolWFO and SameToolWFO to ouput the current fixture offset and A0B0. Added for easier restarts at the machine. Both are only called from NoMPs. When possible, this should be changed to check the MDD and only call out the axes that make sense. }
{ 12/02/94 Changed version number to .00 from .81 TH}
{ Format: Fanuc 6M (FW) B001.00.01 12/08/94 Added AAxisAvail? and BAxisAvail? checks to CSAngleA and CSAngleB subs Added WFO1 and A0B0 if AxisAvail to End2: TH}
{ Format: Fanuc 6M (FW) B001.00.01 12/09/94 Fixed RecalWFO to check AAxisAvail? and BAxisAvail? Cleaned up FirstOp3 to use new checks placed in CSAngleA and CSAngleB TH}
{ Format: Fanuc 6M (FW) B001.00.03 12/19/94 Added ClearCSOffset to OpenMP: CloseMP: and SubCSMP: Added if AChange? OR BChange? to home postition call-out in SameToolOp1 Started using Flag('3') to determine toggle between incrementing through MPs and decrementing through MPs Changed CloseMP to check Flag('3'). If true, the WFOs will increment from first to last. If false, the WFOs will decrement from last to first. Example: TRUE for 4 parts: G54P1, G54P2, G54P3, G54P4 FALSE for 4 parts: G54P4, G54P3, G54P2, G54P1 This is most useful for tombstone machining on rotary tables. With this method, the code will machine part1, rotate, part2, rotate, part3, rotate, part4, tool change, part4, part3, part2, part1, toolchange, etc. It minimizes the rotation and also stops the machine from "winding up". To do this a new sub was created called ToggleIncDecWFO. The flag is set to true in ProgStart and toggled inside CloseMP after running through the parts Replaced SetZRepInc and RestoreAbsOrInc with one sub called DoAbsOrInc. Any line with SetZRepInc now has DoAbsOrInc as the first command after the SeqC. TH}
{ Format: Fanuc 6M (FW) B001.00.04 1/10/95 NewToolOp3 now has an AbsOrInc on the line that calls out the Plane 'G80' CRCOff NewToolOp5 no longer has the AbsOrInc command NewToolOp5b has been created and has the AbsOrInc command Changed MP1ToollAllPfu to call NewToolOp5b Added AbsOrInc and Rapid to the FirstOperation? section of MP1ToollAllPXcp Added Rapid to the NewTool? section of MP1ToollAllPXcp Started using Flag ('4') to turn on Inc/Dec WFO's (See above). True means use Inc/Dec WFO's. MP1ToollAllPXcp, MP1ToollAllPFU, and MPallTools1P now output WFO if NOT WorkFixtureOffsets? TH}
{ Format: Fanuc 6M (FW) B001.00.05 1/13/95 Replaced TrackZNO# ZDepth# with TrackZNO# FIRST SPZ# in the drilling section Formatted TrackZNO# to #4 }
{ Format: Fanuc 6M (FW) B001.00.06 2/15/95 Fixed RecallWFO: to output correct WFO# if WFOCS TH}
{ Added ClearCSOffset to SubCSMP TH}
{ Format: Fanuc 6M (FW) B001.10 7/27/95 Added G52 style output for too many coordinate systems Updated to .10 format TH}
{1/17/96, Updated .10 to .11 version, MPK}
{2/26/96 Initial: Fanuc 6M (FW) B001.11 Created: Fanuc 6M (FW) B001.11.01 Develop: ComPost 4.21.34, Catalyst68K v3.02.02C Comment: Corrections to Processor. Corrected format of CSOffsetA# and CSOffsetB#. To correct multiple parts output: Added "OR Flag?('2')" to "IF WFOCS?" in "SubCSMP:". To Simplify prog subs and correct errors in MP1ToollAllPXcp: Changed FirstOp3a/NewToolOp5a to FirstOp4/NewToolOp6 Deleted NewToolOp5b sub and changed call to NewToolOp5 (they were identical!) Deleted OfstOn and Cool On from FirstOp3/NewToolOp5 Added calls to FirstOp4/NewToolOp6 after calls to FirstOp3/NewToolOp5. Changed StrtPos in MP1ToollAllPXcp to FirstOp3/NewToolOp5. To correct a literal number 2 from being output when processing multiple parts: Changed order of booleans from: IF WFOCS? OR Flag?('2') to: IF Flag?('2') OR WFOCS? Modified WFO Handling: Changes: Deleted RecallWFO sub. It was not used! Deleted NotSameToolWFO & SameToolWFO subs. Added WFOStuff sub. Changed all WFO calls in main loops to WFOStuff. Results: Changes do not effect Multiple Parts output. Correct WFO is output by default at the beginning of each tool. G52, if used, is output by default at the beginning of each tool. G52, without WFO, is output at SameTool only if there is a change. Jim Radcliffe}
{4/17/96 Initial: Fanuc 6M (FW) B001.11.01 Created: Fanuc 6M (FW) B001.12.01 Comment: Changed version number to reflect new identification scheme. Jim Radcliffe}
{6/14/96 Initial: Fanuc 6M (FW) B001.12.01 Created: Fanuc 6M (FW) B001.12.02 Comment: Modified CRC handling to reflect the way I do it and same as M001.89. Jim Radcliffe}
{6/17/96 Initial: Fanuc 6M (FW) B001.12.02 Created: Fanuc 16M Kuraki Cxxx.12 ForUser: Patriot Precision Products Control: Fanuc 16M Machine: Kuraki KBM-2000 Develop: ComPost 4.21.37, Catalyst68K v3.04.10.C Comment: New processor per sample readout from and conversation with Jeff Nelson. Fanuc 0M style subs W axis used for Drill Operations but set for all operations to fcilitate editing. Jim Radcliffe}
{2/24/97 Initial: Fanuc 16M Kuraki C123.12 Created: Fanuc 16M Kuraki C123.14 Develop: ComPost2 68K 1.0b11, Virtual Gibbs 3.23 Comment: Updated to .14 format per Fanuc 6M (PW) C001.14 Jim Radcliffe}
{8/21/97 Updated & Modified: Fanuc 16M Kuraki C123.14 Created: Fanuc 16M Kuraki C123.15 For: Patriot Precision Versions: Catalyst v3.35C/ComPost2 MSL 68K Changes made per Tim Murphy of Patriot Precision. Updated for Catalyst v3.35C per Fanuc 6M (PW) C001.15 Format. Corrected problem with StrtPos for MultipleParts OneToolAllParts ExitClearancePlane. Only concerns WFOCS and G52 style programs. Post was not outputting good position in Main Program Output for FirstOperation only. Problem was corrected by doing ClearCSOffset prior to StrtPos. Rewrote code at following subs: Added ClearCSOffset at CSG52 sub. Rewrote logic at G52Stuff sub. Corrected problem with CS related stuff not being output. Caused by only testing AAxisAvail. Added BAxisAvail test at DoCSComment sub. Added AAxisAvail test at DoCSWFOComment sub. Added BAxisAvail test at DoCSWFOComment sub. Changed name of OffsetComments sub to CSComments and rewrote logic. Modified handling of G52 style output for MultipleParts WorkFixtureOffsets. Only concerns AllToolsOnePart and OneToolAllParts FullUp situations. Reduces length of file by eliminating redundancy of G52 blocks. Moves G52 blocks from Main Program to Sub Programs. Extra unnecesary sub programs are combined into fewer subs. Returns to old M001 style of handling MultipleParts WorkFixtureOffsets. New style only needed for WFOCS style programs. Rewrote logic at DoCSG52Ops sub. Rewrote logic at OpenMP sub. Rewrote logic at DoCSWFOOps sub. Rewrote logic at CloseMP sub. Changed IF WorkFixtureOffsets? to IF WFOCS? at SubCSMP sub. Added Flag(5) to Suppress Redundant WFO for MultipleParts WorkFixtureOffsets programs. Only concerns OneToolAllParts ExitClearancePlane situations. NOTE: I believe there is a bug with ToolChanges. For WFOCS and G52 style programs, FirstHome command at End2 sub is outputting absolute, unshifted CS#1 value regardless of final CSGroup. Should be shifted value corresponding with active CSGroup consistant with NewToolOp2 sub. For MultiplePart EquallySpacedOffsets programs, Home command at NewToolOp2 sub and FirstHome command at End2 sub are outputting shifted values corresponding with active CSGroup. Should be absolute, unshifted CS#1 value. These bugs have not been verified and are only my observations while testing the Tutorial Part. Added support of W Spindle Axis for non-rigid Tooling. Z Table Axis is for when sturdy Tooling is used. Support occurs when AAxisAvail and BAxisAvail = TRUE, i.e. 5 Axis. W Spindle Axis is activated immediately following OfstOn block. G52 W Negated ZCP1 activates W Spindle Axis. All subsequent ZMoves are output as WMoves until deactivation. W Spindle Axis is deactivated immediately prior to OfstOff block. G52 W0 deactivates W Spindle Axis. Changed W to Z in Compost Canned Drill Cycle Dialog. Added following subs, called at various required places throughout Prog. WZCP1 WZCP2 WZCP2C WZCP3 WZCP3C WZIn MoveWZC MoveSWZC WZInPlusInc WZCP2PlusInc WZCP2PlusIncC WDrillCP WZDepth WAxisOff Added FORMAT#8, *####.####;0 at Prog Numeric Format Definitions. Used for Negated ClearancePlane1# for activation of W Spindle Axis at WZCP1 sub. Added following Number Commands to FORMAT#4 used in above mentioned subs. ClearancePlane2# ClearancePlane3# SPZ# EPZ# ZInPlusInc# ZCP2PlusInc#. Added AAxisAvail? AND BAxisAvail? condition at SubWarning for W Axis mode. NOTE: Post outputs literal 'W0' on StrtPos block even if W Spindle Axis in not Activated. Occurs at FirstOperation, NewTool and SameTool LAST ProgStop, NewToolOffset and ChangeCS. Modified support of AAxis for manual Operation. Post outputs G53 X0 ( Index A# Deg / G91 ) which causes Table to move to adjustable limit switch. Operator will edit value of X at machine and cause AAxis manual Indexer to Index Incremental amount. Post outputs CSOffsetA# for FirstOperation A# at CSAngleA sub. Post outputs SUB# LAST CSOffsetA# CSOffsetA# for all other Operations A# at CSAngleA sub. Added SUB# to FORMAT#2 at Prog Numeric Format Definitions. AAxis is forced for FirstOperation. AAxis is only output at those Operations where Index occurs. FirstOperation calls CSAngleA. NewTool and SameTool call CSAngleAC. Modified support of BAxis. Moved contents of DoIndex sub to CSAngleB sub. Sub contains M11, 4th Axis Unlock and M10, 4th Axis Lock with CSOffsetB# in between. BAxis is forced for FirstOperation. BAxis is only output at those Operations where Index occurs and at start of MultipleParts OneToolAllParts FullUp Subs, which occurs at NewTool. Added IF MultipleParts? AND OneToolAllParts? AND FullUp? AND NewTool? condition at CSAngleBC. FirstOperation calls CSAngleB. NewTool and SameTool call CSAngleBC. Deleted DoIndex and Index subs. Added support of Canned Rigid Tap Cycle. Moved GetCycle to top of IF Drilling at OpGuts. Added IF RigidTap? condition at OpGuts IF Drilling. Outputs SeqC ' M29' Speed EOL when TRUE. Other Customized Modifications: Modified SafeStart blocks at FirstOp1 and NewToolOp3. Added DoToolTypeComment sub. Called at end of SafeStart blocks at FirstOp1 and NewToolOp3. Deleted StrtPos from Canned Cycle block at OpGuts IF Drilling. Moved WZDepth to end of Canned Cycle block at OpGuts IF Drilling. Combined StrtPos ' W0' Speed SpinOn PreTool at FirstOp2 and NewToolOp4. Added FirstOp2a sub. Called from MP1ToollAllPXcp. Same as FirstOp2 except that CSAngleB is called and StrtPos block contains Rapid and no PreTool. Added NewToolOp4a sub. Called from MP1ToollAllPXcp. Same as NewToolOp4 except that CSAngleB is called and StrtPos block contains Rapid and no PreTool. Changed OfstOn to G43 ToolOfst ZCP1 at FirstOp3, NewToolOp2 and two places at SameToolOp3. Added AbsValue when needed at CloseMP. Basic Program Flow: G53 X0 (INDEX A#####.###;0 DEG./G91) { 5th AAxis Only; Incremental AAxis value } G17 G0 G40 G90 G54 ( ToolTypeComment ) { Unconditional G17 in FirstOperation only } M11 { 4th BAxis Only; Unlock } B#####.###;0 { 4th BAxis Only; Index } M10 { 4th BAxis Only; Lock } X Y W0 S M3/M4 T## G43 H Z M8 G52 W { 5th AAxis Only, W to be Negated ZCP1 value } {EntryMove, ToolPath & ExitMove} { ZMoves for 3rd and 4th Axis, WMoves for 5th AAxis } G91 G28 Z0 W0 M9 { *A Cancel ToolLengthOffset and move ZW to Machine Zero } G30 Y0 W0 { *B Move to ToolChng Position } M6 { Load PreTool } G28 Y0 W0 { *C Return to Machine Zero } G90 G52 W0 { 5th AAxis Only, 3rd and 4th Axis only outputs G90 } *A NewTool and SameTool LAST ProgStop and End of Prog ProgStop will output as G91 G28 Z0 W0 X0. *B NewTool ToolChangeAtHome and End of Prog FIRST ToolChangeAtHome will output as G30 X0 Y0 W0. *C End of Prog outputs as G28 X0 Y0 Z0 W0. DWB}
WZCP1: IF AAxisAvail? AND BAxisAvail? FORMAT(ClearancePlane1#,8) ' G52 W' ClearancePlane1# FORMAT(ClearancePlane1#,4) END RETURN
WZCP2: IF AAxisAvail? AND BAxisAvail? ' W' ClearancePlane2# ELSE ZCP2 END RETURN
WZCP2C: IF AAxisAvail? AND BAxisAvail? LoadFeat Num#('0') Num#('0') ClearancePlane2# IF ZMove? ' W' EPZ# END ELSE ZCP2C END RETURN
WZCP3: IF AAxisAvail? AND BAxisAvail? ' W' EPZ# ELSE ZCP3 END RETURN
WZCP3C: IF AAxisAvail? AND BAxisAvail? LoadFeat Num#('0') Num#('0') ClearancePlane3# IF ZMove? ' W' EPZ# END ELSE ZCP3C END RETURN
WZIn: IF AAxisAvail? AND BAxisAvail? ' W' FIRST SPZ# ELSE ZIn END RETURN
MoveWZC: IF AAxisAvail? AND BAxisAvail? IF ZMove? ' W' EPZ# END ELSE MoveZC END RETURN
MoveSWZC: IF AAxisAvail? AND BAxisAvail? IF SPZMove? ' W' SPZ# END ELSE MoveSZC END RETURN
WZInPlusInc: IF AAxisAvail? AND BAxisAvail? ' W' ZInPlusInc# ELSE ZInPlusInc END RETURN
WZCP2PlusInc: IF AAxisAvail? AND BAxisAvail? ' W' ZCP2PlusInc# ELSE ZCP2PlusInc END RETURN
WZCP2PlusIncC: IF AAxisAvail? AND BAxisAvail? LoadFeat Num#('0') Num#('0') ZCP2PlusInc# IF ZMove? ' W' EPZ# END ELSE ZCP2PlusIncC END RETURN
WDrillCP: IF AAxisAvail? AND BAxisAvail? IF RetractToCP1? LoadFeat Num#('0') Num#('0') ClearancePlane1# ELSE LoadFeat Num#('0') Num#('0') ClearancePlane2# END IF ZMove? ' W' EPZ# END ELSE DrillCP END RETURN
WZDepth: IF AAxisAvail? AND BAxisAvail? ' W' FIRST SPZ# ELSE ZDepth END RETURN
WAxisOff: IF AAxisAvail? AND BAxisAvail? ' G52 W0' END RETURN
{Prog Subroutines ****}
RestoreScale: IF Metric? {CAM file is in Metric, tools and tool path} SetScale('.03937007874') { change to English, this is an English post} END RETURN
WFOStuff: IF Flag?('2') IF NOT SameTool? IF WFOCS? CSWFO ELSE WFO END ELSE IF WFOCS? IF ChangeCS? IF MultipleParts? {MP ChangeCS is handled in SubCSMP and CloseMP} ELSE CSWFO END END END END END SetFlagF('2') RETURN
CSG52: IF FirstOperation? OR NewTool? OR ChangeCS? SeqC ' G52 X' CSOffsetX# ' Y' CSOffsetY# ' Z' CSOffsetZ# EOL END ClearCSOffset RETURN
G52Stuff: IF AAxisAvail? OR BAxisAvail? IF NOT WFOCS? IF MultipleParts? IF WorkFixtureOffsets? CSG52 END ELSE CSG52 END END END RETURN
DoSubComment: IF UseComments? AND SubComment? '( SUB NUMBER: ' Program# ' )' EOL END RETURN
DoCSComment: IF AAxisAvail? OR BAxisAvail? '( CS#' CS# ' - ' CSComment$ ' )' EOL END RETURN
DoCSWFOComment: IF AAxisAvail? OR BAxisAvail? IF FirstOperation? OR ChangeCS? '(' CSWFO ' = X' CSOffsetX# ' Y' CSOffsetY# ' Z' CSOffsetZ# ' )' EOL END ClearCSOffset END RETURN
CSComments: IF WFOCS? IF MultipleParts? IF OneToolAllParts? AND ExitClearancePlane? ClearCSOffset { Necessary for correct StrtPos in Main } END ELSE DoCSComment DoCSWFOComment END ELSE DoCSComment END RETURN
DoToolTypeComment: IF UseComments? SetScale('1') IF ToolTypeComment? ' ( ' ToolDiameter# ' ' ToolType$ ' )' END RestoreScale 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 FirstOperation? OR NewTool? IF ToolComment? '( ' ToolComment$ ' )' EOL END END RestoreScale END CSComments RETURN
CSAngleA: IF AAxisAvail? SeqC ' G53 X0 ( Index A' IF FirstOperation? CSOffsetA# ELSE SUB# LAST CSOffsetA# CSOffsetA# END ' Deg /' IncValue ' )' EOL END RETURN
CSAngleAC: IF AChange? CSAngleA END RETURN
CSAngleB: IF BAxisAvail? SeqC ' M11' EOL { Unlock 4th Axis } SeqC ' B' CSOffsetB# EOL SeqC ' M10' EOL { Lock 4th Axis } END RETURN
CSAngleBC: IF BChange? CSAngleB ELSE IF MultipleParts? AND OneToolAllParts? AND FullUp? AND NewTool? CSAngleB END END RETURN
SubWarning: IF NOT FeedConnect? IF AnyZshift? ' ' EOL IF AAxisAvail? AND BAxisAvail? '( WARNING W CLEARANCE WILL CHANGE WITH EACH CYCLE OF SUB REPEAT )' EOL ELSE '( WARNING Z CLEARANCE WILL CHANGE WITH EACH CYCLE OF SUB REPEAT )' EOL END ' ' EOL END END RETURN
FinishSub1: {part 1} SeqC CRCOffC IF NOT FeedConnect? IF AutoCycle? WZCP3C ELSE IF FIFO? FeedC WZCP3C FeedEntC ELSE RapidC WZCP3C END END END EOL RETURN
ToggleIncDecWFO: IF Flag?('3') SetFlagF('3') ELSE SetFlag('3') END RETURN
DoCSG52Ops: IF Flag?('5') SetFlagF('5') { Suppress Redundant WFO for MP-OTAP-ECP } ELSE SeqC SetWFO EOL END SeqC SubCall CallLab EOL RETURN
OpenMP: NewProg IF WorkFixtureOffsets? IF WFOCS? StartSub SaveCSProg SaveCSOpStart ClearCSOffset ELSE IF OneToolAllParts? AND ExitClearancePlane? SetFlag('5') { Suppress Redundant WFO for MP-OTAP-ECP } END IF Flag?('3') NewWFO EachWFO {simple eachPart} DoCSG52Ops IncWFO NextWFO {simple NextPart} DecWFO ELSE LastWFO EachWFO {simple eachPart} DoCSG52Ops DecWFO NextPrevWFO {simple NextPart} IncWFO END IF Flag?('4') ToggleIncDecWFO END StartSub END ELSE SeqC SubCall CallLabB Parts Program# EOL IF OneToolAllParts? AND ExitClearancePlane? SetFlag('2') { WFOStuff } END StartSub END RETURN
DoCSWFOOps: EachCSOp DoCSComment DoCSWFOComment IF Flag?('5') SetFlagF('5') { Suppress Redundant WFO for MP-OTAP-ECP } ELSE SeqC CSWFO EOL END SeqC SubCall CallLabB CSSubID# EOL NextCSOp RETURN
CloseMP: IF AbsoluteMoves? AND NOT AbsValue? SeqC AbsValue EOL END IF WorkFixtureOffsets? SeqC EndSub EOL CloseSub IF WFOCS? IF OneToolAllParts? AND ExitClearancePlane? SetFlag('5') { Suppress Redundant WFO for MP-OTAP-ECP } END IF Flag?('3') NewWFO EachWFO {simple eachPart} DoCSWFOOps IncWFO NextWFO {simple NextPart} DecWFO ELSE LastWFO EachWFO {simple eachPart} DoCSWFOOps DecWFO NextPrevWFO {simple NextPart} IncWFO END IF Flag?('4') ToggleIncDecWFO END END ELSE SeqC Preset ShiftPC EOL SeqC EndSub EOL CloseSub SeqC Preset UnshftPC EOL END RETURN
SubCSMP: IF WFOCS? IF ChangeCS? SeqC EndSub EOL CloseSub NewProg StartSub SaveCSProg END ClearCSOffset 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 MoveXYC MoveWZC IF ArcIJFormat? ArcIJC ELSE ArcRC END RETURN
ckCRC: IF LastFeat? CRCOffC ELSE IF NOT ZMove? CRCOnC END END RETURN
ckCRCNum: IF NOT LastFeat? AND Equal? SPZ# EPZ# CRCOffsetC END RETURN
ToolPath: ResetCRCNum EACHFeat IF PointFeat? IF AutoCycle? SeqC MoveSXYC EOL SeqC SubCall CallLab EOL CalcACSRXY {calc tool position after sub call, CalcAutoCycleStatusRecordXY} ELSE SeqC DoDrillAbsOrInc MoveSXYC MoveSWZC EOL END ELSE IF RapidFeat? IF XMove? OR YMove? OR ZMove? SeqC DoAbsOrInc ckCRC RapidC MoveXYC MoveWZC ckCRCNum EOL END ELSE IF LineFeat? IF XMove? OR YMove? OR ZMove? IF Decelerate? IF RoomToDecel? DecelMove1 SeqC DoAbsOrInc ckCRC FeedC MoveXYC MoveWZC FeedRateC ckCRCNum EOL DecelMove2 END SeqC DoAbsOrInc ckCRC FeedC MoveXYC MoveWZC DecelFeed ckCRCNum EOL ELSE SeqC DoAbsOrInc ckCRC FeedC MoveXYC MoveWZC 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
AutoCycCutSub2: {part 2} ToolPath SeqC AbsOrInc IF Repeats? AND FeedConnect? AND ZshiftOnly? ELSE IF FIFO? FeedC WZCP2 FeedEntC ELSE RapidC WZCP2 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
ZonlyRepAutoCycle: 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 WZInPlusInc FeedEnt EOL ELSE IF NOT FirstCycle? Rapid IF SPXMove? OR SPYMove? SeqC IncValue StrtPosC EOL AbsOrInc END IF FeedEntry? SeqC WZCP2PlusInc EOL END END IF FeedEntry? SeqC Feed WZInPlusInc FeedEnt EOL ELSE IF FirstCycle? Rapid END SeqC RapidC WZInPlusInc EOL END END IF FirstCycle? SetStatusOff {protect Z position for incremental sub} END SeqC SubCall CallLab EOL NextCycle SetStatusOn AutoCycCutSub1 {build element sub} AutoCycCutSub2 IF FeedConnect? {there is no Z up in the sub} IF FIFO? SeqC Feed WZCP2 FeedEnt EOL ELSE SeqC Rapid WZCP2 EOL END END SeqC EndSub EOL CloseSub {Element shift, not pattern} RETURN
ZonlyRep: EachCycle IF NOT FirstCycle? SeqC Connect StrtPos EOL END IF FeedConnect? SeqC FeedC WZInPlusInc FeedEnt EOL ELSE {Entry/Exit Connect} IF FeedEntry? IF NOT FirstCycle? SeqC RapidC WZCP2PlusIncC EOL END SeqC Feed WZInPlusInc FeedEnt EOL ELSE SeqC RapidC WZInPlusInc EOL END END SeqC SubCall CallLab 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
OpGuts: IF Milling? SeqC WZCP2C EOL IF Repeats? NewProg 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 IF AutoCycle? SeqC WZCP3C EOL ELSE IF FIFO? SeqC FeedC CRCOffC WZCP3C FeedEntC EOL ELSE SeqC RapidC CRCOffC WZCP3C EOL END END ELSE IF Drilling? GetCycle IF RigidTap? SeqC ' M29' Speed EOL END IF Repeats? NewProg StdSub SeqC Rapid StrtPos EOL END SeqC WDrillCP EOL SeqC Cycle FromCP RLevel Dwell Peck Retract FeedEnt WZDepth EOL IF CallMasterOp? SeqC SubCall CallLabB CallMasterNum# EOL SkipToLastFeat SetDrillEndOpZ SeqC Rapid ' G80' WZCP3 EOL ELSE TrackZNO# FIRST SPZ# IF MasterOp? SetFlag('1') {std sep sub Zreps in effect} NewMasterProg SeqC SubCall CallLab EOL StartSub ToolPath SeqC EndSub EOL CloseSub SetFlagF('1') {not std sep sub Zreps in effect} SetDrillEndOpZ SeqC Rapid ' G80' WZCP3 EOL ELSE ToolPath SetDrillEndOpZ SeqC Rapid ' G80' WZCP3C EOL END END IF Repeats? FinishSubG92 END END END RETURN
ProgStart: InitProg ReverseXZArcs InitWFONum SetFlood UseSeparateSubCalls SetMaxSeparateSubCalls('50') SetMaxRPM('10000') IF Metric? SetMaxFeed('12700') ELSE SetMaxFeed('500') END SetFlagF('1') { Milling ZShiftOnly SepSubs } SetFlagF('2') { WFOStuff } SetFlag('3') { True = incrementing WFO numbers for MP. False = decrementing WFO numebrs for MP } SetFlag('4') { True = toggle between incrementing/decrementing WFO's } SetFlagF('5') { Suppress Redundant WFO for MP-OTAP-ECP } 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 END
IF MultipleParts? IF WorkFixtureOffsets? IF LTEqual? MUL# Parts# NumOfCS# Num#('6') SetWFOCS { use WFO for CS changes } ELSE IF UseComments? '( Not enough Work Fixture Offsets to handle this part. )' EOL '( Number of parts [ ' Parts# ' ] times CSs [ ' NumOfCS# ' ] )' EOL '( exceeds the machine limit. Switching to G52 style output. )' EOL END END END ELSE IF LTEqual? NumOfCS# Num#('6') {****} SetWFOCS { use WFO for CS changes } ELSE IF UseComments? '( Not enough Work Fixture Offsets to handle this part. )' EOL '( Number of CSs [ ' NumOfCS# ' ] exceeds the machine limit. )' EOL '( Switching to G52 style output. )' EOL END END END RETURN
InitOp: EOR EOL ProgID1 IF UseComments? AND ProgramNameComment? '( PROGRAM: ' 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$ ' INCHES )' EOL END IF PartsComment? '( PARTS PROGRAMMED: ' Parts# ' )' EOL END IF StartToolComment? '( FIRST TOOL IN SPINDLE )' EOL END END OpenSub RestoreScale RETURN
NewToolOp1: IF AbsoluteMoves? IncValue END IF LAST ProgStop? SeqC OfstOff ' W0 X0' CoolOff EOL ELSE SeqC OfstOff ' W0' CoolOff EOL END RETURN
NewToolOp2: DoEndOpPS IF AbsoluteMoves? AND AbsValue? IncValue END IF ToolChangeAtHome? SeqC ' G30 X0 Y0 W0' EOL ELSE SeqC ' G30 Y0 W0' EOL END SeqC ToolChng EOL SeqC ' G28 Y0 W0' EOL IF AbsoluteMoves? AND NOT AbsValue? AbsValue END SeqC WAxisOff EOL SeqC IF LAST ProgStop? ' M0' ELSE ProgStop END ASCII('13') EOL RETURN
SameToolOp1: DoEndOpPS IF LAST ProgStop? IF AbsoluteMoves? IncValue END SeqC OfstOff ' W0 X0' CoolOff EOL IF AbsoluteMoves? AbsValue END SeqC WAxisOff EOL SeqC ' M0' EOL ELSE IF NewToolOffset? OR ChangeCS? IF AbsoluteMoves? IncValue END SeqC OfstOff ' W0' EOL SeqC IF AbsoluteMoves? AbsValue END SeqC WAxisOff EOL END END RETURN
SameToolOp2: {Start new Operation} DoOpComments DoPostScript CheckPass RETURN
SameToolOp3: {Start new Operation} CSAngleAC SeqC WFOStuff EOL G52Stuff CSAngleBC IF LAST ProgStop? SeqC PlaneC Rapid StrtPos ' W0' SpeedC SpinOn EOL SeqC ' G43' ToolOfst ZCP1 CoolOn EOL { OfstOn } SeqC WZCP1 EOL ELSE SeqC PlaneC Rapid StrtPos IF NewToolOffset? OR ChangeCS? ' W0' END SpeedC EOL SeqC IF NewToolOffset? OR ChangeCS? ' G43' ToolOfst ZCP1 { OfstOn } END IF NOT CoolOff? AND LAST CoolOff? CoolOn END EOL IF NewToolOffset? OR ChangeCS? SeqC WZCP1 EOL END END RETURN
End1: IF AbsoluteMoves? IncValue END IF ProgStop? SeqC OfstOff ' W0 X0' CoolOff EOL ELSE SeqC OfstOff ' W0' CoolOff EOL END RETURN
End2: DoEndOpPS IF AbsoluteMoves? AND AbsValue? IncValue END IF FIRST ToolChangeAtHome? {added FIRST modifier} SeqC ' G30 X0 Y0 W0' EOL ELSE SeqC ' G30 Y0 W0' EOL END SeqC ToolChng EOL SeqC ' G28 X0 Y0 Z0 W0' EOL IF AbsoluteMoves? AND NOT AbsValue? AbsValue END SeqC WAxisOff EOL IF ProgStop? SeqC ' M0' EOL ELSE SeqC ProgStop EOL END IF Equal? CSOffsetA# Num#('0') AND Equal? CSOffsetB# Num#('0') ELSE IF AAxisAvail? OR BAxisAvail? SeqC IF BAxisAvail? CSAngleB END EOL SeqC ' G92' IF BAxisAvail? ' B0' END EOL IF ProgStop? SeqC 'M0' EOL END END END RETURN
End3: IF AbsoluteMoves? 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 RETURN
MPallTools1P: {Multiple Parts, All Tools 1 Part} EachOp {Start of post processing} IF EquallySpacedOffsets? SetFlag('2') END IF FirstOperation? InitOp OpenMP FirstOp1 FirstOp2 FirstOp3 ELSE IF NewTool? NewToolOp1 NewToolOp2 {to tool change, CS problem} SubCSMP NewToolOp3 NewToolOp4 NewToolOp5 ELSE {implied SameTool?} SameToolOp1 SubCSMP SameToolOp2 SameToolOp3 END END {common point for all operations} OpGuts NextOp {loops back to EachOP until last Operation} End1 {End of program} End2 CloseMP End3 RETURN
MP1ToollAllPfu: {Multiple Parts, 1 Tool all Parts, full up} EachOp {Start of post processing} IF EquallySpacedOffsets? SetFlag('2') END IF FirstOperation? InitOp FirstOp1 OpenMP FirstOp2 FirstOp3 ELSE IF NewTool? NewToolOp1 CloseMP NewToolOp2 {to tool change, CS problem} NewToolOp3 OpenMP NewToolOp4 NewToolOp5 ELSE {implied SameTool?} SameToolOp1 SubCSMP SameToolOp2 SameToolOp3 END END {common point for all operations} OpGuts NextOp {loops back to EachOP until last Operation} End1 {End of program} CloseMP End2 End3 RETURN
MP1ToollAllPXcp: {Multiple Parts, 1 Tool all Parts, exit Clearance plane} EachOp {Start of post processing} SetFlag('2') IF FirstOperation? InitOp FirstOp1 FirstOp2 FirstOp3 OpenMP FirstOp2a {need StrtPos in Sub} ELSE IF NewTool? CloseMP NewToolOp1 NewToolOp2 {to tool change, CS problem} NewToolOp3 NewToolOp4 NewToolOp5 OpenMP NewToolOp4a {need StrtPos in Sub} ELSE {implied SameTool?} SameToolOp1 SubCSMP SameToolOp2 SameToolOp3 END END {common point for all operations} OpGuts NextOp {loops back to EachOP until last Operation} CloseMP {End of program} End1 End2 End3 RETURN
NoMPs: {no multiple parts} EachOp {Start of post processing} SetFlag('2') { WFOStuff } IF FirstOperation? InitOp FirstOp1 FirstOp2 FirstOp3 ELSE IF NewTool? NewToolOp1 NewToolOp2 NewToolOp3 NewToolOp4 NewToolOp5 ELSE {implied SameTool?} SameToolOp1 SameToolOp2 SameToolOp3 END END {common point for all operations} OpGuts NextOp {loops back to EachOP until last Operation} End1 {End of program} End2 End3 RETURN
{Start of executable Prog, Top Level ****}
ProgStart {setup and initializations}
IF MultipleParts? IF AllToolsOnePart? MPallTools1P ELSE {implied OneToolAllParts?} IF FullUp? MP1ToollAllPfu ELSE {implied ExitClearancePlane?} MP1ToollAllPXcp END END ELSE NoMPs END