|
Cimatron post processor files follow a routine structure throughout.
There are five statements associated with the structure:
FORMAT statements
INTERACTION statements
MODAL, NON-MODAL, IDENTICAL, SET-TABS statements
NEW_LINE_IS statement
BLOCK statements
Notes:
It is not mandatory for all of the statements to be included in a post processor file.
At least one BLOCK statement must be included in the file.
The statements must appear in the order in which they are listed above.
Below is an example of a post processor file for the Fanuc 6MB milling machine. Here, it is possible to see the structure outlined above:
The first three lines are FORMAT statements, followed by four lines of INTERACTION statements.
Following these are a series of NON-MODAL and IDENTICAL statements, and then the single NEW_LINE_IS statement.
BLOCK statements follow and usually make-up most of the file and include QUALIFIERS where necessary.
For example, the LINEAR MOTION: line appears as:
LINEAR MOTION: FAST:
where LINEAR MOTION: is the block, and FAST: is the qualifier.
* POSTPROCESSOR FOR FANUC 6MB
*-----------------------------------------------------------
FORMAT (SEQUENCING) FORMAT (COORDINATES) FORMAT (COORDINATES) |
SEQ SUBSEQ DVAL HVAL SUBFLG SUBNUM ; XCENTER YCENTER XPOS YPOS ; XTAN YTAN ZTAN XNORM YNORM ZNORM ; |
|
|
INTERACTION (SEQUENCING) INTERACTION (SEQUENCING) INTERACTION (USER_1) INTERACTION (USER_2) |
"SEQUENC-START" SEQSTART = 10 ; "SEQUENC-INCR." SEQINCR = 2 ; "PROGRAM-NUMBER" PGN = 150 ; "ZERO-DATUM" ZDM = 55 ; |
NON_MODAL DVAL SUB_NUMBER SUBNUM ;
IDENTICAL X_CURPOS X_ENDPT; IDENTICAL Y_CURPOS Y_ENDPT;
NEW_LINE_IS $ ;
IF_SET (SUBFLG _EQ_ 0)
OUTPUT\J "N" SEQ ;
SEQ = SEQ + SEQINCR ;
ELSE
OUTPUT \J "N" SUBSEQ ;
SUBSEQ = SUBSEQ + SEQINCR ;
END_IF ;
BEGINNING OF TAPE:
SUBFLG = 0 ;
NEXT_TOOL = 999 ;
SEQ = SEQSTART ;
SUBSEQ = 500 ;
OUTPUT "% " \J "O" PGN ;
OUTPUT $ " G90 G99 G" ZDM ;
END OF TAPE:
OUTPUT $ " M30" ;
FEED:
KEEP MCH_FEED;
SPIN:
KEEP SPIN_SPEED ;
COOLANT:
KEEP MCH_COOL ;
DWELL:
KEEP MCH_DWELL;
TOOL CHANGE:
SET_ON SPIN_DIR SPIN_SPEED Z_CURPOS MCH_COOL ;
DVAL = CURR_TOOL ;
OUTPUT $ " M6 T" CURR_TOOL ;
IF_SET (NEXT_TOOL _NE_ 999) OUTPUT $ " T" NEXT_TOOL ; END_IF ;
OUTPUT $ " " SPIN_DIR " S" SPIN_SPEED ;
SET_ON CURR_TOOL ZDM ;
OUTPUT $ " G90 G0 G49 G" ZDM " H" CURR_TOOL " Z" Z_CURPOS ;
OUTPUT " " MCH_COOL ;
LINEAR MOTION: FAST:
OUTPUT $ ;
IF_SET (LIN_MOV) OUTPUT " " LIN_MOV ; END_IF ;
IF_SET (X_CURPOS) OUTPUT " X" X_CURPOS ; END_IF ;
IF_SET (Y_CURPOS) OUTPUT " Y" Y_CURPOS ; END_IF ;
IF_SET (Z_CURPOS) OUTPUT " Z" Z_CURPOS ; END_IF ;
SET_ON CIRC_MOV ;
XPOS = X_CURPOS ;
YPOS = Y_CURPOS ;
LINEAR MOTION:
OUTPUT $ ;
IF_SET (LIN_MOV) OUTPUT " " LIN_MOV ; END_IF ;
IF_SET (X_CURPOS) OUTPUT " X" X_CURPOS ; END_IF ;
IF_SET (Y_CURPOS) OUTPUT " Y" Y_CURPOS ; END_IF ;
IF_SET (SUBFLG _EQ_ 0)
IF_SET (Z_CURPOS) OUTPUT " Z" Z_CURPOS ; END_IF ;
END_IF ;
IF_SET (MCH_FEED) OUTPUT " F" MCH_FEED ; END_IF ;
SET_ON CIRC_MOV ;
XPOS = X_CURPOS ;
YPOS = Y_CURPOS ;
CIRCULAR MOTION:
XCENTER = X_CENTER - XPOS ;
YCENTER = Y_CENTER - YPOS ;
OUTPUT $ ;
IF_SET (CIRC_MOV) OUTPUT " " CIRC_MOV ; END_IF ;
IF_SET (X_ENDPT) OUTPUT " X" X_ENDPT ; END_IF ;
IF_SET (Y_ENDPT) OUTPUT " Y" Y_ENDPT ; END_IF ;
IF_SET (XCENTER) OUTPUT " I" XCENTER ; END_IF ;
IF_SET (YCENTER) OUTPUT " J" YCENTER ; END_IF ;
IF_SET (MCH_FEED) OUTPUT " F" MCH_FEED ; END_IF ;
SET_ON LIN_MOV ;
XPOS = X_ENDPT ;
YPOS = Y_ENDPT ;
NURBS MOTION: (Spline approximation)
NURBS MOTION: START:
OUTPUT $ NURBS_MOV "P" NURBS_DEG ;
count = 0;
first = 1;
SET_ON MCH_FEED;
NURBS MOTION:
IF_SET (first _EQ_ 0)
OUTPUT $ "K" KNOT_ "X" CNTRL_X "Y" CNTRL_Y "Z" CNTRL_Z;
END_IF;
first = 0;
NURBS MOTION: END:
deg = NURBS_DEG ;
REPEAT
count = count + 1 ;
OUTPUT $ "K" KNOT_ ;
UNTIL (count _EQ_ deg) ;
SET_ON LIN_MOV CIRC_MOV MCH_FEED;
The output in this case is:
G6.2P4K0.0X29.884Y-72.172Z28.F350
K0.0X25.447Y-72.172Z27.963
K0.0X20.675Y-72.172Z28.119
K0.0X15.458Y-72.172Z27.968
K6768.865X14.124Y-72.172Z27.845
K7277.632X12.354Y-72.172Z27.619
K7958.017X11.016Y-72.172Z27.538
K8810.654X10.238Y-72.172Z27.497
K10000.
K10000.
K10000.
K10000.
*------------ SUBROUTINE DEFINITIONS -------------------
SUBROUTINE CALL:
SUBNUM = SUB_NUMBER + 7999 ;
OUTPUT $ " G65 P" SUBNUM " Z" LAYER_Z ;
SET_ON LIN_MOV CIRC_MOV MCH_FEED ;
SET_ON X_CURPOS Y_CURPOS Z_CURPOS ;
BEGINNING OF SUB:
SUBFLG = 1 ;
SET_ON ZDM ;
OUTPUT "%" ;
OUTPUT \J "O" SUBNUM ;
OUTPUT $ " G90 G" ZDM ;
SET_ON MCH_FEED ;
OUTPUT $ " G1 Z#26 F" MCH_FEED ;
END OF SUB:
OUTPUT $ " G40" $ " M99" ;
SUBFLG = 0 ;
SET_ON LIN_MOV CIRC_MOV MCH_FEED ;
SET_ON X_CURPOS Y_CURPOS Z_CURPOS ;
|