Fanuc 16M Kuraki C123 15


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

{
10/24/94 [cwh]
B001.81.4 ( from B001.81.3 )

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}

{Prog Numeric Format Definitions ****}

#1 = '#.00'
#2 = '#####.###;0'
#3 = '*#####.###;0'
#4 = '####.####;0'
#5 = '#######0'
#6 = '####^##0'
#7 = '0000'
#8 = '*####.####;0'

FORMAT(FileFeet#,1)
FORMAT(FileMeters#,1)
FORMAT(SUB#,2)
FORMAT(CSOffsetA#,3)
FORMAT(CSOffsetB#,3)
FORMAT(ToolDiameter#,4)
FORMAT(CSOffsetX#,4)
FORMAT(CSOffsetY#,4)
FORMAT(CSOffsetZ#,4)
FORMAT(TrackZNO#,4)
FORMAT(ClearancePlane1#,4)
FORMAT(ClearancePlane2#,4)
FORMAT(SPZ#,4)
FORMAT(EPZ#,4)
FORMAT(ZInPlusInc#,4)
FORMAT(ZCP2PlusInc#,4)
FORMAT(ADD#,5)
FORMAT(CS#,5)
FORMAT(Operation#,5)
FORMAT(Tool#,5)
FORMAT(NewWFO#,5)
FORMAT(Parts#,5)
FORMAT(Dwell#,6)
FORMAT(Program#,7)
FORMAT(CallMasterNum#,7)
FORMAT(CSSubID#,7)

{Added Subroutines ***}

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

CSPartNum#:
ADD# CS# MUL# NumOfCS# SUB# PartNum# Num#('1')
RETURN

CSWFO:
' G' ADD# CSPartNum# Num#('53')
RETURN

WFO:
' G' ADD# PartNum# Num#('53')
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

PSInit:
NewWFOF
FourthCWF
FourthCCWF
FifthCWF
FifthCCWF
RotateF
OptCyc1F
MasterOpF
CallMasterOpF
RETURN

PSStuff:
RETURN

DoPostScript:
PSInit
EachPS
SeqC PostScript EOL
PSStuff
NextPS
RETURN

DoEndOpPS:
PSInit
EachEOPS
SeqC EndOpPS EOL
PSStuff
NextPS
RETURN

EntryMove:
IF FeedEntry?
SeqC Feed WZIn FeedEnt EOL
ELSE
SeqC RapidC WZIn EOL
END
RETURN

StartSub:
OpenSub
ASCII('13') SubID EOL
DoSubComment
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

StdSub:
SeqC SubCall CallLabB RepCycs Program# EOL
StartSub
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

FinishSubG92: {part 2}
SeqC Preset ShiftRC EOL
SeqC EndSub EOL
CloseSub
SeqC Preset UnshftRC 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

AutoCycCutSub1: {part 1}
SaveSubStatus {save tool position}
SetPass1 {element cut moves}
StartSub
SetSRXYtoSP
Seq IncValue EOL
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

G92Sub:
SubWarning
StdSub
SeqC Connect StrtPos 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 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

FirstOp1:
Seq
CSAngleA
SeqC Plane Rapid CRCOff AbsOrInc WFOStuff DoToolTypeComment EOL
DoOpComments
DoPostScript
RETURN

FirstOp2:
G52Stuff
CSAngleB
CheckPass
SeqC StrtPos ' W0' Speed SpinOn
IF NOT LastTool?
PreTool
END
EOL
RETURN

FirstOp2a:
G52Stuff
CSAngleB
CheckPass
SeqC Rapid StrtPos ' W0' Speed SpinOn EOL
RETURN

FirstOp3:
SeqC ' G43' ToolOfst ZCP1 CoolOn EOL { OfstOn }
SeqC WZCP1 EOL
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

NewToolOp3: {Start new Operation}
Seq
CSAngleAC
SeqC PlaneC Rapid CRCOff AbsOrInc WFOStuff DoToolTypeComment EOL
DoOpComments
DoPostScript
RETURN

NewToolOp4:
G52Stuff
CSAngleBC
CheckPass
SeqC StrtPos ' W0' Speed SpinOn PreTool EOL
RETURN

NewToolOp4a:
G52Stuff
CSAngleB
CheckPass
SeqC Rapid StrtPos ' W0' Speed SpinOn EOL
RETURN

NewToolOp5:
SeqC ' G43' ToolOfst ZCP1 CoolOn EOL { OfstOn }
SeqC WZCP1 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


Wyszukiwarka