{3/4/93 Copied & modified: Dynapath 5M B&S [MM] M551.81.2 For: META Mfg. Machine: Brown & Sharpe System 1500 VC Control: General Electric 1050 Changes made per conversations with David M. McSwain at META Mfg and FAX. Changed FORMATS from non-decimal to decimal, with leading zeros in Form and Prog. Changed format for Program# from #######0 to 0000 at Prog Numeric Format Definitions. Added '$' Program# at start of output following EOR. DWB}
{8/14/95 Initial: GE 1050 B&S 1500VC M554.81.2 Created: GE 1050 Burgmaster M000.85 ForUser: CNCCS / Twigg Control: GE 1050 Machine: Burgmaster Develop: ComPost 4.21.32, Virtual v.2.20 Comment: New processor per marked up readout from Dalton Harwell. Deleted NegateZ command. Modified Work Fixture Offsets: (basicaly changed to the the standard stuff) Changed 1st WFO from E01 to E00 and moved to StrtPos line. Modified WFOStuff to allow mid program NewWFO output by PostScript request. WFO output by default except for SameTool. One G code per line: Modified Saftey Start Block at beginning of program. Deleted Saftey Start Block between tools. Deleted ' H00' Modified tool offset handling: Changed Tool Length Offset Label from H to D and moved to StrtPos line. Changed Tool Length Offset Cancel code from H0 to D0. Changed OfstOn to ZCP1. Modified OfstOff line: Added RapidF. Deleted RapidF from "common point for all operations". Changed SpinOn to DoSpinOn, turns on coolant and spindle at same time. Deleted CoolOn commands that were not needed. Changed CoolOff to DoCoolOff and call at the end of Milling and Drilling sections. Added ckDrillOff to output DrillOff at end of milling operations tools. Added extra codes to end of program, for communications I guess. Deleted SpinOff commands. Deleted File Length footer comments. Jim Radcliffe}
{Prog Numeric Format Definitions *******************************************}
DoSpinOn: IF CoolOff? SpinOn ELSE IF CWSpindle? ' M13' ELSE ' M14' END END RETURN
ckDrillOff: IF NOT Drilling? DrillOff {output DrillOff with CoolOff at end of mill operations tools} END RETURN
DoCoolOff: IF MultipleParts? AND OneToolAllParts? AND LastPart? ckDrillOff CoolOff ELSE IF LastOp? ckDrillOff CoolOff ELSE IF NEXT SameTool? IF NEXT ProgStop? ckDrillOff CoolOff ELSE IF NOT CoolOff? AND NEXT CoolOff? CoolOff END END ELSE ckDrillOff CoolOff END END END RETURN
RestoreScale: IF Metric? {CAM file is in Metric, tools and tool path} SetScale('.03937007874') { change to English, this is an English post} END RETURN
DoPartCycleComment: IF MultipleParts? AND UseComments? AND SubComment? '( PART NO. ' Tag# ' )' EOL END RETURN
DoCycleComment: IF UseComments? AND SubComment? '( CYCLE START )' EOL 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 RETURN
PSInit: {reset flags} NewWFOF RotateF RETURN
PSStuff: {revised.72} IF FourthCW? FORMAT(FourthDegree#,2) SeqC ' A' FourthDegree# EOL FourthCWF {reset flag} END IF FourthCCW? FORMAT(FourthDegree#,3) SeqC ' A' FourthDegree# EOL FourthCCWF {reset flag} END IF FifthCW? FORMAT(FifthDegree#,2) SeqC ' B' FifthDegree# EOL FifthCWF {reset flag} END IF FifthCCW? FORMAT(FifthDegree#,3) SeqC ' B' FifthDegree# EOL FifthCCWF {reset flag} END RETURN
EntryMove: IF FeedEntry? SeqC FeedC ZinC FeedEntC EOL ELSE SeqC RapidC ZinC EOL END RETURN
GetConnect: IF FeedConnect? FeedC ELSE RapidC END RETURN
ExitMove: IF NOT FeedConnect? SeqC IF FIFO? { .81 } FeedC ELSE IF NOT AutoCycle? RapidC END END PRIME ZCP2C IF FIFO? { .81 } FeedEntC END EOL END RETURN
ExitMove2: IF FIFO? FeedC ZCP3C FeedEntC ELSE RapidC ZCP3C END RETURN
CycleWarning: { NOTE: This Post Processor takes care of Z Clearance. } RETURN
FormatArc: IF ArcCW? CWArcC ELSE CCWArcC END MoveXYZC ArcIJC RETURN
StdLine: {enables CRC on first call, .70} SeqC CRCOnC CRCOffsetC EOL IF Decelerate? IF RoomToDecel? DecelMove1 SeqC FeedC MoveXYZC FeedRateC EOL DecelMove2 END SeqC FeedC MoveXYZC DecelFeed EOL ELSE IF XMove? OR YMove? OR ZMove? SeqC FeedC MoveXYZC FeedRateC EOL END END RETURN
ToolPath: EACHFeat IF PointFeat? { Drilling Only } SeqC MoveSXYZC EOL {.80.01} ELSE IF RapidFeat? IF XMove? OR YMove? OR ZMove? SeqC RapidC MoveXYZC EOL END ELSE IF LineFeat? IF ZMove? {skip CRCOn until first non-Z move line, skipping ramps} SeqC FeedC MoveXYZC FeedRateC EOL ELSE StdLine {enables CRC on first call} END ELSE IF ArcFeat? IF ZMove? { Helix } EachArcSegment SeqC FeedC MoveXYZC FeedRateC EOL NextArcSegment ELSE 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 IF AutoCycle? SetAbs Save# Num#('6') SUB# EPX# CurOriginPosX# Save# Num#('7') SUB# EPY# CurOriginPosY# SetInc END END NEXTFeat RETURN
WFOStuff: IF NewWFO? IF MultipleParts? EOL '*** WARNING *** DO NOT USE NEWWFO() WITH NCPOST MULTIPLE PARTS' EOL ELSE ' E' NewWFO# END ELSE IF NOT SameTool? IF NeedWFO1? ' E' NewWFO# END END END RETURN
AutoCycCutSub2: {part 2} IF FIFO? {.81} SeqC AbsOrInc FeedC ZCP2 FeedEntC EOL {.71.2 removed CRCOffC, gets turned off in ToolPath} ELSE SeqC AbsOrInc RapidC ZCP2 EOL END SetSRSubXY {restore SR to 1st position value} ReSetPass2 {restore for positioning moves} RETURN
Milling: EntryMove ToolPath RETURN
CancelCRC: IF CutterRadiusCompensation? SeqC RapidC EOL SeqC CRCOffC ' D00' EOL ResetCRCNum {.72} END RETURN
XYZRep: CycleWarning EachRep IF NOT FirstCycle? CancelCRC SeqC GetConnect StrtPosC EOL END DoCycleComment IF FirstCycle? EntryMove ELSE IF FeedConnect? IF ZshiftOnly? EntryMove END ELSE IF FeedEntry? SeqC ZCP2C EOL END EntryMove END END ToolPath ExitMove NextRep RETURN
NoRepAutoCycle: EACHFeat IF NOT FirstFeat? CancelCRC END IF SPXMove? OR SPYMove? SeqC RapidC MoveSXYC EOL END AutoCycCutSub1 DoCycleComment Milling AutoCycCutSub2 NEXTFeat RETURN
XYZRepAutoCycle: CycleWarning EachRep EACHFeat IF FirstFeat? AND FirstCycle? ELSE CancelCRC END IF SPXMove? OR SPYMove? SeqC GetConnect MoveSXYC EOL END SetAbs Save# Num#('4') SPX# Save# Num#('5') SPY# SetInc AutoCycCutSub1 DoCycleComment Milling AutoCycCutSub2 SetAbs TrackXNO# ADD# Recall# Num#('4') Recall# Num#('6') TrackYNO# ADD# Recall# Num#('5') Recall# Num#('7') SetAbsOrInc NEXTFeat NextRep RETURN
ZonlyRepAutoCycle: EACHFeat IF NOT FirstFeat? CancelCRC END IF SPXMove? OR SPYMove? SeqC GetConnect MoveSXYC EOL END AutoCycCutSub1 EachRep IF FirstCycle? DoCycleComment EntryMove ELSE IF NOT FeedConnect? ExitMove END CancelCRC IF SPXMove? OR SPYMove? SeqC GetConnect MoveSXYC EOL END DoCycleComment IF NOT FeedConnect? EntryMove END END ToolPath NextRep AutoCycCutSub2 ReSetPass2 {restore for positioning moves} NEXTFeat RETURN
MasterSub: IF FirstOperation? IF MultipleParts? AND OneToolAllParts? AND NOT FirstPart? ELSE IF ToolChangeAtHome? SetHome END Seq ' G70' EOL SeqC AbsOrInc EOL SeqC Plane EOL SeqC DrillOff EOL SeqC CRCOff EOL IF ToolChangeAtHome? SeqC Home EOL END SeqC OpToolID ToolChng EOL DoPartCycleComment DoOpComments DoPostScript CheckPass SeqC Rapid StrtPos TABLE(2,SpeedRPM#,1) ToolOfst WFOStuff DoSpinOn EOL SeqC ZCP1 EOL END ELSE IF NewTool? IF MultipleParts? AND OneToolAllParts? AND NOT FirstPart? ELSE
{Finish off last Operation}
SeqC Rapid ' Z0' RapidF OfstOff EOL DoEndOpPS IF ToolChangeAtHome? SetAbs LoadFeat SUB# HomeX# CurOriginPosX# SUB# HomeY# CurOriginPosY# Num#('0') SeqC Rapid MoveXY EOL END IF LAST ProgStop? SeqC ' M00' EOL ELSE SeqC ProgStop EOL END
GetStartOfSameTool SeqC PlaneC Rapid StrtPos IF NotEqual? SpeedRPM# LAST SpeedRPM# TABLE(2,SpeedRPM#,1) END ToolOfst WFOStuff DoSpinOn EOL SeqC ZCP1 EOL ELSE IF NewToolOffset? SeqC Rapid ' Z0' RapidF OfstOff EOL
{Start new Operation}
GetStartOfSameTool SeqC PlaneC Rapid StrtPos IF NotEqual? SpeedRPM# LAST SpeedRPM# TABLE(2,SpeedRPM#,1) END ToolOfst WFOStuff EOL SeqC ZCP1 EOL ELSE
{Start new Operation}
GetStartOfSameTool SeqC PlaneC Rapid StrtPos IF NotEqual? SpeedRPM# LAST SpeedRPM# TABLE(2,SpeedRPM#,1) END WFOStuff EOL END IF NOT CoolOff? AND LAST CoolOff? SeqC CoolOn EOL END END END END END {common point for all operations} ResetCRCNum {.72} IF Milling? SeqC ZCP2C EOL IF AutoCycle? IF Repeats? IF ZshiftOnly? ZonlyRepAutoCycle ELSE XYZRepAutoCycle END IF NOT FeedConnect? SeqC ExitMove2 EOL END ELSE NoRepAutoCycle SeqC ExitMove2 EOL END ELSE { NOT AutoCycle } IF Repeats? XYZRep ELSE Milling END SeqC ExitMove2 EOL END CancelCRC SeqC DoCoolOff EOL ELSE IF Drilling? IF Repeats? EachRep DoCycleComment IF FirstCycle? DrillStuff END ToolPath NextRep ELSE DrillStuff ToolPath END IF RetractToCP1? {.81} TrackZNO# ClearancePlane1# ELSE TrackZNO# ClearancePlane2# END SeqC DrillOff DoCoolOff EOL SeqC RapidC ZCP3C EOL END END RETURN
EndPartSub: {End of program ************************************************************}
{finish last operation} SeqC Rapid ' Z0' RapidF OfstOff EOL DoEndOpPS IF FIRST ToolChangeAtHome? {.71.2 added FIRST modifier} SetAbs LoadFeat SUB# FIRST HomeX# CurOriginPosX# SUB# FIRST HomeY# CurOriginPosY# Num#('0') SeqC Rapid MoveXY EOL END IF ProgStop? SeqC 'M00' EOL ELSE IF MultipleParts? AND AllToolsOnePart? AND NOT LastPart? SeqC ProgStop EOL END END RETURN
MPLoop: TagInit IF AllToolsOnePart? EachPart TagInc EachOp MasterSub NextOp EndPartSub NextPart ELSE { OneToolAllParts } IF LTEqual? Recall# Num#('1') Recall# Num#('3') Save# Num#('2') Recall# Num#('1') EachOp IF GTEqual? Operation# Recall# Num#('1') IF Equal? Recall# Num#('1') Recall# Num#('2') IF LastOp? Save# Num#('2') ADD# Operation# Num#('1') ELSE IF NewTool? AND NOT FirstOperation? Save# Num#('2') Operation# END END END END NextOp EachPart TagInc EachOp IF GTEqual? Operation# Recall# Num#('1') IF LessThan? Operation# Recall# Num#('2') IF Equal? Operation# Recall# Num#('1') IF NOT FirstPart?
{Finish off last Operation}
IF FullUp? SeqC Rapid ' Z0' RapidF OfstOff EOL END DoEndOpPS
{Start new Operation}
DoPartCycleComment DoOpComments DoPostScript CheckPass SeqC PlaneC EOL SeqC Rapid StrtPos IF NotEqual? SpeedRPM# LAST SpeedRPM# TABLE(2,SpeedRPM#,1) END IF FullUp? ToolOfst EOL SeqC ZCP1 END EOL END END MasterSub END END NextOp NextPart Save# Num#('1') Recall# Num#('2') END END RETURN
{Start of executable Prog **************************************************}
{setup and initializations} InitProg ReverseXZArcs InitWFONum SetFlood SetMaxRPM('4000') SetMaxFeed('500') SetArcSegmentAccuracy('.001') Save# Num#('1') Num#('0') Save# Num#('2') Num#('0') Save# Num#('3') Num#('0') 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 EOR EOL '$' Program# EOL IF UseComments? IF ProgramNameComment? '( ' ProgramName$ ' )' EOL END 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 IF MultipleParts? IF WorkFixtureOffsets? 'NOTE: This Post Processor does not support Work Fixture Offsets for Multiple Parts.' EOL 'Therefore, the output will be controlled by the following values that are' EOL 'already entered in Equally Spaced Offsets Edit Fields:' EOL 'X' PartShiftX# ' Y' PartShiftY# ' Z' PartShiftZ# EOL 'It is recommended that you change your selection to Equally Spaced Offsets.' EOL END Save# Num#('1') Num#('1') EachOp IF LastOp? Save# Num#('3') Operation# END NextOp MPLoop IF OneToolAllParts? MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop MPLoop EndPartSub END ELSE EachOp MasterSub NextOp EndPartSub END SeqC EOP EOL CloseSub Post2 {organize Subs into one program} EOR EOL ASCII('13') EOL '+' EOL '+' EOL Close