Fanuc 18M Elgamill D468 15


{Change Comments ***********************************************************}

{from M001.81, 11/10/91, wfg}
{ .81.02, wfg, 1/8/92, corrected Z polities for top, left, & right, as well as Y polarity for Left}
{ .81.14m, wfg, Feed & RPM rounding}
{ .81.15m, wfg, do not round tap RPM}
{ .81.16m, wfg, 4/16/92, head change corrections}
{ .81.17m, wfg, 5/7/92, feed format, last to tool change, dup RPM, dup PostScript}

{8/28/96
Updated: Siemans M8 Elgamill M468.81.17m
Created: Fanuc 18M Elgamill M468.13
For: LTV Steel
Machine: Butler Elgamill
Control: Fanuc 18M
Versions: Catalyst v3.05.03C/Compost 4.21.37/v1.0b1
Changes made per Joe Yurkus of LTV Steel.
Updated for Catalyst v3.05C per Fanuc 6M M001.13.1 Format.
Too many changes to note, complete rewrite.
Post supports machining on 5 sides of a cube, Front, Top, Bottom, Right and Left.
Back side not supported, any attempt at machining back results in defaulted Front side.
Workgroups must be programmed in XYPlane only.
Side is determined by WorkGroupComment$ which should start with name of side to be machined.
Any additional comments in WorkGroupComment$ should be separated from side by a space character.
Spindle Head rotates perpindicular to side to be machined.
Part and table remain stationary.
Depth coordinate contains formula for adding amount of stock on side to be machine.
Movement between sides needs to take care of clearing part to avoid crashes.
Coolant is turned off, head is retracted to Depth ClearancePlane1, then retracted to safe
position before rotating head into new orientation.
After Head Rotates, Coolant, Spindle and Length Offset needs to be re-activated.
Following list indicates axes in relationship to stock size dialog:
Side H- H+ V- V+ D- D+ Arc I J Plane Ofst MCode DepthComp
ŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃŃ
Front X- X+ Y- Y+ Z- Z+ G02 I J G17 G43 M46 ZStockMax
Top X- X+ Z+ Z- Y- Y+ G02 I K G18 G43 M48 YStockMax
Bottom X- X+ Z- Z+ Y+ Y- G03 I K G18 G44 M47 YStockMin
Right Z+ Z- Y- Y+ X- X+ G02 K J G19 G43 M45 XStockMax
Left Z- Z+ Y- Y+ X+ X- G03 K J G19 G44 M49 XStockMin
Virtual Advanced Mill Support still requires following modifications:
Post will be a C-version as post will output index command and use WorkFixtureOffsets.
New version of Virtual to allow for 999 subs.
This prog currently contains 97, limit is 98.
Need to replace Front, Top, Bottom, Right and Left conditions with actual CSOffsetA# and
CSOffsetB# tests.
DWB}

{10/1/96
Modified: Fanuc 18M Elgamill M468.13
Created: Fanuc 18M Elgamill M468.13.1
For: LTV Steel
Versions: Catalyst v3.06C/Compost 4.21.37/v1.0b1
Changes made per Joe Yurkus of LTV Steel.
Changed First Work Fixture Offset from G54 to G55 in Compost2 Origins and Values Dialog.
Deleted unused Number Commands at Prog Numeric Format Definitions.
Deleted Recall# from FORMAT#4.
Deleted MUL# from FORMAT#4.
Deleted TrackX# from FORMAT#4.
Deleted TrackY# from FORMAT#4.
Deleted TrackZ# from FORMAT#4.
Deleted RapidF# from FORMAT#4.
Deleted Peck# from FORMAT#4.
Deleted DirectTapFeed# from FORMAT#4.
Deleted SpeedRPM# from FORMAT#5.
Deleted formulas that add SideStock# Max/Min values.
User can control depth via WorkFixtureOffsets.
Deleted ADD# from FORMAT#4 at Prog Numeric Format Definitions.
Deleted XStockMax# from FORMAT#4 at Prog Numeric Format Definitions.
Deleted YStockMax# from FORMAT#4 at Prog Numeric Format Definitions.
Deleted ZStockMax# from FORMAT#4 at Prog Numeric Format Definitions.
Deleted XStockMin# from FORMAT#6 at Prog Numeric Format Definitions.
Deleted YStockMin# from FORMAT#6 at Prog Numeric Format Definitions.
Deleted formulas for ADDing SideStock# Min/Max value to EPZ# at DComp sub.
Deleted formulas for ADDing SideStock# Min/Max value to SPZ# at SPDMove sub.
Deleted formulas for ADDing SideStock# Min/Max value to EPZ# at LastDCP1 sub.
Deleted Tool number info in Side Notes for PSComment at ProgStart sub.
Added Flag(6) test at WFOStuff sub.
Added Flag(6) test at NoMPs sub.
Virtual Advanced Mill Support still requires following modifications:
Post will be a C-version as post will output index command and use WorkFixtureOffsets.
Need to replace Front, Top, Bottom, Right and Left conditions with actual CSOffsetA# and
CSOffsetB# tests.
DWB}

{10/30/96
Modified: Fanuc 18M Elgamill M468.13.1
Created: Fanuc 18M Elgamill M468.13.2
For: LTV Steel
Versions: Catalyst v3.09C/Compost 4.21.37/v1.0b1
Changes made per Joe Yurkus of LTV Steel.
Added RapidF# back to FORMAT#4 at Prog Numeric Format Definitions.
Added PartClear sub.
Called prior to StrtPos from FirstOp3, NewToolOp5 and SameToolOp3 subs.
Ensures that Tool will clear part sides before positioning.
Outputs X-20. for Left.
Outputs X20. for Right, Top and Bottom.
Outputs Y20. for Top.
Outputs Y-20. for Bottom.
Added SetLastOfstOff sub.
Called from NewToolOp1 and SameToolOp1 subs.
Outputs G49 H0 Z20. for OfstOff.
Takes care of correct Address for Side Depth.
Replaces LastDCP1 sub.
Added SetOfstOff sub.
Same as SetLastOfstOff sub except called from End1 sub.
Deleted LastDCP1 sub.
See SetLastOfstOff sub notes.
Moved SetFlagF(6) from SameToolOp1 to CheckHead sub.
Was not getting cleared for LAST ProgStop condition.
Added IF SameTool? AND LAST ProgStop? condition at WFOStuff.
Added SpinOff block prior to ToolChng block at FirstOp1a, NewToolOp3a and End3 subs.
Deleted PreTool at FirstOp2 and NewToolOp4 subs.
Added OpToolID block at NewToolOp3a sub.
Moved call to CheckHead sub before LAST ProgStop condition at SameToolOp1 sub.
Was not checking for LAST ProgStop condition.
Added NewWFO test for calling SetLastOfstOff sub at SameToolOp1 sub.
Added NewWFO test for calling SetOfstOn ToolOfst DCP1 subs at SameToolOp3 sub.
Added LAST ProgStop test for calling SetPlane WFOStuff subs at NoMPs sub.
Added NewWFO test for calling SetPlane WFOStuff subs at NoMPs sub.
DWB}

{1/15/97
Modified: Fanuc 18M Elgamill M468.13.2
Created: Fanuc 18M Elgamill M468.13.3
For: LTV Steel
Versions: Catalyst v3.25C/Compost 4.21.37/v1.0b4
Changes made per Joe Yurkus of LTV Steel.
Customer reported that Spindle must be turned off prior to changing sides during SameTool.
Added SpinOff two places at SameToolOp1 sub.
DWB}

{2/6/97
Copied: Fanuc 18M Elgamill M468.13.3
Created: Fanuc 18M Elgamill D468.14
For: LTV Steel
Versions: Catalyst v3.25C/Compost 4.21.37/v1.0b4
Changes made per Joe Yurkus of LTV Steel.
Updated for Catalyst v3.25C per Fanuc 6M (NW) D001.14 Format.
Part MUST be programmed using 5 Axis Horizontal MDD with 4th Y+/5th X+ Axis SetUp.
Post now tests for values of CSOffsetA# and CSOffsetB# to determine side.
If AAxisAvail? OR BAxisAvail? = FALSE, post still tests for Front, Top, Bottom, Left and Right,
thereby allowing user to still output older files.
Added Var(1) to store value of CSOffsetA#
Calculates and stores values bewteen 0Ą and 360Ą
Added Var(2) to store value of CSOffsetB#
Calculates and stores values bewteen 0Ą and 360Ą
Added Var(3) to store Side.
1 = Front
2 = Top
3 = Bottom
4 = Left
5 = Right
Added Var(4) to store Previous Side.
Post calculates for situation when Top or Bottom side has rotated out of position.
DWB}

{3/31/97
Updated & Modified: Fanuc 18M Elgamill D468.14
Created: Fanuc 18M Elgamill D468.15
For: LTV Steel
Versions: Catalyst v3.32C/ComPost2 MSL 68K
Changes made per Joe Yurkus of LTV Steel.
Customer requested coordinates not to be shifted per normal D-Style Output.
Requested coordinates be local to CSGroup.
Added ClearCSOffset at GetPlane sub.
Added Var(5) to store ClearancePlane1#.
Var(5) is initialized at ProgStart sub.
Var(5) stores ClearancePlane1# at FirstOp1 sub
Added FORMAT#7, ą000.0000, for Reporting Var(5) at Prog Numeric Format Definitions.
Changed ClearancePlane1# to Recall# Num#('5') two places at DCP1 sub.
Changed ClearancePlane1# to Recall# Num#('5') two places at GetDrillCP sub.
Changed ClearancePlane1# to Recall# Num#('5') at SetDrillEndOpZ sub.
Updated for Catalyst v3.32C per Fanuc 6M (NW) D001.15 Format
Corrected problem with CS related stuff not being output.
Caused by only testing AAxisAvail.
Added BAxisAvail test at DoCSComment sub.
Changed name of OffsetComments sub to CSComments and rewrote logic.
Added Flag(5) to Suppress Redundant WFO for MultipleParts WorkFixtureOffsets programs.
Only concerns OneToolAllParts ExitClearancePlane situations.
Added DoWFOOps sub identicle to DoCSG52Ops sub in B001.15 and C001.15 progs.
Corrected TrackZNO# error at DCP2 sub.
Changed ClearancePlane1# to ClearancePlane2#.
Modified SideReport for better display.
Changed name of custom subs to be more like ToolPath Commands.
OldName = NewName Command
--------- --------- ---------
HMove = MoveH [ MoveX ]
VMove = MoveV [ MoveY ]
HVMove = MoveHV [ MoveXY ]
HVMoveC = MoveHVC [ MoveXYC ]
DMove = MoveD [ MoveZ ]
DMoveC = MoveDC [ MoveZC ]
SPHMove = MoveSH [ MoveSX ]
SPVMove = MoveSV [ MoveSY ]
SPHVMoveC = MoveSHVC [ MoveSXYC ]
SPDMove = MoveSD [ MoveSZ ]
SPDMoveC = MoveSHVDC [ MoveSXYZC ]
Made following modifications to avoid future problems discovered while developing similar post
processor, Heid TNC 355 [SP] DYxx.15m, for Maquinsor customer Spasa.
Changed LoadFeat and IF ZMove? logic to FORMAT intended Number Command used.
Changes made at DCP1, DCP2, DCP3, DInPlusInc, DCP2PlusInc, DDepth and DRLevel subs.
Added FORMAT to intended EPZ# Number Command at MoveD sub.
Changed MoveD call to DCP2 call at DCP2C sub.
Changed MoveD call to DCP3 call at DCP3C sub.
Changed MoveD call to DCP2PlusInc call at DCP2PlusIncC sub.
Deleted DComp sub.
Not needed due to above mentioned change to LoadFeat and IF ZMove? logic.
Changed ZInPlusInc# to ZCP2PlusInc# at DCP2PlusIncC sub.
Wrong Number Command used.
Added DIn sub.
Called from EntryMove sub.
Deleted LoadFeat logic at EntryMove sub.
Added DCP1C sub.
Added MoveSDC sub.
Changed LoadFeat and IF ZMove? logic to DCP1C/DCP2C call at GetDrillCP sub.
Changed name of DRLevel sub to DLevel.
Changed literal 'Z' to DLabel call at SubWarning sub.
DWB}

{Prog Numeric Format Definitions ****}

#1 = '#.00'
#2 = '#####.###;0.'
#3 = '*#####.###;0.'
#4 = '####.####;0.'
#5 = '#######0'
#6 = '*####.####;0.'
#7 = 'ą000.0000'

FORMAT(FileFeet#,1)
FORMAT(FileMeters#,1)
FORMAT(Recall#,2)
FORMAT(CSOffsetA#,2)
FORMAT(CSOffsetB#,2)
FORMAT(StartPosX#,4)
FORMAT(StartPosY#,4)
FORMAT(SPX#,4)
FORMAT(SPY#,4)
FORMAT(SPZ#,4)
FORMAT(EPX#,4)
FORMAT(EPY#,4)
FORMAT(EPZ#,4)
FORMAT(ArcI#,4)
FORMAT(ArcJ#,4)
FORMAT(TrackXNO#,4)
FORMAT(TrackYNO#,4)
FORMAT(TrackZNO#,4)
FORMAT(OriginShiftRX#,4)
FORMAT(OriginShiftRY#,4)
FORMAT(OriginShiftRZ#,4)
FORMAT(OriginUSRXCTP#,4)
FORMAT(OriginUSRYCTP#,4)
FORMAT(OriginUSRZCTP#,4)
FORMAT(OriginShiftPX#,4)
FORMAT(OriginShiftPY#,4)
FORMAT(OriginShiftPZ#,4)
FORMAT(OriginUSPXCTP#,4)
FORMAT(OriginUSPYCTP#,4)
FORMAT(OriginUSPZCTP#,4)
FORMAT(Dwell#,4)
FORMAT(RapidF#,4)
FORMAT(ToolDiameter#,4)
FORMAT(ADD#,5)
FORMAT(CS#,5)
FORMAT(Program#,5)
FORMAT(CallMasterNum#,5)
FORMAT(Operation#,5)
FORMAT(Tool#,5)
FORMAT(NewWFO#,5)
FORMAT(Parts#,5)

{Added Subroutines ***}

SideReport:
' ' EOL
' A = ' Recall# Num#('1') '/' CSOffsetA#
' B = ' Recall# Num#('2') '/' CSOffsetB# EOL
FORMAT(Recall#,5)
' Op# ' Operation# ' - '
IF FirstOperation?
' Starts at Num(3) ' Recall# Num#('3') ' '
ELSE
IF Equal? Recall# Num#('4') Recall# Num#('3')
' Stays at Num(4)=Num(3) ' Recall# Num#('4') '=' Recall# Num#('3') ' '
ELSE
'Indexes From Num(4) ' Recall# Num#('4') ' '
IF Equal? Recall# Num#('4') Num#('1')
'Front'
ELSE
IF Equal? Recall# Num#('4') Num#('2')
'Top'
ELSE
IF Equal? Recall# Num#('4') Num#('3')
'Bottom'
ELSE
IF Equal? Recall# Num#('4') Num#('4')
'Left'
ELSE
IF Equal? Recall# Num#('4') Num#('5')
'Right'
ELSE
'Unknown Side'
END
END
END
END
END
EOL
' To Num(3) ' Recall# Num#('3') ' '
END
END
IF Equal? Recall# Num#('3') Num#('1')
'Front'
ELSE
IF Equal? Recall# Num#('3') Num#('2')
'Top'
ELSE
IF Equal? Recall# Num#('3') Num#('3')
'Bottom'
ELSE
IF Equal? Recall# Num#('3') Num#('4')
'Left'
ELSE
IF Equal? Recall# Num#('3') Num#('5')
'Right'
ELSE
'Unknown Side'
END
END
END
END
END
EOL
FORMAT(Recall#,7)
' CP1 Num(5) ' Recall# Num#('5') EOL
' ' EOL
FORMAT(Recall#,2)
RETURN

GetPlane:
ClearCSOffset
Save# Num#('4') Recall# Num#('3') { LAST Side }
IF AAxisAvail? OR BAxisAvail?
IF Equal? Recall# Num#('1') Num#('90')
Save# Num#('3') Num#('2') { Top }
ELSE
IF Equal? Recall# Num#('1') Num#('270')
Save# Num#('3') Num#('3') { Bottom }
ELSE
IF Equal? Recall# Num#('2') Num#('90')
Save# Num#('3') Num#('4') { Left }
ELSE
IF Equal? Recall# Num#('2') Num#('270')
Save# Num#('3') Num#('5') { Right }
ELSE
Save# Num#('3') Num#('1') { Front }
END
END
END
END
ELSE
Save# Num#('1') Num#('0') { CSOffsetA }
Save# Num#('2') Num#('0') { CSOffsetB }
Save# Num#('3') Num#('1') { Front }
IF Top?
Save# Num#('1') Num#('270') { CSOffsetA }
Save# Num#('3') Num#('2') { Top }
ELSE
IF Bottom?
Save# Num#('1') Num#('90') { CSOffsetA }
Save# Num#('3') Num#('3') { Bottom }
ELSE
IF Left?
Save# Num#('2') Num#('90') { CSOffsetB }
Save# Num#('3') Num#('4') { Left }
ELSE
IF Right?
Save# Num#('2') Num#('270') { CSOffsetB }
Save# Num#('3') Num#('5') { Right }
ELSE
IF Back?
Save# Num#('2') Num#('180') { CSOffsetB }
END
END
END
END
END
END
IF GTEqual? Operation# Num#('0')
IF LTEqual? Operation# Num#('0')
SideReport
END
END
RETURN

SetPlane:
IF Equal? Recall# Num#('3') Num#('2') { Top }
' G18'
ELSE
IF Equal? Recall# Num#('3') Num#('3') { Bottom }
' G18'
ELSE
IF Equal? Recall# Num#('3') Num#('4') { Left }
' G19'
ELSE
IF Equal? Recall# Num#('3') Num#('5') { Right }
' G19'
ELSE { Default to Front }
' G17'
END
END
END
END
RETURN

HeadClear:
' M98 P10' { User Macro Positions Head to Y-12.5 Z20. }
RETURN

SetHead:
IF Equal? Recall# Num#('3') Num#('2') { Top }
' M48'
ELSE
IF Equal? Recall# Num#('3') Num#('3') { Bottom }
' M47'
ELSE
IF Equal? Recall# Num#('3') Num#('4') { Left }
' M49'
ELSE
IF Equal? Recall# Num#('3') Num#('5') { Right }
' M45'
ELSE { Default to Front }
' M46'
IF Equal? Recall# Num#('2') Num#('180') { Back }
' ***** Bad Side Type in SetHead *****'
END
END
END
END
END
RETURN

PartClear:
IF Equal? Recall# Num#('3') Num#('4') { Left }
SeqC AbsOrInc Feed ' X-20.' RapidF EOL
ELSE
SeqC AbsOrInc Feed ' X20.' RapidF EOL
IF Equal? Recall# Num#('3') Num#('2') { Top }
SeqC ' Y20.' EOL
ELSE
IF Equal? Recall# Num#('3') Num#('3') { Bottom }
SeqC ' Y-20.' EOL
END
END
END
TrackZNO# Num#('20')
IF Equal? Recall# Num#('3') Num#('2') { Top }
IF Equal? Recall# Num#('2') Num#('90')
TrackYNO# Num#('20')
ELSE
IF Equal? Recall# Num#('2') Num#('270')
TrackYNO# Num#('-20')
ELSE
IF Equal? Recall# Num#('2') Num#('180')
TrackXNO# Num#('-20')
ELSE
TrackXNO# Num#('20')
END
END
END
ELSE
IF Equal? Recall# Num#('3') Num#('3') { Bottom }
IF Equal? Recall# Num#('2') Num#('90')
TrackYNO# Num#('-20')
ELSE
IF Equal? Recall# Num#('2') Num#('270')
TrackYNO# Num#('20')
ELSE
IF Equal? Recall# Num#('2') Num#('180')
TrackXNO# Num#('-20')
ELSE
TrackXNO# Num#('20')
END
END
END
END
END
RETURN

SetOfstOn:
IF Equal? Recall# Num#('3') Num#('3') { Bottom }
' G44' { Tool Length Comp - Direction }
ELSE
IF Equal? Recall# Num#('3') Num#('4') { Left }
' G44' { Tool Length Comp - Direction }
ELSE
' G43' { Tool Length Comp + Direction }
END
END
RETURN

SetLastOfstOff:
' G49 H0' { OfstOff }
IF Equal? Recall# Num#('4') Num#('2') { LAST Top }
' Y20.'
ELSE
IF Equal? Recall# Num#('4') Num#('3') { LAST Bottom }
' Y-20.'
ELSE
IF Equal? Recall# Num#('4') Num#('4') { LAST Left }
' X-20.'
ELSE
IF Equal? Recall# Num#('4') Num#('5') { LAST Right }
' X20.'
ELSE
' Z20.'
END
END
END
END
RETURN

SetOfstOff:
' G49 H0' { OfstOff }
IF Equal? Recall# Num#('3') Num#('2') { Top }
' Y20.'
ELSE
IF Equal? Recall# Num#('3') Num#('3') { Bottom }
' Y-20.'
ELSE
IF Equal? Recall# Num#('3') Num#('4') { Left }
' X-20.'
ELSE
IF Equal? Recall# Num#('3') Num#('5') { Right }
' X20.'
ELSE
' Z20.'
END
END
END
END
RETURN

GetCoolOn:
IF FirstOperation? OR NewTool? OR LAST ProgStop? OR LAST CoolOff?
SeqC CoolOn EOL
ELSE
IF Equal? Recall# Num#('3') Num#('2') { Top }
IF NotEqual? Recall# Num#('4') Num#('2') { LAST NOT Top }
SeqC CoolOn EOL
END
ELSE
IF Equal? Recall# Num#('3') Num#('3') { Bottom }
IF NotEqual? Recall# Num#('4') Num#('3') { LAST NOT Bottom }
SeqC CoolOn EOL
END
ELSE
IF Equal? Recall# Num#('3') Num#('4') { Left }
IF NotEqual? Recall# Num#('4') Num#('4') { LAST NOT Left }
SeqC CoolOn EOL
END
ELSE
IF Equal? Recall# Num#('3') Num#('5') { Right }
IF NotEqual? Recall# Num#('4') Num#('5') { LAST NOT Right }
SeqC CoolOn EOL
END
ELSE
IF Equal? Recall# Num#('3') Num#('1') { Front }
IF NotEqual? Recall# Num#('4') Num#('1') { LAST NOT Front }
SeqC CoolOn EOL
END
END
END
END
END
END
END
RETURN

GetCoolOff:
IF LastOp? OR NEXT NewTool? OR ProgStop? OR NEXT CoolOff?
SeqC CoolOff EOL
ELSE
IF AAxisAvail? OR BAxisAvail?
IF NotEqual? CSOffsetA# NEXT CSOffsetA#
SeqC CoolOff EOL
ELSE
IF NotEqual? CSOffsetB# NEXT CSOffsetB#
IF NotEqual? Recall# Num#('3') Num#('1') { Front }
SeqC CoolOff EOL
ELSE
IF NotEqual? NEXT CSOffsetB# Num#('0') { NEXT Front }
IF NotEqual? ABS# NEXT CSOffsetB# Num#('180') { NEXT Back }
SeqC CoolOff EOL
END
END
END
END
END
ELSE
IF Top? AND NEXT NOT Top?
SeqC CoolOff EOL
ELSE
IF Bottom? AND NEXT NOT Bottom?
SeqC CoolOff EOL
ELSE
IF Left? AND NEXT NOT Left?
SeqC CoolOff EOL
ELSE
IF Right? AND NEXT NOT Right?
SeqC CoolOff EOL
ELSE
IF Front? OR Back?
IF NEXT NOT Front? AND NEXT NOT Back?
SeqC CoolOff EOL
END
END
END
END
END
END
END
END
RETURN

HLabel:
IF Equal? Recall# Num#('3') Num#('4') { Left }
' Z'
ELSE
IF Equal? Recall# Num#('3') Num#('5') { Right }
' Z'
ELSE
' X'
END
END
RETURN

VLabel:
IF Equal? Recall# Num#('3') Num#('2') { Top }
' Z'
ELSE
IF Equal? Recall# Num#('3') Num#('3') { Bottom }
' Z'
ELSE
' Y'
END
END
RETURN

DLabel:
IF Equal? Recall# Num#('3') Num#('2') { Top }
' Y'
ELSE
IF Equal? Recall# Num#('3') Num#('3') { Bottom }
' Y'
ELSE
IF Equal? Recall# Num#('3') Num#('4') { Left }
' X'
ELSE
IF Equal? Recall# Num#('3') Num#('5') { Right }
' X'
ELSE
' Z'
END
END
END
END
RETURN

StartPosX:
HLabel
IF Equal? Recall# Num#('3') Num#('2') { Top }
IF Equal? Recall# Num#('2') Num#('90')
StartPosY#
ELSE
IF Equal? Recall# Num#('2') Num#('270')
FORMAT(StartPosY#,6)
StartPosY#
ELSE
IF Equal? Recall# Num#('2') Num#('180')
FORMAT(StartPosX#,6)
END
StartPosX#
END
END
ELSE
IF Equal? Recall# Num#('3') Num#('3') { Bottom }
IF Equal? Recall# Num#('2') Num#('90')
FORMAT(StartPosY#,6)
StartPosY#
ELSE
IF Equal? Recall# Num#('2') Num#('270')
StartPosY#
ELSE
IF Equal? Recall# Num#('2') Num#('180')
FORMAT(StartPosX#,6)
END
StartPosX#
END
END
ELSE
IF Equal? Recall# Num#('3') Num#('5') { Right }
FORMAT(StartPosX#,6)
END
StartPosX#
END
END
FORMAT(StartPosX#,4)
FORMAT(StartPosY#,4)
RETURN

StartPosY:
VLabel
IF Equal? Recall# Num#('3') Num#('2') { Top }
IF Equal? Recall# Num#('2') Num#('90')
StartPosX#
ELSE
IF Equal? Recall# Num#('2') Num#('270')
FORMAT(StartPosX#,6)
StartPosX#
ELSE
IF Equal? Recall# Num#('2') Num#('0')
FORMAT(StartPosY#,6)
END
StartPosY#
END
END
ELSE
IF Equal? Recall# Num#('3') Num#('3') { Bottom }
IF Equal? Recall# Num#('2') Num#('90')
StartPosX#
ELSE
IF Equal? Recall# Num#('2') Num#('270')
FORMAT(StartPosX#,6)
StartPosX#
ELSE
IF Equal? Recall# Num#('2') Num#('180')
FORMAT(StartPosY#,6)
END
StartPosY#
END
END
ELSE
StartPosY#
END
END
FORMAT(StartPosX#,4)
FORMAT(StartPosY#,4)
RETURN

StartPos:
StartPosX StartPosY
RETURN

StartPosC:
IF NotEqual? Recall# Num#('3') Num#('1') { Front }
IF NotEqual? Recall# Num#('3') Num#('4') { Left }
IF NotEqual? Recall# Num#('3') Num#('5') { Right }
IF NotEqual? Recall# Num#('2') Num#('0')
IF NotEqual? Recall# Num#('2') Num#('180')
IF SPYMove?
StartPosX
END
IF SPXMove?
StartPosY
END
END
END
END
END
END
IF SPXMove?
StartPosX
END
IF SPYMove?
StartPosY
END
RETURN

DCP1:
DLabel
IF Equal? Recall# Num#('3') Num#('3') { Bottom }
FORMAT(Recall#,6)
ELSE
IF Equal? Recall# Num#('3') Num#('4') { Left }
FORMAT(Recall#,6)
ELSE
FORMAT(Recall#,4)
END
END
Recall# Num#('5') { ClearancePlane1# }
FORMAT(Recall#,4)
TrackZNO# Recall# Num#('5') { ClearancePlane1# }
FORMAT(Recall#,2)
RETURN

DCP1C:
FORMAT(Recall#,4)
LoadFeat Num#('0') Num#('0') Recall# Num#('5') { ClearancePlane1# }
FORMAT(Recall#,2)
IF ZMove?
DCP1
END
RETURN

DCP2:
DLabel
IF Equal? Recall# Num#('3') Num#('3') { Bottom }
FORMAT(ClearancePlane2#,6)
ELSE
IF Equal? Recall# Num#('3') Num#('4') { Left }
FORMAT(ClearancePlane2#,6)
END
END
ClearancePlane2#
FORMAT(ClearancePlane2#,4)
RETURN

DCP2C:
LoadFeat Num#('0') Num#('0') ClearancePlane2#
IF ZMove?
DCP2
END
RETURN

DCP3:
DLabel
IF Equal? Recall# Num#('3') Num#('3') { Bottom }
FORMAT(ClearancePlane3#,6)
ELSE
IF Equal? Recall# Num#('3') Num#('4') { Left }
FORMAT(ClearancePlane3#,6)
END
END
ClearancePlane3#
FORMAT(ClearancePlane3#,4)
RETURN

DCP3C:
LoadFeat Num#('0') Num#('0') ClearancePlane3#
IF ZMove?
DCP3
END
RETURN

DIn:
DLabel
IF Equal? Recall# Num#('3') Num#('3') { Bottom }
FORMAT(SPZ#,6)
ELSE
IF Equal? Recall# Num#('3') Num#('4') { Left }
FORMAT(SPZ#,6)
END
END
FIRST SPZ#
FORMAT(SPZ#,4)
RETURN

MoveSH:
HLabel
IF Equal? Recall# Num#('3') Num#('2') { Top }
IF Equal? Recall# Num#('2') Num#('90')
SPY#
ELSE
IF Equal? Recall# Num#('2') Num#('270')
FORMAT(SPY#,6)
SPY#
ELSE
IF Equal? Recall# Num#('2') Num#('180')
FORMAT(SPX#,6)
END
SPX#
END
END
ELSE
IF Equal? Recall# Num#('3') Num#('3') { Bottom }
IF Equal? Recall# Num#('2') Num#('90')
FORMAT(SPY#,6)
SPY#
ELSE
IF Equal? Recall# Num#('2') Num#('270')
SPY#
ELSE
IF Equal? Recall# Num#('2') Num#('180')
FORMAT(SPX#,6)
END
SPX#
END
END
ELSE
IF Equal? Recall# Num#('3') Num#('5') { Right }
FORMAT(SPX#,6)
END
SPX#
END
END
FORMAT(SPX#,4)
FORMAT(SPY#,4)
RETURN

MoveSV:
VLabel
IF Equal? Recall# Num#('3') Num#('2') { Top }
IF Equal? Recall# Num#('2') Num#('90')
SPX#
ELSE
IF Equal? Recall# Num#('2') Num#('270')
FORMAT(SPX#,6)
SPX#
ELSE
IF Equal? Recall# Num#('2') Num#('0')
FORMAT(SPY#,6)
END
SPY#
END
END
ELSE
IF Equal? Recall# Num#('3') Num#('3') { Bottom }
IF Equal? Recall# Num#('2') Num#('90')
SPX#
ELSE
IF Equal? Recall# Num#('2') Num#('270')
FORMAT(SPX#,6)
SPX#
ELSE
IF Equal? Recall# Num#('2') Num#('180')
FORMAT(SPY#,6)
END
SPY#
END
END
ELSE
SPY#
END
END
FORMAT(SPX#,4)
FORMAT(SPY#,4)
RETURN

MoveSHVC:
IF NotEqual? Recall# Num#('3') Num#('1') { Front }
IF NotEqual? Recall# Num#('3') Num#('4') { Left }
IF NotEqual? Recall# Num#('3') Num#('5') { Right }
IF NotEqual? Recall# Num#('2') Num#('0')
IF NotEqual? Recall# Num#('2') Num#('180')
IF SPYMove?
MoveSH
END
IF SPXMove?
MoveSV
END
END
END
END
END
END
IF SPXMove?
MoveSH
END
IF SPYMove?
MoveSV
END
RETURN

MoveSD:
DLabel
IF Equal? Recall# Num#('3') Num#('3') { Bottom }
FORMAT(SPZ#,6)
ELSE
IF Equal? Recall# Num#('3') Num#('4') { Left }
FORMAT(SPZ#,6)
END
END
SPZ#
FORMAT(SPZ#,4)
RETURN

MoveSDC:
IF SPZMove?
MoveSD
END
RETURN

MoveSHVDC:
MoveSHVC MoveSDC
RETURN

MoveH:
HLabel
IF Equal? Recall# Num#('3') Num#('2') { Top }
IF Equal? Recall# Num#('2') Num#('90')
EPY#
ELSE
IF Equal? Recall# Num#('2') Num#('270')
FORMAT(EPY#,6)
EPY#
ELSE
IF Equal? Recall# Num#('2') Num#('180')
FORMAT(EPX#,6)
END
EPX#
END
END
ELSE
IF Equal? Recall# Num#('3') Num#('3') { Bottom }
IF Equal? Recall# Num#('2') Num#('90')
FORMAT(EPY#,6)
EPY#
ELSE
IF Equal? Recall# Num#('2') Num#('270')
EPY#
ELSE
IF Equal? Recall# Num#('2') Num#('180')
FORMAT(EPX#,6)
END
EPX#
END
END
ELSE
IF Equal? Recall# Num#('3') Num#('5') { Right }
FORMAT(EPX#,6)
END
EPX#
END
END
FORMAT(EPX#,4)
FORMAT(EPY#,4)
RETURN

MoveV:
VLabel
IF Equal? Recall# Num#('3') Num#('2') { Top }
IF Equal? Recall# Num#('2') Num#('90')
EPX#
ELSE
IF Equal? Recall# Num#('2') Num#('270')
FORMAT(EPX#,6)
EPX#
ELSE
IF Equal? Recall# Num#('2') Num#('0')
FORMAT(EPY#,6)
END
EPY#
END
END
ELSE
IF Equal? Recall# Num#('3') Num#('3') { Bottom }
IF Equal? Recall# Num#('2') Num#('90')
EPX#
ELSE
IF Equal? Recall# Num#('2') Num#('270')
FORMAT(EPX#,6)
EPX#
ELSE
IF Equal? Recall# Num#('2') Num#('180')
FORMAT(EPY#,6)
END
EPY#
END
END
ELSE
EPY#
END
END
FORMAT(EPX#,4)
FORMAT(EPY#,4)
RETURN

MoveHV:
MoveH MoveV
RETURN

MoveHVC:
IF NotEqual? Recall# Num#('3') Num#('1') { Front }
IF NotEqual? Recall# Num#('3') Num#('4') { Left }
IF NotEqual? Recall# Num#('3') Num#('5') { Right }
IF NotEqual? Recall# Num#('2') Num#('0')
IF NotEqual? Recall# Num#('2') Num#('180')
IF YMove?
MoveH
END
IF XMove?
MoveV
END
END
END
END
END
END
IF XMove?
MoveH
END
IF YMove?
MoveV
END
RETURN

MoveD:
DLabel
IF Equal? Recall# Num#('3') Num#('3') { Bottom }
FORMAT(EPZ#,6)
ELSE
IF Equal? Recall# Num#('3') Num#('4') { Left }
FORMAT(EPZ#,6)
END
END
EPZ#
FORMAT(EPZ#,4)
RETURN

MoveDC:
IF ZMove?
MoveD
END
RETURN

DInPlusInc:
DLabel
IF Equal? Recall# Num#('3') Num#('3') { Bottom }
FORMAT(ZInPlusInc#,6)
ELSE
IF Equal? Recall# Num#('3') Num#('4') { Left }
FORMAT(ZInPlusInc#,6)
END
END
ZInPlusInc#
FORMAT(ZInPlusInc#,4)
RETURN

DCP2PlusInc:
DLabel
IF Equal? Recall# Num#('3') Num#('3') { Bottom }
FORMAT(ZCP2PlusInc#,6)
ELSE
IF Equal? Recall# Num#('3') Num#('4') { Left }
FORMAT(ZCP2PlusInc#,6)
END
END
ZCP2PlusInc#
FORMAT(ZCP2PlusInc#,4)
RETURN

DCP2PlusIncC:
LoadFeat Num#('0') Num#('0') ZCP2PlusInc#
IF ZMove?
DCP2PlusInc
END
RETURN

CheckHead:
SetFlagF('6')
IF Equal? Recall# Num#('3') Num#('2') { Top }
IF NotEqual? Recall# Num#('4') Num#('2') { LAST NOT Top }
SetFlag('6')
END
ELSE
IF Equal? Recall# Num#('3') Num#('3') { Bottom }
IF NotEqual? Recall# Num#('4') Num#('3') { LAST NOT Bottom }
SetFlag('6')
END
ELSE
IF Equal? Recall# Num#('3') Num#('4') { Left }
IF NotEqual? Recall# Num#('4') Num#('4') { LAST NOT Left }
SetFlag('6')
END
ELSE
IF Equal? Recall# Num#('3') Num#('5') { Right }
IF NotEqual? Recall# Num#('4') Num#('5') { LAST NOT Right }
SetFlag('6')
END
ELSE
IF Equal? Recall# Num#('3') Num#('1') { Front }
IF NotEqual? Recall# Num#('4') Num#('1') { LAST NOT Front }
SetFlag('6')
END
END
END
END
END
END
RETURN

GetDrillCP:
IF RetractToCP1?
DCP1C
ELSE
DCP2C
END
RETURN

DDepth:
DLabel
IF Equal? Recall# Num#('3') Num#('3') { Bottom }
FORMAT(SPZ#,6)
ELSE
IF Equal? Recall# Num#('3') Num#('4') { Left }
FORMAT(SPZ#,6)
END
END
FIRST SPZ#
FORMAT(SPZ#,4)
RETURN

DLevel:
' R'
IF Equal? Recall# Num#('3') Num#('3') { Bottom }
FORMAT(ClearancePlane2#,6)
ELSE
IF Equal? Recall# Num#('3') Num#('4') { Left }
FORMAT(ClearancePlane2#,6)
END
END
ClearancePlane2#
FORMAT(ClearancePlane2#,4)
TrackZNO# FIRST SPZ#
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

MPESWFO: { MultipleParts EquallySpaced }
' G' ADD# PartNum# SUB# NewWFO# Num#('1')
RETURN

WFO:
' G' ADD# PartNum# Num#('54')
RETURN

WFONum:
' G' NewWFO#
RETURN

WFOStuff:
IF NewWFO?
IF MultipleParts? AND WorkFixtureOffsets?
EOL
'*** WARNING *** DO NOT USE NEWWFO() WITH MULTIPLE PARTS AND WORK FIXTURE OFFSETS' EOL
ELSE
WFONum
END
ELSE
IF Flag?('2')
IF NOT SameTool?
IF MultipleParts?
IF WorkFixtureOffsets?
WFO
ELSE
MPESWFO
END
ELSE
WFONum
END
ELSE
IF Flag?('6')
WFONum
ELSE
IF LAST ProgStop?
WFONum
END
END
END
END
END
SetFlagF('2')
RETURN

DoSubComment:
IF UseComments? AND SubComment?
'( SUB NUMBER - ' Program# ' )' EOL
END
RETURN

DoCSComment:
IF AAxisAvail? OR BAxisAvail?
'( CS#' CS# ' - ' CSComment$ ' )' EOL
END
RETURN

CSComments:
IF FirstOperation? OR NewTool? OR ChangeCS?
DoCSComment
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
CSComments
RETURN

CSAngleA:
IF AAxisAvail?
Save# Num#('1') ABS# CSOffsetA#
IF GTEqual? Recall# Num#('1') Num#('360')
Save# Num#('1') ABS# CSOffsetA#
Save# Num#('1') DIV# Recall# Num#('1') Num#('360')
Save# Num#('1') SUB# Recall# Num#('1') TRUNC# Recall# Num#('1')
Save# Num#('1') MUL# Recall# Num#('1') Num#('360')
END
IF LessThan? CSOffsetA# Num#('0')
Save# Num#('1') SUB# Num#('360') Recall# Num#('1')
END
IF Equal? Recall# Num#('1') Num#('360')
Save# Num#('1') Num#('0')
END
END
RETURN

CSAngleAC:
IF AChange?
CSAngleA
END
RETURN

CSAngleB:
IF BAxisAvail?
Save# Num#('2') ABS# CSOffsetB#
IF GTEqual? Recall# Num#('2') Num#('360')
Save# Num#('2') ABS# CSOffsetB#
Save# Num#('2') DIV# Recall# Num#('2') Num#('360')
Save# Num#('2') SUB# Recall# Num#('2') TRUNC# Recall# Num#('2')
Save# Num#('2') MUL# Recall# Num#('2') Num#('360')
END
IF LessThan? CSOffsetB# Num#('0')
Save# Num#('2') SUB# Num#('360') Recall# Num#('2')
END
IF Equal? Recall# Num#('2') Num#('360')
Save# Num#('2') Num#('0')
END
END
RETURN

CSAngleBC:
IF BChange?
CSAngleB
END
RETURN

PSInit:
NewWFOF
RotateF
OptCyc1F
MasterOpF
CallMasterOpF
RETURN

PSStuff:
IF FourthCW?
FORMAT(FourthDegree#,2)
SeqC ' A' FourthDegree# EOL
FourthCWF
END
IF FourthCCW?
FORMAT(FourthDegree#,3)
SeqC ' A' FourthDegree# EOL
FourthCCWF
END
IF FifthCW?
FORMAT(FifthDegree#,2)
SeqC ' B' FifthDegree# EOL
FifthCWF
END
IF FifthCCW?
FORMAT(FifthDegree#,3)
SeqC ' B' FifthDegree# EOL
FifthCCWF
END
RETURN

DoPostScript:
PSInit
EachPS
SeqC PostScript EOL
PSStuff
NextPS
RETURN

DoEndOpPS:
PSInit
EachEOPS
SeqC EndOpPS EOL
PSStuff
NextPS
RETURN

EntryMove:
IF FeedEntry?
SeqC Feed DIn FeedEntC EOL
ELSE
SeqC FeedC DIn RapidFC EOL
END
RETURN

StartSub:
OpenSub
SubID EOL
DoSubComment
RETURN

SubWarning:
IF NOT FeedConnect?
IF AnyZshift?
' ' EOL
'( WARNING ' DLabel ' CLEARANCE WILL CHANGE WITH EACH CYCLE OF SUB REPEAT )' EOL
' ' EOL
END
END
RETURN

StdSub:
SeqC SubCall CallLab RepLab RepCycs EOL
StartSub
RETURN

FinishSub1: {part 1}
SetFlagF('7') { CRCOffC }
SeqC CRCOffC
IF NOT FeedConnect?
IF AutoCycle?
DCP3C
ELSE
IF FIFO?
FeedC DCP3C FeedEntC
ELSE
RapidC DCP3C
END
END
END
EOL
RETURN

FinishSubG92: {part 2}
SeqC Preset
IF NotEqual? RepeatX# Num#('0')
HLabel
IF Equal? Recall# Num#('3') Num#('2') { Top }
IF Equal? Recall# Num#('2') Num#('90')
OriginShiftRY#
ELSE
IF Equal? Recall# Num#('2') Num#('270')
FORMAT(OriginShiftRY#,6)
OriginShiftRY#
ELSE
IF Equal? Recall# Num#('2') Num#('180')
FORMAT(OriginShiftRX#,6)
END
OriginShiftRX#
END
END
ELSE
IF Equal? Recall# Num#('3') Num#('3') { Bottom }
IF Equal? Recall# Num#('2') Num#('90')
FORMAT(OriginShiftRY#,6)
OriginShiftRY#
ELSE
IF Equal? Recall# Num#('2') Num#('270')
OriginShiftRY#
ELSE
IF Equal? Recall# Num#('2') Num#('180')
FORMAT(OriginShiftRX#,6)
END
OriginShiftRX#
END
END
ELSE
OriginShiftRX#
END
END
END
IF NotEqual? RepeatY# Num#('0')
VLabel
IF Equal? Recall# Num#('3') Num#('2') { Top }
IF Equal? Recall# Num#('2') Num#('90')
OriginShiftRX#
ELSE
IF Equal? Recall# Num#('2') Num#('270')
FORMAT(OriginShiftRX#,6)
OriginShiftRX#
ELSE
IF Equal? Recall# Num#('2') Num#('0')
FORMAT(OriginShiftRY#,6)
END
OriginShiftRY#
END
END
ELSE
IF Equal? Recall# Num#('3') Num#('3') { Bottom }
IF Equal? Recall# Num#('2') Num#('90')
OriginShiftRX#
ELSE
IF Equal? Recall# Num#('2') Num#('270')
FORMAT(OriginShiftRX#,6)
OriginShiftRX#
ELSE
IF Equal? Recall# Num#('2') Num#('180')
FORMAT(OriginShiftRY#,6)
END
OriginShiftRY#
END
END
ELSE
OriginShiftRY#
END
END
END
IF NotEqual? RepeatZ# Num#('0')
DLabel OriginShiftRZ#
END
EOL
SeqC EndSub EOL
CloseSub
SeqC Preset
IF NotEqual? RepeatX# Num#('0')
HLabel
IF Equal? Recall# Num#('3') Num#('2') { Top }
IF Equal? Recall# Num#('2') Num#('90')
OriginUSRYCTP#('1')
ELSE
IF Equal? Recall# Num#('2') Num#('270')
FORMAT(OriginUSRYCTP#,6)
OriginUSRYCTP#('1')
ELSE
IF Equal? Recall# Num#('2') Num#('180')
FORMAT(OriginUSRXCTP#,6)
END
OriginUSRXCTP#('1')
END
END
ELSE
IF Equal? Recall# Num#('3') Num#('3') { Bottom }
IF Equal? Recall# Num#('2') Num#('90')
FORMAT(OriginUSRYCTP#,6)
OriginUSRYCTP#('1')
ELSE
IF Equal? Recall# Num#('2') Num#('270')
OriginUSRYCTP#('1')
ELSE
IF Equal? Recall# Num#('2') Num#('180')
FORMAT(OriginUSRXCTP#,6)
END
OriginUSRXCTP#('1')
END
END
ELSE
OriginUSRXCTP#('1')
END
END
END
IF NotEqual? RepeatY# Num#('0')
VLabel
IF Equal? Recall# Num#('3') Num#('2') { Top }
IF Equal? Recall# Num#('2') Num#('90')
OriginUSRXCTP#('1')
ELSE
IF Equal? Recall# Num#('2') Num#('270')
FORMAT(OriginUSRXCTP#,6)
OriginUSRXCTP#('1')
ELSE
IF Equal? Recall# Num#('2') Num#('0')
FORMAT(OriginUSRYCTP#,6)
END
OriginUSRYCTP#('1')
END
END
ELSE
IF Equal? Recall# Num#('3') Num#('3') { Bottom }
IF Equal? Recall# Num#('2') Num#('90')
OriginUSRXCTP#('1')
ELSE
IF Equal? Recall# Num#('2') Num#('270')
FORMAT(OriginUSRXCTP#,6)
OriginUSRXCTP#('1')
ELSE
IF Equal? Recall# Num#('2') Num#('180')
FORMAT(OriginUSRYCTP#,6)
END
OriginUSRYCTP#('1')
END
END
ELSE
OriginUSRYCTP#('1')
END
END
END
IF NotEqual? RepeatZ# Num#('0')
DLabel OriginUSRZCTP#('1')
END
EOL
FORMAT(OriginShiftRX#,4)
FORMAT(OriginShiftRY#,4)
FORMAT(OriginShiftRZ#,4)
FORMAT(OriginUSRXCTP#,4)
FORMAT(OriginUSRYCTP#,4)
FORMAT(OriginUSRZCTP#,4)
RETURN

ToggleIncDecWFO:
IF Flag?('3')
SetFlagF('3')
ELSE
SetFlag('3')
END
RETURN

DoWFOOps:
IF Flag?('5')
SetFlagF('5') { Suppress Redundant WFO for MP-OTAP-ECP }
ELSE
SeqC SetWFO EOL
END
SeqC SubCall CallLab RepLab OnePart EOL
RETURN

OpenMP:
NewProg
IF WorkFixtureOffsets?
IF OneToolAllParts? AND ExitClearancePlane?
SetFlag('5') { Suppress Redundant WFO for MP-OTAP-ECP }
END
IF Flag?('3')
NewWFO
EachWFO {simple eachPart}
DoWFOOps
IncWFO
NextWFO {simple NextPart}
DecWFO
ELSE
LastWFO
EachWFO {simple eachPart}
DoWFOOps
DecWFO
NextPrevWFO {simple NextPart}
IncWFO
END
IF Flag?('4')
ToggleIncDecWFO
END
ELSE
SeqC SubCall CallLab RepLab Parts EOL
IF OneToolAllParts? AND ExitClearancePlane?
SetFlag('2') { WFOStuff }
END
END
StartSub
RETURN

CloseMP:
IF WorkFixtureOffsets?
SeqC EndSub EOL
CloseSub
ELSE
IF NotEqual? PartShiftX# Num#('0')
HLabel
IF Equal? Recall# Num#('3') Num#('2') { Top }
IF Equal? Recall# Num#('2') Num#('90')
OriginShiftPY#
ELSE
IF Equal? Recall# Num#('2') Num#('270')
FORMAT(OriginShiftPY#,6)
OriginShiftPY#
ELSE
IF Equal? Recall# Num#('2') Num#('180')
FORMAT(OriginShiftPX#,6)
END
OriginShiftPX#
END
END
ELSE
IF Equal? Recall# Num#('3') Num#('3') { Bottom }
IF Equal? Recall# Num#('2') Num#('90')
FORMAT(OriginShiftPY#,6)
OriginShiftPY#
ELSE
IF Equal? Recall# Num#('2') Num#('270')
OriginShiftPY#
ELSE
IF Equal? Recall# Num#('2') Num#('180')
FORMAT(OriginShiftPX#,6)
END
OriginShiftPX#
END
END
ELSE
OriginShiftPX#
END
END
END
IF NotEqual? PartShiftY# Num#('0')
VLabel
IF Equal? Recall# Num#('3') Num#('2') { Top }
IF Equal? Recall# Num#('2') Num#('90')
OriginShiftPX#
ELSE
IF Equal? Recall# Num#('2') Num#('270')
FORMAT(OriginShiftPX#,6)
OriginShiftPX#
ELSE
IF Equal? Recall# Num#('2') Num#('0')
FORMAT(OriginShiftPY#,6)
END
OriginShiftPY#
END
END
ELSE
IF Equal? Recall# Num#('3') Num#('3') { Bottom }
IF Equal? Recall# Num#('2') Num#('90')
OriginShiftPX#
ELSE
IF Equal? Recall# Num#('2') Num#('270')
FORMAT(OriginShiftPX#,6)
OriginShiftPX#
ELSE
IF Equal? Recall# Num#('2') Num#('180')
FORMAT(OriginShiftPY#,6)
END
OriginShiftPY#
END
END
ELSE
OriginShiftPY#
END
END
END
IF NotEqual? PartShiftZ# Num#('0')
DLabel OriginShiftPZ#
END
EOL
SeqC EndSub EOL
CloseSub
IF NotEqual? PartShiftX# Num#('0')
HLabel
IF Equal? Recall# Num#('3') Num#('2') { Top }
IF Equal? Recall# Num#('2') Num#('90')
OriginUSPYCTP#('1')
ELSE
IF Equal? Recall# Num#('2') Num#('270')
FORMAT(OriginUSPYCTP#,6)
OriginUSPYCTP#('1')
ELSE
IF Equal? Recall# Num#('2') Num#('180')
FORMAT(OriginUSPXCTP#,6)
END
OriginUSPXCTP#('1')
END
END
ELSE
IF Equal? Recall# Num#('3') Num#('3') { Bottom }
IF Equal? Recall# Num#('2') Num#('90')
FORMAT(OriginUSPYCTP#,6)
OriginUSPYCTP#('1')
ELSE
IF Equal? Recall# Num#('2') Num#('270')
OriginUSPYCTP#('1')
ELSE
IF Equal? Recall# Num#('2') Num#('180')
FORMAT(OriginUSPXCTP#,6)
END
OriginUSPXCTP#('1')
END
END
ELSE
OriginUSPXCTP#('1')
END
END
END
IF NotEqual? RepeatY# Num#('0')
VLabel
IF Equal? Recall# Num#('3') Num#('2') { Top }
IF Equal? Recall# Num#('2') Num#('90')
OriginUSPXCTP#('1')
ELSE
IF Equal? Recall# Num#('2') Num#('270')
FORMAT(OriginUSPXCTP#,6)
OriginUSPXCTP#('1')
ELSE
IF Equal? Recall# Num#('2') Num#('0')
FORMAT(OriginUSPYCTP#,6)
END
OriginUSPYCTP#('1')
END
END
ELSE
IF Equal? Recall# Num#('3') Num#('3') { Bottom }
IF Equal? Recall# Num#('2') Num#('90')
OriginUSPXCTP#('1')
ELSE
IF Equal? Recall# Num#('2') Num#('270')
FORMAT(OriginUSPXCTP#,6)
OriginUSPXCTP#('1')
ELSE
IF Equal? Recall# Num#('2') Num#('180')
FORMAT(OriginUSPYCTP#,6)
END
OriginUSPYCTP#('1')
END
END
ELSE
OriginUSPYCTP#('1')
END
END
END
IF NotEqual? PartShiftZ# Num#('0')
DLabel OriginUSPZCTP#('1')
END
EOL
FORMAT(OriginShiftPX#,4)
FORMAT(OriginShiftPY#,4)
FORMAT(OriginShiftPZ#,4)
FORMAT(OriginUSPXCTP#,4)
FORMAT(OriginUSPYCTP#,4)
FORMAT(OriginUSPZCTP#,4)
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 Equal? Recall# Num#('3') Num#('3') { Bottom - Reverse Arc }
IF ArcCW?
CCWArcC
ELSE
CWArcC
END
ELSE
IF Equal? Recall# Num#('3') Num#('4') { Left - Reverse Arc }
IF ArcCW?
CCWArcC
ELSE
CWArcC
END
ELSE
IF ArcCW?
CWArcC
ELSE
CCWArcC
END
END
END
MoveHVC MoveDC
IF Equal? Recall# Num#('3') Num#('2') { Top }
IF Equal? Recall# Num#('2') Num#('90')
' I' ArcJ# ' K' ArcI#
ELSE
IF Equal? Recall# Num#('2') Num#('270')
FORMAT(ArcJ#,6)
FORMAT(ArcI#,6)
' I' ArcJ# ' K' ArcI#
ELSE
IF Equal? Recall# Num#('2') Num#('0')
FORMAT(ArcJ#,6)
ELSE
FORMAT(ArcI#,6)
END
' I' ArcI# ' K' ArcJ#
END
END
ELSE
IF Equal? Recall# Num#('3') Num#('3') { Bottom }
IF Equal? Recall# Num#('2') Num#('90')
FORMAT(ArcJ#,6)
' I' ArcJ# ' K' ArcI#
ELSE
IF Equal? Recall# Num#('2') Num#('270')
FORMAT(ArcI#,6)
' I' ArcJ# ' K' ArcI#
ELSE
IF Equal? Recall# Num#('2') Num#('180')
FORMAT(ArcI#,6)
FORMAT(ArcJ#,6)
END
' I' ArcI# ' K' ArcJ#
END
END
ELSE
IF Equal? Recall# Num#('3') Num#('4') { Left }
' K' ArcI#
ELSE
IF Equal? Recall# Num#('3') Num#('5') { Right }
FORMAT(ArcI#,6)
' K' ArcI#
ELSE
ArcI
END
END
ArcJ
END
END
FORMAT(ArcI#,4)
FORMAT(ArcJ#,4)
RETURN

ckCRC:
IF LastFeat?
SetFlagF('7') { CRCOffC }
CRCOffC
ELSE
IF NOT ZMove? AND CutterRadiusCompensation?
CRCOnC { No Output }
IF NOT Flag?('7')
SetFlag('7') { CRCOnC }
IF Equal? Recall# Num#('3') Num#('3') { Bottom - Reverse CRC }
IF CRCLeft?
' G42'
ELSE
' G41'
END
ELSE
IF Equal? Recall# Num#('3') Num#('4') { Left - Reverse CRC }
IF CRCLeft?
' G42'
ELSE
' G41'
END
ELSE
IF CRCLeft?
' G41'
ELSE
' G42'
END
END
END
END
END
END
RETURN

ckCRCNum:
IF NOT LastFeat? AND Equal? SPZ# EPZ#
CRCOffsetC
END
RETURN

ToolPath:
ResetCRCNum
EACHFeat
IF PointFeat?
IF AutoCycle?
SeqC MoveSHVC EOL
SeqC SubCall CallLab EOL
CalcACSRXY {calc tool position after sub call, CalcAutoCycleStatusRecordXY}
ELSE
SeqC DoDrillAbsOrInc MoveSHVDC EOL
END
ELSE
IF RapidFeat?
IF XMove? OR YMove? OR ZMove?
SeqC DoAbsOrInc ckCRC RapidC MoveHVC MoveDC ckCRCNum EOL
END
ELSE
IF LineFeat?
IF XMove? OR YMove? OR ZMove?
IF Decelerate?
IF RoomToDecel?
DecelMove1
SeqC DoAbsOrInc ckCRC FeedC MoveHVC MoveDC FeedRateC ckCRCNum EOL
DecelMove2
END
SeqC DoAbsOrInc ckCRC FeedC MoveHVC MoveDC DecelFeed ckCRCNum EOL
ELSE
SeqC DoAbsOrInc ckCRC FeedC MoveHVC MoveDC 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

AutoCycCutSub1: {part 1}
SaveSubStatus {save tool position}
SetPass1 {element cut moves}
StartSub
SetSRXYtoSP
SeqC IncValue EOL
RETURN

AutoCycCutSub2: {part 2}
ToolPath
SeqC AbsOrInc
IF Repeats? AND FeedConnect? AND ZshiftOnly?
ELSE
IF FIFO?
FeedC DCP2 FeedEntC
ELSE
RapidC DCP2 EOL
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

G92Sub:
SubWarning
StdSub
SeqC AbsOrInc Feed StartPos
IF NOT FeedConnect?
RapidF
END
EOL
Milling
FinishSub1
FinishSubG92
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 StartPosC EOL
AbsOrInc
END
END
SeqC DInPlusInc FeedEnt EOL
ELSE
IF NOT FirstCycle?
Feed
IF SPXMove? OR SPYMove?
SeqC IncValue StartPosC RapidFC EOL
AbsOrInc
END
IF FeedEntry?
SeqC DCP2PlusInc RapidFC EOL
END
END
IF FeedEntry?
SeqC Feed DInPlusInc FeedEnt EOL
ELSE
IF FirstCycle?
Feed
END
SeqC FeedC DInPlusInc RapidFC 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 DCP2 FeedEnt EOL
ELSE
SeqC Rapid DCP2 EOL
END
END
SeqC EndSub EOL
CloseSub
{Element shift, not pattern}
RETURN

ZonlyRep:
EachCycle
IF NOT FirstCycle?
SeqC Feed StartPos
IF NOT FeedConnect?
RapidF
END
EOL
END
IF FeedConnect?
SeqC FeedC DInPlusInc FeedEnt EOL
ELSE {Entry/Exit Connect}
IF FeedEntry?
IF NOT FirstCycle?
SeqC FeedC DCP2PlusIncC RapidFC EOL
END
SeqC Feed DInPlusInc FeedEnt EOL
ELSE
SeqC FeedC DInPlusInc RapidFC 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# Recall# Num#('5') { ClearancePlane1# }
ELSE
TrackZNO# ClearancePlane2#
END
RETURN

OpGuts:
IF Milling?
SeqC DCP2C EOL
GetCoolOn
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
GetCoolOff
IF AutoCycle?
SeqC DCP3C EOL
ELSE
IF FIFO?
SeqC FeedC CRCOffC DCP3C FeedEntC EOL
ELSE
SeqC RapidC CRCOffC DCP3C EOL
END
SetFlagF('7') { CRCOffC }
END
ELSE
IF Drilling?
IF Repeats?
NewProg
StdSub
SeqC AbsOrInc Feed StartPos RapidF EOL
END
SeqC GetDrillCP EOL
GetCoolOn
GetCycle
SeqC Cycle FromCP StartPos DDepth DLevel Dwell Peck Retract FeedEnt EOL
IF CallMasterOp?
SeqC SubCall CallLabB CallMasterNum# EOL
SkipToLastFeat
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}
ELSE
ToolPath
END
END
SetDrillEndOpZ
GetCoolOff
SeqC Rapid DrillOff DCP3 EOL
IF Repeats?
FinishSubG92
END
END
END
RETURN

ProgStart:
InitProg
ReverseXZArcs
InitWFONum
SetFlood
UseSeparateSubCalls
SetMaxSeparateSubCalls('50')
SetMaxRPM('2200')
IF Metric?
SetMaxFeed('15240')
ELSE
SetMaxFeed('600')
END
Save# Num#('1') Num#('0') { CSOffsetA# }
Save# Num#('2') Num#('0') { CSOffsetB# }
Save# Num#('3') Num#('0') { Current CSGroup }
Save# Num#('4') Num#('0') { LAST CSGroup }
Save# Num#('5') Num#('0') { ClearancePlane1# }
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('6') { SameTool CheckHead }
SetFlagF('7') { CRCOffC }
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
' NewWFO(56), NWFO(56) -' EOL
' The Work Fixture Offset # you specify will be used for all following operations.' EOL
' Do not use with the ncPost multiple part option.' 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
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 NOT IN SPINDLE )' EOL
END
END
OpenSub
RestoreScale
RETURN

FirstOp1:
Save# Num#('5') ClearancePlane1#
CSAngleA CSAngleB GetPlane
Seq AbsOrInc Rapid CRCOff DrillOff ' G54 H0 D0' EOL
DoOpComments
DoPostScript
Plane { No Output }
RETURN

FirstOp2:
SeqC SetPlane WFOStuff EOL
SeqC SpinOff EOL
SeqC OpToolID EOL
SeqC ToolChng EOL
SeqC HeadClear EOL
SeqC SetHead EOL
SeqC Speed SpinOn EOL
CheckPass
IF Equal? Recall# Num#('3') Num#('1') { Front }
SeqC AbsOrInc Feed StartPos RapidF EOL
ELSE
PartClear
SeqC StartPos EOL
END
RETURN

FirstOp3:
SeqC SetOfstOn ToolOfst DCP1 EOL
RETURN

NewToolOp1:
CSAngleA CSAngleB GetPlane
SeqC SetLastOfstOff EOL
RETURN

NewToolOp2:
DoEndOpPS
SeqC SpinOff EOL
IF LAST ProgStop?
SeqC ' M0' EOL
ELSE
SeqC ProgStop EOL
END
RETURN

NewToolOp3: {Start new Operation}
DoOpComments
DoPostScript
Plane { No Output }
RETURN

NewToolOp4:
Seq SetPlane WFOStuff EOL
SeqC SpinOff EOL
SeqC OpToolID EOL
SeqC ToolChng EOL
SeqC HeadClear EOL
SeqC SetHead EOL
SeqC Speed SpinOn EOL
CheckPass
IF Equal? Recall# Num#('3') Num#('1') { Front }
SeqC AbsOrInc Feed StartPos RapidF EOL
ELSE
PartClear
SeqC StartPos EOL
END
RETURN

NewToolOp5:
SeqC SetOfstOn ToolOfst DCP1 EOL
RETURN

SameToolOp1:
DoEndOpPS
CSAngleA CSAngleB GetPlane
CheckHead
IF Flag?('6') { SameTool CheckHead }
SeqC SetLastOfstOff EOL
SeqC SpinOff EOL
SeqC HeadClear EOL
IF LAST ProgStop?
SeqC ' M0' EOL
END
ELSE
IF LAST ProgStop?
SeqC SetLastOfstOff EOL
SeqC SpinOff EOL
SeqC HeadClear EOL
SeqC ' M0' EOL
ELSE
IF NewToolOffset? {OR ChangeCS?}
SeqC SetLastOfstOff EOL
ELSE
IF NewWFO?
SeqC SetLastOfstOff EOL
END
END
END
END
RETURN

SameToolOp2: {Start new Operation}
Plane { No Output }
DoOpComments
DoPostScript
CheckPass
RETURN

SameToolOp3: {Start new Operation}
IF Flag?('6') { SameTool CheckHead }
SeqC SetPlane WFOStuff EOL
SeqC SetHead EOL
SeqC Speed SpinOn EOL
IF Equal? Recall# Num#('3') Num#('1') { Front }
SeqC AbsOrInc Feed StartPos RapidF EOL
ELSE
PartClear
SeqC StartPos EOL
END
SeqC SetOfstOn ToolOfst DCP1 EOL
ELSE
IF LAST ProgStop?
SeqC SetPlane WFOStuff EOL
SeqC SetHead EOL
SeqC Speed SpinOn EOL
SeqC AbsOrInc Feed StartPos RapidF EOL
SeqC SetOfstOn ToolOfst DCP1 EOL
ELSE
IF NewWFO?
SeqC SetPlane WFOStuff EOL
END
SeqC SpeedC EOL
SeqC AbsOrInc Feed StartPos RapidF EOL
IF NewToolOffset? {OR ChangeCS?}
SeqC SetOfstOn ToolOfst DCP1 EOL
ELSE
IF NewWFO?
SeqC SetOfstOn ToolOfst DCP1 EOL
END
END
END
END
RETURN

End1:
SeqC SetOfstOff EOL
RETURN

End2:
DoEndOpPS
IF ProgStop?
SeqC ' M0' EOL
END
RETURN

End3:
SeqC SpinOff EOL
SeqC ToolChng EOL
SeqC HeadClear EOL
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}
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
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
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
FirstOp2 {need StrtPos in Sub}
ELSE
IF NewTool?
CloseMP
NewToolOp1
NewToolOp2 {to tool change, CS problem}
NewToolOp3
NewToolOp4
NewToolOp5
OpenMP
NewToolOp4 {need StrtPos in Sub}
ELSE {implied SameTool?}
SameToolOp1
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


Wyszukiwarka

Podobne podstrony:
Fanuc 18M Elgamill M468 13 3
Fanuc 18M MS [WP] CV86 15
Fanuc 18M MS [RO] CQ52 15
Fanuc 18M MS [CST] NCT81 16
Fanuc 0M Supermax M130 15
Fanuc 11M Toyoda D434 15 1
Fanuc 6M [BW] MZ45 15
Fanuc 6M Chiron D214 15
Fanuc 0M Supermax C130 15
Fanuc 0M [TK] MU53 15
Fanuc 6M NoSubs D877 15 3
Fanuc 6M Chiron B214 15
Fanuc 6M NoSubs C877 15 3
Fanuc 18M MS [MT] MT07 89
Fanuc 0MB Laser MX98 15
Fanuc 11M Matsuura C353 15
Fanuc 10M [LAM] CW65 15 2

więcej podobnych podstron