plik


{ MILL=T LATHE=F SIMPLE_ROT_POS=F ROTARY_MILL=F ADV_MILL=F SUBS=F 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" } {10/12/98, Initial: Acr A2100 Generic M930.12.10 Created: Acr A2100 [RPM] NMxxx.12 For: Reell Precision Changes to Prog: 1) Deleted SetZInc . 2) Replaced RestoreAbsOrInc from M001.16. Added invalueC, absvalueC, and absOrIncC. Added DoAbsOrInc, and DoDrillAbsOrInc subs. This fixed an incremental problem. CDH} {Prog Numeric Format Definitions ****} #1 = '#.00' #2 = '###.###;0' #3 = '*###.###;0' #4 = '####.####;0' #5 = '#######0' #6 = '##.##;0' #7 = '0000' #8 = '+####.####;0' #9 = '####0' FORMAT(FileFeet#,1) FORMAT(FileMeters#,1) FORMAT(CP1LessCP2#,4) FORMAT(ABS#,4) FORMAT(ADD#,4) FORMAT(SUB#,4) FORMAT(MUL#,4) FORMAT(DIV#,4) FORMAT(StartPosX#,4) FORMAT(StartPosY#,4) FORMAT(CalcZSurf#,4) FORMAT(FluteLen#,4) FORMAT(ClearancePlane1#,4) FORMAT(ClearancePlane2#,4) FORMAT(ClearancePlane3#,4) FORMAT(Retract#,4) FORMAT(Peck#,4) FORMAT(ToolDiameter#,4) FORMAT(TrackX#,4) FORMAT(TrackY#,4) FORMAT(TrackZNO#,4) 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(Dwell#,6) FORMAT(Program#,7) FORMAT(HelixPitch#,8) FORMAT(Program#,9) {Prog Subroutines ****} {***** CMI specific Subroutines *****} InitializeFixtureNum: IF MultipleParts? AND Equal? Recall# Num#('20') Num#('0') SeqLabC ' [@FIXTURE_NUM]=1' EOL ELSE SeqLabC ' [@FIXTURE_NUM]=' Recall# Num#('20') EOL END RETURN 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 CMI_Wvalue: 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 *****} 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 DoSubComment: IF UseComments? AND SubComment? '(MSG, "SUB NUMBER: ' Tag# '" )' 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 CSWFO: ' H' ADD# CS# SUB# NewWFO# Num#('1') RETURN CalcCSWFO: {(iPart-1)*NumOfCS#)} ' H' ADD# MUL# NumOfCS# SUB# PartNum# Num#('1') ADD# CS# SUB# NewWFO# Num#('1') RETURN CSAngleA: IF WFOCS? ' A0.' ELSE ' A' CSOffsetA# END RETURN CSAngleAC: IF AChange? CSAngleA END RETURN CSAngleB: IF WFOCS? ' B0.' ELSE ' B' CSOffsetB# END RETURN CSAngleBC: IF BChange? CSAngleB END RETURN DoCSWFOComment: '( CS#' CS# ' - ' CSComment$ ' )' EOL '( ' CalcCSWFO '= X' CSOffsetX# ' Y' CSOffsetY# ' Z' CSOffsetZ# ' A' CSOffsetA# ' B' CSOffsetB# ' )' EOL RETURN DoCoolOn: IF ThruSpin? ' M27' ELSE IF Pulse? ' M28' ELSE IF Mist? ' M29' ELSE IF HiPressure? ' M07' ELSE IF FloodThruSpin? ' M8 M27' ELSE {Flood} CoolOn {M8} END END END END END RETURN PSInit: {reset flags} NewWFOF RotateF OptCyc1F { ??? } {ResetCool} RETURN GetIndex: IF FourthCW? FORMAT(FourthDegree#,2) ' A' FourthDegree# FourthCWF {reset flag} END IF FourthCCW? FORMAT(FourthDegree#,3) ' A' FourthDegree# FourthCCWF {reset flag} END IF FifthCW? FORMAT(FifthDegree#,2) ' B' FifthDegree# FifthCWF {reset flag} END IF FifthCCW? FORMAT(FifthDegree#,3) ' B' FifthDegree# FifthCCWF {reset flag} END RETURN PSStuff: RETURN DoPostScript: PSInit EachPS SeqLabC PostScript EOL {literals} PSStuff {commands} NextPS RETURN DoEndOpPS: PSInit EachEOPS SeqLabC EndOpPS EOL {literals} PSStuff {commands} SeqLabC GetIndex EOL NextPS RETURN DoLastEndOpPS: PSInit NEXT EachEOPS SeqLabC EndOpPS EOL {literals} PSStuff {commands} SeqLabC GetIndex EOL NextPS RETURN EntryMove: IF FeedEntry? SeqLabC Feed ZIn FeedEnt EOL ELSE SeqLabC RapidC ZIn EOL END RETURN StartSub: OpenSub '(DFS,L' Tag# ')' 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: {not used in Virtual, only used in non SepSub Repeats} SeqLabC 'G10=[T2]V0' EOL {sets temporary register #2 to 0} SeqLabC 'Q' Tag# '1' EOL {branch label 1} SeqLabC '(CLS,L' Tag# ')' 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 IF NOT FeedConnect? IF AutoCycle? ZCP3C ELSE IF FIFO? FeedC ZCP3C FeedEntC ELSE RapidC ZCP3C END END END EOL RETURN FinishSubG92: {part 2} SeqLabC Preset ShiftRC EOL SeqLabC '(ENS)' EOL CloseSub SeqLabC Preset UnshftRC EOL RETURN absValueC: IF NOT AbsValue? AbsValue END RETURN incValueC: IF AbsValue? IncValue END RETURN absOrIncC: IF AbsoluteMoves? absValueC ELSE incValueC END RETURN OpenMP: IF WFOCS? '(Advanced Mill Multiple parts, Long Hand not supported in this post)' EOL ELSE {TagInc} IF WorkFixtureOffsets? ELSE '(Non-WFO Multiple parts, Long Hand not supported in this post)' EOL END END RETURN CloseMP: IF WFOCS? '(Advanced Mill Multiple parts, Long Hand not supported in this post)' EOL ELSE IF WorkFixtureOffsets? ELSE '(Non-WFO Multiple parts, Long Hand not supported in this post)' EOL END END RETURN SubCSMP: IF WFOCS? AND ChangeCS? SeqLabC EndSub EOL CloseSub NewProg {StartSub} SaveCSProg 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 } absOrIncC END RETURN FormatArc: 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 RETURN CkCRC: IF LastFeat? { Exit Length Feature } CRCOffC ELSE IF XMove? OR YMove? { Approach Length Feature and Multiple Pockets } CRCOnC END END RETURN StdRapid: IF ZMove? AND NOT XMove? AND NOT YMove? CRCOffC END IF XMove? OR YMove? OR ZMove? SeqLabC RapidC MoveXYC MoveZC EOL END RETURN StdLine: {enables CRC on first call} IF Decelerate? IF RoomToDecel? DecelMove1 SeqLabC doAbsOrInc FeedC CkCRC MoveXYC MoveZC FeedRateC EOL { CRCOffsetC } DecelMove2 END SeqLabC doAbsOrInc FeedC CkCRC MoveXYC MoveZC DecelFeed EOL { CRCOffsetC } ELSE IF XMove? OR YMove? OR ZMove? IF AutoCycle? AND Flag?('3') SeqLabC doAbsOrInc FeedC CkCRC MoveXYC MoveZC FeedRate EOL { CRCOffsetC } SetFlagF('3') ELSE IF ZMove? SeqLabC doAbsOrInc FeedC CkCRC MoveXYC MoveZC FeedEntC EOL { CRCOffsetC } ELSE SeqLabC doAbsOrInc FeedC CkCRC MoveXYC MoveZC FeedRateC EOL { CRCOffsetC } END END END END RETURN StdArc: EACHQuadrant { Do not use NOT, FIRST, LAST or NEXT modifiers in this loop } IF LastQuadrant? AND Decelerate? IF RoomToDecel? DecelMove1 SeqLabC FormatArc ArcFeedC EOL DecelMove2 END SeqLabC FormatArc DecelFeed EOL ELSE SeqLabC FormatArc ArcFeedC EOL END NEXTQuadrant RETURN ToolPath2: {266for AutoCycle element moves} EACHFeat IF RapidFeat? IF LastFeat? CRCOffC SeqLabC RapidC MoveXYC MoveZC EOL ELSE StdRapid END ELSE IF LineFeat? IF LastFeat? SeqLabC CRCOffC FeedC MoveXYC MoveZC FeedRateC EOL {MoveXYC SetZRepInc MoveZC, was MoveXYZC} ELSE IF ZMove? {skip CRCOn until first non-Z move line, skipping ramps} SeqLabC FeedC MoveXYC MoveZC FeedEntC EOL {MoveXYC SetZRepInc MoveZC, was MoveXYZC} ELSE StdLine {enables CRC on first call} END END ELSE IF ArcFeat? StdArc END END END NEXTFeat RETURN AutoCycCutSub1: {part 1} CalcACSRXY {calc tool position, CalcAutoCycleStatusRecordXY} SaveSubStatus {save tool position} SetPass1 {element cut moves} SetSRXYtoSP SeqLabC IncValue EOL RETURN AutoCycCutSub2: {part 2} SeqLabC AbsValue IF FIFO? {.81} FeedC ZCP2 FeedEntC {.71.2 removed CRCOffC, gets turned off in ToolPath} ELSE RapidC ZCP2 END EOL SetSRSubXY {restore SR to 1st position value} ReSetPass2 {restore for positioning moves} RETURN CutAutoCycle: IF SPXMove? OR SPYMove? SeqLabC RapidC MoveSXYC EOL END AutoCycCutSub1 IF Repeats? AND ZshiftOnly? Save# Num#('7') Repeats# EOL {Pattern Z Step value} EachRep EntryMove ToolPath2 Save# Num#('7') Sub# Recall# Num#('7') Num#('1') EOL {decrement Pattern Z Step value} IF NOT Equal? Recall# Num#('7') Num#('0') IF FeedConnect? IF FIFO? SeqLabC FeedC ' X' TrackX# StartPosX# ' Y' TrackY# StartPosY# EOL ELSE SeqLabC FeedC ' X' TrackX# StartPosX# ' Y' TrackY# StartPosY# EOL END ELSE SeqLabC AbsValue IF FIFO? FeedC PRIME ZCP2 EOL ELSE RapidC PRIME ZCP2 EOL END SeqLabC IncValue EOL SeqLabC RapidC ' X' TrackX# StartPosX# ' Y' TrackY# StartPosY# EOL END END NextRep ELSE EntryMove ToolPath2 END AutoCycCutSub2 RETURN ToolPath: ResetCRCNum EACHFeat IF PointFeat? IF AutoCycle? CutAutoCycle ELSE IF Drilling? IF SPXMove? OR SPYMove? OR SPZMove? SeqLabC MoveSXYZC CMI_Wvalue EOL END ELSE SeqLabC MoveSXYZC EOL END END ELSE IF RapidFeat? StdRapid ELSE IF LineFeat? StdLine ELSE IF ArcFeat? StdArc END END END IF LastFeat? AND CutterRadiusCompensation? AND NOT AutoCycle? CRCOffC IF NOT EmptyLine? SeqLabC doAbsOrInc LastFeatExtend EOL { ??? any zmoves ??? } END END END NEXTFeat RestoreAbsOrInc RETURN Milling: IF AutoCycle? ToolPath ELSE EntryMove ToolPath END RETURN G92Sub: {SubWarning} {StdSub} SeqLabC AbsOrInc Connect StrtPos EOL Milling {FinishSub1} {FinishSubG92} RETURN ZonlyRep: SetFlag('1') {std sep sub Zreps are in effect} EachCycle IF NOT FirstCycle? SeqLabC Connect StrtPos EOL {added Connect} END IF FeedConnect? SeqLabC FeedC ZInPlusInc FeedEnt EOL {changed to FeedC} ELSE {Entry/Exit Connect} IF FeedEntry? IF NOT FirstCycle? SeqLabC RapidC ZCP2PlusIncC EOL {can't call for cycle =1} {added Rapid, reads better} {.71.2, changed to RapidC, reads better} END SeqLabC Feed ZInPlusInc FeedEnt EOL ELSE SeqLabC RapidC ZInPlusInc EOL {added Rapid, reads better} {changed to RapidC, reads better} END END TrackZNO# FIRST SPZ# ToolPath IF NOT FeedConnect? IF AutoCycle? SeqLabC ZCP3C EOL ELSE IF FIFO? SeqLabC FeedC ZCP3C FeedEntC EOL ELSE {TrackZNO# ZInPlusInc#} SeqLabC Rapid ZCP3C EOL END END END NextCycle RETURN CheckPass: IF AutoCycle? {use the correct StrtPos} SetPass2 ELSE SetPass1 END RETURN ProgStart: InitProg ReverseXZArcs InitWFONum SetFlood SetFlagF('1') {not std sep sub Zreps in effect} {rep change 2} SetFlagF('2') SetFlagF('3') {used in Thread Milling only to force the Feedrate on first feed move since new block} SetFlagF('9') UseSeparateSubCalls SetMaxSeparateSubCalls('500') SetMaxRPM('131000') SetMaxFeed('50000') {Variables initialized to 0} Save# Num#('1') Num#('0') { Num#('1') variable used for First Tool PreTooling} Save# Num#('2') Num#('0') { Num#('2') variable used for GOTO operation #} Save# Num#('3') Num#('0') { Num#('3') variable used for backbore Tool Radius calculation} Save# Num#('4') Num#('0') { Num#('4') variable used for backbore Shank Radius calculation} Save# Num#('5') Num#('0') { Num#('5') variable used for backbore Width calculation} Save# Num#('6') Num#('0') { Num#('6') variable used for backbore U value calculation} Save# Num#('7') Num#('0') { Num#('7') variable used for Pattern Z step repeat value} {Constant Variables} Save# Num#('20') Sequence# { set Num#('20') to the Starting Sequence #} 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 IF MultipleParts? IF WorkFixtureOffsets? IF LTEqual? MUL# Parts# NumOfCS# Num#('0') SetWFOCS { use WFO for CS changes } END END ELSE IF LTEqual? NumOfCS# Num#('0') SetWFOCS { use WFO for CS changes } END END RETURN OpGuts: SeqLabC ZCP2C EOL IF Milling? SeqLabC ZCP2C EOL IF AutoCycle? Milling ELSE IF Repeats? TagInc IF ZshiftOnly? IF UseSeparateSubCalls? AND CyclesLessThanMaxSubCalls? ZonlyRep {rep change 1} ELSE {no sep subs desired} EOL '*** Not Supported - 1 *** ' EOL {G92Sub} EOL END ELSE {not Z only} EOL '*** Not Supported - 2 *** ' EOL {G92Sub} EOL END {end Z only IF} ELSE {no repeat OPs} Milling END END IF NEXT NewTool? IF AutoCycle? SeqLabC ZCP1C EOL ELSE IF FIFO? SeqLabC FeedC ZCP3C FeedEntC EOL SeqLabC RapidC ZCP1C EOL ELSE SeqLabC RapidC ZCP1C EOL END END ELSE IF AutoCycle? SeqLabC ZCP3C EOL ELSE IF FIFO? SeqLabC FeedC ZCP3C FeedEntC EOL ELSE SeqLabC RapidC ZCP3C EOL END END END ELSE IF Drilling? IF Repeats? EOL '*** Not Supported - 3 *** ' EOL { TagInc {StdSub} SeqLabC AbsOrInc Rapid StrtPos EOL } END EOL {SeqLabC DrillCP EOL} GetCycle IF FIFO? AND Dwell? { Bore/Ream with Dwell } SeqLabC PlaneC ' G89' ELSE IF FIRIFIRO? SeqLabC PlaneC ' G88' ELSE IF BackBore? SeqLabC PlaneC ' G87' ELSE IF FIStopOffWallRO? SeqLabC PlaneC ' G86' ELSE IF RigidTap? SeqLabC PlaneC ' G84.1' ELSE SeqLabC PlaneC Cycle END END END END END StrtPos IF Backbore? ' Z' ADD# Zdepth# ClearancePlane2# ELSE ' Z' Sub# Add# ClearancePlane2# Zdepth# CalcZSurf# { Z = tip depth - Top Surface} END IF Backbore? ' R' ClearancePlane2# ELSE IF AbsValue? ' R' CalcZSurf# ELSE SetAbs ' R' CalcZSurf# SetInc END END CMI_Wvalue IF FIStopOffWallRO? ' U' MUL# Num#('-1.0') ABS# Retract# 'V0J0' END IF BackBore? FORMAT(Recall#,4) Save# Num#('3') DIV# ToolDiameter# Num#('2.0') {Tool Radius} Save# Num#('4') DIV# ShankDiam# Num#('2.0') {Shank Radius} Save# Num#('5') ADD# ShankDiam# SUB# Recall# Num#('3') Recall# Num#('4') {Width} Save# Num#('6') MUL# Num#('-1.0') ABS# SUB# DIV# Recall# Num#('5') Num#('2.0') Recall# Num#('4') {U} ' I' SUB# ClearancePlane2# CalcZSurf# ' K' FluteLen# ' U' Recall# Num#('6') ' V0 J0' FORMAT(Recall#,5) END IF FIRIFIRO? ' I' Peck# ' K' Retract# END IF Peck? IF NotEqual? Peck# Num#('0') ' K' ABS# Peck# END END GetIndex 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 ELSE { IF Tap? AND OptCyc1? 'J1' END } END EOL TrackZNO# FIRST SPZ# ToolPath IF RetractToCP1? TrackZNO# ClearancePlane1# ELSE TrackZNO# ClearancePlane2# END 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 Repeats? {FinishSubG92} END IF NEXT NewTool? SeqLabC Rapid ZCP1C EOL ELSE SeqLabC Rapid ZCP3C EOL END END END SetFlagF('1') {not std sep sub Zreps in effect} {rep change 3} RETURN NotSameToolWFO: IF WFOCS? IF ChangeCS? DoCSWFOComment ClearCSOffset SeqLabC CSWFO EOL END ELSE IF NeedWFO1? ' H' NewWFO# END END RETURN SameToolWFO: IF WFOCS? IF ChangeCS? DoCSWFOComment ClearCSOffset SeqLabC CSWFO EOL END END RETURN InitOp: '(PGM, ' IF ProgramComment? 'NAME="' ProgramComment$ '",' ELSE 'NAME="' PartName$ '",' END IF GTEqual? Program# Num#('0') ' ID="' Program# '",' END ' TYPE="A2100_274" )' EOL IF ToolChangeAtHome? SetHome END IF Metric? ':G17 G71 G90 M26' EOL ELSE ':G17 G70 G90 M26' EOL END ';H-WORD FIXTURE NUMBER FROM SEQUENCE STARTING NUMBER ' EOL 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 {RestoreScale} RETURN ColonBlock: SetAbs IF Metric? ':?' Plane ' G71 G90' Rapid FeedEnt ELSE ':?' Plane ' G70 G90' Rapid FeedEnt END SetFlag('3') RETURN CoolantOn: IF AbsoluteMoves? SeqLabC DoCoolOn EOL ELSE SeqLabC AbsOrInc DoCoolOn EOL END RETURN FirstOp1: DoOpComments IF ToolChangeAtHome? ':? M26' EOL IF AbsoluteMoves? SeqLabC ' G98.1' Home EOL ELSE SetAbs SeqLabC ' G98.1' Home EOL SetInc END END ColonBlock ' T' Tool# ToolChng EOL { Inch } Save# Num#('1') Tool# { save first tool number in Num#('1') variable } RETURN FirstOp1_MP: DoOpComments SeqLabC ' [@NUM_OF_PARTS]=' Parts# EOL ':?' EOL InitializeFixtureNum { SeqLabC ' [@FIXTURE_NUM]=' Recall# Num#('20') EOL } '[OPERATION' Operation# ']' EOL IF ToolChangeAtHome? ':? M26' EOL IF AbsoluteMoves? SeqLabC ' G98.1' Home EOL ELSE SetAbs SeqLabC ' G98.1' Home EOL SetInc END ELSE IF OneToolAllParts? AND FullUp? ':? M26' EOL END END ColonBlock ' T' Tool# ToolChng EOL { Inch } Save# Num#('1') Tool# { save first tool number in Num#('1') variable } Save# Num#('2') Operation# { save Operation number in Num#('2') variable } RETURN FirstOp2: RETURN FirstOp3: CheckPass SeqLabC Rapid StrtPos ZCP1 GetIndex Speed SpinOn ToolCRCOfst CMIPreTool EOL DoPostScript CoolantOn RETURN FirstOp3a: {can't XY position before WFO} CheckPass SeqLabC Rapid StrtPos ZCP1 GetIndex Speed SpinOn ToolCRCOfst CMIPreTool EOL DoPostScript CoolantOn RETURN FirstOp3_MP: CheckPass SeqLabC Rapid StrtPos ZCP1 GetIndex Speed SpinOn ToolCRCOfst ' H[@FIXTURE_NUM]' CMIPreTool EOL DoPostScript CoolantOn RETURN FirstOp3b: CheckPass SeqLabC Rapid StrtPos ZCP1 GetIndex Speed SpinOn ToolCRCOfst ' H' Recall# Num#('20') CMIPreTool EOL DoPostScript CoolantOn RETURN NewToolOp1: RETURN NewToolOp2: DoEndOpPS IF LAST ProgStop? SeqLabC 'M0' EOL ELSE SeqLabC ProgStop EOL END RETURN NewToolOp3: {Start new Operation} DoOpComments IF ToolChangeAtHome? ':? M26' EOL IF AbsoluteMoves? SeqLabC ' G98.1' Home EOL ELSE SetAbs SeqLabC ' G98.1' Home EOL SetInc END END ColonBlock FORMAT(ADD#,7) ' T' Tool# ToolChng EOL FORMAT(ADD#,4) RETURN NewToolOp3_MP: {Start new Operation} SeqLabC ' [@FIXTURE_NUM]=[@FIXTURE_NUM]+1' EOL SeqLabC ' (IF [@FIXTURE_NUM]<=[@NUM_OF_PARTS] GOTO [OPERATION' Recall# Num#('2') '])' EOL DoOpComments ':?' EOL InitializeFixtureNum { SeqLabC ' [@FIXTURE_NUM]=' Recall# Num#('20') EOL } '[OPERATION' Operation# ']' EOL IF ToolChangeAtHome? ':? M26' EOL IF AbsoluteMoves? SeqLabC ' G98.1' Home EOL ELSE SetAbs SeqLabC ' G98.1' Home EOL SetInc END ELSE IF OneToolAllParts? AND FullUp? ':? M26' EOL END END ColonBlock FORMAT(ADD#,7) ' T' Tool# ToolChng EOL FORMAT(ADD#,4) Save# Num#('2') Operation# { save Operation number in Num#('2') variable } RETURN NewToolOp4: RETURN NewToolOp5: CheckPass SeqLabC PlaneC Rapid StrtPos ZCP1 GetIndex Speed SpinOn ToolCRCOfst CMIPreTool EOL DoPostScript CoolantOn RETURN NewToolOp5a: CheckPass SeqLabC PlaneC Rapid StrtPos ZCP1 GetIndex Speed SpinOn ToolCRCOfst CMIPreTool EOL DoPostScript CoolantOn RETURN NewToolOp5b: CheckPass SeqLabC PlaneC Rapid StrtPos ZCP1 GetIndex Speed SpinOn ToolCRCOfst ' H' Recall# Num#('20') CMIPreTool EOL DoPostScript CoolantOn RETURN NewToolOp5b_MP: CheckPass SeqLabC PlaneC Rapid StrtPos ZCP1 GetIndex Speed SpinOn ToolCRCOfst ' H[@FIXTURE_NUM]' CMIPreTool EOL DoPostScript CoolantOn RETURN SameToolOp1: DoEndOpPS IF LAST ProgStop? SeqLabC SpinOff EOL SeqLabC 'M0' EOL ELSE IF CoolOff? AND LAST NOT CoolOff? SeqLabC CoolOff EOL END IF NewToolOffset? OR ChangeCS? { ??? due full up here ??? } 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 RETURN SameToolOp2: {Start new Operation} DoOpComments ColonBlock FORMAT(ADD#,7) ' //1' ' T' Tool# ToolChng ' ;BLOCK DELETE OMITS TOOL CHANGE' EOL FORMAT(ADD#,4) CheckPass RETURN SameToolOp3: {Start new Operation} SeqLabC PlaneC Rapid StrtPos GetIndex Speed SpinOn ToolCRCOfst ' H' Recall# Num#('20') ' //1' CMIPreTool ZCP1 EOL DoPostScript CoolantOn RETURN SameToolOp3_MP: {Start new Operation} SeqLabC PlaneC Rapid StrtPos GetIndex Speed SpinOn ToolCRCOfst ' H[@FIXTURE_NUM] //1' CMIPreTool ZCP1 EOL DoPostScript CoolantOn { Old way of handling the SameToolOp3 routine IF LAST ProgStop? SeqLabC PlaneC Rapid StrtPos ZCP1 GetIndex ToolCRCOfst Speed SpinOn EOL SeqLabC DoCoolOn EOL ELSE IF NewToolOffset? OR ChangeCS? SeqLabC PlaneC Rapid StrtPos ZCP1 GetIndex ToolCRCOfst SpeedC EOL ELSE SeqLabC PlaneC Rapid StrtPos GetIndex ToolCRCOfst SpeedC EOL END IF NOT CoolOff? AND LAST CoolOff? SeqLabC DoCoolOn EOL END END } RETURN End1: ':?' EOL RETURN End1_MP: IF AllToolsOnePart? ':? M26' EOL END RETURN End2: DoLastEndOpPS IF ProgStop? SeqLabC ' M0' 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 { EOR EOL } Close ReTag RETURN End3_MP: SeqLabC ' [@FIXTURE_NUM]=[@FIXTURE_NUM]+1' EOL IF AllToolsOnePart? SeqLabC ' (IF [@FIXTURE_NUM]<=[@NUM_OF_PARTS] GOTO [Operation1])' EOL ELSE SeqLabC ' (IF [@FIXTURE_NUM]<=[@NUM_OF_PARTS] GOTO [OPERATION' Recall# Num#('2') '])' EOL END 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 { EOR EOL } Close ReTag RETURN MPallTools1P: {Multiple Parts, All Tools 1 Part} EachOp {Start of post processing} IF FirstOperation? InitOp FirstOp1_MP FirstOp2 FirstOp3_MP ELSE IF NewTool? NewToolOp1 NewToolOp2 NewToolOp3 NewToolOp4 NewToolOp5b_MP ELSE {implied SameTool?} SameToolOp1 SameToolOp2 SameToolOp3_MP END END {common point for all operations} OpGuts NextOp {loops back to EachOP until last Operation} End1_MP {End of program} End2 End3_MP RETURN MP1ToollAllPfu: {Multiple Parts, 1 Tool all Parts, full up} EachOp {Start of post processing} IF FirstOperation? InitOp FirstOp1_MP FirstOp2 FirstOp3_MP ELSE IF NewTool? NewToolOp1 NewToolOp2 {':?' ' M26' EOL} NewToolOp3_MP NewToolOp4 NewToolOp5b_MP ELSE {implied SameTool?} SameToolOp1 SameToolOp2 SameToolOp3_MP END END {common point for all operations} OpGuts NextOp {loops back to EachOP until last Operation} End1_MP {End of program} End2 End3_MP RETURN MP1ToollAllPXcp: {Multiple Parts, 1 Tool all Parts, exit Clearance plane} EachOp {Start of post processing} IF FirstOperation? InitOp FirstOp1_MP FirstOp2 FirstOp3_MP ELSE IF NewTool? NewToolOp1 NewToolOp2 {':?' EOL} NewToolOp3_MP NewToolOp4 NewToolOp5b_MP ELSE {implied SameTool?} SameToolOp1 SameToolOp2 SameToolOp3_MP END END {common point for all operations} OpGuts NextOp {loops back to EachOP until last Operation} End1_MP {End of program} End2 End3_MP RETURN NoMPs: {no multiple parts} EachOp {Start of post processing} IF FirstOperation? InitOp FirstOp1 FirstOp2 FirstOp3b ELSE IF NewTool? NewToolOp1 NewToolOp2 NewToolOp3 NewToolOp4 NewToolOp5b ELSE {implied SameTool?} SameToolOp1 SameToolOp2 SameToolWFO 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