{4/15/92 Copied & modified: LongHand2 M001.81. For: Hi-Stat. Machine: BridgePort Series I Control: ProtoTRAK Plus This Post Processor supports both Absolute and Incremental output. This Post Processor does not support Sub-Programs. Though this is a 2-Axis Mill, the control will accept ZMoves. It will stop whenever a ZMove is encountered so Operator can manually raise the Spindle. 3 Rules to follow: G Codes must be on every line. G codes must have spaces between them. End of block character must be semicolon. Var(1) stores the current ZPos. Var(2) stores the next ZPos. These two are compared for the purposes of suppressing any lines containing only Rapid or Feed. DWB}
{9/1/92 Modified: BP I ProtoTRAK M493.81. For: Hi-Stat. Converted per LongHand [AbsOrInc] M001.81.1 This Post Processor supports MultipleParts. Changed usage of Var(1) and Var(2) to LoadFeat routines. DWB}
{10/12/92 Modified: BP I ProtoTRAK M493.81.1 For: Hi-Stat. Changes made per conversation with Doug Wiltanger at Hi-Stat. Changed Arcs Stop On Quadrants to TRUE in Mach Spec. Changed CRCOffsetC to call to CheckCRCOffsetC sub at StdLine. CheckCRCOffsetC sub that outputs ' D' ToolDiameter# based on status of Flag(1). DWB}
{11/12/92 Modified: BP I ProtoTRAK M493.81.2 For: Hi-Stat. Changes made per conversation with Dan Williams at Hi-Stat. Deleted G17, G18 and G19 in Mach Spec. Changed Format#2 from ###.###;0. to ##0.0##;0 in Prog and Mach Spec. Changed Format#3 from *###.###;0. to *##0.0##;0 in Prog. Changed Format#4 from ####.####;0. to ###0.0###;0 in Prog and Mach Spec. Changed Formats for G and M-codes from #0 to 00 in Mach Spec. Deleted all WorkFixtureOffset Commands and routines. Deleted EntryMove sub and all calls to same. Deleted LoadFeat and IF ZMove at ExitMove sub. Changed ZCP2C to ZCP2 at ExitMove sub. Deleted ExitMove2 sub and call to same. Changed MoveXYZC to MoveXY at FormatArc sub. Changed ArcIJC to ArcIJ at FormatArc sub. Changed all occurances of MoveXYZC to MoveXYC. Deleted OR ZMove? at StdLine sub. Deleted OR SPZMove? at ToolPath PointFeat. Deleted IF ZMove? at ToolPath AutoCycle LineFeat. Added CRCOnC and CheckCRCOffset at ToolPath ArcFeat. Deleted Milling sub. Changed all calls to Milling sub to ToolPath. Deleted ZCP2 at XYZRep sub. Deleted all Z related Commands and routines for Drilling Operations. Deleted FromCP and StrtPos from Drill Cycle Block. Changed ' G80' CRCOffC to Rapid AbsOrInc Preset ' X0 Y0 Z0' at safe start at FirstOperation. Changed OpToolID ToolChng to ' T1 M16' at FirstOperation. Moved Speed SpinOn to StrtPos block at FirstOperation and NewTool. Deleted AbsOrInc from StrtPos block at FirstOperation, NewTool and SameTool. Changed OfstOn to ' G45' ToolOfst ZCP1 OpToolID at FirstOperation, NewTool and SameTool. Moved ' G45' block to before StrtPos block. Changed IncValue OfstOff to ' G28 Z15.0' at NewTool, SameTool and end of Prog. Deleted ToolChangeAtHome at NewTool. Deleted SpinOff at NewTool and SameTool. Changed ' M0' to ' M00' at NewTool, SameTool and end of Prog. Deleted ZCP2 at IF Milling. Outputting ZCP3 for standard Milling with no Repeats, not outputting for AutoCycles at IF Milling. Deleted ZCP3 at IF Drilling. Changed FIRST ToolChangeAtHome to ' G28 X0 Y0' at end of Prog. Added ToolChng to block prior to EOP at end of Prog. DWB}
{11/6/94 Updated: BP I ProtoTRAK M493.81.3 For: Gibbs & Associates Versions: ncCad 4.33/ncCAM 4.33/ncPost 4.33.03/Compost 4.21.23 Changes made per Pete Jackson Updated to Version 4.2 per LongHand M001.81.3a Format. This supports MultipleParts. Using Var(1), Var(2) and Var(3) for logical control of MultiplePart Operations. Using Var(4), Var(5), Var(6) and Var(7) for correct Positioning of AutoCycles that Repeat in X and/or Y, and when AbsoluteMoves = FALSE. Added Tag# to FORMAT5. Added Recall# to FORMAT5. Changed logic of MPLoop sub to handle IF NewTool? and LastOp? situations. Commented out DoEndOpPS at MPLoop for OneToolAllParts, it does not work correctly. Added CRCOffC per version 4.2. CutterRadiusCompensation ExitLength will output G40 on LastFeat AND LineFeat at StdLine sub. Added Move to ZInC for Non-AutoCycle FeedConnect Repeats with ZMoves at ExitMove sub. Moved DoCycleComment call to before StrtPos move in related subs. Added BadMPWFOReport sub. Reports when MultipleParts AND WorkFixtureOffsets = TRUE AND EquallySpacedOffset values exist. Added FORMAT8, 'Ä…#bbbb.bbbb#', for PartShiftX#, PartShiftY# and PartShiftZ# commands. Moved SeqC and EOL outside of IF ELSE condition at ExitMove sub. Moved SeqC AbsOrInc and EOL outside of IF ELSE condition at AutoCycCutSub2 sub. Deleted ReSetPass2 at end of ZonlyRepAutoCycle sub. Already executed at end of call to AutoCycCutSub2 sub. Added support of CRC during multiple pocket dog-bone operation. Added condition to output CRCOnC for XMove OR YMove only at CkCRC sub. Outputs G41/G42 on First LineFeat after Z Plunge. Modified condition to output CRCOffC for ZMoveOnly Feature at ToolPath RapidFeat. Assures that G40 is not output prior to LastFeat. Added CRCOffC to RapidFeat at ToolPath. Outputs G40 at all Z Retract blocks. DWB}
{2/9/96, Updated .81 number to .84, no changes necessary, MPK}
{3/22/96, Tested ZOnlyRepAutCycle, Incremented number to .87, MPK}
{Prog Numeric Format Definitions *******************************************}
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
BadMPWFOReport: SetStatusOff ' ' EOL 'Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„' EOL 'Ä„ NOTE: Even though you have elected to Ä„' EOL 'Ä„ process this file using Multiple Ä„' EOL 'Ä„ Parts with Work Fixtures, there exist Ä„' EOL 'Ä„ non-zero values in the invisible, Ä„' EOL 'Ä„ Equally SpacedÉ fields, as follows: Ä„' EOL 'Ä„ Ä„' EOL '*****************************************' EOL IF NotEqual? PartShiftX# Num#('0') ' X axis shift = ' PartShiftX# EOL END IF NotEqual? PartShiftY# Num#('0') ' Y axis shift = ' PartShiftY# EOL END IF NotEqual? PartShiftZ# Num#('0') ' Z axis shift = ' PartShiftZ# EOL END '*****************************************' EOL 'Ä„ Ä„' EOL 'Ä„ Please reset these values to zero as Ä„' EOL 'Ä„ they affect the coordinate values Ä„' EOL 'Ä„ output, starting with Part# 2. Ä„' EOL 'Ä„ Thank You. Ä„' EOL 'Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„Ä„' EOL ' ' EOL SetStatusOn RETURN
PSInit: {reset flags} RotateF RETURN
PSStuff: {revised.72} IF FourthCW? FORMAT(FourthDegree#,2) SeqC Rapid ' A' FourthDegree# EOL FourthCWF {reset flag} END IF FourthCCW? FORMAT(FourthDegree#,3) SeqC Rapid ' A' FourthDegree# EOL FourthCCWF {reset flag} END IF FifthCW? FORMAT(FifthDegree#,2) SeqC Rapid ' B' FifthDegree# EOL FifthCWF {reset flag} END IF FifthCCW? FORMAT(FifthDegree#,3) SeqC Rapid ' B' FifthDegree# EOL FifthCCWF {reset flag} END RETURN
GetConnect: IF FeedConnect? Feed ELSE Rapid END RETURN
ExitMove: SeqC IF FeedConnect? IF NOT AutoCycle? IF NOT NoZMoves? Feed ZIn FeedEntC END END ELSE CRCOffC IF FIFO? { .81 } Feed ELSE Rapid END PRIME ZCP2 IF FIFO? { .81 } FeedEntC END END EOL RETURN
ExitMove2: { Deleted 11/12/92 } RETURN
CycleWarning: { NOTE: This Post Processor takes care of Z Clearance. } RETURN
FormatArc: IF ArcCW? CWArc ELSE CCWArc END MoveXY ArcIJ RETURN
CkCRC: { 4.2 } IF LastFeat? { Exit Length Feature } CRCOffC ELSE IF XMove? OR YMove? { Approach Length Feature and Multiple Pockets } CRCOnC END END RETURN
CheckCRCOffsetC: IF Flag?('1') ELSE SetFlag('1') IF CutterRadiusCompensation? ' D' ToolDiameter# END END RETURN
StdLine: {enables CRC on first call, .70} IF Decelerate? IF RoomToDecel? DecelMove1 SeqC CkCRC Feed MoveXYC FeedRateC CheckCRCOffsetC EOL DecelMove2 END SeqC CkCRC Feed MoveXYC DecelFeed CheckCRCOffsetC EOL ELSE IF XMove? OR YMove? SeqC CkCRC Feed MoveXYC FeedRateC CheckCRCOffsetC EOL END END RETURN
ToolPath: SetFlagF('1') { ResetCRCNum } EACHFeat IF PointFeat? { Drilling Only } IF SPXMove? OR SPYMove? SeqC Rapid MoveSXYC EOL END ELSE IF RapidFeat? IF AutoCycle? IF LastFeat? CRCOffC {.70} END SeqC Rapid MoveXYC EOL ELSE IF NOT XMove? AND NOT YMove? SeqC CRCOffC EOL {.82} END IF XMove? OR YMove? SeqC Rapid MoveXYC EOL {.82} END END ELSE IF LineFeat? StdLine 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 IF AutoCycle? SetAbs Save# Num#('6') SUB# EPX# CurOriginPosX# Save# Num#('7') SUB# EPY# CurOriginPosY# SetInc END END NEXTFeat RETURN
WFOStuff: { NOTE: This Post Processor does not support WorkFixtureOffsets. } RETURN
AutoCycCutSub2: {part 2} SeqC AbsOrInc IF FIFO? {.81} Feed ZCP2 FeedEntC {.71.2 removed CRCOffC, gets turned off in ToolPath} ELSE Rapid ZCP2 END EOL SetSRSubXY {restore SR to 1st position value} ReSetPass2 {restore for positioning moves} RETURN
Milling: ToolPath RETURN
XYZRep: CycleWarning FindAnyZMoves EachRep DoCycleComment IF NOT FirstCycle? SeqC CRCOffC GetConnect StrtPosC EOL END ToolPath ExitMove NextRep RETURN
NoRepAutoCycle: EACHFeat DoCycleComment IF SPXMove? OR SPYMove? SeqC Rapid MoveSXYC EOL END AutoCycCutSub1 Milling AutoCycCutSub2 NEXTFeat RETURN
ZonlyRepAutoCycle: EACHFeat DoCycleComment IF SPXMove? OR SPYMove? SeqC GetConnect MoveSXYC EOL END AutoCycCutSub1 EachRep IF NOT FirstCycle? IF NOT FeedConnect? ExitMove END DoCycleComment IF SPXMove? OR SPYMove? SeqC GetConnect MoveSXYC EOL END END ToolPath NextRep AutoCycCutSub2 NEXTFeat RETURN
MasterSub: IF FirstOperation? IF MultipleParts? AND OneToolAllParts? AND NOT FirstPart? ELSE IF ToolChangeAtHome? SetHome END Seq Plane Rapid AbsOrInc Preset ' X0 Y0 Z0' EOL SeqC ' T1 M16' EOL DoPartCycleComment DoOpComments DoPostScript CheckPass SeqC Rapid StrtPos Speed SpinOn EOL SeqC ' G45' ToolOfst ZCP1 OpToolID EOL SeqC CoolOn EOL END ELSE IF NewTool? IF MultipleParts? AND OneToolAllParts? AND NOT FirstPart? ELSE
{Finish off last Operation}
SeqC CoolOff EOL SeqC ' G28 Z15.0' EOL DoEndOpPS IF LAST ProgStop? SeqC ' M00' EOL ELSE SeqC ProgStop EOL END
GetStartOfSameTool SeqC Rapid StrtPos SpeedC EOL END IF NOT CoolOff? AND LAST CoolOff? SeqC CoolOn EOL END END END END END {common point for all operations} RapidF# { No Output } IF Milling? IF AutoCycle? IF Repeats? IF ZshiftOnly? ZonlyRepAutoCycle ELSE XYZRepAutoCycle END ELSE NoRepAutoCycle END ELSE { NOT AutoCycle } IF Repeats? XYZRep ELSE Milling END END SeqC CRCOffC EOL ELSE IF Drilling? IF Repeats? EachRep DoCycleComment IF FirstCycle? DrillStuff END ToolPath NextRep ELSE DrillStuff ToolPath END SeqC ' G80' EOL END END RETURN
EndPartSub: {End of program ************************************************************}
{finish last operation} SeqC CoolOff EOL SeqC ' G28 Z15.0' EOL DoEndOpPS SeqC ' G28 X0 Y0' SpinOff EOL 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 } Save# Num#('2') Recall# Num#('1') IF LTEqual? Recall# Num#('1') Recall# Num#('3') EachOp IF Equal? Operation# Recall# Num#('2') Save# Num#('2') ADD# Operation# Num#('1') IF NewTool? IF Equal? Recall# Num#('1') Recall# Num#('3') Save# Num#('2') Operation# ELSE IF NotEqual? Recall# Num#('1') SUB# Recall# Num#('2') Num#('1') Save# Num#('2') SUB# Operation# Num#('1') END END END END NextOp EachPart TagInc EachOp IF GTEqual? Operation# Recall# Num#('1') IF LTEqual? Operation# Recall# Num#('2') IF Equal? Operation# Recall# Num#('1') IF NOT FirstPart?
{Finish off last Operation}
IF FullUp? SeqC CoolOff EOL SeqC ' G28 Z15.0' EOL END {DoEndOpPS}
{Start new Operation}
PlaneC GetStartOfSameTool SeqC ' G45' ToolOfst ZCP1 OpToolID EOL SeqC Rapid StrtPos SpeedC EOL IF FullUp? SeqC CoolOn EOL END END END MasterSub END END NextOp NextPart Save# Num#('1') ADD# Recall# Num#('2') Num#('1') END END RETURN
{Start of executable Prog **************************************************}
{setup and initializations} InitProg ReverseXZArcs SetFlood SetMaxRPM('10000') SetMaxFeed('500') Save# Num#('1') Num#('0') { This Tool FirstOp# } Save# Num#('2') Num#('0') { This Tool LastOp# } Save# Num#('3') Num#('0') { LastOp# } Save# Num#('4') Num#('0') { XPos Status Register Updated Position for Repeated AutoCycles } Save# Num#('5') Num#('0') { YPos Status Register Updated Position for Repeated AutoCycles } Save# Num#('6') Num#('0') { LastFeat EPX# AbsPosValue for Repeated AutoCycles } Save# Num#('7') Num#('0') { LastFeat EPY# AbsPosValue for Repeated AutoCycles } 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 ' 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 ProgID1 IF UseComments? AND ProgramNameComment? '( ' ProgramName$ ' )' END EOL 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 IF MultipleParts? Save# Num#('1') Num#('1') IF WorkFixtureOffsets? IF NotEqual? PartShiftX# Num#('0') BadMPWFOReport ELSE IF NotEqual? PartShiftY# Num#('0') BadMPWFOReport ELSE IF NotEqual? PartShiftZ# Num#('0') BadMPWFOReport END END END END 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 ToolChng EOL SeqC EOP EOL EOR EOL Post 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