{9/23/88 Copied & Modified: Heidenhain TNC 145C M082.53 For: Galaxy Die & Engineering. Machine: Control: Heidenhain TNC 145C Modified to have only 1 space between codes. Added L address before Z moves. Use Speed from ncCam. Modified SpinOn to be M13 [CW] and M14 [CCW]. Added first and last lines. Added M6 after tool call. Deleted CoolOn and CoolOff commands. Jim Radcliffe}
{11/15/88 Updated: Heid TNC151 Bridgeport M139.55 For: Galaxy Die & Engineering. Changed all RapidF to 'F3999'. Deleted LBL 1 thru LBL 0 lines, toolchange subroutine, from beginning of prog. Moved HomePos & CP1 after M06 in FirstOp & NewTool. Changed M05 to M25 for spindle up. Added missing FORMAT for ZDepth#. Changed ClearancePlane2# in Milling to ZCP2. Added FORMAT #9 for cycle defs SETUP & PECKG that require a negative sign which is literal. Deleted ZDepth# preceding IncValue and following AbsOrInc. Changed ZDepth# in PECKG to ZDepthInc#, using FORMAT #9. Changed FORMAT for ClearancePlane2# to FORMAT #9. Changed FORMAT for Peck# to FORMAT #9. Jim Radcliffe}
{7/24/90, Added InitProg globally to posts with this remark, DWB}
{11/29/90 Copied & Modified: Heid TNC151 Bridgeport M139.58 For: Phoenix Machine & Design Machine: Interact 412 Control: Heidenhain TNC 151B/151Q Updated to Version 3.2 per Fanuc 6M M001.76.1 Format. Customer requests: Added SaveProgNum2 and replaced ProgID1 with Program# at beginning and end becuase decimal point is not allowed in opening statement. Add ASCII('3') at end to cause DNC to stop sending. Form changes: Modified Rapid FeedRate (XXXX^X) from 0 to 3999 Modified 'F' default format from '00^0' to '###^0' Prog changes: Cleaned up FORMATs for better readability. Added SPZ#, EPX#, EPY#, EPZ#, ArcI# and ArcJ# and FORMATs for same, for AutoCycle output which requires literal 'I' before each axis address to indicate incremental moves. Added FORMATs for RepeatX#, RepeatY#, RepeatZ#, OriginUnShiftRX#, OriginUnShiftRY# and OriginUnShiftRZ# for correct output. Added TLDia#, TLLength# and TLNum# and FORMATs for same, for Tool Definition Loop at beginning. Added RapidF# and FORMAT for same, and replaced all literal 'F3999' to RapidF for ease of future conversions. DWB}
{6/19/92 Updated: Heid TNC 151 BP M139.76.1 to .81 format Other changes for simplicity and ease of future updates or modifications. Changed HomeX# & HomeY# to Home Changed StartPosX# & StartPosY# to StrtPos Changed all literal L to use the sub DoL Changed all literal R0 to use the sub DoR0 Jim Radcliffe}
{6/19/92 Copied & modified: Heid TNC 151 BP M139.81 For: Belden Wire & Cable Machine: Bridgeport Series 1 Interact Control: Heidenhain TNC 151A Summary of major changed per customer requests: Added an asterisk before comments. Deleted the Tool List from the beginning of program. Modified layout of output at beginning and ending of operations. Modified repeats of subs. Do a ' STOP' before ' Tool Call'. Jim Radcliffe}
{9/18/95 Initial: Heid TNC 151A BP S1 M508.81 Created: Heid TNC 151 BP S1 M853.81 ForUser: Murtaugh Represents / Micromanipulator Control: Heidenhain TNC 151 Machine: Bridgepost Series 1 Interact Develop: ComPost 4.21.33, Virtual v.2.20 Comment: New processor per marked up readout and conversation with Steve Visnovits Added Tool Definitions to beginning of program. Modified ToolPath so that Z moves are output with R0 (no CRC). Jim Radcliffe}
{Prog Numeric Format Definitions *******************************************}
DoSubComment: IF UseComments? AND SubComment? '*( SUB NUMBER: ' Program# ' )' 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 IF Metric? {CAM file is in metric, tools and tool path} SetScale('.03937007874') { change to English, this is an English post} END END RETURN
PSInit: {reset flags} NewWFOF RotateF RETURN
PSStuff: {revised.72} IF FourthCW? FORMAT(FourthDegree#,2) SeqLab 'A' FourthDegree# EOL FourthCWF {reset flag} END IF FourthCCW? FORMAT(FourthDegree#,3) SeqLab 'A' FourthDegree# EOL FourthCCWF {reset flag} END IF FifthCW? FORMAT(FifthDegree#,2) SeqLab 'B' FifthDegree# EOL FifthCWF {reset flag} END IF FifthCCW? FORMAT(FifthDegree#,3) SeqLab 'B' FifthDegree# EOL FifthCCWF {reset flag} END RETURN
FinishSub1: {part 1} UnSkipZ IF NOT FeedConnect? Feed {no output} IF AutoCycle? SeqLab DoL ZCP3 DoR0 RapidF DoM EOL ELSE IF FIFO? {.81} SeqLab DoL ZCP3 DoR0 FeedRate DoM EOL ELSE SeqLab DoL ZCP3 DoR0 RapidF DoM EOL END END END RETURN
OpenMP: IF EquallySpacedOffsets? NewProg SeqLab ' CALL LBL ' Program# EOL StartSub ELSE '*( NOTE: This post processor does not support work fixture offsets!!! )' EOL '*( Reprocess using Equally Spaced Offsets!!! )' EOL END RETURN
CRC: IF CutterRadiusCompensation? IF CRCleft? ' RL' ELSE ' RR' END ELSE DoR0 END RETURN
CheckMove: IF AutoCycle? {implies incremental} IF ArcFeat? ' IX' EPX# ' IY' EPY# ELSE IF XMove? OR YMove? ' IX' EPX# ' IY' EPY# END IF ZMove? ' IZ' EPZ# END END ELSE MoveX MoveY MoveZC END RETURN
FormatArc: IF AutoCycle? {implies incremental} SeqLab ' CC IX' ArcI# ' IY' ArcJ# EOL ELSE SeqLab ' CC' ArcIJ EOL END SeqLab ' C' CheckMove IF ArcCW? ' DR-' ELSE ' DR+' END CRC RETURN
StdLine: IF Decelerate? IF RoomToDecel? DecelMove1 SeqLab DoL CheckMove CRC FeedRate DoM EOL DecelMove2 END SeqLab DoL CheckMove CRC DecelFeed DoM EOL ELSE IF XMove? OR YMove? OR ZMove? SeqLab DoL CheckMove CRC FeedRate DoM EOL END END RETURN
ToolPath: EACHFeat IF PointFeat? Rapid {no output} IF AutoCycle? IF NOT FirstFeat? SeqLab DoL MoveSX MoveSY DoR0 RapidF DoM EOL END SeqLab ' CALL LBL ' Program# EOL CalcACSRXY {calc tool position after sub call, CalcAutoCycleStatusRecordXY} ELSE SeqLab DoL MoveSX MoveSY DoR0 RapidF ' M99' EOL END ELSE IF RapidFeat? Rapid {no output} IF LastFeat? AND AutoCycle? {.70} SeqLab DoL CheckMove DoR0 RapidF DoM EOL ELSE IF XMove? OR YMove? OR ZMove? SeqLab DoL CheckMove CRC RapidF DoM EOL END END ELSE IF LineFeat? Feed {no output} IF LastFeat? SeqLab DoL CheckMove DoR0 FeedRate DoM EOL ELSE IF ZMove? {skip CRCOn until first non-Z move line, skipping ramps} SeqLab DoL CheckMove DoR0 FeedRate DoM EOL ELSE IF Decelerate? IF RoomToDecel? DecelMove1 SeqLab DoL CheckMove CRC FeedRate DoM EOL DecelMove2 END SeqLab DoL CheckMove CRC DecelFeed DoM EOL ELSE IF XMove? OR YMove? OR ZMove? SeqLab DoL CheckMove CRC FeedRate DoM EOL END END END END ELSE IF ArcFeat? EACHQuadrant IF LastQuadrant? AND Decelerate? IF RoomToDecel? DecelMove1 SeqLab FormatArc ArcFeed DoM EOL DecelMove2 END SeqLab FormatArc DecelFeed DoM EOL ELSE SeqLab FormatArc ArcFeed DoM EOL END NEXTQuadrant END END END END NEXTFeat RETURN
AutoCycCutSub2: {part 2} ToolPath AbsValue {no output} IF Repeats? AND FeedConnect? AND ZshiftOnly? {.69 removed RapidC} {.71.2 removed CRCOffC, gets turned off in ToolPath} ELSE IF FIFO? {.81} Feed {no output} SeqLab DoL ZCP2 DoR0 FeedRate DoM EOL ELSE Rapid {no output} SeqLab DoL ZCP2 DoR0 RapidF DoM EOL {.71.2 removed CRCOffC, gets turned off in ToolPath} END END SeqLab ' LBL 0' 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 IF FeedConnect? Feed {no output} SeqLab DoL ZInPlusInc DoR0 FeedEnt DoM EOL ELSE {we have an entry/exit connect} IF FeedEntry? IF NOT FirstCycle? Rapid {no output} SeqLab DoL ZCP2PlusIncC DoR0 RapidF DoM EOL {.69 added Rapid, reads better} {can't call for cycle = 1, .69 changed to ZCP2PlusInc} END Feed {no output} SeqLab DoL ZInPlusInc DoR0 FeedEnt DoM EOL ELSE Rapid {no output} SeqLab DoL ZInPlusInc DoR0 RapidF DoM EOL {.69 added Rapid, reads better} END END IF FirstCycle? SetStatusOff {protect Z position for incremental sub} END SeqLab ' CALL LBL ' Program# EOL NextCycle SetStatusOn AutoCycCutSub1 {build element sub} AutoCycCutSub2 {.69, removed FinishSub1} IF FeedConnect? {there is no Z up in the sub, .69} IF FIFO? {.81} Feed {no output} SeqLab DoL ZCP2 DoR0 FeedRate DoM EOL {.69} ELSE Rapid {no output} SeqLab DoL ZCP2 DoR0 RapidF DoM EOL {.69} END END {.69} SeqLab ' LBL 0' EOL CloseSub {Element shift, not pattern} RETURN
ZonlyRep: EachCycle IF NOT FirstCycle? SeqLab DoL StrtPos DoR0 IF Rapid? RapidF ELSE FeedRate END DoM EOL END IF FeedConnect? FeedC {no output} SeqLab DoL ZInPlusInc DoR0 FeedEnt DoM EOL ELSE {we have an entry/exit connect} IF FeedEntry? IF NOT FirstCycle? RapidC {no output} SeqLab DoL ZCP2PlusIncC DoR0 RapidF DoM EOL END FeedC {no output} SeqLab DoL ZInPlusInc DoR0 FeedEnt DoM EOL ELSE RapidC {no output} SeqLab DoL ZInPlusInc DoR0 RapidF DoM EOL END END SeqLab ' CALL LBL ' Program# EOL NextCycle StartSub SkipZ ToolPath FinishSub1 SeqLab ' LBL 0' EOL CloseSub RETURN
CheckPass: IF AutoCycle? {use the correct StrtPos} SetPass2 ELSE SetPass1 END RETURN
{Start of executable Prog **************************************************}
{setup and initializations} InitProg ReverseXZArcs UseSeparateSubCalls SetMaxSeparateSubCalls ('50') SetMaxRPM('10000') SaveProgNum2 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 EachOp {Start of post processing *********************} IF FirstOperation? SeqLab ' BEGIN PGM ' Program# ' INCH' EOL IF ToolChangeAtHome? SetHome END IF UseComments? IF ProgramNameComment? '*( PROGRAM: ' 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 ABSOLUTE INCHES )' EOL END IF PartsComment? '*( PARTS PROGRAMMED: ' Parts# ' )' EOL END IF StartToolComment? '*( FIRST TOOL NOT IN SPINDLE )' EOL END END EachTool SeqLab ' TOOL DEF ' TLNum# DoL TLLength# ' R0' EOL NextTool IF Metric? {CAM file is in metric, tools and tool path} SetScale('.03937007874') { change to English, this is an English post} END OpenSub IF MultipleParts? AND AllToolsOnePart? OpenMP END SeqLab DoL IF ToolChangeAtHome? Home END DoR0 RapidF ' M25' EOL
Plane {no output} DoOpComments DoPostScript ToolChng {no output} SeqLab ' STOP' DoM EOL SeqLab ' TOOL CALL ' Tool# ' Z' Speed EOL IF MultipleParts? AND OneToolAllParts? OpenMP END CheckPass AbsValue Rapid {no output} SeqLab DoL StrtPos DoR0 RapidF SpinOn EOL SeqLab DoL ' Z' ClearancePlane1# DoR0 RapidF DoM EOL ELSE IF NewTool?
{Finish off last Operation}
IF MultipleParts? AND OneToolAllParts? CloseMP END DoEndOpPS SeqLab DoL IF ToolChangeAtHome? Home END DoR0 RapidF ' M25' EOL IF LAST ProgStop? SeqLab ' STOP M02' EOL END
{Start new Operation}
Plane {no output} DoOpComments DoPostScript ToolChng {no output} SeqLab ' STOP' DoM EOL SeqLab ' TOOL CALL ' Tool# ' Z' Speed EOL IF MultipleParts? AND OneToolAllParts? OpenMP END CheckPass AbsValue Rapid {no output} SeqLab DoL StrtPos DoR0 RapidF SpinOn EOL SeqLab DoL ' Z' ClearancePlane1# DoR0 RapidF DoM EOL ELSE IF SameTool? DoEndOpPS IF LAST ProgStop? SeqLab DoL DoR0 RapidF ' M25' EOL SeqLab ' STOP M02' EOL
GetStartOfSameTool AbsValue Rapid {no output} SeqLab DoL StrtPos DoR0 RapidF DoM EOL END END END END IF Milling? SeqLab DoL ZCP2 DoR0 RapidF DoM 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? FindAnyZMoves {for normal abs subroutine} IF NoZMoves? ZonlyRep ELSE G92Sub {pattern shift, not element} END 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? Rapid {no output} SeqLab DoL ZCP3 DoR0 RapidF DoM EOL ELSE IF FIFO? {.81} FeedC {no output} SeqLab DoL ZCP3 DoR0 FeedRateC DoM EOL ELSE Rapid {no output} SeqLab DoL ZCP3 DoR0 RapidF DoM EOL END END ELSE IF Drilling? IF Repeats? NewProg StdSub SeqLab DoL StrtPos DoR0 RapidF DoM EOL END IF NOT RetractToCP1? SeqLab DoL ZCP2 DoR0 RapidF DoM EOL END IF Tap? SeqLab ' CYCL DEF 2.0 TAPPING' EOL SeqLab ' CYCL DEF 2.1 SETUP -' ClearancePlane2# EOL SeqLab ' CYCL DEF 2.2 DEPTH ' ZDepth# EOL SeqLab ' CYCL DEF 2.3 DWELL 0' EOL SeqLab ' CYCL DEF 2.4 F' FeedEntry# EOL ELSE SeqLab ' CYCL DEF 1.0 PECKING' EOL SeqLab ' CYCL DEF 1.1 SETUP -' ClearancePlane2# EOL SeqLab ' CYCL DEF 1.2 DEPTH ' ZDepth# EOL SeqLab ' CYCL DEF 1.3 PECKG -' IF Peck? Peck# EOL ELSE ZDepthInc# EOL END SeqLab ' CYCL DEF 1.4 DWELL ' IF Dwell? Dwell# EOL ELSE '0' EOL END SeqLab ' CYCL DEF 1.5 F' FeedEntry# EOL END ToolPath IF Repeats? FinishSubG92 END Rapid {no output} SeqLab DoL ZCP3 DoR0 RapidF DoM EOL END END NextOp {loops back to EachOP until last Operation}
{End of program ************************************************************}
{finish last operation} IF MultipleParts? AND OneToolAllParts? CloseMP END DoEndOpPS SeqLab DoL IF FIRST ToolChangeAtHome? {.71.2 added FIRST modifier} FirstHome END DoR0 RapidF ' M25' EOL IF ProgStop? SeqLab ' STOP M02' EOL END IF MultipleParts? AND AllToolsOnePart? CloseMP END SeqLab ' STOP M02' EOL CloseSub Post2 {organize Subs into one program} Close Reopen IF UseComments? SetScale('1') {restore scale for comments} IF FileBytesComment? '*( FILE LENGTH: ' FileBytes# ' CHARACTERS )' EOL END IF FileFeetComment? '*( FILE LENGTH: ' FileFeet# ' FEET )' EOL END IF FileMetersComment? '*( FILE LENGTH: ' FileMeters# ' METERS )' EOL END END SeqLab ' END PGM ' Program2# ' INCH' EOL ASCII('3') EOL Close Retag