|
Post Processor Program File Structure
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.
Example of a Post Processor File
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 ;
|