{5/24/93
created initial NoSubs Processor to .81 format
FIFO stuff not supported
variables: 1 = tools 1st op; 2 = tools last op; 3 = ncCAMs last op
Jim Radcliffe}
{7/29/93, v.81.1, added FIFO handling, JR}
{8/3/93, v.81.2, SameTool WFO, RapidF#, additional FIFO handling, JR}
{5/17/94
Copied & modified: Fanuc 6M NoSubs M001.81.2
For: Braden Eng / FMC Corp
Control: GE W-3
Machine: Wiedematic Model 4560 Punch Press with Plasma Attechment.
G91 defines Punch cycle
All XY coordinates are done in Absolute.
G90 defines Plasma cycle
Plasma Rapids, G00, are done in Absulute, Plasma feeds, G01/G02/G03, are done in Incremental.
** Needs AutoCycle Support, all else should be OK **
Jim Radcliffe}
{6/9/94
Modified: GE W-3 Wiedematic Mxxx.81
Bug fix, changed the labels for ArcIJ from IJK to XYZ, thats what "MOV/" command requires.
Added SPX#, SPY# (features start position) and M03 (without punching) before "LAA/" command.
Jim Radcliffe}
{6/24/94, .81.2, moved PostScript calls for placement of literal repositioning commands, JR}
{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 *******************************************}
#1 = '#.00'
#2 = '###.###;0'
#3 = '*###.###;0'
#4 = '####.####;0'
#5 = '#######0'
#6 = '##.###;0'
FORMAT(FileFeet#,1)
FORMAT(FileMeters#,1)
FORMAT(EPMoveAngle#,2) { for LAA/ & LIN/ }
FORMAT(ADD#,2) { SPAngle# }
FORMAT(MUL#,2) { AngleIncrement# & ArcMove# }
FORMAT(ToolDiameter#,4)
FORMAT(Program#,5)
FORMAT(Operation#,5)
FORMAT(Tool#,5)
FORMAT(Parts#,5)
FORMAT(TRUNC#,5) { Hits# & ArcHits# }
FORMAT(DIV#,6) { Increment# }
FORMAT(ArcR#,6) { for Arc/ }
FORMAT(LineLength#,6)
FORMAT(SPX#,6)
FORMAT(SPY#,6)
{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
Space:
' '
RETURN
NoPunch:
'M03'
RETURN
DoSubComment:
IF UseComments? AND SubComment?
'( CYCLE START )' EOL
END
RETURN
DoOpComments:
IF UseComments?
SetScale('1')
IF MultipleParts? AND SubComment?
'( PART ' Tag# ' )' EOL
END
IF OperationIDComment?
'( OPERATION ' Operation# ': ' OperationType$ ' - '
IF RIRO? { Milling }
'Plasma Cut'
ELSE
IF Drilling?
'Punching'
ELSE
'Nibbling'
END
END
' )' 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}
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
DoPostScript:
PSInit
EachPS
SeqC PostScript EOL
PSStuff
NextPS
RETURN
DoEndOpPS:
PSInit
EachEOPS
SeqC EndOpPS EOL
PSStuff
NextPS
RETURN
FormatArc:
IF ArcCW?
CWArcC
ELSE
CCWArcC
END
MoveXYZC ArcIJ
RETURN
StdRapid:
IF XMove? OR YMove? OR ZMove?
IF Flag?('2')
SeqC RapidC MoveXYZC EOL
ELSE
SeqC MoveXYZC EOL
END
END
RETURN
Hits#:
TRUNC# DIV# LineLength# FeedEntry#
RETURN
Increment#:
DIV# LineLength# Hits#
RETURN
StdLine: {enables CRC on first call, .70}
IF Flag?('2')
IF Decelerate?
IF RoomToDecel?
DecelMove1
SeqC FeedRateC EOL
SeqC 'LIN/' Space LineLength# Space EPMoveAngle# EOL
DecelMove2
END
SeqC DecelFeed EOL
SeqC 'LIN/' Space LineLength# Space EPMoveAngle# EOL
ELSE
IF XMove? OR YMove? OR ZMove?
SeqC FeedRateC EOL
SeqC 'LIN/' Space LineLength# Space EPMoveAngle# EOL
END
END
ELSE
IF XMove? OR YMove? OR ZMove?
IF NOT FirstFeat? { the first features start position is called with StartPos }
SeqC 'X' SPX# 'Y' SPY# NoPunch EOL { M03 = No Punch, shouldnt need to here }
END
SeqC 'LAA/' Space Increment# Space EPMoveAngle# Space Hits# EOL
END
END
RETURN
SPAngle#:
IF ArcCW?
If GTEqual? SPMoveAngle# Num#('270')
ADD# Num#('-360') {prevent output of angles equal to or greater than 360}
END
ADD# SPMoveAngle# Num#('90')
ELSE
If LessThan? SPMoveAngle# Num#('90')
ADD# Num#('360') {prevent output of angles less than 0}
END
ADD# SPMoveAngle# Num#('-90')
END
RETURN
ArcLength#:
MUL# Num#('.01745329252') MUL# ArcR# ArcAngle#
RETURN
ArcHits#:
TRUNC# DIV# ArcLength# FeedEntry#
RETURN
ArcMove#:
MUL#
IF ArcCW?
Num#('-1')
ELSE
Num#('1')
END
ArcAngle#
RETURN
AngleIncrement#:
MUL#
IF ArcCW?
Num#('-1')
ELSE
Num#('1')
END
DIV# ArcAngle# ArcHits#
RETURN
StdArc:
EACHQuadrant
IF Flag?('2')
IF LastQuadrant? AND Decelerate?
IF RoomToDecel?
DecelMove1
SeqC ArcFeedC EOL
SeqC 'MOV/' ArcIJ EOL
SeqC 'ARC/' Space ArcR# Space SPAngle# Space ArcMove# EOL
DecelMove2
END
SeqC DecelFeed EOL
SeqC 'MOV/' ArcIJ EOL
SeqC 'ARC/' Space ArcR# Space SPAngle# Space ArcMove# EOL
ELSE
SeqC ArcFeedC EOL
SeqC 'MOV/' ArcIJ EOL
SeqC 'ARC/' Space ArcR# Space SPAngle# Space ArcMove# EOL
END
ELSE
SeqC 'MOV/' ArcIJ EOL
SeqC 'ARC/' Space ArcR# Space SPAngle# Space AngleIncrement# Space ArcHits# EOL
END
NEXTQuadrant
RETURN
ToolPath2: {for AutoCycle element moves}
EACHFeat
IF RapidFeat?
StdRapid
ELSE
IF LineFeat?
StdLine
ELSE
IF ArcFeat?
StdArc
END
END
END
NEXTFeat
RETURN
CutAutoCycle:
SaveSubStatus {save tool position}
SetPass1 {element cut moves}
SetSRXYtoSP
SetAbs
ToolPath2
SetInc
SetSRSubXY {restore tool position}
SetSRSubMove
ReSetPass2 {restore for positioning moves}
RETURN
ToolPath:
EACHFeat
IF PointFeat?
IF AutoCycle?
' This Processor does not support AutoCycles' EOL
{
IF NOT FirstFeat?
SeqC
IF Flag?('2')
RapidC
END
MoveSXYC EOL
END
CalcACSRXY
CutAutoCycle
}
ELSE
SeqC MoveSXYZC EOL
END
ELSE
IF RapidFeat?
StdRapid
ELSE
IF LineFeat?
StdLine
ELSE
IF ArcFeat?
StdArc
END
END
END
END
NEXTFeat
RETURN
CheckPass:
IF AutoCycle? {use the correct StrtPos}
SetPass2
ELSE
SetPass1
END
RETURN
OpType:
IF RIRO? { Milling - Plasma Operation }
'G90' FeedRate 'Z0'
SetFlag('2')
ELSE { Punching Operation }
IF Flag?('2')
'G91'
SetFlagF('2')
END
END
RETURN
StartPos:
IF Flag?('2')
Rapid StrtPos
ELSE
StrtPos
IF FirstOperation? OR NewTool?
OpToolID
END
END
RETURN
DoOp:
IF FirstOperation?
Plane CheckPass
IF MultipleParts? AND OneToolAllParts? AND NOT FirstPart?
DoOpComments
SeqC StartPos EOL
ELSE
SeqC Home 'M00' EOL { load part }
DoOpComments
DoPostScript
SeqC OpType EOL
SeqC StartPos EOL
END
ELSE
IF NewTool?
IF MultipleParts? AND OneToolAllParts? AND NOT FirstPart?
{only need to set up for tool change on 1st part}
ELSE
IF Flag?('2')
SeqC 'G91' EOL
SetFlagF('2')
END
DoEndOpPS
IF ProgStop?
SeqC
IF ToolChangeAtHome?
Home
END
'M06' EOL
ELSE
IF ToolChangeAtHome?
SeqC Home NoPunch EOL
END
END
END
{Start new Operation}
Plane CheckPass
IF MultipleParts? AND OneToolAllParts? AND NOT FirstPart?
DoOpComments
SeqC StartPos EOL
ELSE
DoOpComments
DoPostScript
SeqC OpType EOL
SeqC StartPos EOL
END
ELSE
IF SameTool?
IF Flag?('2')
SeqC 'G91' EOL
SetFlagF('2')
END
DoEndOpPS
IF LAST ProgStop?
SeqC
IF ToolChangeAtHome?
Home
END
'M06' EOL
END
{Start new Operation}
Plane CheckPass
DoOpComments
DoPostScript
SeqC OpType EOL
SeqC StartPos EOL
END
END
END
{ Common Point for All Operations }
IF Milling?
IF Repeats?
EACHRep
DoSubComment
IF NOT FirstCycle?
IF Flag?('2') { Plasma Operation }
IF FeedConnect?
SetInc
SeqC Feed StrtPos EOL { feed Plasma moves are in incremental }
SetAbs
ELSE
SeqC Rapid StrtPos EOL
END
ELSE { Punching Operation }
IF FeedConnect?
SeqC 'LAA/' {** need to calc connect to start position **} EOL
ELSE
SeqC StrtPos EOL
END
END
END
END
ToolPath
IF Repeats?
NEXTRep
END
ELSE
IF Drilling?
IF Repeats?
EACHRep
DoSubComment
END
ToolPath
IF Repeats?
NEXTRep
END
END
END
RETURN
FinishLastOp:
IF Flag?('2')
SeqC 'G91' EOL
SetFlagF('2')
END
DoEndOpPS
SeqC
IF FIRST ToolChangeAtHome?
FirstHome
END
IF MultipleParts? AND AllToolsOnePart? AND NOT LastPart? {no tool change after doing last part}
IF ProgStop?
'M06'
END
ELSE
EOP
END
EOL
RETURN
DoToolsOps:
EachOp
IF GTEqual? Operation# Recall# Num#('1') AND LTEqual? Operation# Recall# Num#('2')
{Tools1stOp ² op ² ToolsLastOp}
DoOp
END
NextOp
RETURN
NextTools1stOp:
SetNextToolOp Operation#
RETURN
GetToolsOps:
EachOp
IF Equal? Operation# Recall# Num#('1') {if op = Tools1stOp}
IF GreaterThan? NextTools1stOp Recall# Num#('1') {if NextTools1stOp is greater Tools1stOp}
Save# Num#('2') SUB# NextTools1stOp Num#('1') {ToolsLastOp becomes NextTools1stOp less 1}
ELSE {else}
Save# Num#('2') Recall# Num#('3') {ToolsLastOp becomes ncCAMsLastOp}
END
END
NextOp
RETURN
DoTool:
IF NOT Flag?('1')
GetToolsOps
EachPart
TagInc
DoToolsOps
NextPart
IF LessThan? Recall# Num#('2') Recall# Num#('3') {if ToolsLastOp < ncCAMsLastOp}
Save# Num#('1') ADD# Recall# Num#('2') Num#('1') {Tools1stOp becomes NextTools1stOp}
ELSE {else}
SetFlag('1') {set DoneFlag}
END
TagInit
END
RETURN
{Start of executable Prog **************************************************}
{setup and initializations}
InitProg
SetFlagF('1') {done flag}
SetFlagF('2') {Plasma Flag}
SkipZ
SetAbs
{NoIJKSigns} {used for Plasma corodinate commands, also set MachSpec to incremental arc center}
SetMaxFeed('500')
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
EachOp {Start of post processing *********************}
IF FirstOperation?
EOR EOL
ProgID1
IF UseComments? AND ProgramNameComment?
'( PROGRAM: ' ProgramName$ ' )'
END
EOL
IF ToolChangeAtHome?
SetHome
END
IF UseComments?
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
OpenSub
RestoreScale
END
NextOp
IF MultipleParts?
IF AllToolsOnePart?
EachPart
TagInc
EachOp
DoOp
NextOp
FinishLastOp
NextPart
ELSE
IF OneToolAllParts?
EachOp
IF FirstOperation?
Save# Num#('1') Operation# {ncCAMs1stOp becomes Tools1stOp}
END
IF LastOp?
Save# Num#('3') Operation# {save ncCAMsLastOp}
END
NextOp
DoTool DoTool DoTool DoTool DoTool DoTool DoTool DoTool DoTool DoTool
DoTool DoTool DoTool DoTool DoTool DoTool DoTool DoTool DoTool DoTool
DoTool DoTool DoTool DoTool DoTool DoTool DoTool DoTool DoTool DoTool
DoTool DoTool DoTool DoTool DoTool DoTool DoTool DoTool DoTool DoTool
DoTool DoTool DoTool DoTool DoTool DoTool DoTool DoTool DoTool DoTool
FinishLastOp
END
END
ELSE
EachOp
DoOp
NextOp
FinishLastOp
END
EOR EOL
CloseSub
Post2
IF UseComments?
SetScale('1')
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
Close
Wyszukiwarka
Podobne podstrony:
GE W 3 Wied M681 81 2GE 550 M087 87GE 1050 B&S 1500VC M554 87GE 550 MC [SN] NMU25 87 1GE 2000 Monarch M796 87GE 1050 MCL Mon [GI] MY25 87 2GE 1050 B&S 1500VC [GT] M718 87GE 2000 Monarch [BK] M928 87 2GE 1050 Burgmaster [MM] MZ25 87GE 1050 MCL Monarch M687 87GE 2000 Monarch [LBS] MU10 87GE 1050 Mon VMC75 M071 87 1mFanuc 10M MVJr[G43r] M192 87Tosnuc 600M BMC 40 M440 87GE 550T LeBlonde L082 82więcej podobnych podstron