{Change Comments ***********************************************************}
{2/21/97
Copied: LongHand M001.13.1
Created: MillPWR #LH [AR] MY26.14
For: Acu-Rite Incorporated
Machine:
Control: MILLPWR 2-axis control/3-axis readout
Versions: Catalyst v3.30C/ComPost2 MSL 68K
Changes made per Ken Cramer of Acu-Rite Incorporated, phone call, faxes, manual and sample Demo Part.
Output is very basic.
No Offsets, spindle, coolant, ProgStops, nothing.
Only Line and Arc blocks.
All non-ToolPath moves are handled via Variables and Flags.
Variables used:
1. Current Tool FirstOp#
2. Current Tool LastOp#
3. NewToolOp#
4. Current Status Register SPX
5. Current Status Register SPY
6. Current Status Register SPZ
7. Current Status Register EPX
8. Current Status Register EPY
9. Current Status Register EPZ
10. AutoCycle SetACSPCompF SPX
11. AutoCycle SetACSPCompF SPY
12. AutoCycle SetPass2 SwapX
13. AutoCycle SetPass2 SwapY
Flags used:
1. Current Status Register EPXYZ Change
2. MultipleParts OneToolAllParts
3. MultipleParts OneToolAllParts
4. NewToolChange
5. ExitMove Flag for Non-AutoCycle ZMove FeedConnect Repeats
6. ZonlyRepAutoCycle Flag for SetPass2 Positioning
DWB}
{9/25/97
Updated & Modified: MillPWR #LH [AR] MY26.14
Created: MillPWR #LH [AR] MY26.15
For: Acurite/Reich Tool & Design
Versions: Catalyst v3.35C/ComPost2 MSL 68K
Changes made per Brett Reich of Reich Tool & Design and Ken Cramer of Acu-Rite Incorporated,
phone calls, faxes, manual and sample "MillPwr Test" vnc file.
Updated for Catalyst v3.35C per Numbers LongHand M001.12 Format.
Numerous changes, too many and too involved to list here.
Briefly, the customer reported that they could not load the text file into the control. First
problem was caused by file extension used. Customer was using .NSF which tells the control that
the output file is in binary. Solution was to change extension to .MPT which tells the control
that the output file is in ASCII, the code that Virtual spits out. Second problem was caused by
customer using default loading condition which is set to binary load. Solution was for customer to
use text loading condition. Third problem was caused by customer trying to load output file from
a high density floppy disk using a double density drive. Solution was for customer to load output
file from a double density disk. At this point, the posted output could be tested. Changes needed:
No zero length moves allowed.
This includes ZOnlyMoves, i.e. clearance plane moves.
Deleted all ZOnlyMove blocks.
Minimize sequencing not allowed.
Deleted condition for checking Minimize sequencing check box, i.e. forcing line numbers.
Incremental blocks require some kind of reference to other data.
From blocks require INC to be followed by previous Step block.
To block can either reference From data of current Step block or INC to be followed by previous
Step block.
Arc Center blocks can either reference From data of current Step block or INC to be followed by
previous Step block.
To and Arc Center blocks are referencing From data a current Step block as this is easier.
All Z blocks are output in Absolute, even Pattern AutoCycles.
No longer using total variable output.
Variables and Flags from previous version have been changed.
New Variables used:
1. MultipleParts Current Tool FirstOp#
2. MultipleParts ToolOp# Counter
3. Not Used
4. GetIncXEPtoSP
5. GetIncYEPtoSP
6. SPX Status Register
7. SPY Status Register
8. EPX Status Register
9. EPY Status Register
10. EPZ Status Register
11. CalcACEPX
12. CalcACEPY
New Flags used:
1. ZonlyRepAutoCycle GetIncSXYMove
2. AutoCycle ToolPath FirstFeat MoveSPX
3. ZonlyRepAutoCycle SPXYMoveInc
4. ToolChangeAtHome
DWB}
{10/23/97
Modified: MillPWR #LH [AR] MY26.15
Created: MillPWR #LH [AR] MY26.15.1
For: Acurite/Reich Tool & Design
Versions: Catalyst v4.21.03(mac)/ComPost2 MSL 68K
Updated for Catalyst v3.35C per Numbers LongHand M001.12a Format.
Simplified routine at GetIncEPtoSP sub.
Corrected problem with TagInc limit.
When using ² and < for Retag passes, there is a limit to how high Tag# may increase.
This was originally intended for use in calling Start and End blocks of SubRoutines.
If Tag# reaches 512, the output is corrupted in Virtual while the Gibbs System freezes.
This was solved by replacing Tag# with Var(13) however because the Header must contain the total
number of Steps which is not known until the end of the output, a creative method was employed.
Basically, the Header is output into a temporary Text File and output at the end.
By setting Keep Subs in Front to TRUE, the Header can then be output at the beginning after the
total number of Steps are calculated.
Set Keep Subs in Front of Program to TRUE in ComPost2 Subs Dialog.
Changed FORMAT#9 from 'Ä…#bbbb.bbbb#' to '000' at Prog Numeric Format Definitions.
Added FORMAT#10, 'Ä…#bbbb.bbbb#'at Prog Numeric Format Definitions.
Deleted Tag# from FORMAT#5 at Prog Numeric Format Definitions.
Modified FORMATting of Recall# at Report sub.
Added OpenSub to beginning of Header sub.
Changed ²1 to Var(13) at Steps block of Header sub.
Modified FORMATting of Recall# at Steps block of Header sub.
Added CloseSub to end of Header sub.
Moved GetSeqLabC sub to before SetTool sub.
Deleted NOT AbsValue and NOT Flag(2) test at GetSeqLabC sub.
Changed '<' TagInc Tag# to Var(13) at GetSeqLabC sub.
Modified FORMATting of Recall# at GetSeqLabC sub.
Changed literal '?' to GetSeqLabC call at SetTool sub.
Changed ' ²' Tag# to SUB# Var(13) Num(1) at GetAbsOrIncStep sub.
Deleted TagInit at ProgStart sub.
Deleted TagInc at ProgStart sub.
Added Var(13) initializer at ProgStart sub.
Moved Header call from start of InitOp sub to start of End3 sub.
Added OpenSub prior to ProgramComments at InitOp sub.
Deleted literal '<1' at End3 sub.
Deleted Retag at End3 sub.
Added CloseSub at End3 sub.
Added Post2 at End3 sub.
DWB}
{Prog Numeric Format Definitions ****}
#1 = '#.00'
#2 = '#####.###;0.'
#3 = '*#####.###;0.'
#4 = '-###0.0000'
#5 = '#######0'
#6 = '####^##0'
#7 = '####.####;0'
#8 = '-*###0.0000'
#9 = '000'
#10 = 'Ä…#bbbb.bbbb#'
FORMAT(FileFeet#,1)
FORMAT(FileMeters#,1)
FORMAT(Recall#,4)
FORMAT(ADD#,4)
FORMAT(SUB#,4)
FORMAT(MUL#,4)
FORMAT(ToolDiameter#,4)
FORMAT(TrackX#,4)
FORMAT(TrackY#,4)
FORMAT(TrackXNO#,4)
FORMAT(TrackYNO#,4)
FORMAT(TrackZNO#,4)
FORMAT(SPX#,4)
FORMAT(SPY#,4)
FORMAT(SPZ#,4)
FORMAT(EPX#,4)
FORMAT(EPY#,4)
FORMAT(EPZ#,4)
FORMAT(ArcI#,4)
FORMAT(ArcJ#,4)
FORMAT(PartNum#,5)
FORMAT(Program#,5)
FORMAT(Operation#,5)
FORMAT(Tool#,5)
FORMAT(Parts#,5)
FORMAT(RapidF#,5)
FORMAT(FeedEntry#,5)
FORMAT(FeedContour#,5)
FORMAT(ArcFeed#,5)
FORMAT(Dwell#,6)
{Added Subroutines ***}
Report:
IF Equal? Operation# Num#('0')
FORMAT(Recall#,10)
' ' EOL
Recall# Num#('4') ' ' Recall# Num#('5') EOL
Recall# Num#('6') ' ' Recall# Num#('7') EOL
Recall# Num#('8') ' ' Recall# Num#('9') ' ' Recall# Num#('10') EOL
Recall# Num#('11') ' ' Recall# Num#('12') EOL
' ' EOL
FORMAT(Recall#,4)
END
RETURN
Header:
OpenSub
'MillPWR Text File' EOL
'; ProgramName = "' ProgramName$ '"' EOL
'FormatVersion = 1.2' EOL
'DimensionUnits = INCH' EOL
'FeedRateUnits = INCH' EOL
'AngleFormat = D.M.S' EOL
'Steps = '
FORMAT(Recall#,9)
Recall# Num#('13')
FORMAT(Recall#,4)
EOL
CloseSub
RETURN
GetSeqLabC:
IF NOT MinimizeSequencing?
{ Leave this for testing purposes }
END
Save# Num#('13') ADD# Recall# Num#('13') Num#('1')
FORMAT(Recall#,9)
Recall# Num#('13')
FORMAT(Recall#,4)
RETURN
SetTool:
GetSeqLabC
' SET_TOOL' EOL
' Diam = ' ToolDiameter# ' INCH' EOL
IF ToolComment?
' Type = "' ToolComment$ '"' EOL
END
RETURN
GetAbsOrIncStep:
IF AbsValue?
' ABS'
ELSE
FORMAT(SUB#,9)
' INC ' SUB# Recall# Num#('13') Num#('1')
FORMAT(SUB#,4)
END
RETURN
GetAbsOrIncFrom:
IF AbsValue?
' ABS'
ELSE
' INC From'
END
RETURN
ckCRC:
IF Flag?('4') { ToolChangeAtHome }
' Offset = CENTER' EOL
ELSE
IF CutterRadiusCompensation?
IF CutterLeft?
' Offset = LEFT' EOL
ELSE
IF CutterCenter?
' Offset = CENTER' EOL
ELSE
' Offset = RIGHT' EOL
END
END
ELSE
' Offset = CENTER' EOL
END
END
RETURN
GetRapidF:
' Feed_Rate = ' RapidF# EOL
RETURN
GetFeedEnt:
' Feed_Rate = ' FeedEntry# EOL
RETURN
GetFeedRate:
' Feed_Rate = ' FeedContour# EOL
RETURN
GetArcFeed:
' Feed_Rate = ' ArcFeed# EOL
RETURN
SPisEP:
Save# Num#('6') Recall# Num#('8')
Save# Num#('7') Recall# Num#('9')
RETURN
CalcACEP:
Save# Num#('11') SUB# Recall# Num#('6') Recall# Num#('4')
Save# Num#('12') SUB# Recall# Num#('7') Recall# Num#('5')
RETURN
GetACEP:
Save# Num#('6') Recall# Num#('11')
Save# Num#('7') Recall# Num#('12')
Report
RETURN
GetTPEP:
IF PointFeat?
Save# Num#('6') SPX#
Save# Num#('7') SPY#
ELSE
Save# Num#('6') EPX#
Save# Num#('7') EPY#
Save# Num#('10') EPZ#
END
RETURN
TPFeature:
IF PointFeat? { Drilling Only }
' DRILL_POSITION' EOL
ELSE
IF RapidFeat? OR LineFeat?
' LINE' EOL
ELSE
' ARC' EOL
END
END
RETURN
DrillFeature:
' Center.X = ' SPX# GetAbsOrIncStep EOL
' Center.Y = ' SPY# GetAbsOrIncStep EOL
' Depth = ' SPZ# GetAbsOrIncStep EOL
RETURN
AbsMillFeature:
' From.X = ' SPX# GetAbsOrIncStep EOL
' From.Y = ' SPY# GetAbsOrIncStep EOL
' To.X = ' EPX# GetAbsOrIncFrom EOL
' To.Y = ' EPY# GetAbsOrIncFrom EOL
' Depth = ' EPZ# GetAbsOrIncStep EOL
RETURN
IncMillFeature:
IF Flag?('2') { AutoCycle ToolPath FirstFeat MoveSPX }
SetFlagF('2')
SetAbs
' From.X = ' Recall# Num#('6') GetAbsOrIncStep EOL
' From.Y = ' Recall# Num#('7') GetAbsOrIncStep EOL
TrackXNO# SPX#
TrackYNO# SPY#
SetInc
ELSE
' From.X = ' SPX# GetAbsOrIncStep EOL
' From.Y = ' SPY# GetAbsOrIncStep EOL
END
' To.X = ' EPX# GetAbsOrIncFrom EOL
' To.Y = ' EPY# GetAbsOrIncFrom EOL
SetAbs
' Depth = ' EPZ# GetAbsOrIncStep EOL
SetInc
RETURN
ArcStuff:
' Center.X = ' ArcI# GetAbsOrIncFrom EOL
' Center.Y = ' ArcJ# GetAbsOrIncFrom EOL
IF ArcCW?
' Direction = CW' EOL
ELSE
' Direction = CCW' EOL
END
RETURN
AbsHelixFeature1:
' From.X = ' SPX# GetAbsOrIncStep EOL
' From.Y = ' SPY# GetAbsOrIncStep EOL
' To.X = ' ADD# EPX# MUL# Num#('2') SUB# ArcI# EPX# GetAbsOrIncFrom EOL
' To.Y = ' ADD# EPY# MUL# Num#('2') SUB# ArcJ# EPY# GetAbsOrIncFrom EOL
IF Equal? SPZ# EPZ#
' Depth = ' EPZ# GetAbsOrIncStep EOL
ELSE
' Depth = ' MUL# Num#('.5') ADD# EPZ# SPZ# GetAbsOrIncStep EOL
END
RETURN
IncHelixFeature1:
IF Flag?('2') { AutoCycle ToolPath FirstFeat MoveSPX }
SetFlagF('2')
SetAbs
' From.X = ' Recall# Num#('6') GetAbsOrIncStep EOL
' From.Y = ' Recall# Num#('7') GetAbsOrIncStep EOL
TrackXNO# SPX#
TrackYNO# SPY#
SetInc
ELSE
' From.X = ' SPX# GetAbsOrIncStep EOL
' From.Y = ' SPY# GetAbsOrIncStep EOL
END
' To.X = ' SetAbs MUL# Num#('2') SUB# ArcI# EPX# SetInc GetAbsOrIncFrom EOL
' To.Y = ' SetAbs MUL# Num#('2') SUB# ArcJ# EPY# SetInc GetAbsOrIncFrom EOL
SetAbs
IF Equal? SPZ# EPZ#
' Depth = ' EPZ# GetAbsOrIncStep EOL
ELSE
' Depth = ' MUL# Num#('.5') ADD# EPZ# SPZ# GetAbsOrIncStep EOL
END
SetInc
RETURN
AbsHelixFeature2:
' From.X = ' ADD# EPX# MUL# Num#('2') SUB# ArcI# EPX# GetAbsOrIncStep EOL
' From.Y = ' ADD# EPY# MUL# Num#('2') SUB# ArcJ# EPY# GetAbsOrIncStep EOL
' To.X = ' EPX# GetAbsOrIncFrom EOL
' To.Y = ' EPY# GetAbsOrIncFrom EOL
' Depth = ' EPZ# GetAbsOrIncStep EOL
RETURN
IncHelixFeature2:
' From.X = 0.0000' GetAbsOrIncStep EOL
' From.Y = 0.0000' GetAbsOrIncStep EOL
' To.X = ' SetAbs MUL# Num#('-2') SUB# ArcI# EPX# SetInc GetAbsOrIncFrom EOL
' To.Y = ' SetAbs MUL# Num#('-2') SUB# ArcJ# EPY# SetInc GetAbsOrIncFrom EOL
SetAbs
' Depth = ' EPZ# GetAbsOrIncStep EOL
SetInc
FORMAT(ArcI#,8)
FORMAT(ArcJ#,8)
RETURN
VarMove:
GetSeqLabC ' LINE' EOL
IF AbsValue?
' From.X = ' Recall# Num#('6') GetAbsOrIncStep EOL
' From.Y = ' Recall# Num#('7') GetAbsOrIncStep EOL
' To.X = ' Recall# Num#('8') GetAbsOrIncFrom EOL
' To.Y = ' Recall# Num#('9') GetAbsOrIncFrom EOL
' Depth = ' Recall# Num#('10') GetAbsOrIncStep EOL
ELSE
' From.X = 0.0000' GetAbsOrIncStep EOL
' From.Y = 0.0000' GetAbsOrIncStep EOL
IF Flag?('3') { ZonlyRepAutoCycle SPXYMoveInc }
' To.X = ' Recall# Num#('4') GetAbsOrIncFrom EOL
' To.Y = ' Recall# Num#('5') GetAbsOrIncFrom EOL
ELSE
' To.X = ' SUB# Recall# Num#('8') Recall# Num#('6') GetAbsOrIncFrom EOL
' To.Y = ' SUB# Recall# Num#('9') Recall# Num#('7') GetAbsOrIncFrom EOL
END
SetAbs
' Depth = ' Recall# Num#('10') GetAbsOrIncStep EOL
SetInc
END
RETURN
GetStartPos:
SetAbs
Save# Num#('6') TrackXNO# StartPosX#
Save# Num#('7') TrackYNO# StartPosY#
SetAbsOrInc
RETURN
GetStartPosC:
SetAbs
LoadFeat StartPosX# StartPosY# Num#('0')
IF XMove? OR YMove?
Save# Num#('6') TrackXNO# StartPosX#
Save# Num#('7') TrackYNO# StartPosY#
END
SetAbsOrInc
RETURN
GetHome:
SetAbs
LoadFeat PRIME HomeX# PRIME HomeY# LAST ClearancePlane1#
SetAbsOrInc
IF XMove? OR YMove?
Save# Num#('8') PRIME HomeX#
Save# Num#('9') PRIME HomeY#
Save# Num#('10') LAST ClearancePlane1#
SetFlag('4') { ToolChangeAtHome }
VarMove ckCRC GetRapidF
SetFlagF('4') { ToolChangeAtHome }
SPisEP
END
RETURN
GetFirstHome:
SetAbs
LoadFeat FIRST PRIME HomeX# FIRST PRIME HomeY# ClearancePlane1#
SetAbsOrInc
IF XMove? OR YMove?
Save# Num#('8') FIRST PRIME HomeX#
Save# Num#('9') FIRST PRIME HomeY#
Save# Num#('10') ClearancePlane1#
SetFlag('4') { ToolChangeAtHome }
VarMove ckCRC GetRapidF
SetFlagF('4') { ToolChangeAtHome }
SPisEP
END
RETURN
GetMoveSXYC:
SetAbs
Save# Num#('8') TrackXNO# SPX#
Save# Num#('9') TrackYNO# SPY#
SetAbsOrInc
IF AutoCycle?
SPisEP
CalcACEP
SetFlag('2') { ToolPath FirstFeat MoveSPX }
ELSE
IF Repeats? AND FeedConnect?
VarMove ckCRC GetFeedEnt
END
SPisEP
END
RETURN
GetPRIMEZCP2:
SetAbs
Save# Num#('10') TrackZNO# PRIME ClearancePlane2#
SetAbsOrInc
RETURN
GetIncEPtoSP: { ZonlyRepAutoCycle }
SetAbs
SetPass1
Save# Num#('4') Num#('0') { ZonlyRepAutoCycle GetIncXEPtoSP }
Save# Num#('5') Num#('0') { ZonlyRepAutoCycle GetIncYEPtoSP }
SetFlagF('1') { ZonlyRepAutoCycle GetIncSXYMove }
EachFeat
IF LastFeat?
TrackXNO# FIRST SPX#
TrackYNO# FIRST SPY#
IF XMove? OR YMove?
SetFlag('1') { SPXMove }
Save# Num#('4') SUB# FIRST SPX# EPX#
Save# Num#('5') SUB# FIRST SPY# EPY#
END
END
NextFeat
SetPass2
TrackXNO# StartPosX#
TrackYNO# StartPosY#
TrackZNO# ClearancePlane2#
SetAbsOrInc
CalcACEP
Report
RETURN
GetSXYMoveC: { ZonlyRepAutoCycle }
SetFlag('3') { SPXYMoveInc }
IF FeedConnect?
VarMove ckCRC GetFeedEnt
ELSE
VarMove ckCRC GetRapidF
END
SPisEP
SetFlagF('3') { SPXYMoveInc }
RETURN
TrackSPXY: { ZonlyRepAutoCycle }
EachFeat
IF FirstFeat?
SetAbs
TrackXNO# SPX#
TrackYNO# SPY#
SetInc
END
NextFeat
RETURN
{Prog Subroutines ****}
RestoreScale:
IF Metric? {CAM file is in Metric, tools and tool path}
SetScale('.03937007874') { change to English, this is an English post}
END
RETURN
WFONum:
{ Not Supported }
RETURN
WFOStuff:
{ Not Supported }
RETURN
ResetWFO:
{ Not Supported }
RETURN
DoPartCycleComment:
IF MultipleParts? AND UseComments? AND SubComment?
'; PART NO. ' PartNum# 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?
FORMAT(ToolDiameter#,7)
'; TOOL ' Tool# ': ' ToolDiameter# ' ' ToolType$ EOL
FORMAT(ToolDiameter#,4)
END
IF ToolComment?
'; ' ToolComment$ EOL
END
RestoreScale
END
RETURN
PSInit:
NewWFOF
RotateF
OptCyc1F
MasterOpF
CallMasterOpF
FourthCWF
FourthCCWF
FifthCWF
FifthCCWF
RETURN
PSStuff:
RETURN
DoPostScript:
PSInit
EachPS
PostScript EOL
PSStuff
NextPS
RETURN
DoEndOpPS:
PSInit
EachEOPS
EndOpPS EOL
PSStuff
NextPS
RETURN
ToolPath:
EACHFeat
IF PointFeat? { Drilling Only }
GetSeqLabC TPFeature DrillFeature EOL
ELSE
IF RapidFeat?
IF XMove? OR YMove?
IF AbsValue?
GetSeqLabC TPFeature AbsMillFeature ckCRC GetRapidF EOL
ELSE
GetSeqLabC TPFeature IncMillFeature ckCRC GetRapidF EOL
END
END
ELSE
IF LineFeat?
IF XMove? OR YMove?
IF AbsValue?
GetSeqLabC TPFeature AbsMillFeature ckCRC GetFeedRate EOL
ELSE
GetSeqLabC TPFeature IncMillFeature ckCRC GetFeedRate EOL
END
END
ELSE
IF ArcFeat?
IF XMove? OR YMove?
IF AbsValue?
GetSeqLabC TPFeature AbsMillFeature ArcStuff ckCRC GetArcFeed EOL
ELSE
GetSeqLabC TPFeature IncMillFeature ArcStuff ckCRC GetArcFeed EOL
END
ELSE
IF AbsValue?
GetSeqLabC TPFeature AbsHelixFeature1 ArcStuff ckCRC GetArcFeed EOL
GetSeqLabC TPFeature AbsHelixFeature2 ArcStuff ckCRC GetArcFeed EOL
ELSE
GetSeqLabC TPFeature IncHelixFeature1 ArcStuff ckCRC GetArcFeed EOL
GetSeqLabC TPFeature IncHelixFeature2 ArcStuff ckCRC GetArcFeed EOL
FORMAT(ArcI#,4)
FORMAT(ArcJ#,4)
END
TrackXNO# EPX#
TrackYNO# EPY#
TrackZNO# EPZ#
END
END
END
END
END
IF LastFeat?
IF AbsValue?
GetTPEP
ELSE
SetAbs
GetTPEP
SetInc
END
END
NEXTFeat
RETURN
AutoCycCutSub1: {part 1}
CalcACSRXY {calc tool position, CalcAutoCycleStatusRecordXY}
SaveSubStatus {save tool position}
SetPass1 {element cut moves}
SetSRXYtoSP
SetInc
RETURN
AutoCycCutSub2: {part 2}
SetAbsOrInc
SetSRSubXY {restore SR to 1st position value}
SetSRSubMove
ReSetPass2 {restore for positioning moves}
RETURN
Milling:
ToolPath
RETURN
XYZRep:
EachRep
DoCycleComment
IF NOT FirstCycle?
IF SPXMove? OR SPYMove?
GetMoveSXYC
END
END
ToolPath
NextRep
RETURN
NoRepAutoCycle:
GetIncEPtoSP
EACHFeat
DoCycleComment
GetMoveSXYC
AutoCycCutSub1
Milling
AutoCycCutSub2
NEXTFeat
GetACEP
RETURN
XYZRepAutoCycle:
GetIncEPtoSP
EachRep
DoCycleComment
GetMoveSXYC
EACHFeat
IF NOT FirstFeat?
DoCycleComment
END
IF SPXMove? OR SPYMove?
GetMoveSXYC
END
AutoCycCutSub1
Milling
AutoCycCutSub2
NEXTFeat
NextRep
GetACEP
RETURN
ZonlyRepAutoCycle:
GetIncEPtoSP
Report
EACHFeat
DoCycleComment
GetMoveSXYC
AutoCycCutSub1
EachRep
IF NOT FirstCycle?
IF FeedConnect?
DoCycleComment
IF Flag?('1') { SPXMove OR SPYMove }
GetSXYMoveC
END
SetAbsOrInc
ELSE
SetAbsOrInc
DoCycleComment
IF Flag?('1') { SPXMove OR SPYMove }
GetPRIMEZCP2
SetInc
GetSXYMoveC
SetAbsOrInc
END
END
SetInc
END
TrackSPXY
ToolPath
NextRep
AutoCycCutSub2
NEXTFeat
GetACEP
RETURN
DrillStuff:
GetCycle
RETURN
CheckPass:
IF AutoCycle? {use the correct StrtPos}
SetPass2
ELSE
SetPass1
END
RETURN
ProgStart:
InitProg
SetLowerCaseOK
ReverseXZArcs
IF Metric?
SetMaxFeed('2540')
ELSE
SetMaxFeed('100')
END
Save# Num#('1') Num#('0') { MultipleParts Current Tool FirstOp# }
Save# Num#('2') Num#('0') { MultipleParts ToolOp# Counter }
Save# Num#('4') Num#('0') { GetIncXEPtoSP }
Save# Num#('5') Num#('0') { GetIncYEPtoSP }
Save# Num#('6') Num#('0') { SPX Status Register }
Save# Num#('7') Num#('0') { SPY Status Register }
Save# Num#('8') Num#('0') { EPX Status Register }
Save# Num#('9') Num#('0') { EPY Status Register }
Save# Num#('10') Num#('0') { EPZ Status Register }
Save# Num#('11') Num#('0') { CalcACEPX }
Save# Num#('12') Num#('0') { CalcACEPY }
Save# Num#('13') Num#('0') { SeqC Step Number }
SetFlagF('1') { ZonlyRepAutoCycle GetIncSXYMove }
SetFlagF('2') { AutoCycle ToolPath FirstFeat MoveSPX }
SetFlagF('3') { ZonlyRepAutoCycle SPXYMoveInc }
SetFlagF('4') { ToolChangeAtHome }
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
END
RETURN
SetDrillEndOpZ:
IF RetractToCP1?
Save# Num#('10') TrackZNO# ClearancePlane1#
ELSE
Save# Num#('10') TrackZNO# ClearancePlane2#
END
RETURN
OpGuts:
IF Milling?
IF AutoCycle?
IF Repeats?
IF ZShiftOnly?
ZonlyRepAutoCycle
ELSE
XYZRepAutoCycle
END
ELSE
NoRepAutoCycle
END
SetPass1
ELSE { NOT AutoCycle }
IF Repeats?
XYZRep
ELSE
Milling
END
END
ELSE
IF Drilling?
IF Repeats?
EachRep
DoCycleComment
IF FirstCycle?
DrillStuff
END
ToolPath
NextRep
ELSE
DrillStuff
ToolPath
END
SetDrillEndOpZ
END
END
RETURN
InitOp:
EachOp
IF FirstOperation?
IF ToolChangeAtHome?
SetHome
END
END
NextOp
OpenSub
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
RestoreScale
RETURN
FirstOp1:
Plane { No Output }
SetTool
DoPartCycleComment
DoOpComments
DoPostScript
RETURN
FirstOp2:
CheckPass
SetAbsOrInc
GetStartPos
RETURN
FirstOp3:
RETURN
NewToolOp1:
RETURN
NewToolOp2:
DoEndOpPS
IF ToolChangeAtHome?
GetHome
END
RETURN
NewToolOp3: {Start new Operation}
PlaneC { No Output }
SetTool
DoPartCycleComment
DoOpComments
DoPostScript
RETURN
NewToolOp4:
CheckPass
SetAbsOrInc
GetStartPos
RETURN
NewToolOp5:
RETURN
SameToolOp1:
DoEndOpPS
RETURN
SameToolOp2: {Start new Operation}
DoPartCycleComment
DoOpComments
DoPostScript
CheckPass
RETURN
SameToolOp3: {Start new Operation}
PlaneC { No Output }
SetAbsOrInc
GetStartPos
RETURN
End1:
RETURN
End2:
DoEndOpPS
IF FIRST ToolChangeAtHome? {.71.2 added FIRST modifier}
GetFirstHome
END
RETURN
End3:
Header
CloseSub
Post2 {organize Subs into one program}
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
RETURN
MPallTools1P: {Multiple Parts, All Tools 1 Part}
IF FirstOperation?
FirstOp1
FirstOp2
FirstOp3
ELSE
IF NewTool?
NewToolOp1
NewToolOp2
NewToolOp3
NewToolOp4
NewToolOp5
ELSE {implied SameTool?}
SameToolOp1
SameToolOp2
SameToolOp3
END
END
OpGuts
RETURN
MP1ToollAllPfu: {Multiple Parts, 1 Tool all Parts, full up}
IF FirstOperation?
IF FirstPart?
FirstOp1
FirstOp2
FirstOp3
END
ELSE
IF NewTool?
IF FirstPart?
NewToolOp1
NewToolOp2
NewToolOp3
NewToolOp4
NewToolOp5
END
ELSE {implied SameTool?}
SameToolOp1
SameToolOp2
SameToolOp3
END
END
OpGuts
RETURN
MP1ToollAllPXcp: {Multiple Parts, 1 Tool all Parts, exit Clearance plane}
IF FirstOperation?
IF FirstPart?
FirstOp1
FirstOp2
FirstOp3
END
ELSE
IF NewTool?
IF FirstPart?
NewToolOp1
NewToolOp2
NewToolOp3
NewToolOp4
NewToolOp5
END
ELSE {implied SameTool?}
SameToolOp1
SameToolOp2
SameToolOp3
END
END
OpGuts
RETURN
NoMPs: {no multiple parts}
IF FirstOperation?
FirstOp1
FirstOp2
FirstOp3
ELSE
IF NewTool?
NewToolOp1
NewToolOp2
NewToolOp3
NewToolOp4
NewToolOp5
ELSE {implied SameTool?}
SameToolOp1
SameToolOp2
SameToolOp3
END
END
OpGuts
RETURN
MasterSub:
IF MultipleParts?
IF AllToolsOnePart?
MPallTools1P
ELSE {implied OneToolAllParts?}
IF FullUp?
MP1ToollAllPfu
ELSE {implied ExitClearancePlane?}
MP1ToollAllPXcp
END
END
ELSE
NoMPs
END
RETURN
EndPartSub:
{End of program ************************************************************}
{finish last operation}
End1
End2
RETURN
DoNewPart:
{Finish off last Part}
{DoEndOpPS}
{Start new Part}
SameToolOp2
PlaneC { No Output }
CheckPass
GetStartPosC
RETURN
MPLoop:
Save# Num#('2') Recall# Num#('1')
IF WorkFixtureOffsets?
NewWFO
EachWFO
ELSE
EachPart
END
IF AllToolsOnePart?
EachOp
MasterSub
NextOp
EndPartSub
ELSE { OneToolAllParts }
EachOp
IF Equal? Operation# Recall# Num#('2') { Tool First Op }
IF FirstOperation? OR NewTool?
IF NOT FirstPart?
DoNewPart
END
END
MasterSub
IF LastOp?
IF LastPart?
Save# Num#('1') Num#('0')
END
Save# Num#('2') Recall# Num#('1')
ELSE
IF NEXT SameTool?
Save# Num#('2') NEXT Operation#
ELSE
IF LastPart?
Save# Num#('1') NEXT Operation#
Save# Num#('2') Num#('0')
ELSE
Save# Num#('2') Recall# Num#('1')
END
END
END
END
NextOp
END
IF WorkFixtureOffsets?
IncWFO
NextWFO
ELSE
NextPart
END
RETURN
{Start of executable Prog, Top Level ****}
ProgStart {setup and initializations}
InitOp
IF MultipleParts?
IF AllToolsOnePart?
MPLoop
ELSE
EachOp
IF FirstOperation?
Save# Num#('1') Operation#
END
NextOp
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
End3
Wyszukiwarka
Podobne podstrony:
Centurion V LH [CT] MW13 15 2mYasnac MX3 HS LH [NO] MV65 15Fanuc 15M Mat LH [KP] CV71 15BP EZ Trak LH [WD] MV22 15Fanuc Pro3 Mak LH [AE] CV70 15Haas LH [AM] CV24 15 2Haas LH [TI] MX14 15Dynapath 20M LH [SDT] CV52 15Fanuc 11M LH [JBT] DW53 15Fanuc 11M LH [JBT] DW53 15Fanuc 10M LH [LAM] DW59 15K&T Gemini D MM180 LH CY81 15 1K&T Gemini D MM180 LH CY81 15 1Centurion V LH MY53 1515 3więcej podobnych podstron