Post Processor Program File Structure

Cimatron post processor files follow a routine structure throughout.

There are five statements associated with the structure:

  1. FORMAT statements

  2. INTERACTION statements

  3. MODAL, NON-MODAL, IDENTICAL, SET-TABS statements

  4. NEW_LINE_IS statement

  5. 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 ;

 

Some functionality may be dependent on the product package. Contact your Reseller if you require a license.