Acr A2100 [PP] PMT82 17 3


{
MILL=T
LATHE=F
SIMPLE_ROT_POS=T
ROTARY_MILL=F
ADV_MILL=F
SUBS=T
MILLTURN_Y-AXIS=F
METRIC=F
}

{Prog Comments ****}
{
02/20/95 [ws]
M750.00.00

Initial creation from M703.82.16
removed all settting of Cycle Parameter Values
changed final M30 to M26M02
added tool prep of the first tool used in the last tool change.
}

{ NOTE: Will Not Support Auto Drill Subs since this is a Long Hand Post }

{
3/8/95 [ws]
Cin Acr A2100-Lancer M750.00.01 (from M750.00.00)

modified the colon block for same tool tool change to include a Z move to CP1.

4/4/95 [ws]
Cin Acr A2100-Lancer M750.00.02 (from M750.00.01)

eliminated the quotes (") from the MSG blocks (comments)
modified to support A2100 loop structures for Multiple Parts Programming
modified so no conversion made for English only post - will now be an English/Metric Post (G70/G71)
modified to support Absolute positions after tool change when "Incremental" is selected.
modified so message comment will recognize English/Metric programming
modified so PostScript commands work correctly for Coolant
added format command for TrackZNo to fix output of unwanted lines
added TrackZNo in zOnlyRep to fix incremental full up move for one case only (Plunge).

4/19/95 [ws]
Cin Acr A2100-Lancer M750.00.03 (from M750.00.02)

modified Multiple Parts Programming so M26 output on last operation.
modified to Fix PostScript problem with First Operation.
modified so PostScript done beforer the coolant code output.

5/10/95 [ws]
Cin Acr A2100-Lancer M750.00.04 (from M750.00.03)

modified zOnlyRep sub to fix incorrect Ramp Moves.


8/1/95 [ws]
Acr A2100-Generic M750.00.06 (from - Acr A2100-Generic M750.00.05)
renamed SeqC to SeqLabC for two cases which caused negative number problems.
forces a feedrate to be output for Thread Milling

2/14/96 [ws]
Acr 2100-Generic M930.00
To be used with Windows Versions 2.28.09 and higher
(MTest1) - 2/13/96 [ws]
Form Change to support spaces before word letters
modifed constant words to include spaces.
(MTest2) - 2/14/96 [ws]
added o-word w/ zero when no CRC.
fixed no space w/ z-word for zOnlyRep no feed connects.


7/25/96 [ws]
Acr 2100-Generic M930.12.01 (Acr 2100-Generic M930.12 )
To be used with Windows Versions 2.28.09 and higher
(MTest1) - 7/25/96 [ws]
changed stdLine so entry moves would be at an entry feedrate.

8/6/96 [ws]
Acr 2100-Generic M930.12.02 (Acr 2100-Generic M930.12.01 )
To be used with Windows Versions 2.28.09 and higher
same as M930.12.01, but given new name since customer given a bad copy.

2/7/97 [ws]
Acr 2100-Generic M930.12.03 (Acr 2100-Generic M930.12.02 )
(Testa) - 2/2/97 [ws]
changed the SetMaxFeed('500') to SetMaxFeed('50000')
(Testb) - 2/10/97 [ws]
removed subs ckMove, ckHMove, ckVMove and calls to it which provided arc to line special code (see DB).
In toolPath, removed call to ckMove and related lines.
commented out calls for creating subroutines since this is a no sub post.

3/13/97 [ws]
Acr 2100-Generic M930.12.04 (Acr 2100-Generic M930.12.03 )
(Testa) - 3/13/97 [ws]
removed the z-word following the colon block with the T-word.
added block delete (//1) before the T-word when a same tool is used.
changed so will retract to part clearance before a tool change.
added 'M26' block before a move to tool change position if specified.
added '//1 M26' and //1 X Y blocks for a same tool if tool change position specified.
added space before lines with FIXTURE_NUM when multiple parts are specified.
(Testb) - 3/14/97 [ws]
removed ZCP1 on G0 line following the colon block with the T-word.
added colon before 'M26' blocks so could be used as a start of a block.
removed the extra 'M26' block on tool changes.
(Testc) - 3/14/97 [ws]
added logic in New Tool to suppress M26 when 1TAPfu
added a space in front of MP comment providing the GOTO jump.
(Testd) - 3/17/97 [ws]
added move to tool change position for first operation
removed logic in New Tool to suppress M26 when 1TAPfu and replaced it with M26
remove M26 being output after newToolOp2 for 1TAPfu
(Teste) - 3/17/97 [ws]
added an M26 before tool change for a first tool operation.
(Testf) - 3/18/97 [ws]
moved ToolChangeAtHome? logic to after the operation label in First and NewTool Operations MP.
expanded ToolChangeAtHome? logic to include No Tool Change case
modifed end1_MP adding M26 for 1TAPfu case
(Testg) - 3/18/97 [ws]
changed end1_MP added M26 for 1PAT case.
deleted ToolChangeAtHome? case in END code.

4/22/97 [ws]
Acr 2100-Generic M930.12.05 (Acr 2100-Generic M930.12.04 )
(Testa) - 4/22/97 [ws]
moved D & O words to the colon block line to fix block delete problem.

6/11/97 [ws]
Acr 2100-Generic M930.12.06 (Acr 2100-Generic M930.12.05 )
(Testa) - 6/11/97 [ws]
added M26 to colon block in the initOp function.

6/25/97 [ws]
Acr 2100-Generic M930.12.07 (Acr 2100-Generic M930.12.06 )
(Testa) - 6/25/97 [ws]
moved first Z move for an operation on same block with X and Y move.
removed the initial Z move to Operation Clearance in opGuts
replaced AbsOrInc command with G98.1 for blocks within ToolChangeAtHome?
(Testb) - 6/25/97 [ws]
modified so home location is output in Absolute when used with G98.1
(Testd) - 6/26/97 [ws]
modified first Z move for an operation to be part clearance instead of operation clearance
removed the rapid command on the G98.1 blocks
undid the change made to remove the initial Z move to Operation Clearance in opGuts

7/11/97 [ws]
Acr 2100-Generic M930.12.08 (Acr 2100-Generic M930.12.07 )
(Testa) - 7/11/97 [ws]
added M41 to the colon block for a same tool change where the Tool Change is block deleted.
move the D and 0 words, toolCRCOfst, to the first block which has an X and Y move.

9/26/97 [ws]
Acr 2100-Generic M930.12.09 (Acr 2100-Generic M930.12.08 )
(Testa) - 9/22/97 [ws]
added fix to support Patterns w/ Z-Only repeats.
(Testb) - 9/23/97 [ws]
modifed cutAutoCycle to fix additional Pattern problems.

10/24/97 [ws]
Acr 2100-Generic M930.12.10 (Acr 2100-Generic M930.12.09 )
changed the MaxRPM rate from 10,000 to 131,000
changed so the H-word starts from the Starting Sequence No. instead being Hard Coded to 1
changed so the H-word for Multiple parts will be converted to 1 if sequence# is 0
added Entry FeedRate in the Colon Block while removing the M41
added comments for "block delete omits tool change" and "H-word fixture number is from the sequence starting number"
}

{1/20/98
Initial: Acr A2100 Generic M930.12.10
Created: Acr A2100 [PP] PMxxx.17.3
Customer: Pioneer Precision
Form:
Changed Polar Angle label to "A"
Prog:
Made Simple 4th post per Fanuc 6M PM001.17.3
removed SFP specific code for drill cycle and multiple parts,
added suuprt for subroutines
MPK}

{Prog Numeric Format Definitions ****}

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

FORMAT(FileFeet#,1)
FORMAT(FileMeters#,1)
FORMAT(TrackC#,3)
FORMAT(TrackCNO#,3)
FORMAT(MoveC#,3)
FORMAT(UnitAngle#,3)
FORMAT(ABS#,4)
FORMAT(ADD#,4)
FORMAT(SUB#,4)
FORMAT(MUL#,4)
FORMAT(DIV#,4)
FORMAT(CalcZSurf#,4)
FORMAT(ClearancePlane1#,4)
FORMAT(ClearancePlane2#,4)
FORMAT(ClearancePlane3#,4)
FORMAT(Retract#,4)
FORMAT(Peck#,4)
FORMAT(ToolDiameter#,4)
FORMAT(TrackXNO#,4)
FORMAT(TrackYNO#,4)
FORMAT(TrackZNO#,4)
FORMAT(TRUNC#,5)
FORMAT(Repeats#,5)
FORMAT(RepeatZ#,5)
FORMAT(Tag#,5)
FORMAT(Operation#,5)
FORMAT(Tool#,5)
FORMAT(Recall#,5)
FORMAT(NewWFO#,5)
FORMAT(Parts#,5)
FORMAT(Program2#,5)
FORMAT(Dwell#,6)
FORMAT(RapidF#,7)
FORMAT(HelixPitch#,8)
FORMAT(Program#,9)

{***** CMI specific Subroutines *****}

toolCRCOfst:
IF CutterRadiusCompensation?
' D' ToolOffset# ' O' CRCOffset#
ELSE
' D' ToolOffset# ' O0'
END
RETURN

cmiPreTool:
IF NOT LastTool?
' T' NextTool# { PreTool }
ELSE
' T' Recall# Num#('1') { Last Tool Change PreTool to first tool}
END
RETURN


cmiWvalue:
IF Backbore?
' W0'
ELSE
IF RetractToCP1?
IF NotEqual? SUB# ClearancePlane1# CalcZSurf# Num#('0')
IF GreaterThan? SUB# ClearancePlane1# CalcZSurf# Num#('0')
' W' SUB# ClearancePlane1# CalcZSurf#
END
END
ELSE
IF NotEqual? SUB# ClearancePlane2# CalcZSurf# Num#('0')
IF GreaterThan? SUB# ClearancePlane2# CalcZSurf# Num#('0')
' W' SUB# ClearancePlane2# CalcZSurf#
END
END
END
END
RETURN

pitchOfHelix:
SetStatusOff
Save# Num#('7') ABS# SUB# EPZ# SPZ# { Delta Z }
' K' MUL# Recall# Num#('7') DIV# Num#('360.0') ArcAngle# { Delta Z * ( 360 / Arc Angle) }
SetStatusOn
RETURN

cmiOpComments:
IF FIFO? AND Dwell?
'Bore/Ream w/ Dwell'
ELSE
IF FIRIFIRO?
'Web Drill'
ELSE
IF BackBore?
'BackBore'
ELSE
IF FIStopOffWallRO?
'Dead Spindle Retract'
ELSE
IF RigidTap?
'Rigid Tap'
ELSE
IF Tap?
'Tap'
ELSE
IF FIRO? AND Dwell?
'Drill w/ Dwell'
ELSE
IF FIFO?
'Bore/Ream'
ELSE
IF Peck?
IF PeckFullRetract?
IF GreaterThan? Peck# Num#('0')
'FixPeck, FullOut' {J13}
ELSE
'VarPeck, FullOut' {J3}
END
ELSE {Chip Break}
IF GreaterThan? Peck# Num#('0')
IF GTEqual? Retract# Num#('0')
'FixPeck, ChipBreak' {J11}
ELSE
'FixPeck, ChipClear' {J12}
END
ELSE
IF GTEqual? Retract# Num#('0')
'VarPeck, ChipBreak' {J1}
ELSE
'VarPeck, ChipClear' {J2}
END
END
END
ELSE
OperationType$ { Drill, Contour, Pocket, Thread Mill }
END
END
END
END
END
END
END
END
END
RETURN


{***** End A2100 specific Subroutines *****}

{Added Subroutines ****}

report:
IF PalletIn?
'------------------------------------' EOL
'Num#(1) xEP = ' Recall# Num#('1') EOL
'Num#(2) yEP = ' Recall# Num#('2') EOL
'------------------------------------' EOL
END
RETURN

resetSP: {update to the correct StartPos}
IF Rotations? OR Repeats? OR AutoCycle?
IF AbsValue?
TrackXNO# SPX#
TrackYNO# SPY#
ELSE
SetAbs
TrackXNO# SPX#
TrackYNO# SPY#
SetInc
END
END
RETURN

saveEP: {save the correct EndPos}
IF PointFeat?
IF AutoCycle?
SetACSPCompF
Save# Num#('1') ADD# Recall# Num#('1') SPX# { xOpEP }
Save# Num#('2') ADD# Recall# Num#('2') SPY# { yOpEP }
SetACSPComp
ELSE
Save# Num#('1') SPX# { xOpEP }
Save# Num#('2') SPY# { yOpEP }
END
ELSE
Save# Num#('1') EPX# { xOpEP }
Save# Num#('2') EPY# { yOpEP }
END
RETURN

getEP: {save the correct EndPos}
IF Rotations? OR Repeats? OR AutoCycle?
IF AbsValue?
saveEP
ELSE
SetAbs
saveEP
SetInc
END
report
END
RETURN

setSRXYtoACEP:
TrackXNO# Recall# Num#('1') { xOpEP }
TrackYNO# Recall# Num#('2') { yOpEP }
RETURN

{Prog Subroutines ****}

restoreScale: {not used - references to this sub is commented out}
IF Metric? {CAM file is in Metric, tools and tool path}
SetScale('.03937007874') { change to English, this is an English post}
END
RETURN

wfo:
' H' NewWFO#
RETURN

wfoStuff:
IF NewWFO?
IF MultipleParts? AND WorkFixtureOffsets?
EOL
'*** WARNING *** DO NOT USE NEWWFO() WITH MULTIPLE PARTS AND WORK FIXTURE OFFSETS' EOL
ELSE
wfo
END
ELSE
IF Flag?('2') { Need to output wfoStuff twice for MP-ESO-OTAP-ECP, once for all others }
IF MultipleParts?
IF WorkFixtureOffsets?
WFO1
ELSE
wfo
END
ELSE
wfo
END
END
END
SetFlagF('2') { Do not output WFO second time wfoStuff is called for MP-WFO-OTAP-ECP }
RETURN

doSubComment:
IF UseComments? AND SubComment?
'(MSG, "SUB NUMBER: ' Program# '" )' EOL
END
RETURN

doOpComments:
IF UseComments?
SetScale('1')
IF OperationIDComment?
'(MSG, OPERATION ' Operation# ': ' cmiOpComments ' )' EOL
END
IF OperationComment?
'(MSG, ' OperationComment$ ' )' EOL
END
IF WorkGroupComment?
'(MSG, ' WorkGroupComment$ ' )' EOL
END
IF ToolTypeComment?
'(MSG, TOOL ' Tool# ': ' ToolDiameter# ' ' ToolType$ ' )' EOL
END
IF ToolComment?
'(MSG, ' ToolComment$ ' )' EOL
END
{restoreScale}
END
RETURN

psInit: {reset flags}
NewWFOF
FourthCWF
FourthCCWF
RotateF
OptCyc1F
MasterOpF
CallMasterOpF
PalletInF
RETURN

psStuff:
IF FifthCW?
FORMAT(FifthDegree#,2)
SeqLabC 'B' FifthDegree# EOL
FifthCWF
END
IF FifthCCW?
FORMAT(FifthDegree#,3)
SeqLabC 'B' FifthDegree# EOL
FifthCCWF
END
RETURN

doPostScript:
psInit
EachPS
SeqLabC PostScript EOL
psStuff
NextPS
RETURN

doEndOpPS:
psInit
EachEOPS
SeqLabC EndOpPS EOL
psStuff
NextPS
RETURN

absValueC:
IF NOT AbsValue?
AbsValue
END
RETURN

incValueC:
IF AbsValue?
IncValue
END
RETURN

absOrIncC:
IF AbsoluteMoves?
absValueC
ELSE
incValueC
END
RETURN

setAngleUnder360: {sets status register and machine to current rotary position between -360 and 360 deg}
IF AAxisAvail?
SetAbs
IF GTEqual? MoveC# Num#('360') {reset the A-axis to be between 0 and 359.999}
ResetAngle
SeqLabC Preset 'A' TrackC# UnitAngle# EOL
ELSE
IF LTEqual? MoveC# Num#('-360')
IF Equal? UnitAngle# Num#('0') {reset the A-axis to be 0}
ResetAngle
SeqLabC Preset 'A' TrackC# UnitAngle# EOL
ELSE {reset the A-axis to be between -0.001 and -359.999}
ResetAngle
SeqLabC Preset 'A' TrackC# SUB# UnitAngle# Num#('360') EOL
END
END
END
SetInc { Because we call setAngleUnder360 right after incValueC OfstOff }
END
RETURN

doStartPos:
StrtPos
IF AAxisAvail?
CalcSCAng MoveC
ELSE
TrackCNO# Num#('0')
END
RETURN

entryMove:
IF FeedEntry?
SeqLabC Feed ZIn FeedEnt EOL
ELSE
SeqLabC RapidC ZIn EOL
END
RETURN

startSub:
OpenSub
'(DFS,L' Program# ')' EOL
{doSubComment}
RETURN

subWarning:
IF NOT FeedConnect?
IF AnyZshift?
' ' EOL
'(MSG, "WARNING Z CLEARANCE WILL CHANGE WITH EACH CYCLE OF SUB REPEAT" )' EOL
' ' EOL
END
END
RETURN

stdSub:
SeqLabC 'G10=[T2]V0' EOL {sets temporary register #2 to 0}
SeqLabC 'Q' Tag# '1' EOL {branch label 1}
SeqLabC '(CLS,L' Program# ')' EOL {call subroutine}
SeqLabC 'G10=[T2]V[T2]+1' EOL {increment register #2 by 1}
SeqLabC 'G11E[T2]=' Repeats# 'L' Tag# '2' EOL {if register #2 is equal to number of repeats then jump to branch label 2}
SeqLabC 'G11L-' Tag# '1' EOL {jump backwards to branch label 1}
SeqLabC 'Q' Tag# '2' EOL {branch label 2}
startSub
RETURN

finishSub1: {part 1}
SeqLabC CRCOffC
IF NOT FeedConnect?
RapidC ZCP3C
END
EOL
RETURN

finishSubG92: {part 2}
SeqLabC Preset ShiftRC EOL
SeqLabC '(ENS)' EOL
CloseSub
SeqLabC Preset UnshftRC EOL
RETURN

doWFOOps:
IF Flag?('5')
SetFlagF('5') { Suppress Redundant WFO for MP-WFO-OTAP-ECP }
ELSE
SeqLabC SetWFO EOL
END
SeqLabC '( CLS, "SUB' Program# '", 1)' EOL
RETURN

openMP:
NewProg
IF WorkFixtureOffsets?
IF OneToolAllParts? AND ExitClearancePlane?
SetFlag('5') { Suppress Redundant WFO for MP-WFO-OTAP-ECP }
END
NewWFO
EachWFO {simple eachPart}
doWFOOps
IncWFO
NextWFO {simple NextPart}
startSub
ELSE
SeqLabC '( CLS, "SUB' Program# '", ' Parts# ')' EOL
IF OneToolAllParts? AND ExitClearancePlane?
SetFlag('2') { Need to output wfoStuff twice for MP-ESO-OTAP-ECP, once for all others }
END
startSub
END
RETURN

closeMP:
IF WorkFixtureOffsets?
SeqLabC '(ENS)' EOL
CloseSub
SeqLabC WFO1 EOL
ELSE
SeqLabC absOrIncC EOL
SeqLabC Preset ShiftPC EOL
SeqLabC '(ENS)' EOL
CloseSub
SeqLabC Preset UnshftPC EOL
END
RETURN

doAbsOrInc:
IF Flag?('1') { Milling ZShiftOnly SepSubs/DrillSubs activated }
IF ZMove?
incValueC
ELSE
absOrIncC
END
END
RETURN

doDrillAbsOrInc:
IF Flag?('1') { DrillSubs activated }
IF SPZMove?
incValueC
ELSE
absOrIncC
END
END
RETURN

restoreAbsOrInc:
IF Flag?('1') { Milling ZShiftOnly SepSubs/DrillSubs activated }
SeqLabC absOrIncC EOL
END
RETURN

ckCRC:
IF LastFeat?
CRCOffC
ELSE
IF NOT ZMove?
CRCOnC
END
END
RETURN

tpPointFeat:
IF AutoCycle?
SeqLabC MoveSXYC EOL
IF Repeats? AND ZshiftOnly?
SeqLabC '( CLS, "SUB' TRUNC# SUB# Program# Num#('1') '", 1)' EOL
ELSE
SeqLabC '( CLS, "SUB' Program# '", 1)' EOL
END
CalcACSRXY {calc tool position after sub call, CalcAutoCycleStatusRecordXY}
ELSE
IF FirstFeat?
SetFlagF('9') { For valid Drill Rotation Sub }
IF Rotations?
IF NOT LastFeat?
SetFlag('9') { valid Drill Rotation Sub }
NewProg
StartSub
END
END
ELSE
SeqLabC doDrillAbsOrInc MoveSXYZC cmiWValue EOL
END
IF LastFeat?
IF Flag?('9') { valid Drill Rotation Sub }
restoreAbsOrInc
SeqLabC '(ENS)' EOL
CloseSub
END
END
END
RETURN

tpRapidFeat:
IF XMove? OR YMove? OR ZMove?
SeqLabC doAbsOrInc ckCRC RapidC MoveXYZC EOL
END
RETURN

tpLineFeat:
IF XMove? OR YMove? OR ZMove?
SeqLabC doAbsOrInc ckCRC FeedC MoveXYZC FeedRateC EOL
END
RETURN

tpArcFeat:
EACHQuadrant { Do not use NOT, FIRST, LAST or NEXT modifiers in this loop }
SeqLabC doAbsOrInc
IF ArcCW?
CWArcC
ELSE
CCWArcC
END
IF XYPlane?
IF ZMove?
MoveX MoveY MoveZ ArcIJ pitchOfHelix
ELSE
MoveX MoveY ArcIJ
END
ELSE
IF XZPlane?
MoveX MoveZ ArcIJ
ELSE { YZPlane }
MoveY MoveZ ArcIJ
END
END
ArcFeedC
EOL
NEXTQuadrant
RETURN

toolPath:
ResetCRCNum
EACHFeat
IF FirstFeat?
resetSP
END
IF PointFeat?
tpPointFeat
ELSE
IF RapidFeat?
tpRapidFeat
ELSE
IF LineFeat?
tpLineFeat
ELSE
IF ArcFeat?
tpArcFeat
END
END
END
END
IF LastFeat?
getEP
END
NEXTFeat
restoreAbsOrInc
RETURN

autoCycCutSub1: {part 1}
SaveSubStatus {save tool position}
SetPass1 {element cut moves}
startSub
SetSRXYtoSP
SeqLabC incValueC EOL
RETURN

autoCycCutSub2: {part 2}
toolPath
SeqLabC absOrIncC CRCOffC
IF Repeats? AND FeedConnect? AND ZshiftOnly?
ELSE
RapidC ZCP2
END
EOL
SeqLabC '(ENS)' 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
SeqLabC absOrIncC Connect doStartPos EOL
milling
finishSub1
finishSubG92
RETURN

doSepSubContour:
SetPass1
TrackZNO# SPZ#
startSub
RapidF#
IF AutoCycle?
NewProg
autoCycCutSub1 {build element sub}
TrackZNO# SPZ#
autoCycCutSub2
ELSE
toolPath
finishSub1
SeqLabC '(ENS)' EOL
CloseSub
END
SetPass1
SetStatusRapid
RapidF#
SetSRXYtoEP
TrackZNO# ClearancePlane2#
RETURN

doSepSubFeedConnect:
IF FeedConnect?
FeedEntC
END
RETURN

doSepSubSPMove:
SetStatusOff
IF SPXMove? OR SPYMove?
IF AutoCycle?
incValueC
END
SeqLabC Connect StrtPosC doSepSubFeedConnect EOL
absOrIncC
ELSE
Connect
END
SetStatusOn
RETURN

doSepSubZMoves:
IF FeedConnect?
SeqLabC FeedC ZInPlusInc FeedEnt EOL
ELSE
IF FeedEntry?
IF NOT FirstCycle?
SeqLabC RapidC ZCP2PlusInc EOL
END
SeqLabC Feed ZInPlusInc FeedEnt EOL
ELSE
IF FirstCycle? AND AutoCycle?
Rapid
END
SeqLabC RapidC ZInPlusInc EOL
END
END
SeqLabC '( CLS, "SUB' Program# '", 1)' EOL
IF NOT FeedConnect? AND NOT AbsValue?
TrackZNO# ZCP2PlusInc#
SeqLabC ZCP2C EOL
IF NOT AutoCycle?
TrackZNO# ClearancePlane3#
END
END
RETURN

setSepSubZ:
SetAbs
TrackZNO# ADD# SPZ# MUL# RepsLess1# RepeatZ#
SetInc
RETURN

doSepSubExit:
IF NOT AbsValue?
setSepSubZ
END
IF AutoCycle?
SeqLabC Rapid ZCP2 EOL
ELSE
Rapid { Will be output at millingOp ZCP3 }
END
RETURN

resetSepSubSR:
SetPass1
SetStatusRapid
RapidF#
TrackXNO# Recall# Num#('1') { xOpEP }
TrackYNO# Recall# Num#('2') { yOpEP }
RETURN

zonlyRepAutoCycle:
doSepSubContour
EachCycle
IF NOT FirstCycle?
doSepSubSPMove
END
doSepSubZMoves
NextCycle
IF FeedConnect?
doSepSubExit
END
SeqLabC '(ENS)' EOL
CloseSub
{Element shift, not pattern}
autoCycPat {write pattern moves and main calls}
resetSepSubSR
TrackZNO# ClearancePlane2#
RETURN

zonlyRep:
doSepSubContour
EachCycle
IF NOT FirstCycle?
doSepSubSPMove
END
doSepSubZMoves
NextCycle
resetSepSubSR
IF FeedConnect?
doSepSubExit
ELSE
TrackZNO# ClearancePlane3#
END
RETURN

millingOp:
SeqLabC ZCP2C EOL
IF Repeats?
NewProg
IF ZshiftOnly?
IF AutoCycle? {incremental Autocycle sub can have Z moves}
zonlyRepAutoCycle
ELSE {Z shift only, NOT Auto Cycle}
SetFlag('1') { Milling ZShiftOnly SepSubs activated }
zonlyRep
SetFlagF('1') { Milling ZShiftOnly SepSubs deactivated }
END {end Auto Cycle IF}
ELSE {not Z only}
g92Sub
END {end Z only IF}
ELSE {no repeat OPs}
milling
END
IF AutoCycle?
SeqLabC CRCOffC ZCP3C EOL
setSRXYtoACEP
ELSE
SeqLabC CRCOffC RapidC ZCP3C EOL
END
RETURN

skipToLastFeat:
EachFeat
IF LastFeat?
TrackXNO# SPX#
TrackYNO# SPY#
END
NextFeat
RETURN

setDrillEndOpZ:
IF RetractToCP1?
TrackZNO# ClearancePlane1#
ELSE
TrackZNO# ClearancePlane2#
END
RETURN

drillCycle:
IF RigidTap?
SeqLabC PlaneC ' G84.1'
ELSE
SeqLabC PlaneC Cycle
END
StrtPos
' Z' Sub# Add# ClearancePlane2# Zdepth# CalcZSurf# { Z = tip depth - Top Surface}
IF AbsValue?
' R' CalcZSurf#
ELSE
SetAbs
' R' CalcZSurf#
SetInc
END
cmiWvalue
IF Peck?
IF NotEqual? Peck# Num#('0')
' K' ABS# Peck#
END
END
FeedEnt
IF Peck?
IF PeckFullRetract?
IF GreaterThan? Peck# Num#('0')
' J13'
ELSE
' J3'
END
ELSE {Chip Break}
IF GreaterThan? Peck# Num#('0')
IF GTEqual? Retract# Num#('0')
' J11'
ELSE
' J12'
END
ELSE
IF GTEqual? Retract# Num#('0')
' J1'
ELSE
' J2'
END
END
END
END
EOL
RETURN

drillingOp:
SeqLabC ZCP2C EOL
GetCycle
drillCycle
TrackZNO# FIRST SPZ#
toolPath
setDrillEndOpZ
IF NOT Rotations?
SeqLabC DrillOff
IF RetractToCP1?
IF AbsValue?
' R' ClearancePlane1#
ELSE
SetAbs
' R' ClearancePlane1#
SetInc
END
ELSE
IF AbsValue?
' R' ClearancePlane2#
ELSE
SetAbs
' R' ClearancePlane2#
SetInc
END
END
EOL
IF NEXT NewTool?
SeqLabC Rapid ZCP1C EOL
ELSE
SeqLabC Rapid ZCP3C EOL
END
END
RETURN

checkPass: {use the correct StrtPos}
IF AutoCycle?
SetPass2
ELSE
SetPass1
END
RETURN

rotateStartPosC:
TrackXNO# Recall# Num#('1') { xOpEP }
MoveSXC
TrackYNO# Recall# Num#('2') { yOpEP }
MoveSYC
CalcSCAng MoveC
RETURN

rotaryReps: {use the correct EndPos}
EachRotation
IF Milling?
IF FirstRotation?
NewProg
SaveProgNum2
StartSub
millingOp
SeqLabC '(ENS)' EOL
CloseSub
checkPass
ELSE
SeqLabC rotateStartPosC EOL
END
SeqLabC '( CLS, "SUB' Program2# '", 1)' EOL
ELSE
IF Drilling?
IF FirstRotation?
drillingOp
checkPass
ELSE
IF RetractToCP1? AND Equal? ClearancePlane1# ClearancePlane3#
SeqLabC rotateStartPosC EOL
ELSE
IF NOT RetractToCP1? AND Equal? ClearancePlane2# ClearancePlane3#
SeqLabC rotateStartPosC EOL
ELSE { Need to cancel Drill Cycle between Rotations }
SeqLabC DrillOff
IF RetractToCP1?
IF AbsValue?
' R' ClearancePlane1#
ELSE
SetAbs
' R' ClearancePlane1#
SetInc
END
ELSE
IF AbsValue?
' R' ClearancePlane2#
ELSE
SetAbs
' R' ClearancePlane2#
SetInc
END
END
EOL
SeqLabC rotateStartPosC EOL
SeqLabC DrillCP EOL
drillCycle
END
END
END
IF Flag?('9') { valid Drill Rotation Sub }
SeqLabC '( CLS, "SUB' Program# '", 1)' EOL
END
IF LastRotation?
SeqLabC DrillOff
IF RetractToCP1?
IF AbsValue?
' R' ClearancePlane1#
ELSE
SetAbs
' R' ClearancePlane1#
SetInc
END
ELSE
IF AbsValue?
' R' ClearancePlane2#
ELSE
SetAbs
' R' ClearancePlane2#
SetInc
END
END
EOL
END
END
END
NextRotation
TrackXNO# Recall# Num#('1') { xOpEP }
TrackYNO# Recall# Num#('2') { yOpEP }
TrackZNO# ClearancePlane3#
RETURN

opGuts:
IF Rotations?
rotaryReps
ELSE
IF Milling?
millingOp
ELSE
IF Drilling?
drillingOp
END
END
END
RETURN

progStart:
InitProg
ReverseXZArcs
InitWFONum
SetFlood
SetMaxRPM('131000')
SetFlagF('1') { Milling ZShiftOnly SepSubs/DrillSubs deactivated }
SetFlagF('2') { Need to output wfoStuff twice for MP-ESO-OTAP-ECP, once for all others }
SetFlagF('5') { Suppress Redundant WFO for MP-WFO-OTAP-ECP }
SetFlagF('9') { For valid Drill Rotation Sub }

SetFlagF('21') {used in Thread milling only to force the Feedrate on first feed move since new block}

Save# Num#('1') Num#('0') { Status Register Variable for X Axis }
Save# Num#('2') Num#('0') { Status Register Variable for Y Axis }

Save# Num#('20') Sequence# { set Num#('20') to the Starting Sequence #}

IF PSComment? AND UseComments?
'Utility Data:' EOL
' At Op Start: All literals and commands will appear at the beginning of the operation.' EOL
' At Op End: All literals and commands will appear at the end of the operation.' 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
' 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
' 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:
'(PGM, '

IF ProgramComment?
'NAME="' ProgramComment$ '",'
ELSE
'NAME="' PartName$ '",'
END

IF GTEqual? Program# Num#('0')
' ID="' Program# '",'
END
' TYPE="A2100_274" )'
EOL

FORMAT(Program#,5)

IF ToolChangeAtHome?
SetHome
END

IF Metric?
':G17 G71 G90 M26' EOL
ELSE
':G17 G70 G90 M26' EOL
END

IF UseComments?
'(MSG, PART: ' PartName$ ' )' EOL

IF ProgramNameComment?
'(MSG, PROGRAM: ' ProgramName$ ' )' EOL
END
IF ProgramComment?
'(MSG, ' ProgramComment$ ' )' EOL
END
IF FormatNameComment?
'(MSG, FORMAT: ' FormatName$ ' )' EOL
END
IF TimeComment?
'(MSG, ' Date$ ' AT ' Time$ ' )' EOL
END
IF MovesComment?
IF Metric?
'(MSG, OUTPUT IN ' MoveType$ ' MM )' EOL
ELSE
'(MSG, OUTPUT IN ' MoveType$ ' INCHES )' EOL
END
END
IF PartsComment?
'(MSG, PARTS PROGRAMMED: ' Parts# ' )' EOL
END
IF StartToolComment?
'(MSG, FIRST TOOL NOT IN SPINDLE )' EOL
END
END
OpenSub
SetProgNum('0')
{restoreScale}
RETURN

colonBlock:
SetAbs
IF Metric?
':?' Plane ' G71 G90' Rapid FeedEnt
ELSE
':?' Plane ' G70 G90' Rapid FeedEnt
END
SetFlag('3')
RETURN

firstOp1:
IF ToolChangeAtHome?
SetHome
END
doOpComments
IF ToolChangeAtHome?
IF MultipleParts? AND OneToolAllParts? AND FullUp?
ELSE
':? M26' EOL
END
IF AbsoluteMoves?
SeqLabC ' G98.1' Home EOL
ELSE
SetAbs
SeqLabC ' G98.1' Home EOL
SetInc
END
END
colonBlock ' T' Tool# ToolChng EOL
doPostScript
RETURN

firstOp2:
checkPass
SeqLabC Rapid doStartPos ZCP1 Speed SpinOn toolCRCOfst wfoStuff PreTool EOL
RETURN

firstOp3:
SeqLabC CoolOn EOL
RETURN

newToolOp1:
IF MultipleParts? AND OneToolAllParts? AND FullUp?
':? M26' EOL
END
RETURN

newToolOp2:
IF ToolChangeAtHome?
IF MultipleParts? AND OneToolAllParts? AND FullUp?
ELSE
':? M26' EOL
END
IF AbsoluteMoves?
SeqLabC ' G98.1' Home EOL
ELSE
SetAbs
SeqLabC ' G98.1' Home EOL
SetInc
END
END
doEndOpPS
IF LAST ProgStop?
SeqLabC 'M0' EOL
ELSE
SeqLabC ProgStop EOL
END
RETURN

newToolOp3: {Start new Operation}
doOpComments
SeqLabC colonBlock OpToolID ToolChng EOL
doPostScript
RETURN

newToolOp4:
checkPass
SeqLabC PlaneC Rapid doStartPos ZCP1 Speed SpinOn toolCRCOfst wfoStuff PreTool EOL
doPostScript
RETURN

newToolOp5:
SeqLabC CoolOn EOL
RETURN

sameToolOp1:
doEndOpPS
IF LAST ProgStop?
SeqLabC SpinOff EOL
SeqLabC 'M0' EOL
ELSE
IF CoolOff? AND LAST NOT CoolOff?
SeqLabC CoolOff EOL
END
END
IF ToolChangeAtHome?
':? //1 M26' EOL
IF AbsoluteMoves?
SeqLabC ' //1 G98.1' Home EOL
ELSE
SetAbs
SeqLabC ' //1 G98.1' Home EOL
SetInc
END
END
setAngleUnder360
RETURN

sameToolOp2: {Start new Operation}
doOpComments
colonBlock
' //1' OpToolID ToolChng ' ;BLOCK DELETE OMITS TOOL CHANGE' EOL
checkPass
RETURN

sameToolOp3: {Start new Operation}
SeqLabC PlaneC Rapid doStartPos Speed SpinOn toolCRCOfst wfoStuff ' //1' cmiPreTool ZCP1 EOL
doPostScript
SeqLabC CoolOn EOL
RETURN

end1:
IF MultipleParts? AND OneToolAllParts? AND FullUp?
':? M26' EOL
END
':?' EOL
SeqLabC CoolOff EOL
setAngleUnder360
IF NotEqual? UnitAngle# Num#('0')
SeqLabC absOrIncC RapidC 'A' TrackC# Num#('0') EOL
END
RETURN

end2:
doEndOpPS
IF ProgStop?
SeqLabC ' M0' EOL
END
IF MultipleParts? AND AllToolsOnePart?
':? M26' EOL
END
RETURN

end3:
SeqLabC ' M26 M02' EOL { End of Program }
CloseSub
Post2 {organize Subs into one program}
IF UseComments?
SetScale('1') {restore scale for comments}
IF FileBytesComment?
'(MSG, FILE LENGTH: ' FileBytes# ' CHARACTERS )' EOL
END
IF FileFeetComment?
'(MSG, FILE LENGTH: ' FileFeet# ' FEET )' EOL
END
IF FileMetersComment?
'(MSG, FILE LENGTH: ' FileMeters# ' METERS )' EOL
END
END
Close
ReTag
RETURN

mpAllTools1P: {Multiple Parts, All Tools 1 Part}
EachOp {Start of post processing}
IF EquallySpacedOffsets?
SetFlag('2') { Need to output wfoStuff twice for MP-ESO-OTAP-ECP, once for all others }
END
IF FirstOperation?
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
end2
closeMP
end3
RETURN

mp1ToollAllPfu: {Multiple Parts, 1 Tool all Parts, full up}
EachOp {Start of post processing}
IF EquallySpacedOffsets?
SetFlag('2') { Need to output wfoStuff twice for MP-ESO-OTAP-ECP, once for all others }
END
IF FirstOperation?
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
closeMP
end2
end3
RETURN

mp1ToollAllPXcp: {Multiple Parts, 1 Tool all Parts, exit Clearance plane}
EachOp {Start of post processing}
SetFlag('2') { Need to output wfoStuff twice for MP-ESO-OTAP-ECP, once for all others }
IF FirstOperation?
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
end1
end2
end3
RETURN

noMPs: {no multiple parts}
EachOp {Start of post processing}
SetFlag('2') { Need to output wfoStuff twice for MP-ESO-OTAP-ECP, once for all others }
IF FirstOperation?
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
end2
end3
RETURN

{Start of executable Prog, Top Level ****}

progStart {setup and initializations}
initOp

IF MultipleParts?
IF AllToolsOnePart?
mpAllTools1P
ELSE {implied OneToolAllParts?}
IF FullUp?
mp1ToollAllPfu
ELSE {implied ExitClearancePlane?}
mp1ToollAllPXcp
END
END
ELSE
noMPs
END


Wyszukiwarka

Podobne podstrony:
Acr A2100 [PG] RMQ04 17 6
Acr A2100 [VG] RMT97 17 7
Acr A2100 [VG] MT97 16 3m
Acr A2100 [ALA] CX48 15 1
Cin Acr 850SX Sabre PM689 17 3
Cin Acr A2100 Sabre M751 12 1
Acr A2100 [VCA] MX31 89
Acr A2100 CC [SM] L734 85
Acr A2100 [DC] MQ56 12 1
Acr A2100 Generic L421 85 12
Acr A2100 [RPM] NMT09 12
Cin Acr A2100 [TVR] M875 82 6
Acr A2100 [GCS] L517 85 1
Acr A2100 [AB] CU30 15
Acr A2100 [VG] BT97 16 1
Acr A2100 [PG] CQ04 16 1

więcej podobnych podstron