{10/30/89, updated to .66 version from 001.66, WFG} {10/30/89, set up with no loops, incremental repeats and multiple parts, WFG} {11/25/89, more cust mods, WFG} {2/28/90, Modified safe start block per Cliff, J. Cusimano} {7/24/90, Added InitProg globally to posts with this remark, DWB}
{1/25/91 Modified: Yasnac MX3 Mat 1000 M265.70 For: Hughes Radar Updated to Version 3.2 per Fanuc 6M M001.76.1 Format. Cleaned up prog. Added capability to output all incremental subs for AutoCycles. DWB}
{2/22/91 Modified: Yasnac MX3 Mat 1000 M265.76.1 For: Hughes Radar Updated to Version 3.4 per Fanuc 6M M001.76.3 Format. Added Safe End Block stuff from NewTool to Safe Startup Block of FirstOperation. Replaced all occurances of IncValue OfstOff with Safe End Block stuff from NewTool. DWB}
{12/17/91 Modified: Yasnac MX3 Mat 1000 M265.76.3 For: Gibbs & Associates Updated to Version 4.0 per Fanuc 6M M001.81 Format. Kim Michelman}
{12/18/91 Modified: Yasnac MX3 Mat 1000 M265.81 For: Hughes Radar Changed logic for WFOStuff:. Removed WFOStuff from the GetStartOfSameTool. Added OpenSpindleCheck and CloseSpindleCheck. Changed the SetMaxRPM to ('6000') instead of ('10000') to allow the program to begin in the normal spindle speed enable. Changed FirstOp to add IF ToolOver? logic. Added WFOStuff to IF SameTool? logic. Changed the literal 'G52' in the safe start-up to a WFOStuff command in IF SameTool? logic. Kim Michelman}
{10/18/93 Modified: Yasnac MX3 Mat 1000 M265.81.1 For: Hughes Radar Updated to .81.2 format per Fanuc 6M IncSubs M001.81.2 Jim Radcliffe}
{10/17/94 Modified: Yasnac MX3 Mat 1000 M265.81.2 For: Hughes Radar Versions: ncCad 4.33/ncCAM 4.33/ncPost 4.33.03/Compost 4.21.22 Changes made per Steve Sato of Hughes Radar Deleted blank lines at SubWarning sub. Added CkCRC sub for CRCOffC per version 4.2. CutterRadiusCompensation ExitLength will output G40 on LastFeat AND LineFeat at StdLine sub. Added support of CRC during multiple pocket dog-bone operation. Outputs G41/G42 on Z Plunge block at CkCRC sub. Modified condition to output CRCOffC for LastFeat AND AutoCycle at ToolPath RapidFeat. Assures that G40 is not output prior to LastFeat. Added condition to output CRCOffC for ZMoveOnly Feature at ToolPath RapidFeat Outputs G40 at all Z Retract blocks. Customer requested WFOStuff output at all Operations. Moved IF ToolOver?('30') to WFOStuff sub from OpenSpindleCheck sub and FirstOperation. Will output literal 'G54' permanent register IF TRUE. Register contains difference between low speed and high speed spindles. Will handle normal support IF FALSE. Changed First Work Fixture Offset from G54 to G56 in Compost Commands 5 dialog. G56 is default value for Tools Less Than or Equal to 30. Deleted IF NOT SameTool? AND IF NeedWFO1? condition at WFOStuff sub. Modified OpenSpindleCheck sub. Following blocks were output at end of all 3 conditions of sub. Moved the blocks to NewTool, following call of sub. DoPostScript DoOpComments SeqC Plane 'G80' CRCOffC EOL SeqC WFOStuff EOL Combined OpToolID and ToolChng on one block at OpenSpindleCheck sub. Moved this block to end of SpindleChange sub and deleted occurances within. Changed SafeStart block from Rapid CRCOff 'G49G52G61G80' 'Z0' to Rapid Plane CRCOff 'G49G52G61G80' AbsOrInc 'Z0' SpinOff at NewTool. Changed SafeStart block from Rapid CRCOff 'G49G52G61G80' 'Z0' to Rapid CRCOff 'G49G52G61G80' AbsOrInc 'Z0' SpinOff at end of Prog. Moved these blocks after IF MultipleParts? AND OneToolAllParts? AND FullUp? Added literal 'G49' inside IF MultipleParts? AND OneToolAllParts? AND FullUp? at NewTool and end of Prog. Added literal 'G28X0Y0' block following SafeStart block at NewTool and end of Prog. Deleted SpinOff from IF ToolChangeAtHome? condition at NewTool. Deleted SpinOff from IF FirstToolChangeAtHome? condition at end of Prog. Added Seq at OpenSpindleCheck call at NewTool. Changed SpinOff to 'G28X0Y0' for LAST ProgStop? at SameTool. Deleted calls to WFOStuff at SameTool and added at GetStartOfSameTool sub. Added Speed SpinOn block to all conditions at SameTool. Added OfstOn block to all conditions at SameTool. DWB}
{ Format: Yasnac MX3 Mat 1000 M265.81.4 5/9/95 Removed 'G28X0Y0' from NewTool. TH}
{9/26/95, Updated Yasnac MX3 Mat 1000 M265.81.4 to .85 format per Fanuc 6M IncSubs M001.85, JR}
{2/6/96, Updated .85 version to .86, MPK}
{3/22/96, Tested ZOnlyRepAutoCycle, Changed version # to .89, MPK}
{18Jun97 Original: Yasnac MX3 Mat 1000 M265.89 Created: Yasnac MX3 1000 [OM] Mxxx.89 For: Olson Mfg. Changes made per: John Langenberg Updated Post per Yasnac MX3 Mat 500 M775.89. Removed all IncSubs Changed Literal 'Z0' to 'Z-4.937' in FirstOperation?, NewTool? and and end of Prog. Changed WFO1 from G56 to G54 in MachSpec Deleted literal 'G28X0Y0' in NewTool, SameTool and end of Prog. Added StrtPos to Drill dycle in DrillStuff Changed OpToolID and ToolChng to output on seperate lines in FirstOperation and OpenSpindleCheck Charles Winston}
{31Aug98 Original: Yasnac MX3 1000 [OM] MX37.89 Created: Yasnac MX3 1000 [OM] Bxxx.15 For: Olson Mfg Created B_Style Advanced Mill Post per Fanuc 6M (FW) B001.15 Charles Winston}
Changes to Prog: 1) CheckPass - Added ClearCSOffset. This solves a problem of not resetting the CSOffset if doing multiple CS's in the same plane. CDH}
RestoreScale: IF Metric? {CAM file is in Metric, tools and tool path} SetScale('.03937007874') { change to English, this is an English post} END RETURN
WFO: IF ToolOver?('30') 'G54' ELSE 'G' ADD# PartNum# Num#('53') 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 'G52X' 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 NewTool? OR ChangeCS? '( ' CSWFO ' = X' CSOffsetX# ' Y' CSOffsetY# ' Z' CSOffsetZ# IF AAxisAvail? ' A' CSOffsetA# END IF BAxisAvail? ' B' CSOffsetB# END ' )' 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
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? IF WFOCS? 'A0.' ELSE 'A' CSOffsetA# END END RETURN
CSAngleAC: IF AChange? CSAngleA END RETURN
CSAngleB: IF BAxisAvail? IF WFOCS? 'B0.' ELSE 'B' CSOffsetB# END END 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 RepLab OnePart 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 CallLab RepLab Parts 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# RepLab OnePart EOL NextCSOp RETURN
CloseMP: 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 MoveXYZC 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 MoveSXYZC EOL END ELSE IF RapidFeat? IF XMove? OR YMove? OR ZMove? SeqC DoAbsOrInc ckCRC RapidC MoveXYZC ckCRCNum EOL END ELSE IF LineFeat? IF XMove? OR YMove? OR ZMove? IF Decelerate? IF RoomToDecel? DecelMove1 SeqC DoAbsOrInc ckCRC FeedC MoveXYZC FeedRateC ckCRCNum EOL DecelMove2 END SeqC DoAbsOrInc ckCRC FeedC MoveXYZC DecelFeed ckCRCNum EOL ELSE SeqC DoAbsOrInc ckCRC FeedC MoveXYZC 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 ZCP2 FeedEntC ELSE RapidC ZCP2 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 ZInPlusInc FeedEnt EOL ELSE IF NOT FirstCycle? Rapid IF SPXMove? OR SPYMove? SeqC IncValue StrtPosC EOL AbsOrInc END IF FeedEntry? SeqC ZCP2PlusInc EOL END END IF FeedEntry? SeqC Feed ZInPlusInc FeedEnt EOL ELSE IF FirstCycle? Rapid END SeqC RapidC ZInPlusInc 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 ZCP2 FeedEnt EOL ELSE SeqC Rapid ZCP2 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 ZInPlusInc FeedEnt EOL ELSE {Entry/Exit Connect} IF FeedEntry? IF NOT FirstCycle? SeqC RapidC ZCP2PlusIncC EOL END SeqC Feed ZInPlusInc FeedEnt EOL ELSE SeqC RapidC ZInPlusInc 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 ClearCSOffset RETURN
SkipToLastFeat: EachFeat IF LastFeat? TrackXNO# SPX# TrackYNO# SPY# END NextFeat RETURN
SetDrillEndOpZ: IF RetractToCP1? TrackZNO# ClearancePlane1# ELSE TrackZNO# ClearancePlane2# END RETURN
OpenSpindleCheck: IF ToolOver?('30') {This Op in High Speed} IF LAST NOT ToolOver?('30') {If Last Op was Normal Speed, need to setup High Speed Mode} SetMaxRPM('60000') Seq 'T30' ToolChng EOL SeqC 'M41' EOL END SeqC 'M0' EOL ELSE {This Op in Normal Speed} SetMaxRPM('6000') SeqC OpToolID EOL SeqC ToolChng EOL END RETURN
CloseSpindleCheck: IF NOT ToolOver?('30') AND LAST ToolOver?('30') {Changing from High Speed to Normal Speed Mode} SeqC 'M40' EOL END RETURN
DrillStuff: GetCycle SeqC DrillCP EOL SeqC Cycle FromCP StrtPos ZDepth RLevel 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 RETURN
OpGuts: IF Milling? SeqC ZCP2C 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 ZCP3C EOL ELSE IF FIFO? SeqC FeedC CRCOffC ZCP3C FeedEntC EOL ELSE SeqC RapidC CRCOffC ZCP3C EOL END END ELSE IF Drilling? IF Repeats? NewProg StdSub SeqC AbsOrInc Rapid StrtPos EOL END DrillStuff SeqC Rapid 'G80' ZCP3 EOL IF Repeats? FinishSubG92 END END END RETURN
ProgStart: InitProg ReverseXZArcs InitWFONum SetFlood UseSeparateSubCalls SetMaxSeparateSubCalls('50') SetMaxRPM('6000') 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? '( ' 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
NewToolOp1a: CloseSpindleCheck SeqC 'G49' EOL { OfstOff } SeqC 'G28X0Y0' EOL { Allows Tool to clear part and fixturing } RETURN
NewToolOp2: SeqC Rapid Plane CRCOff 'G49G52G61G80' AbsOrInc 'Z-4.937' SpinOff EOL SeqC 'G28X0Y0' EOL { Allows Tool to clear part and fixturing } DoEndOpPS IF ToolChangeAtHome? SeqC AbsOrInc Rapid Home EOL END IF LAST ProgStop? SeqC 'M0' EOL ELSE SeqC ProgStop EOL END RETURN
NewToolOp2a: SeqC Rapid Plane CRCOff 'G49G52G61G80' AbsOrInc 'Z-4.937' SpinOff EOL DoEndOpPS IF ToolChangeAtHome? SeqC AbsOrInc Rapid Home EOL END IF LAST ProgStop? SeqC 'M0' EOL ELSE SeqC ProgStop EOL END RETURN
SameToolOp1: DoEndOpPS IF LAST ProgStop? IF AbsoluteMoves? SeqC 'G49Z0' EOL {we are in absolute, output G49Z0, also cancels offset} ELSE SeqC OfstOff EOL {we are in incremental, output G28Z0} SeqC 'G49' EOL {we did not cancel the offset} END SeqC SpinOff EOL SeqC 'M0' EOL ELSE IF NewToolOffset? OR ChangeCS? IF AbsoluteMoves? SeqC IncValue OfstOff EOL SeqC AbsValue EOL ELSE SeqC OfstOff EOL END END END RETURN
SameToolOp2: {Start new Operation} DoOpComments DoPostScript CheckPass RETURN
SameToolOp3: {Start new Operation} SeqC WFOStuff EOL G52Stuff IF LAST ProgStop? SeqC Speed SpinOn EOL SeqC PlaneC AbsOrInc Rapid StrtPos CSAngleA CSAngleB EOL SeqC OfstOn EOL ELSE SeqC PlaneC AbsOrInc Rapid StrtPos CSAngleA CSAngleB EOL IF NewToolOffset? OR ChangeCS? SeqC OfstOn EOL END END RETURN
End1: SeqC Rapid CRCOff 'G49G52G61G80' AbsOrInc 'Z-4.937' SpinOff EOL SeqC 'G28X0Y0' EOL { Allows Tool to clear part and fixturing } CloseSpindleCheck RETURN
End2: DoEndOpPS IF FIRST ToolChangeAtHome? {added FIRST modifier} SeqC AbsOrInc Rapid FirstHome EOL END IF Equal? CSOffsetA# Num#('0') AND Equal? CSOffsetB# Num#('0') ELSE SeqC IF AAxisAvail? CSAngleA END IF BAxisAvail? CSAngleB END EOL SeqC Preset IF AAxisAvail? 'A0' END IF BAxisAvail? 'B0' END EOL END IF ProgStop? SeqC 'M0' EOL END RETURN
End3: 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 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 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