Post Processor Reference
Post Processor Reference
Post Processor Reference
POST PROCESSOR
WRITER’S REFERENCE
Disclaimer
Geometric Americas, Inc. makes no warranties, either express or implied with respect to
this manual. Geometric Americas, Inc. reserves the right to revise and improve products
as it sees fit, and to revise the specifications and information contained herein without
prior notice. Due to continuing product development, specifications and capabilities
described in this manual are subject to change without notice.
Trademarks
CAMWorks® is a registered trademark of Geometric Americas, Inc.
ProCAM II ® is a registered trademark of TekSoft, Inc.
Table of Contents
Table of Contents i
Universal Post Generator
QUERY_EXPORT_ERROR ................................................................................... 53
QUERY_INT_NUM_TURRETS_ABOVE ............................................................ 54
QUERY_INT_NUM_TURRETS_BELOW ............................................................ 55
QUERY_GCODE_DEFAULT_WCS ..................................................................... 56
QUERY_GCODE_WCS ......................................................................................... 57
QUERY_INT_LENGTH_REG ............................................................................... 58
QUERY_INT_OFFSET_REG................................................................................. 59
QUERY_GCODE_AXIS_NAMES_T1A ............................................................... 60
QUERY_GCODE_AXIS_NAMES_T2A ............................................................... 61
QUERY_GCODE_AXIS_NAMES_T1B ............................................................... 62
QUERY_GCODE_AXIS_NAMES_T2B ............................................................... 63
QUERY_GCODE_AXIS_NAMES_MILL ............................................................. 64
QUERY_GCODE_POSTED_FILE_NAME ........................................................... 65
QUERY_GCODE_FILE_NAME_T1A .................................................................. 66
QUERY_GCODE_FILE_NAME_T2A .................................................................. 67
QUERY_GCODE_FILE_NAME_T1B ................................................................... 68
QUERY_GCODE_FILE_NAME_T2B ................................................................... 69
QUERY_INT_MILL_ROUGH_TYPE ................................................................... 70
QUERY_INT_PRIMARY_TOUCHOFF_REG ...................................................... 72
QUERY_INT_SECONDARY_TOUCHOFF_REG................................................ 73
QUERY_INT_ZERO_OFFSET_RADIUS ............................................................. 74
OUTPUT_START_SYNC_CODES() .................................................................... 75
OUTPUT_FIRST_MOVE_SYNC_CODES()......................................................... 76
OUTPUT_END_SYNC_CODES() ......................................................................... 77
KILLSYSFILE() ...................................................................................................... 78
QUERY_INT_KIN_SETUP_POS .......................................................................... 79
QUERY_MILL_TLP_Z_EXTENTS ....................................................................... 80
QUERY_FEARURE_STRATEGY ........................................................................ 81
ii Table of Contents
Universal Post Generator
GET_POINT() ......................................................................................................... 97
SET_COLOR() ........................................................................................................ 98
SET_TEXT_COLOR() ............................................................................................ 99
SET_LAYER() ...................................................................................................... 100
ADD_PUNCH_PATTERN() ................................................................................ 101
ADD_PUNCH_PATH() ........................................................................................ 103
ADD_REPOSITION() ........................................................................................... 104
ADD_CAD().......................................................................................................... 105
MAKE_FILLET() .................................................................................................. 107
ADD_PUNCH_TOOL() ........................................................................................ 108
SELECT_TOOL().................................................................................................. 110
START_COMPLEX() ........................................................................................... 111
END_COMPLEX() ............................................................................................... 112
START_GROUP() ................................................................................................ 113
END_GROUP() ..................................................................................................... 114
iv Table of Contents
Universal Post Generator
Table of Contents v
Universal Post Generator
vi Table of Contents
Universal Post Generator
Table of Contents ix
Universal Post Generator
ABS
Purpose
Returns the absolute value of an argument or number.
Syntax
ABS(arg)
Comments
Parameter Description
arg can be any expression or number
Example
Check if two points are the same:
:C: IF ABS(X_START-X_END)<.00005 THEN CALL(SAME) ENDIF
SIN
Purpose
Returns the sine of an angle in radians.
Syntax
SIN(ang)
Comments
Parameter Description
ang an angle in radians
Example
:C: Y_POS=(ABS_J_CENTER+(ARC_RADIUS*SIN(ARC_END_ANGLE*(PI/180))))
COS
Purpose
Returns the cosine of an angle in radians.
Syntax
COS(ang)
Comments
Parameter Description
ang an angle in radians
Example
:C: X_POS=(ABS_I_CENTER+(ARC_RADIUS*COS(ARC_END_ANGLE*(PI/180))))
TAN
Purpose
Returns the tangent of an angle in radians.
Syntax
TAN(ang)
Comments
Parameter Description
ang an angle in radians
Example
:C: HEIGHT=(RADIUS/TAN((TOOL_ANGLE*(PI/180))/2))
ACOS
Purpose
Returns the arc cosine of a value from 1 to -1.
Syntax
ACOS(r)
Comments
Parameter Description
r must be a value between 1 and -1
Example
:C: Y=(ACOS(X))
ASIN
Purpose
Returns the arc sine of a value from 1 to -1.
Syntax
ASIN(r)
Comments
Parameter Description
r must be a value between 1 and -1
Example
:C: Y=(ASIN(X))
ATAN2
Purpose
Returns the arc tangent of dx and dy (i.e., the slope of a line).
Syntax
ATAN2(dx,dy)
Comments
ATAN2 returns a value between 3.141593 and -3.141593.
Example
:C: V=(ATAN2(DX,DY))
ATAN
Purpose
Returns the arc tangent of x.
Syntax
ATAN(x)
Comments
ATAN returns a value between (3.141593/2) and (-3.141593/2).
Example
:C: V=(ATAN(X))
SQRT
Purpose
Return the square root of x.
Syntax
SQRT(x)
Comments
None.
Example
:C: V=(SQRT(DX*DX+DY*DY))
LOOKUP
Purpose
To find a value within an array.
Syntax
LOOKUP(ARRAY,VALUE,INDEX)
Comments
Parameter Description
ARRAY the name of the array to search
VALUE the value to search for
INDEX the position in the array where the value was found
(if INDEX=-1 the system failed to find the value in the array)
Example
The example below seeds an array then searches the array:
:C: ARRAY(1)=10 ARRAY(2)=11 ARRAY(3)=12
:C: VALUE=11
:C: LOOKUP(ARRAY,VALUE,INDEX)
:C: IF INDEX<>-1 THEN CALL(FOUND_IN_ARRAY) ENDIF
RESETEOL
Purpose
To remove (delete) the <EOL> (end of line) character from the last line of code output, so
more code can be added.
Syntax
RESETEOL
Comments
Example
:C: RESETEOL CALL(ADD_END_OF_TAPE)
:SECTION=ADD_END_OF_TAPE
:T:<M02><EOL>
STRCAT
Purpose
To append one string to another (i.e., concatenate strings).
Syntax
STRCAT(string1,string2)
Comments
Parameter Description
string1 a character variable that will get the string attached to it
string2 a character variable that is the string to attach
Example
:C: STRING1={ProCAD} STRING2={/CAM}
:C: STRCAT(STRING1,STRING2)
:C: CALL(OUTPUT_STRING1)
:SECTION=OUTPUT_STRING1
:T:<N><STRING1><EOL>
CALL
Purpose
To call another section of the post.
Syntax
A
CALL(section)
B
CALL(section(arga,argb,...))
Comments
Parameter Description
section must be an existing section in the post. The CALL function can only call a
SECTION.
arga an argument that is passed to the section (Syntax B)
argb an argument that is passed to the section (Syntax B)
When passing arguments, the section must be defined to be capable of accepting arguments.
See SECTION= below.
Example
A
:C: CALL(LINE_MOVE_MILL)
:SECTION=LINE_MOVE_MILL
:T:<N><G:01><X><Y><Z><F><attributes><EOL>
B
:C: CALL(CALC_ESTIMATE_TIME(DISTANCE,OPR_X_FEED,TIME))
:SECTION=CALC_ESTIMATE_TIME(DIS,FEED,TIME)
:C: IF FEED=0 THEN RETURN ENDIF
:C: TIME=(TIME+(DIS/FEED))
REPLACE
Purpose
To replace all occurrences of string A with string B throughout the entire tape.
Syntax
REPLACE(stringa,stringb)
Comments
Parameter Description
stringa the name of a character variable
stringb the name of a character variable
Example
This example will replace the comment "Total hits=xxx", which was output at the beginning
of the tape, with the correct number of hits known at the end of the tape. A temporary string
must be used to transfer the number of hits stored in an integer to a string.
:SECTION=CALC_END_OF_TAPE
:C: STRA={Total hits=xxx}
:C: STRB={Total hits=}
:C: STRC=TOTAL_HITS
:C: STRCAT(STRB,STRC)
:C: REPLACE(STRA,STRB)
SETON
Purpose
To set a parameter to output code.
Syntax
SETON(<name>)
Comments
Parameter Description
name the name of the parameter to be set on
Parameters must be defined as MODAL parameters in order for this command to have any
effect.
Example
:SECTION=CALC_LINE_MOVE_MILL
:C: SETON(<X>)
:C: CALL(LINE_MOVE_MILL)
:SECTION=LINE_MOVE_MILL
:T: <N><G:01><X><Y><EOL>
SETOFF
Purpose
To set a parameter to not output code.
Syntax
SETOFF(<name>)
Comments
Parameter Description
name the name of the parameter to be set off
Parameters must be defined as MODAL parameters in order for this command to have any
effect.
Example
:C: SETOFF(<F>)
The system will execute all sections responsible for outputting the parameter, however the
result will not be sent to the tape.
SYS_CANNED
Purpose
To break an entity not supported by the post into a series of entities that are supported by the
post. Typically, this command is used the explode line, grid, arc and bolt hole patterns into
single points.
Syntax
SYS_CANNED(type,section)
Comments
Parameter Description
type the type of breakup and is a constant
1 Single points
2 Lines, arcs and bolt holes
(use only on grids and big hole patterns)
Breaks a thread cycle into diameters
3
(use only on threading cycles)
section section that will handle the exploded entity
The word SYSTEM instructs the system to call the appropriate sections.
Example
:SECTION=CALC_ARC_PATTERN_PUNCH
:C: SYS_CANNED(1,CALC_SINGLE_HIT_PUNCH)
:SECTION=CALC_GRID_PATTERN_PUNCH
:C: SYS_CANNED(2,SYSTEM)
:SECTION=CALC_MACHINE_THREAD_LATHE
:C: SYS_CANNED(3,CALC_MULTIPLE_THREAD_LATHE)
GOTO
Purpose
Branches to a specific line number in the current section.
Syntax
GOTOnumber
Comments
Parameter Description
number any number from 0 to 9999
Type
Calculation section only
Example
To make a looping portion of code that loops until a condition is satisfied:
:C: LOOP=1
:C1: CALL(OUTPUT_TOOL)
:C: LOOP=(LOOP+1)
:C: IF LOOP>TOTAL_NUMBER_OF_TOOLS THEN RETURN ENDIF
:C: GOTO1
RETURN
Purpose
To end the current section and return processing control to the system.
Syntax
RETURN
Comments
None
Example
:C: IF TOOL=LAST_TOOL THEN RETURN ENDIF
:C: CALL(CALC_TOOL_CHANGE_TIME)
:C: CALL(SUB_TOOL_CHANGE)
OFFSET_INC
Purpose
To incrementally add an offset to all horizontal and vertical axis information.
Syntax
OFFSET_INC(hoff,voff)
Comments
Parameter Description
hoff decimal variable containing amount of offset to add to all horizontal axis
information
voff decimal variable containing amount of offset to add to all vertical axis
information
Example
Add 10" offset to X and 5" offset to Y, then cancel the offset:
:C: X_OFFSET=10 Y_OFFSET=5
:C: OFFSET_INC(X_OFFSET,Y_OFFSET)
:C: CALL(LINE_MOVE)
:C: X_OFFSET=-10 Y_OFFSET=-5
:C: OFFSET_INC(X_OFFSET,Y_OFFSET)
OFFSET_XYZ
Purpose
To incrementally add an offset to all X,Y,Z axis information. This command is used only in
Mill.
Syntax
OFFSET_XYZ(x,y,z)
Comments
Parameter Description
x decimal variable containing amount of offset to add to all X axis
information
y decimal variable containing amount of offset to add to all Y axis information
z decimal variable containing amount of offset to add to all Z axis information
Example
Add 10" offset to X and 5" offset to Y and 3" offset to Z, then cancel the offsets:
:C: X_OFFSET=10 Y_OFFSET=5 Z_OFFSET=3
:C: OFFSET_XYZ(X_OFFSET,Y_OFFSET,Z_OFFSET)
:C: CALL(LINE_MOVE)
:C: OFFSET_XYZ(-X_OFFSET,-Y_OFFSET,-Z_OFFSET)
ADD_MACRO_START
Purpose
To define the start of a macro. This command redirects all code to a secondary file, which is
used to store all subprograms prior to the system inserting the subprogram file before or after
the main tape.
Syntax
ADD_MACRO_START
Comments
None.
Example
:C: ADD_MACRO_START
ADD_MACRO_END
Purpose
To define the end of a macro. This command cancels an ADD_MACRO_START command
and redirects all code back to the main program tape.
Syntax
ADD_MACRO_END
Comments
Example
:C: ADD_MACRO_END
SPACES
Purpose
To allow spaces to be output or not to be output to the tape. This command is used to
override the global post definition of :SPACES=FALSE in the header in
<CONTROLLER.SRC).
Syntax
SPACES(YES)
SPACES(NO)
Comments
This command can be executed prior to calling a template section; however, it is
recommended you use ATTRSPACE instead.
Example
:C: SPACES(YES)
:C: CALL(SETUP_SHEET)
GETTOOLS
Purpose
To retrieve from the system all tools used within the part being posted.
Syntax
GETTOOLS(type,section)
Comments
Parameter Description
type the type of sorting method
1 Sorted by turret location
2 Sorted by order used in part
section the section that will be called each time a tool is loaded.
The word SYSTEM will instruct the system to output a tool setup sheet.
Example
:C: GETTOOLS(2,CALC_PRELOAD_TOOL)
:C: GETTOOLS(1,SYSTEM)
GET_OPER_COMMENTS
Purpose
To get the comments from the current operation. This command outputs the comments
entered in the Comments dialog box. Used in Mill and Lathe only.
Syntax
GET_OPER_COMMENTS(section)
Comments
Parameter Description
section the section that will be called each time a comment is loaded.
The word SYSTEM instructs the system to output the comments directly to
the tape.
Example
:SECTION=CALC_SUB_TOOL_CHANGE_MILL
:C: GET_OPER_COMMENTS(CALC_OUTPUT_OPER_COMMENT)
:SECTION=CALC_OUTPUT_OPER_COMMENT
:C: CALL(OUTPUT_OPER_COMMENT)
:SECTION=OUTPUT_OPER_COMMENT
:T:<N><OPR_COMMENT><EOL>
OPEN_NEXT
Purpose
To break a ".TXT" file and start a new tape output file. Typically, this command is used
only for some older controllers that have a limit on the number of lines per file.
Syntax
OPEN_NEXT(char_str(arg),str_len(arg),int_number(arg))
Comments
Parameter Description
char_str(agr) file name as in - A0000001.TXT. A0000001 is the File name. It
will assign the ".TXT" to it.
Str_len(agr) the " = Length of file name "A0000001 is (8) Characters long
int_number(agr) used for incrementing the last digits of the program name
Example
:SECTION=CALC_BREAK_PROGRAM
This example will break a program at a certain line count. It will string cat until it has built a
line.
The example file name = A1000001.TXT
program_letter = A
PROGRAM_PREFIX = program_name = 1000
SUB_COUNT = 1
:C: IF (LINE_COUNT+2)>line_number THEN GOTO2 ENDIF
:C: IF line_number<>(LINE_COUNT+2) THEN RETURN ENDIF
:C2: SUB_COUNT=(SUB_COUNT+1)
:C: ZEROS={0}
:C: SUB_ID=SUB_COUNT
:C: STRCAT(ZEROS,SUB_ID)
:C: STRCAT(PROGRAM_PREFIX,ZEROS)
:C: GOTO1
:C: ENDIF
:C: ZEROS={00}
:C: SUB_ID=SUB_COUNT
:C: STRCAT(ZEROS,SUB_ID)
:C: STRCAT(PROGRAM_PREFIX,ZEROS)
:C1: S_SUB_COUNT_START=SUB_COUNT
ROUNDOFF
Purpose
To roundoff a number. This command is no longer used since all posts round-off
automatically for inch or metric.
Syntax
ROUNDOFF(number,bucket,result,places,type)
Comments
Parameter Description
number a decimal number or argument containing the value to be rounded off
bucket a decimal variable that will receive the difference between the original
number and the rounded off number (bucket is also added to the original
number before any rounding occurs)
result a decimal variable that will receive the rounded off result
places the number of places to the right of the decimal
type the type of mode: 1-English , 2-Metric
Example
:C: BUCKET=0
:C: ROUNDOFF(ABS_X_END,BUCKET,X_POS,G_RIGHT_PLACES,METRIC_OUT)
:QUALIFIED_TOOLING=
Purpose
To retrieve tool offset information from a fixed structured external file.
Syntax
:QUALIFIED_TOOLING=\PROCAD\TOOL\TOOLFILE.F6M
Comments
The above syntax: shows where the external file is located.
This command should be put in the post header info.
Below is an example of what the external file might look like.
1111 or 2222 must be entered in the TOOL COMMENT in the tool pulldown for this to
work.
ID ZGL XGL Tool Comment
1111, 5, 10, 7, 80 Degree Diamond.
2222, 6.375, 12.5, 11, .5 Diameter Drill.
Example
:T: Z FEED=<#:TOOL_ZGL> X FEED=<#:TOOL_XGL>
:T: RPM=<"%4T":TOOL_QTN> COMMENT=<TOOL_QT_COMMENT><EOL>
INCON
Purpose
To output incremental movements.
Syntax
:C: INCON
Comments
At the time INCON is executed the variables XAXIS, YAXIS and ZAXIS are set to
incremental distances.
This command is not used much, because it does not handle incremental roundoff.
Example
:SECTION=CALC_LINE_MOVE_MILL
:C: INCON
:C: X_POS=XAXIS
:C: Y_POS=YAXIS
:C: CALL(LINE_MOVE_MILL)
:SECTION=LINE_MOVE_MILL
:T:<N><G:01> X<#:X_POS> Y<#:Y_POS><F><EOL>
INCOFF
Purpose
To cancel incremental movements.
Syntax
:C: INCOFF
Comments
At the time INCOFF is executed the variables XAXIS, YAXIS and ZAXIS are set to
absolute distances. This command is the system default.
This command is not used much, because it does not handle incremental roundoff.
Example
:SECTION=CALC_LINE_MOVE_MILL
:C: INCOFF
:C: X_POS=XAXIS
:C: Y_POS=YAXIS
:C: CALL(LINE_MOVE_MILL)
:SECTION=LINE_MOVE_MILL
:T:<N><G:01> X<#:X_POS> Y<#:Y_POS><F><EOL>
APPEND
Purpose
To append another file into current part that is being posted.
Syntax
:C: APPEND(STRG)
Comments
Parameter Description
strg The strg must be defined in the attribute section as a string variable. The
strg should hold the path and filename you want to append.
The APPEND command will put whatever information is in the file you append into the file
you are posting. This command could be used for a special cycle that is hardcoded and
happens all the time.
Example
:SECTION=CALC_APPEND_FILE
:C: STRG={C:\PROCAM\DRILL.TXT}
:C: APPEND(STRG)
TRANSFORM
Purpose
To allow the post to output world coordinates when it is outputting in machine coordinates.
There are specific machines that when implementing rotary axis preposition moves that the
first move needs to be in world coordinates then switch back to machine coordinates for all
other moves until a new rotary position is called.
Supported in CAMWorks 2007 SP2 and higher. Not supported in any ProCAM product.
Syntax
:C: TRANSFORM
Comments
Associated commands and variables:
These variables need to be set to the current machine values as shown.
:C: TRANS_START_X=ABS_X_END
:C: TRANS_START_Y=ABS_Y_END
:C: TRANS_START_Z=ABS_Z_END
These variables need to be assigned a vector number depending on the direction of the
rotary motion. Below shows us that the 4th axis rotates about X and the 5th axis about Y.
The vector numbers can have a range from -1 to +1. If you are using this in conjunction
with 5axis multiaxis operations and are using a *.KIN file, then you can use the second
example below which will use the *.KIN file to get the vector numbers.
:C: TRANS_ROTAXISDIR_4X=1.0
:C: TRANS_ROTAXISDIR_4Y=0.0
:C: TRANS_ROTAXISDIR_4Z=0.0
:C: TRANS_ROTAXISDIR_5X=0.0
:C: TRANS_ROTAXISDIR_5Y=1.0
:C: TRANS_ROTAXISDIR_5Z=0.0
2nd example:
:C: IF KIN_HAVE_KINEMATICS=TRUE THEN
:C: TRANS_ROTAXISDIR_4X=KIN_ROTAXISDIR_4X
:C: TRANS_ROTAXISDIR_4Y=KIN_ROTAXISDIR_4Y
:C: TRANS_ROTAXISDIR_4Z=KIN_ROTAXISDIR_4Z
:C: TRANS_ROTAXISDIR_5X=KIN_ROTAXISDIR_5X
:C: TRANS_ROTAXISDIR_5Y=KIN_ROTAXISDIR_5Y
:C: TRANS_ROTAXISDIR_5Z=KIN_ROTAXISDIR_5Z
:C: ENDIF
:C: TRANS_ROTANGLE_B=ROT_TILT_B
This command will perform the transform calculations.
:C: TRANSFORM
The lines below show how you can set post variables equal to the transformed numbers
once the transform is done.
:C: X_POS=TRANS_END_X
:C: Y_POS=TRANS_END_Y
:C: Z_POS=TRANS_END_Z
Example
This is an example of the order and how you could implement this command.
:C: TRANS_START_X=ABS_X_END
:C: TRANS_START_Y=ABS_Y_END
:C: TRANS_START_Z=ABS_Z_END
:C: TRANS_ROTAXISDIR_4X=1.0
:C: TRANS_ROTAXISDIR_4Y=0.0
:C: TRANS_ROTAXISDIR_4Z=0.0
:C: TRANS_ROTAXISDIR_5X=0.0
:C: TRANS_ROTAXISDIR_5Y=1.0
:C: TRANS_ROTAXISDIR_5Z=0.0
:C: TRANS_ROTANGLE_A=ROT_TILT_A
:C: TRANS_ROTANGLE_B=ROT_TILT_B
:C: TRANSFORM
:C: X_POS=TRANS_END_X
:C: Y_POS=TRANS_END_Y
:C: Z_POS=TRANS_END_Z
:C: CALL(TRANSLATED_OUTPUT)
This is another example of the order and how you could implement this command.
:C: TRANS_START_X=ABS_X_END
:C: TRANS_START_Y=ABS_Y_END
:C: TRANS_START_Z=ABS_Z_END
:C: IF KIN_HAVE_KINEMATICS=TRUE THEN
:C: TRANS_ROTAXISDIR_4X=KIN_ROTAXISDIR_4X
:C: TRANS_ROTAXISDIR_4Y=KIN_ROTAXISDIR_4Y
:C: TRANS_ROTAXISDIR_4Z=KIN_ROTAXISDIR_4Z
:C: TRANS_ROTAXISDIR_5X=KIN_ROTAXISDIR_5X
:C: TRANS_ROTAXISDIR_5Y=KIN_ROTAXISDIR_5Y
:C: TRANS_ROTAXISDIR_5Z=KIN_ROTAXISDIR_5Z
:C: ENDIF
:C: TRANS_ROTANGLE_A=ROT_TILT_A
:C: TRANS_ROTANGLE_B=ROT_TILT_B
:C: TRANSFORM
:C: X_POS=TRANS_END_X
:C: Y_POS=TRANS_END_Y
:C: Z_POS=TRANS_END_Z
:C: CALL(TRANSLATED_OUTPUT)
RUN_PROCESS
Purpose
To call any *.exe file and execute it. It will also allow you to either continue posting while
executing or stop posting until process is done.
Syntax
:C: RUN_PROCESS
Comments
Supported in CAMWorks 2007 SP2 and higher. Not supported in any ProCAM product.
Example
In the example below:
PROCESS_COMMAND determines the file and path to execute.
WAIT_FOR_PROCESS=TRUE or FALSE sets whether posting continues as the program is
executed or waits until executed program is done.
This example will execute NOTEPAD.EXE and wait until you close NOTEPAD. This
process can be executed in any CALC section.
:C: PROCESS_COMMAND={C:\WINDOWS\NOTEPAD.EXE}
:C: WAIT_FOR_PROCESS=TRUE
:C: RUN_PROCESS
QUERY_SYSTEM()
Purpose
This command will query any object ID you pass to it. It can get information from an object
that is in a Setup or operation dialog box. Available in Mill, Turn and Mill/Turn.
Syntax
QUERY_SYSTEM()
Comments
Supported in CAMWorks 2009 and higher. Not supported in any ProCAM product.
Associated commands and variables: The example code below shows the other variables
used with this command and that QUERY_SYSTEM() will first determine what has been
selected for X Axis machining direction on the Axis tab in the Setup dialog box. If the value
is “1” then “Angle” was selected and we can now do another QUERY_SYSTEM() to find the
angle value that will be passed to QUERY_DEC_VALUE.
Example
Currently QUERY_INT_X_SETUP_DIR and QUERY_DEC_X_SETUP_ANGLE are the only
object ID’s set. In the future you can send in an enhancement request to query other objects
and we will add them when R&D resources are available.
:C: QUERY_ITEM_ID=QUERY_INT_X_SETUP_DIR
:C: QUERY_SYSTEM()
:C: IF QUERY_RESULT=1 THEN
:C: IF QUERY_INT_VAL=1 THEN
:C: QUERY_ITEM_ID=QUERY_DEC_X_SETUP_ANGLE
:C: QUERY_SYSTEM()
:C: IF QUERY_RESULT=1 THEN
:C: MY_OPER_SETUP_ANGLE=QUERY_DEC_VAL
:C: CALL(TEST_QUERY)
:C: ENDIF
:C: ENDIF
:C: ENDIF
QUERY_INT_HAND_OF_TOOL
Purpose
This command will query the hand of the tool. Available in Mill, Turn and Mill-Turn.
Supported in CAMWorks 2013 and later. Not supported in any ProCAM product.
Syntax
QUERY_ITEM_ID=QUERY_INT_HAND_OF_TOOL
Comments
Associated commands and variables:
The example code below shows the other variables used with this command. If the Query
result was "1" then the value will be in QUERY_INT_VAL.
Example
:C: QUERY_ITEM_ID=QUERY_INT_HAND_OF_TOOL
:C: QUERY_SYSTEM()
:C: IF QUERY_RESULT=1 THEN
:C: IF QUERY_INT_VAL=1 THEN
* Hand of tool = "LEFT"
:C: ENDIF
:C: IF QUERY_INT_VAL=2 THEN
* Hand of tool = "RIGHT"
:C: ENDIF
:C: ENDIF
QUERY_DEC_OPER_TIME
Purpose
This command will query the estimated machine time per operation. Available in Mill,
Turn and Mill-Turn. Supported in CAMWorks 2013 and later. Not supported in any
ProCAM product.
Syntax
QUERY_ITEM_ID=QUERY_DEC_OPER_TIME
Comments
Associated commands and variables:
The example code below shows the other variables used with this command. If the Query
result was "1" then the value will be in QUERY_DEC_VAL.
Example
:C: QUERY_ITEM_ID=QUERY_DEC_OPER_TIME
:C: QUERY_SYSTEM()
:C: IF QUERY_RESULT=1 THEN
* Post Variable = QUERY_DEC_VAL
:C: ENDIF
QUERY_DEC_MIN_PROTRUSION
Purpose
This command will query the Minimum tool protrusion in 3axis operation. Available in
Mill, Turn and Mill-Turn. Supported in CAMWorks 2013 and later. Not supported in any
ProCAM product.
Syntax
QUERY_ITEM_ID=QUERY_DEC_MIN_PROTRUSION
Comments
Associated commands and variables:
The example code below shows the other variables used with this command. If the Query
result was "1" then the value will be in QUERY_DEC_VAL.
Example
:C: QUERY_ITEM_ID=QUERY_DEC_MIN_PROTRUSION
:C: QUERY_SYSTEM()
:C: IF QUERY_RESULT=1 THEN
* Post Variable = QUERY_DEC_VAL
:C: ENDIF
QUERY_EXPORT_ERROR
Purpose
This command will query an error for finding sync codes if post is not setup to handle that.
The error will be sent to the CAMWorks error message box. Available in Mill, Turn and
Mill-Turn. Supported in CAMWorks 2013 and later. Not supported in any ProCAM
product.
Syntax
QUERY_ITEM_ID= QUERY_EXPORT_ERROR
Comments
Associated commands and variables:
The example code below shows the other variables used with this command. This logic
should be in
:SECTION=CALC_ADD_REAR_SYNC_CODE and
:SECTION=CALC_ADD_FRONT_SYNC_CODE
Example
:C: QUERY_ITEM_ID= QUERY_EXPORT_ERROR
:C: QUERY_ERROR= HAVE_SYNC_CODE_ERROR
:C: QUERY_SYSTEM()
QUERY_INT_NUM_TURRETS_ABOVE
Purpose
This command will query the number of turrets above Spindle centerline. This is used in
conjunction with CAMWorks Virtual Machine. Available in Mill, Turn and Mill-Turn.
Supported in CAMWorks 2013 and later. Not supported in any ProCAM product.
Syntax
QUERY_ITEM_ID=QUERY_INT_NUM_TURRETS_ABOVE
Comments
Associated commands and variables:
The example code below shows the other variables used with this command. This logic
should be in
:SECTION=CALC_QUERY_POST
Example
:C: IF QUERY_ITEM_ID = QUERY_INT_NUM_TURRETS_ABOVE THEN
:C: QUERY_INT_VAL=1
:C: RETURN
:C: ENDIF
QUERY_INT_NUM_TURRETS_BELOW
Purpose
This command will query the number of turrets below Spindle centerline. This is used in
conjunction with CAMWorks Virtual Machine. Available in Mill, Turn and Mill-Turn.
Supported in CAMWorks 2013 and later. Not supported in any ProCAM product.
Syntax
QUERY_ITEM_ID=QUERY_INT_NUM_TURRETS_BELOW
Comments
Associated commands and variables:
The example code below shows the other variables used with this command. This logic
should be in
:SECTION=CALC_QUERY_POST
Example
:C: IF QUERY_ITEM_ID = QUERY_INT_NUM_TURRETS_BELOW THEN
:C: QUERY_INT_VAL=1
:C: RETURN
:C: ENDIF
QUERY_GCODE_DEFAULT_WCS
Purpose
This command will query the number of default work coordinates in the posted output.
This is used in conjunction with CAMWorks Virtual Machine. Available in Mill, Turn and
Mill-Turn. Supported in CAMWorks 2013 and later. Not supported in any ProCAM
product.
Syntax
QUERY_ITEM_ID=QUERY_GCODE_DEFAULT_WCS
Comments
Associated commands and variables:
The example code below shows the other variables used with this command. This logic
should be in
:SECTION=CALC_QUERY_POST
Example
:C: IF QUERY_ITEM_ID = QUERY_GCODE_DEFAULT_WCS THEN
:C: IF SECTIONEXIST(QUERY_WCS) THEN
:C: CALL(QUERY_WCS) - Have this section in your post if you
need to do something special.
:C: RETURN
:C: ELSE
:C: CALL(AUTO_QUERY_WCS) - This section will be in the General
library files.
:C: RETURN
:C: ENDIF
:C: ENDIF
*
:SECTION=AUTO_QUERY_WCS
:T: IF MCS_TYPE=2 OR COORD_TYPE=0 THEN <G!:work_coord><EOL>ENDIF
:T: IF MCS_TYPE=3 AND work_coord=54 THEN
<G!:work_coord><POINT_ONE><EOL>ENDIF
:T: IF MCS_TYPE=3 AND work_coord>54 THEN <G!:work_coord><EOL>ENDIF
QUERY_GCODE_WCS
Purpose
This command will query the number of work coordinates in the posted output. This is
used in conjunction with CAMWorks Virtual Machine. Available in Mill, Turn and Mill-
Turn. Supported in CAMWorks 2013 and later. Not supported in any ProCAM product.
Syntax
QUERY_ITEM_ID=QUERY_GCODE_WCS
Comments
Associated commands and variables:
The example code below shows the other variables used with this command. This logic
should be in
:SECTION=CALC_QUERY_POST
Example
:C: IF QUERY_ITEM_ID = QUERY_GCODE_WCS THEN
:C: IF SECTIONEXIST(QUERY_WCS) THEN
:C: CALL(QUERY_WCS) - Have this section in your post if you
need to do something special.
:C: RETURN
:C: ELSE
:C: CALL(AUTO_QUERY_WCS) - This section will be in the General
library files.
:C: RETURN
:C: ENDIF
:C: ENDIF
*
:SECTION=AUTO_QUERY_WCS
:T: IF MCS_TYPE=2 OR COORD_TYPE=0 THEN <G!:work_coord><EOL>ENDIF
:T: IF MCS_TYPE=3 AND work_coord=54 THEN
<G!:work_coord><POINT_ONE><EOL>ENDIF
:T: IF MCS_TYPE=3 AND work_coord>54 THEN <G!:work_coord><EOL>ENDIF
QUERY_INT_LENGTH_REG
Purpose
This command will query the Tool Length offsets in the posted output. This is used in
conjunction with CAMWorks Virtual Machine. Available in Mill, Turn and Mill-Turn.
Supported in CAMWorks 2013 and later. Not supported in any ProCAM product.
Syntax
QUERY_ITEM_ID=QUERY_INT_LENGTH_REG
Comments
Associated commands and variables:
The example code below shows the other variables used with this command. This logic
should be in
:SECTION=CALC_QUERY_POST
Example
:C: IF QUERY_ITEM_ID = QUERY_INT_LENGTH_REG THEN
:C: QUERY_INT_VAL=TOOL
:C: RETURN
:C: ENDIF
QUERY_INT_OFFSET_REG
Purpose
This command will query the Tool Diameter offsets in the posted output. This is used in
conjunction with CAMWorks Virtual Machine. Available in Mill, Turn and Mill-Turn.
Supported in CAMWorks 2013 and later. Not supported in any ProCAM product.
Syntax
QUERY_ITEM_ID=QUERY_INT_OFFSET_REG
Comments
Associated commands and variables:
The example code below shows the other variables used with this command. This logic
should be in
:SECTION=CALC_QUERY_POST
Example
:C: IF QUERY_ITEM_ID = QUERY_INT_OFFSET_REG THEN
:C: CALL(CALC_QUERY_DIAM_OFFSET_REG) - This section is in the
General library files.
:C: RETURN
:C: ENDIF
*
:SECTION=CALC_QUERY_DIAM_OFFSET_REG
:C: QUERY_INT_VAL=(TOOL+COMP_OFFSET)
:C: IF TOOL_LENGTH_DIAM_OFFSET_METHOD=METHOD_FROM_TOOL THEN
:C: QUERY_INT_VAL=TOOL_DIAM_OFFSET
:C: ENDIF
QUERY_GCODE_AXIS_NAMES_T1A
Purpose
This command will define which axis is controlled by work offsets for the 1st turret above
centerline in the posted output. This is used in conjunction with CAMWorks Virtual
Machine. Available in Mill, Turn and Mill-Turn. Supported in CAMWorks 2013 and later.
Not supported in any ProCAM product.
Syntax
QUERY_ITEM_ID=QUERY_GCODE_AXIS_NAMES_T1A
Comments
Associated commands and variables:
The example code below shows the other variables used with this command. This logic
should be in
:SECTION=CALC_QUERY_POST
Example
:C: IF QUERY_ITEM_ID = QUERY_GCODE_AXIS_NAMES_T1A THEN
:C: CALL(QUERY_AXIS_NAMES_T1A)- This section is in the General
library files.
:C: RETURN
:C: ENDIF
*
:SECTION=QUERY_AXIS_NAMES_T1A
:T:X,Y,Z<EOL>
QUERY_GCODE_AXIS_NAMES_T2A
Purpose
This command will define which axis is controlled by work offsets for the 1st turret above
centerline in the posted output. This is used in conjunction with CAMWorks Virtual
Machine. Available in Mill, Turn and Mill-Turn. Supported in CAMWorks 2013 and later.
Not supported in any ProCAM product.
Syntax
QUERY_ITEM_ID=QUERY_GCODE_AXIS_NAMES_T2A
Comments
Associated commands and variables:
The example code below shows the other variables used with this command. This logic
should be in
:SECTION=CALC_QUERY_POST
Example
:C: IF QUERY_ITEM_ID = QUERY_GCODE_AXIS_NAMES_T2A THEN
:C: CALL(QUERY_AXIS_NAMES_T2A)- This section is in the General
library files.
:C: RETURN
:C: ENDIF
*
:SECTION=QUERY_AXIS_NAMES_T2A
:T:X,Y,Z<EOL>
QUERY_GCODE_AXIS_NAMES_T1B
Purpose
This command will define which axis is controlled by work offsets for the 1st turret above
centerline in the posted output. This is used in conjunction with CAMWorks Virtual
Machine. Available in Mill, Turn and Mill-Turn. Supported in CAMWorks 2013 and later.
Not supported in any ProCAM product.
Syntax
QUERY_ITEM_ID=QUERY_GCODE_AXIS_NAMES_T1B
Comments
Associated commands and variables:
The example code below shows the other variables used with this command. This logic
should be in
:SECTION=CALC_QUERY_POST
Example
:C: IF QUERY_ITEM_ID = QUERY_GCODE_AXIS_NAMES_T1B THEN
:C: CALL(QUERY_AXIS_NAMES_T1B)- This section is in the General
library files.
:C: RETURN
:C: ENDIF
*
:SECTION=QUERY_AXIS_NAMES_T1B
:T:X,Y,Z<EOL>
QUERY_GCODE_AXIS_NAMES_T2B
Purpose
This command will define which axis is controlled by work offsets for the 1st turret above
centerline in the posted output. This is used in conjunction with CAMWorks Virtual
Machine. Available in Mill, Turn and Mill-Turn. Supported in CAMWorks 2013 and later.
Not supported in any ProCAM product.
Syntax
QUERY_ITEM_ID=QUERY_GCODE_AXIS_NAMES_T2B
Comments
Associated commands and variables:
The example code below shows the other variables used with this command. This logic
should be in
:SECTION=CALC_QUERY_POST
Example
:C: IF QUERY_ITEM_ID = QUERY_GCODE_AXIS_NAMES_T2B THEN
:C: CALL(QUERY_AXIS_NAMES_T2B)- This section is in the General
library files.
:C: RETURN
:C: ENDIF
*
:SECTION=QUERY_AXIS_NAMES_T2B
:T:X,Y,Z<EOL>
QUERY_GCODE_AXIS_NAMES_MILL
Purpose
This command will define which axis is controlled by work offsets for milling in the posted
output. This is used in conjunction with CAMWorks Virtual Machine.
Available in Mill, Turn and Mill-Turn.
Supported in CAMWorks 2013 and later. Not supported in any ProCAM product.
Syntax
QUERY_ITEM_ID=QUERY_GCODE_AXIS_NAMES_MILL
Comments
Associated commands and variables:
Note: QUERY_GCODE_AXIS_NAMES_T1A can be used as a default in milling also.
The example code below shows the other variables used with this command. This logic
should be in
:SECTION=CALC_QUERY_POST
Example
:C: IF QUERY_ITEM_ID = QUERY_GCODE_AXIS_NAMES_MILL THEN
:C: CALL(QUERY_AXIS_NAMES_MILL)- This section is in the General
library files.
:C: RETURN
:C: ENDIF
*
:SECTION=QUERY_AXIS_NAMES_MILL
:T:X,Y,Z<EOL>
QUERY_GCODE_POSTED_FILE_NAME
Purpose
This command will define what is the file name for the milling posted output. This is used
in conjunction with CAMWorks Virtual Machine.
Available in Mill, Turn and Mill-Turn. Supported in CAMWorks 2013 and later. Not
supported in any ProCAM product.
This command is not needed if using the file path and name as in the posting dialog box.
Syntax
QUERY_ITEM_ID=QUERY_GCODE_POSTED_FILE_NAME
Comments
Associated commands and variables:
Note: QUERY_GCODE_FILE_NAME_T1A can be used as a default in milling also.
The example code below shows the other variables used with this command. This logic
should be in
:SECTION=CALC_QUERY_POST
Example
:C: IF QUERY_ITEM_ID = QUERY_GCODE_POSTED_FILE_NAME THEN
:C: CALL(QUERY_POSTED_FILE_NAME )
:C: RETURN
:C: ENDIF
*
:SECTION=QUERY_POSTED_FILE_NAME
:T:file name<EOL>
QUERY_GCODE_FILE_NAME_T1A
Purpose
This command will define what is the file name for 1st turret above centerline. This is
used in conjunction with CAMWorks Virtual Machine. Available in Mill, Turn and Mill-
Turn. Supported in CAMWorks 2013 and later. Not supported in any ProCAM product.
This command is not needed if using the file path and name as in the posting dialog box.
Syntax
QUERY_ITEM_ID=QUERY_GCODE_FILE_NAME_T1A
Comments
Associated commands and variables:
The example code below shows the other variables used with this command. This logic
should be in
:SECTION=CALC_QUERY_POST
Example
:C: IF QUERY_ITEM_ID = QUERY_GCODE_FILE_NAME_T1A THEN
:C: CALL(QUERY_FILE_NAME_T1A )
:C: RETURN
:C: ENDIF
*
:SECTION=QUERY_FILE_NAME_T1A
:T:file name<EOL>
QUERY_GCODE_FILE_NAME_T2A
Purpose
This command will define what is the file name for 1st turret above centerline. This is
used in conjunction with CAMWorks Virtual Machine. Available in Mill, Turn and Mill-
Turn. Supported in CAMWorks 2013 and later. Not supported in any ProCAM product.
This command is not needed if using the file path and name as in the posting dialog box.
Syntax
QUERY_ITEM_ID=QUERY_GCODE_FILE_NAME_T2A
Comments
Associated commands and variables:
The example code below shows the other variables used with this command. This logic
should be in
:SECTION=CALC_QUERY_POST
Example
:C: IF QUERY_ITEM_ID = QUERY_GCODE_FILE_NAME_T2A THEN
:C: CALL(QUERY_FILE_NAME_T2A )
:C: RETURN
:C: ENDIF
*
:SECTION=QUERY_FILE_NAME_T2A
:T:file name<EOL>
QUERY_GCODE_FILE_NAME_T1B
Purpose
This command will define what is the file name for 1st turret above centerline. This is
used in conjunction with CAMWorks Virtual Machine. Available in Mill, Turn and Mill-
Turn. Supported in CAMWorks 2013 and later. Not supported in any ProCAM product.
This command is not needed if using the file path and name as in the posting dialog box.
Syntax
QUERY_ITEM_ID=QUERY_GCODE_FILE_NAME_T1B
Comments
Associated commands and variables:
The example code below shows the other variables used with this command. This logic
should be in
:SECTION=CALC_QUERY_POST
Example
:C: IF QUERY_ITEM_ID = QUERY_GCODE_FILE_NAME_T1B THEN
:C: CALL(QUERY_FILE_NAME_T1B )
:C: RETURN
:C: ENDIF
*
:SECTION=QUERY_FILE_NAME_T1B
:T:file name<EOL>
QUERY_GCODE_FILE_NAME_T2B
Purpose
This command will define what is the file name for 1st turret above centerline. This is
used in conjunction with CAMWorks Virtual Machine.
Available in Mill, Turn and Mill-Turn. Supported in CAMWorks 2013 and later. Not
supported in any ProCAM product.
This command is not needed if using the file path and name as in the posting dialog box.
Syntax
QUERY_ITEM_ID=QUERY_GCODE_FILE_NAME_T2B
Comments
Associated commands and variables:
The example code below shows the other variables used with this command. This logic
should be in
:SECTION=CALC_QUERY_POST
Example
:C: IF QUERY_ITEM_ID = QUERY_GCODE_FILE_NAME_T2B THEN
:C: CALL(QUERY_FILE_NAME_T2B )
:C: RETURN
:C: ENDIF
*
:SECTION=QUERY_FILE_NAME_T2B
:T:file name<EOL>
QUERY_INT_MILL_ROUGH_TYPE
Purpose
This command will query the Rough Mill Type.
Available in Mill and Mill-Turn. Supported in CAMWorks 2013 and later. Not supported in
any ProCAM product.
This command is not needed if using the file path and name as in the posting dialog box.
Syntax
QUERY_ITEM_ID=QUERY_INT_MILL_ROUGH_TYPE
Comments
Associated commands and variables:
The example code below shows the other variables used with this command. If the Query
result was "1" then the value will be in QUERY_INT_VAL
Example
:C: QUERY_ITEM_ID=QUERY_INT_MILL_ROUGH_TYPE
:C: QUERY_SYSTEM()
:C: IF QUERY_RESULT=1 THEN
:C: IF QUERY_INT_VAL=0 THEN
* 2 axis “Pocket In” = MILL_ROUGH_TYPE_SPIRALIN
:C: ENDIF
:C: IF QUERY_INT_VAL=1 THEN
* 2 axis “Pocket Out” = MILL_ROUGH_TYPE_SPIRALOUT
* 3 axis “Pocket Out” = MILL_ROUGH_TYPE_SPIRALOUT
:C: ENDIF
:C: IF QUERY_INT_VAL=2 THEN
* 2 axis “Zig” = MILL_ROUGH_TYPE_ZIG
:C: ENDIF
:C: IF QUERY_INT_VAL=3 THEN
* 2 axis “Zigzag” = MILL_ROUGH_TYPE_ZIGZAG
* 3 axis “Lace” = MILL_ROUGH_TYPE_ZIGZAG
:C: ENDIF
:C: IF QUERY_INT_VAL=4 THEN
* 2 axis “Spiral In” = MILL_ROUGH_TYPE_TRUESPIRALIN
:C: ENDIF
:C: IF QUERY_INT_VAL=5 THEN
* 2 axis “Spiral Out” = MILL_ROUGH_TYPE_TRUESPIRALOUT
:C: ENDIF
:C: IF QUERY_INT_VAL=6 THEN
* 2 axis “Plunge Rough” = MILL_ROUGH_TYPE_PLUNGEROUGH
:C: ENDIF
:C: IF QUERY_INT_VAL=7 THEN
* 2 axis “Offset Roughing” = MILL_ROUGH_TYPE_POCKETIN_CORE
* 3 axis “Pocket In Core” = MILL_ROUGH_TYPE_POCKETIN_CORE
:C: ENDIF
QUERY_INT_PRIMARY_TOUCHOFF_REG
Purpose
This command will query the Primary Tool Length offsets in the posted output. This is
used in conjunction with CAMWorks Virtual Machine, Turn and Mill-Turn.
Supported in CAMWorks 2013 SP1 and later. Not supported in any ProCAM product.
Syntax
QUERY_ITEM_ID= QUERY_INT_PRIMARY_TOUCHOFF_REG
Comments
Example
:C: IF QUERY_ITEM_ID =QUERY_INT_PRIMARY_TOUCHOFF_REG THEN
:C: QUERY_INT_VAL=TOOL
:C: RETURN
:C: ENDIF
QUERY_INT_SECONDARY_TOUCHOFF_REG
Purpose
This command will query the Secondary Tool Length offsets in the posted output. This is
used in conjunction with CAMWorks Virtual Machine, Turn and Mill-Turn.
Supported in CAMWorks 2013 SP1 and later. Not supported in any ProCAM product.
Syntax
QUERY_ITEM_ID= QUERY_INT_SECONDARY_TOUCHOFF_REG
Comments
Example
:C: IF QUERY_ITEM_ID =QUERY_INT_SECONDARY_TOUCHOFF_REG THEN
:C: QUERY_INT_VAL=TOOL
:C: RETURN
:C: ENDIF
QUERY_INT_ZERO_OFFSET_RADIUS
Purpose
If the return value of QUERY_INT_VAL is TRUE, the system will zero out the Radius in
the Eureka Offset radius correctors for this tool.
If the return value of QUERY_INT_VAL is FALSE, the system will not zero out the Radius
in the Eureka Offset radius correctors for this Tool.
If the Post doesn’t know whether to zero out the Radius offset, then don’t set it since the
system has already pre-set the QUERY_INT_VAL based on whether CNC comp with part
geometry or CNC comp for Tool wear only was used.
Syntax
QUERY_ITEM_ID=QUERY_INT_ZERO_OFFSET_RADIUS
Comments
OUTPUT_START_SYNC_CODES()
Purpose
To Find any Auto Start Sync Codes from Sync Manager.
Syntax
This logic should be in CALC_START_OPERATION
:C: IF HAVE_START_OPER_SYNC_CODES=TRUE THEN
:C: OUTPUT_START_SYNC_CODES()
:C: ENDIF
Example
If rear start sync codes are found then it gets passed to this system section
:SECTION=CALC_ADD_REAR_SYNC_CODE
If front start sync codes are found then it gets passed to this system section
:SECTION=CALC_ADD_FRONT_SYNC_CODE
OUTPUT_FIRST_MOVE_SYNC_CODES()
Purpose
To find any Auto after first move Sync Codes from Sync Manager.
Syntax
This logic should be in CALC_EVERY_MOVE_MILL and CALC_EVERY_MOVE_LATHE
:C: IF HAVE_FIRST_MOVE_SYNC_CODES=TRUE THEN
:C: OUTPUT_FIRST_MOVE_SYNC_CODES()
:C: ENDIF
Example
If rear start sync codes are found then it gets passed to this system section
:SECTION=CALC_ADD_REAR_SYNC_CODE
If front start sync codes are found then it gets passed to this system section
:SECTION=CALC_ADD_FRONT_SYNC_CODE
OUTPUT_END_SYNC_CODES()
Purpose
To find any Auto End Sync Codes from Sync Manager.
Syntax
This logic should be in CALC_END_OPERATION
:C: IF HAVE_END_OPER_SYNC_CODES=TRUE THEN
:C: OUTPUT_END_SYNC_CODES()
:C: ENDIF
Example
If rear start sync codes are found then it gets passed to this system section
:SECTION=CALC_ADD_REAR_SYNC_CODE
If front start sync codes are found then it gets passed to this system section
:SECTION=CALC_ADD_FRONT_SYNC_CODE
KILLSYSFILE()
Purpose
This command will delete any file that has a path in the variable called SYSFILENAME.
Syntax
:C: SYSFILENAME=”drive:\folder\foldername
:C: KILLSYSFILE()
Example
:C: SYSFILENAME=”C:\TEST\TESTFILE.TXT”
:C: KILLSYSFILE()
QUERY_INT_KIN_SETUP_POS
Purpose
If the return value of QUERY_INT_VAL is TRUE, the system will look for the Kin file and
the result will be passed back to the post as X, Y, Z, I, J, K from the Kinematic Setup
Transform in below post variables. To be used in CAMWorks 2014 SP3 or later versions.
Syntax
QUERY_ITEM_ID=QUERY_INT_KIN_SETUP_POS
Comments
Associated commands and variables:
The example code below shows the other variables used with this command.
:C: QUERY_ITEM_ID=QUERY_INT_KIN_POS
* If you need length comp then add below line.
* QUERY_INT_VAL=ALLOW_TOOL_HEAD_LENGTH_COMP
:C: QUERY_SYSTEM()
:C: IF QUERY_RESULT=TRUE THEN
* Post Variable = SETUP_MACH_X
* Post Variable = SETUP_MACH_Y
* Post Variable = SETUP_MACH_Z
* Post Variable = SETUP_MACH_I
* Post Variable = SETUP_MACH_J
* Post Variable = SETUP_MACH_K
:C: ENDIF
QUERY_MILL_TLP_Z_EXTENTS
Purpose
If the return value of QUERY_RESULT is TRUE, the system will pass the Z extents in post
variables called QUERY_TLP_Z_MIN and QUERY_TLP_Z_MAX. To be used in
CAMWorks 2014 SP3 or later versions.
Syntax
QUERY_ITEM_ID=QUERY_MILL_TLP_Z_EXTENTS
Comments
Associated commands and variables:
The example code below shows the other variables used with this command.
:C: QUERY_ITEM_ID=QUERY_MILL_TLP_Z_EXTENTS
:C: QUERY_SYSTEM()
:C: IF QUERY_RESULT=TRUE THEN
* Post Variable = QUERY_TLP_Z_MIN
* Post Variable = QUERY_TLP_Z_MAX
:C: ENDIF
QUERY_FEARURE_STRATEGY
Purpose
If the return value of QUERY_RESULT is TRUE, then the system will pass the feature
strategy information to the post variable called QUERY_CHAR_VAL. To be used in
CAMWorks 2015 SP1 or newer version.
Syntax
QUERY_ITEM_ID=QUERY_FEATURE_STRATEGY
Comments
Associated commands and variables:
The example code below shows the other variables used with this command.
L
Purpose
Tells system to output leading zeros.
Syntax
L
Comments
The example is output if the number is 1 inch
N10 G01 X001
Example
:SECTION=LINE_MOVE_MILL
:T:<N><G:01> X<"#34L":ABS_X_END><EOL>
l
Purpose
A lowercase "l" tells system to output leading spaces.
Syntax
l
Comments
The example is output if the number is 1 inch
N10 G01 X__1
Example
:SECTION=LINE_MOVE_MILL
:T:<N><G:01> X<"#34l":ABS_X_END><EOL>
N
Purpose
An uppercase "N" tells system not to convert output if decimal.
Syntax
N
Comments
The example is output if the number is 180 degrees
N10 G01 A180
Example
:SECTION=LINE_MOVE_MILL
:T:<N><G:01> A<"#33N":ARC_START_ANGLE><EOL>
T
Purpose
An uppercase "T" tells the system to output trailing zeros.
Syntax
T
Comments
The example is output if the number is 1 inch
N10 G01 X10000
Example
:SECTION=LINE_MOVE_MILL
:T:<N><G:01> X<"#34T":ABS_X_END><EOL>
t
Purpose
A lowercase "t" tells the system to output trailing spaces.
Syntax
t
Comments
The example is output if the number is 1 inch
N10 G01 X1____
Example
:SECTION=LINE_MOVE_MILL
:T:<N><G:01> X<"#34t":ABS_X_END><EOL>
@
Purpose
An @ tells system to output a space in place of a plus or minus sign if a sign is not output.
Syntax
@
Comments
The below example is output if the number is 1 inch
N10 G01 X_1
Example
:SECTION=LINE_MOVE_MILL
:T:<N><G:01> X<"#-34@":ARC_START_ANGLE><EOL>
-
Purpose
Tells system to output a minus sign if number is negative.
Syntax
-
Comments
The below example is output if the number is negative 1 inch.
N10 G01 X-1
Example
:SECTION=LINE_MOVE_MILL
:T:<N><G:01> X<"#-34":ARC_START_ANGLE><EOL>
+
Purpose
Forces system to output a plus or minus sign.
Syntax
+
Comments
The below example is output if the number is negative 1 inch.
N10 G01 X+1
Example
:SECTION=LINE_MOVE_MILL
:T:<N><G:01> X<"#+34":ARC_START_ANGLE><EOL>
"
Purpose
Double quotation marks are used to group output format.
Syntax
" "
Comments
None.
Example
#1: Not using HEADER default decimal output
:SECTION=LINE_MOVE_MILL
:T:<N><G:01> X<"#-34":ARC_START_ANGLE><EOL>
#
Purpose
Tells system the output is decimal.
Syntax
#
Comments
None.
Example
#1: Not using HEADER default decimal output
:SECTION=LINE_MOVE_MILL
:T:<N><G:01> X<"#-34":ARC_START_ANGLE><EOL>
.
Purpose
A decimal point (.) forces the system to output a decimal to tape.
Syntax
.
Comments
None.
Example
#1: Not using a decimal point
:SECTION=LINE_MOVE_MILL
:T:<N><G:01> X<"#-34":ARC_START_ANGLE><EOL>
N100 G01 X?
%
Purpose
Tells system the output is integer.
Syntax
%
Comments
None.
Example
#1: Not Using HEADER default integer output
:SECTION=START_OF_TAPE_MILL
:T:O<"%4LT":program_number><EOL>
Returns: O0001
#2: Using HEADER defaults
:SECTION=START_OF_TAPE_MILL
:T:O<%:program_number><EOL>
GET_DATA()
Purpose
To build popup for attribute list.
Syntax
:C: GET_DATA(listname)
Comments
This command will invoke an attribute list for the user to answer in CAD.
Example
:ATTRNAME=elipse
:ATTRTYPE=LIST
:ATTRSEL=N
:ATTRTITLE=Elipse
:ATTRLIST=major
:ATTRLISTDEF=10
:ATTRLIST=minor
:ATTRLISTDEF=5
:ATTRLIST=nsegments
:ATTRLISTDEF=120
:ATTRUSED=1
:ATTRDEFAULT=1
:ATTREND
:SECTION=CALC_MAIN
:C: GET_DATA(elipse)
GET_POINT()
Purpose
To call pick point and return result.
Syntax
:C: GET_POINT()
Comments
This command invokes user to snap a point, which will return the result in the system
variables ABS_X_END and ABS_Y_END.
Example
:SECTION=CALC_MAIN
:C: GET_POINT()
:C: OFF_IN_X=ABS_X_END
:C: OFF_IN_Y=ABS_Y_END
SET_COLOR()
Purpose
To set current system color in CAD.
Syntax
:C: SET_COLOR(color)
Comments
This command sets the system color from 0-15:
BLACK = 0
BLUE = 1
GREEN = 2
CYAN = 3
RED = 4
MAGENTA = 5
BROWN = 6
WHITE = 7
GREY = 8
LIGHT_BLUE = 9
LIGHT_GREEN = 10
LIGHT_CYAN = 11
LIGHT_RED = 12
LIGHT_MAGENTA = 13
LIGHT_YELLOW = 14
BRIGHT_WHITE = 15
Example
This example sets the system color to BLUE.
:SECTION=CALC_MAIN
:C: SET_COLOR(1)
SET_TEXT_COLOR()
Purpose
To set current system text color in CAD.
Syntax
:C: SET_TEXT_COLOR(color)
Comments
This command sets the system text color from 0-15:
BLACK = 0
BLUE = 1
GREEN = 2
CYAN = 3
RED = 4
MAGENTA = 5
BROWN = 6
WHITE = 7
GREY = 8
LIGHT_BLUE = 9
LIGHT_GREEN = 10
LIGHT_CYAN = 11
LIGHT_RED = 12
LIGHT_MAGENTA = 13
LIGHT_YELLOW = 14
BRIGHT_WHITE = 15
Example
This example sets the system text color to BLUE.
:SECTION=CALC_MAIN
:C: SET_TEXT_COLOR(1)
SET_LAYER()
Purpose
To set current system layer in CAD.
Syntax
:C: SET_LAYER(layer)
Comments
This command sets the system layer from 0-256.
Example
This example sets the system layer to "1".
:SECTION=CALC_MAIN
:C: SET_LAYER(1)
ADD_PUNCH_PATTERN()
Purpose
To add a punch pattern.
Syntax
:C: ADD_PUNCH_PATTERN(pattern)
Comments
You must set all the system variables first before you add the pattern in CAM.
Examples
#1: Example of a grid pattern
:SECTION=CALC_MAIN
:C: SELECT_TOOL(1)
:C: ABS_X_START=5.
:C: ABS_Y_START=5.
:C: ABS_X_END=10.
:C: ABS_Y_END=10.
:C: ANGLE=0
:C: NUM_HITS_X=5
:C: NUM_HITS_Y=5
:C: DIST_BET_HOLES_X=1.
:C: DIST_BET_HOLES_Y=1.
:C: HORIZ_OR_VERT=HORIZONTAL
:C: ADD_PUNCH_PATTERN(MGRID)
ADD_PUNCH_PATH()
Purpose
To add a punch path - nibble line or arc.
Syntax
:C: ADD_PUNCH_PATH(path)
Comments
You must set all the system variables first before you add the path in CAM.
Example
#1: Example of a line path
:SECTION=CALC_MAIN
:C: SELECT_TOOL(1)
:C: ABS_X_START=5.
:C: ABS_Y_START=5.
:C: ABS_X_END=10.
:C: ABS_Y_END=10.
:C: PITCH=.125
:C: MOVE_TYPE=LINE
:C: ADD_PUNCH_PATH(MLINE)
ADD_REPOSITION()
Purpose
To add a reposition in CAM.
Syntax
:C: ADD_REPOSITION()
Comments
You must set all the system variables first before you add the reposition in CAM.
Example
The example below will rapid to "X" and "Y" to ten inches and then reposition the sheet in
"X" 20 inches incrementally.
:SECTION=CALC_MAIN
:C: SELECT_TOOL(1)
:C: ABS_X_END=10.
:C: ABS_Y_END=10.
:C: INC_X_END=20
:C: ADD_REPOSITION()
ADD_CAD()
Purpose
To add a CAD entity.
Syntax
:C: ADD_CAD(position)
Comments
You must set all the system variables first before you add the entity in CAD. You add CAD
by PREVIOUS position, CURRENT position or NEXT position.
Examples
#1: Example of a current line entity
:SECTION=CALC_MAIN
:C: ABS_X_START=5.
:C: ABS_Y_START=5.
:C: ABS_X_END=10.
:C: ABS_Y_END=10.
:C: MOVE_TYPE=MLINE
:C: ADD_CAD(CURRENT)
MAKE_FILLET()
Purpose
To make a fillet between two CAD entities.
Syntax
:C: MAKE_FILLET(radius)
Comments
You must set all the system variables first before you make the fillet in CAD.
Example
:SECTION=CALC_MAIN
:C: ARC_RAD(.1)
:C: P_ABS_X_START=5.
:C: P_ABS_Y_START=5.
:C: P_ABS_X_END=10.
:C: P_ABS_Y_END=5.
:C: P_MOVE_TYPE=MLINE
:C: N_ABS_X_START=10.
:C: N_ABS_Y_START=5.
:C: N_ABS_X_END=10.
:C: N_ABS_Y_END=10.
:C: N_MOVE_TYPE=MLINE
:C: MAKE_FILLET(ARC_RAD)
:C: ADD_CAD(PREVIOUS)
:C: ADD_CAD(CURRENT)
:C: P_ABS_X_START=N_ABS_X_START
:C: P_ABS_Y_START=N_ABS_Y_START
:C: P_ABS_X_END=N_ABS_X_END
:C: P_ABS_Y_END=N_ABS_Y_END
:C: P_MOVE_TYPE=N_MOVE_TYPE
:C: ADD_CAD(NEXT)
ADD_PUNCH_TOOL()
Purpose
To add a punch tool in CAM.
Syntax
:C: ADD_PUNCH_TOOL(tool)
Comments
You must set all the system tool variables first before you add the tool in CAM.
TOOL_TYPE:
ROUND = 1
RECTANGLE = 2
TRIANGLE = 3
CROSS = 4
OBROUND = 5
SQUARE = 6
RECRAD = 7
DOUBLED = 8
SINGLED = 9
SPETOOL = 10
Examples
#1
:SECTION=CALC_MAIN
:C: TOOL_TYPE=1
:C: TOOL_DIAMETER=.5
:C: TOOL_LOAD_ANGLE=0
:C: TOOL_COMMENT={.5 ROUND PUNCH}
:C: TOOL_DISCRIPTION={ROUND PUNCH}
:C: ADD_PUNCH_TOOL(TOOL)
#2
:SECTION=CALC_MAIN
:C: TOOL_TYPE=2
:C: TOOL_LENGTH=.5
:C: TOOL_WIDTH=.25
:C: TOOL_LOAD_ANGLE=0
:C: TOOL_COMMENT={.5 x .25 RECTANGLE PUNCH}
:C: TOOL_DISCRIPTION={RECTANGLE PUNCH}
:C: ADD_PUNCH_TOOL(TOOL)
#3
:SECTION=CALC_MAIN
:C: TOOL_TYPE=7
:C: TOOL_LENGTH=.5
:C: TOOL_WIDTH=.25
:C: TOOL_CORNER_RADIUS=.01
:C: TOOL_LOAD_ANGLE=0
:C: TOOL_COMMENT={.5 x .25 RECTANGLE RADIUS PUNCH}
:C: TOOL_DISCRIPTION={RECTANGLE RADIUS PUNCH}
:C: ADD_PUNCH_TOOL(TOOL)
SELECT_TOOL()
Purpose
To select a punch tool in CAM.
Syntax
:C: SELECT_TOOL(tool)
Comments
If the tool already exists in the part tool list then you can use this command. If the tool does
not exist in the current part tool list, you must use the ADD_PUNCH_TOOL() command.
Example
:SECTION=CALC_MAIN
:C: TOOL=1
:C: SELECT_TOOL(TOOL)
START_COMPLEX()
Purpose
To start a CAM boundary.
Syntax
:C: START_COMPLEX()
Comments
This command will initiate a CAM boundary. Make sure you use this command before you
add your first entity in CAD.
Example
:SECTION=CALC_MAIN
:C: START_COMPLEX()
:C: ABS_X_START=5.
:C: ABS_Y_START=5.
:C: ABS_X_END=10.
:C: ABS_Y_END=10.
:C: MOVE_TYPE=MLINE
:C: ADD_CAD(CURRENT)
END_COMPLEX()
Purpose
To end a CAM boundary.
Syntax
:C: END_COMPLEX()
Comments
This command will end a CAM boundary. Make sure this command is after your last entity
in CAD.
Example
:SECTION=CALC_MAIN
:C: START_COMPLEX()
:C: ABS_X_START=5.
:C: ABS_Y_START=5.
:C: ABS_X_END=10.
:C: ABS_Y_END=10.
:C: MOVE_TYPE=MLINE
:C: ADD_CAD(CURRENT)
:C: END_COMPLEX()
START_GROUP()
Purpose
To start a group of entities.
Syntax
:C: START_GROUP()
Comments
This command will initiate a group of entities. Make sure you use this command before you
add your first entity in CAD.
Example
:SECTION=CALC_MAIN
:C: START_GROUP()
:C: ABS_X_START=5.
:C: ABS_Y_START=5.
:C: ABS_X_END=10.
:C: ABS_Y_END=10.
:C: MOVE_TYPE=MLINE
:C: ADD_CAD(CURRENT)
END_GROUP()
Purpose
To end a group of entities.
Syntax
:C: END_GROUP()
Comments
This command will end a group. Make sure this command is after your last entity in CAD.
Example
:SECTION=CALC_MAIN
:C: START_GROUP()
:C: ABS_X_START=5.
:C: ABS_Y_START=5.
:C: ABS_X_END=10.
:C: ABS_Y_END=10.
:C: MOVE_TYPE=MLINE
:C: ADD_CAD(CURRENT)
:C: END_GROUP()
:ATTRNAME=
Purpose
Start attribute definition.
Syntax
:ATTRNAME=name
Comments
This command starts an attribute definition. name identifies the attribute.
Example
:ATTRNAME=MACHINE NAME
:ATTRTYPE=DESCRIPTOR
:ATTRVTYPE=CHARACTER
:ATTRID=501
:ATTREND
:ATTREND
Purpose
Ends an attribute definition.
Syntax
:ATTREND
Comments
This command ends an attribute definition.
Example
:ATTRNAME=MACHINE NAME
:ATTRTYPE=DESCRIPTOR
:ATTRVTYPE=CHARACTER
:ATTRID=501
:ATTREND
:ATTRTYPE=
Purpose
Defines attribute type.
Syntax
:ATTRTYPE=POST
:ATTRTYPE=DESCRIPTOR
:ATTRTYPE=VALUE
:ATTRTYPE=DISPLAY
:ATTRTYPE=SELECT
:ATTRTYPE=LIST
Comments
Parameter Description
POST Defined only in the post and can only be used while posting.
DESCRIPTOR Machine descriptors. These attributes have to be defined in MASTER.ATR
and defined in the post.
VALUE Used for Setup and Attachable attributes that require entering a value.
These attributes have to be defined in MASTER.ATR and defined in the
post.
DISPLAY Used in HARDCODE attributes that are displayed only (they do not require
a choice or value). These attributes have to be defined in MASTER.ATR
and defined in the post.
SELECT Used for attributes that require selection from a list of choices. These
attributes have to be defined in MASTER.ATR if they are to be used for
Setup or Attachable type attributes. If used for posting only, then they need
to be defined only in the post.
LIST Used for Setup attributes. This has to be the last attribute defined. These
attributes have to be defined in MASTER.ATR and defined in the post.
Example
:ATTRNAME=x sheet width
:ATTRTYPE=VALUE
:ATTRVTYPE=DECIMAL
:ATTREMARK=X Sheet Width
:ATTRSEL=N
:ATTRINLEN=10
:ATTRSHORT=X Sheet Width
:ATTRLONG=Enter X Sheet Width
:ATTRHIGH=9999
:ATTRLOW=9999
:ATTRDEFAULT=0
:ATTRUSED=1
:ATTREND
:ATTRNAME=optional stop
:ATTRTYPE=DISPLAY
:ATTREMARK=optional stop M01
:ATTRSEL=Y
:ATTRTEXT=
:ATTRFUNC=optional_stop
:CODETYPE=HARDCODE
:CODE=|M01
:ATTRUSED=1
:ATTREND
:ATTRNAME=work chute
:ATTRTYPE=SELECT
:ATTRVTYPE=INTEGER
:ATTRSEL=Y
:ATTRSHORT=Work Chute
:ATTRTITLE=Work Chute (open/close)
:ATTRSELSTR=M80
:ATTRDEFAULT=1
:ATTRUSED=1
:ATTREND
:ATTRNAME=setup
:ATTRTYPE=LIST
:ATTRSEL=N
:ATTRTITLE=Setup
:ATTRLIST=program number
:ATTRLISTDEF=1
:ATTRLIST=x sheet width
:ATTRLISTDEF=0
:ATTRLIST=y sheet width
:ATTLISTDEF=0
:ATTRUSED=1
:ATTRDEFAULT=1
:ATTREND
:ATTRVTYPE=
Purpose
Variable type.
Syntax
:ATTRVTYPE=INTEGER
:ATTRVTYPE=DECIMAL
:ATTRVTYPE=CHARACTER
Comments
If no ATTRVTYPE is put in the attribute definition then it assumes it is a character variable
type. If, however, you define the attribute with a :VAR=? the ?= another attribute that has
been defined before this one and it had a ATTRVTYPE defined, then this attribute will be
the same variable type as in the :VAR= command.
Example
:ATTRNAME=x sheet width
:ATTRTYPE=VALUE
:ATTRVTYPE=DECIMAL
:ATTREMARK=X Sheet Width
:ATTRSEL=N
:ATTRINLEN=10
:ATTRSHORT=X Sheet Width
:ATTRLONG=Enter X Sheet Width
:ATTRHIGH=9999
:ATTRLOW=9999
:ATTRDEFAULT=0
:ATTRUSED=1
:ATTREND
:ATTRID=
Purpose
Attribute ID number.
Syntax
:ATTRID=501
Comments
This command determines the ID number for any attribute that is defined in the
MASTER.ATR file.
Example
:ATTRNAME=MACHINE NAME
:ATTRTYPE=DESCRIPTOR
:ATTRVTYPE=CHARACTER
:ATTRID=501
:ATTREND
:ATTREMARK
Purpose
Information for programmer only.
Syntax
:ATTREMARK=text
Comments
This command allows the programmer to document the attribute for future reference.
Example
:ATTRNAME=x sheet width
:ATTRTYPE=VALUE
:ATTRVTYPE=DECIMAL
:ATTREMARK=X Sheet Width
:ATTRSEL=N
:ATTRINLEN=10
:ATTRSHORT=X Sheet Width
:ATTRLONG=Enter X Sheet Width
:ATTRHIGH=9999
:ATTRLOW=9999
:ATTRDEFAULT=0
:ATTRUSED=1
:ATTREND
:ATTRLISTDEF
Purpose
List string default.
Syntax
:ATTRLISTDEF=n
Comments
This command allows you to set the list default value for a Setup select type attribute.
Example
:ATTRNAME=setup
:ATTRTYPE=LIST
:ATTRSEL=N
:ATTRTITLE=Setup
:ATTRLIST=program number
:ATTRLISTDEF=1
:ATTRLIST=x sheet width
:ATTRLISTDEF=0
:ATTRLIST=y sheet width
:ATTLISTDEF=0
:ATTRUSED=1
:ATTRDEFAULT=1
:ATTREND
:ATTRLIST=
Purpose
List string for list type attribute.
Syntax
:ATTRLIST=attribute name
Comments
This command allows you to insert a previously defined attribute into a list.
Example
:ATTRNAME=setup
:ATTRTYPE=LIST
:ATTRSEL=N
:ATTRTITLE=Setup
:ATTRLIST=program number
:ATTRLISTDEF=1
:ATTRLIST=x sheet width
:ATTRLISTDEF=0
:ATTRLIST=y sheet width
:ATTLISTDEF=0
:ATTRUSED=1
:ATTRDEFAULT=1
:ATTREND
:ATTRSELSTR=
Purpose
Select string for select type.
Syntax
:ATTRSELSRT=string
Comments
This command is used in select type attributes to specify the choices.
Example
:ATTRNAME=init machine comp
:ATTRTYPE=SELECT
:ATTREMARK=Comp lft, rgt, cancel
:ATTRSEL=N
:ATTRTITLE=Laser Compensation
:ATTRLIST=program number
:ATTRSELSTR=Left
:ATTRSELSTR=Right
:ATTRSELSTR=Cancel
:ATTRDEFAULT=1
:ATTRUSED=1
:ATTREND
:ATTRSEL=
Purpose
Selectable switch.
Syntax
:ATTRSEL=Y or N
Comments
This command determines whether an attribute displays in the Select Attribute dialog box
or in the Setup Information dialog box. If set to Y (yes), the attribute displays in the Select
Attribute dialog box and cannot be listed in the Setup Information dialog box. If set to N
(no), the attribute displays in the Setup Information dialog box.
Example
:ATTRNAME=init machine comp
:ATTRTYPE=SELECT
:ATTREMARK=Comp lft, rgt, cancel
:ATTRSEL=N
:ATTRTITLE=Laser Compensation
:ATTRLIST=program number
:ATTRSELSTR=Left
:ATTRSELSTR=Right
:ATTRSELSTR=Cancel
:ATTRDEFAULT=1
:ATTRUSED=1
:ATTREND
:ATTRUSED=
Purpose
Flag for attribute used or not.
Syntax
:ATTRUSED=1 or 0
Comments
This command tells the compiler if an attribute is used or not. If set to 1, the attribute is
included in the compile. If set to 0, the attribute is not compiled.
Example
:ATTRNAME=init machine comp
:ATTRTYPE=SELECT
:ATTREMARK=Compt lft, rgt, cancel
:ATTRSEL=N
:ATTRTITLE=Laser Compensation
:ATTRLIST=program number
:ATTRSELSTR=Left
:ATTRSELSTR=Right
:ATTRSELSTR=Cancel
:ATTRDEFAULT=1
:ATTRUSED=1
:ATTREND
:ATTRDEFAULT=
Purpose
Define default for attribute.
Syntax
:ATTRDEFAULT=value
Comments
This command sets the default value for input. This command overrides ATTRLISTDEF.
Example
:ATTRNAME=x sheet width
:ATTRTYPE=VALUE
:ATTRVTYPE=DECIMAL
:ATTREMARK=X Sheet Width
:ATTRSEL=N
:ATTRINLEN=10
:ATTRSHORT=X Sheet Width
:ATTRLONG=Enter X Sheet Width
:ATTRHIGH=9999
:ATTRLOW=9999
:ATTRDEFAULT=0
:ATTRUSED=1
:ATTREND
:ATTRINLEN=
Purpose
Define input length for attribute.
Syntax
:ATTRINLEN=value
Comments
This command sets the input length.
For decimal input (3.4), set this value to 10, which includes the decimal point, the + sign
and the - sign.
For integers, the length is normally 4.
Example
:ATTRNAME=x sheet width
:ATTRTYPE=VALUE
:ATTRVTYPE=DECIMAL
:ATTREMARK=X Sheet Width
:ATTRSEL=N
:ATTRINLEN=10
:ATTRSHORT=X Sheet Width
:ATTRLONG=Enter X Sheet Width
:ATTRHIGH=9999
:ATTRLOW=9999
:ATTRDEFAULT=0
:ATTRUSED=1
:ATTREND
:ATTRSHORT=
Purpose
Defines the text that displays in the dialog boxes for value type attributes.
Syntax
:ATTRSHORT=text
Comments
This command defines the text that displays in the dialog box for value type attributes.
When the post is compiled, this text is output to the .LNG file and can be translated if
necessary.
Example
:ATTRNAME=x sheet width
:ATTRTYPE=VALUE
:ATTRVTYPE=DECIMAL
:ATTREMARK=X Sheet Width
:ATTRSEL=N
:ATTRINLEN=10
:ATTRSHORT=X Sheet Width
:ATTRLONG=ENTER X Sheet Width
:ATTRHIGH=9999
:ATTRLOW=9999
:ATTRDEFAULT=0
:ATTRUSED=1
:ATTREND
:ATTRLONG=
Purpose
Defines the text that displays on the prompt line for value type attributes.
Syntax
:ATTRLONG=text
Comments
This command defines the text that displays on the prompt line for value type attributes.
When the post is compiled, this text is output to the .LNG file and can be translated if
necessary.
Example
:ATTRNAME=x sheet width
:ATTRTYPE=VALUE
:ATTRVTYPE=DECIMAL
:ATTREMARK=X Sheet Width
:ATTRSEL=N
:ATTRINLEN=10
:ATTRSHORT=X Sheet Width
:ATTRLONG=ENTER X Sheet Width
:ATTRHIGH=9999
:ATTRLOW=9999
:ATTRDEFAULT=0
:ATTRUSED=1
:ATTREND
:ATTRHIGH=
Purpose
Answer high.
Syntax
:ATTRHIGH=value
Comments
This command defines the maximum value that can be entered for the attribute. This
command is used with value type attributes.
Example
:ATTRNAME=x sheet width
:ATTRTYPE=VALUE
:ATTRVTYPE=DECIMAL
:ATTREMARK=X Sheet Width
:ATTRSEL=N
:ATTRINLEN=10
:ATTRSHORT=X Sheet Width
:ATTRLONG=ENTER X Sheet Width
:ATTRHIGH=9999
:ATTRLOW=9999
:ATTRDEFAULT=0
:ATTRUSED=1
:ATTREND
:ATTRLOW=
Purpose
Answer low.
Syntax
:ATTRLOW=value
Comments
This command defines the lowest value that can be entered for the attribute. This command
is used with value type attributes. If the value type is an integer, you cannot define a
negative value. If the value type is decimal, you can define a negative value.
Example
:ATTRNAME=x sheet width
:ATTRTYPE=VALUE
:ATTRVTYPE=DECIMAL
:ATTREMARK=X Sheet Width
:ATTRSEL=N
:ATTRINLEN=10
:ATTRSHORT=X Sheet Width
:ATTRLONG=ENTER X Sheet Width
:ATTRHIGH=9999
:ATTRLOW=9999
:ATTRDEFAULT=0
:ATTRUSED=1
:ATTREND
:ATTRTEXT=
Purpose
Text for display type attributes.
Syntax
:ATTRTEXT=text
Comments
This command defines the text for display type attributes. This command is not used.
Example
:ATTRTITLE=
Purpose
Text for select type attributes in the Select Attribute dialog box.
Syntax
:ATTRTITLE=text
Comments
This command defines the text that identifies the attribute in the Select Attribute dialog box.
Example
:ATTRNAME=init machine comp
:ATTRTYPE=SELECT
:ATTREMARK=Comp Lft, Rgt, Cancel
:ATTRSEL=N
:ATTRTITLE=Laser Compensation
:ATTRSELSTR=Left
:ATTRSELSTR=Right
:ATTRSELSTR=Cancel
:ATTRDEFAULT=1
:ATTRUSED=1
:ATTREND
:ATTRSPACES=
Purpose
Code space flag.
Syntax
:ATTRSPACES=YES or NO
Comments
This command allows spaces in the code output even when the global :SPACE=FALSE is
set in the ? file.
Example
:ATTRNAME=TOOL COMMENT
:ATTRTYPE=POST
:ATTREMARK=
:CODETYPE=FORMAT
:WORD_ADDRESS_BEF=|(
:LEFT_PLACES=0
:RIGHT_PLACES=0
:UNITFLAG=NON_CONVERT
:ATTRSPACES=YES
:MODAL=YES
:ATTRUSED=1
:ATTREND
:CODETYPE=
Purpose
Define codeblock type.
Syntax
:CODETYPE=FORMAT
:CODETYPE=SELECT
:CODETYPE=SELECT_FORMAT
:CODETYPE=HARDCODE
Comments
Parameter Description
FORMAT Defines how you want your output to be
SELECT defines a selectable output.
SELECT_FORM Defines two variables. The first is a select and the second
AT is a format type.
HARDCODE Defines hardcoded output.
Example
:ATTRNAME=F
:ATTRTYPE=POST
:ATTRVTYPE=DECIMAL
:ATTREMARK=Feedrate IPM/MPM
:CODETYPE=FORMAT
:ATTRCFUNC=CALC_REG_F_(MACH,REG_E,F)
:WORD_ADDRESS_BEF=|F
:LEFT_PLACES=3
:RIGHT_PLACES=4
:CANNOT_BE_SIGNED
:MODAL=YES
:ATTREND
:ATTRNAME=DEBUG
:ATTRTYPE=POST
:ATTRVTYPE=INTEGER
:ATTREMARK=Debug
:CODETYPE=SELECT
:SELECT=1
:CODE=|||||Line|Move
:SELECT=2
:CPDE=|||||Arc|Move
:ATTRUSED=1
:ATTREND
:ATTRNAME=F
:ATTRTYPE=POST
:ATTRVTYPE=DECIMAL
:ATTREMARK=Feedrate IPM/MPM
:CODETYPE=SELECT_FORMAT
:ATTRCFUNC=CALC_REG_F_(MACH,REG_E,F)
:VAR=OPR_FEED_TYPE
:SELECT=1
:WORD_ADDRESS_BEF=|F|
:VARB=F
:LEFT_PLACES=2
:RIGHT_PLACES=4
:CANNOT_BE_SIGNED
:MODAL=YES
:SELECT=2
:WORD_ADDRESS_BEF=|F|
:VARB=F
:LEFT_PLACES=3
:RIGHT_PLACES=2
:CANNOT_BE_SIGNED
:MODAL=YES
:ATTREND
:ATTRNAME=BLOCK DELETE
:ATTRTYPE=POST
:ATTREMARK=
:CODETYPE=HARDCODE
:CODE=/
:ATTREND
:CODE=
Purpose
Define code for code block.
Syntax
:CODE=hardcode
Comments
This command allows you to define a constant, not a variable.
Example
:ATTRNAME=BLOCK DELETE
:ATTRTYPE=POST
:ATTREMARK=
:CODETYPE=HARDCODE
:CODE=/
:ATTREND
:WORD_ADDRESS_BEF=
Purpose
Word address before variable.
Syntax
:WORD_ADDRESS_BEF=output
Comments
This command allows you to define what to output in a FORMAT type attribute before the
number has been output. Use the pipe (|) to put a space in the output.
Example
:ATTRNAME=PART NAME
:ATTRTYPE=POST
:ATTREMARK=
:CODETYPE=FORMAT
:WORD_ADDRESS_BEF=|(|PART|NAME=
:CAR=PART NAME
:WORD_ADDRESS_AFT=|)
:LEFT_PLACES=0
:RIGHT_PLACES=0
:UNITFLAG=NON_CONVERT
:ATTRUSED=1
:ATTREND
:WORD_ADDRESS_AFT=
Purpose
Word address after variable.
Syntax
:WORD_ADDRESS_BEF=output
Comments
This command allows you to define what to output in a FORMAT type attribute after the
number has been output. Use the pipe (|) to put a space in the output.
Example
:ATTRNAME=PART NAME
:ATTRTYPE=POST
:ATTREMARK=
:CODETYPE=FORMAT
:WORD_ADDRESS_BEF=|(|PART|NAME=
:CAR=PART NAME
:WORD_ADDRESS_AFT=|)
:LEFT_PLACES=0
:RIGHT_PLACES=0
:UNITFLAG=NON_CONVERT
:ATTRUSED=1
:ATTREND
:LEFT_PLACES=
Purpose
Number of places to the left of the implied decimal.
Syntax
:LEFT_PLACES=value
Comments
This command allows you to override the global G_LEFT_PLACES command for this
attribute only.
Example
:ATTRNAME=F
:ATTRTYPE=POST
:ATTRVTYPE=DECIMAL
:ATTREMARK=Feedrate IPM/MPM
:CODETYPE=FORMAT
:ATTRCFUNC=CALC_REG_F_(MACH,REG_E,F)
:WORD_ADDRESS_BEF=|F
:LEFT_PLACES=3
:RIGHT_PLACES=4
:CANNOT_BE_SIGNED
:MODAL=YES
:ATTREND
:RIGHT_PLACES=
Purpose
Number of places to the right of the implied decimal.
Syntax
:RIGHT_PLACES=value
Comments
This command allows you to override the global G_RIGHT_PLACES command for this
attribute only.
Example
:ATTRNAME=F
:ATTRTYPE=POST
:ATTRVTYPE=DECIMAL
:ATTREMARK=Feedrate IPM/MPM
:CODETYPE=FORMAT
:ATTRCFUNC=CALC_REG_F(MACH,REG_E,F)
:WORD_ADDRESS_BEF=|F
:LEFT_PLACES=3
:RIGHT_PLACES=4
:CANNOT_BE_SIGNED
:MODAL=YES
:ATTREND
:CANNOT_BE_DECIMAL
Purpose
Forces integer output.
Syntax
:CANNOT_BE_DECIMAL
Comments
This command allows you to override the global DECIMAL=TRUE command for this
attribute only.
Example
:ATTRNAME=N
:ATTRTYPE=POST
:ATTRVTYPE=INTEGER
:ATTREMARK=Sequence Number
:CODETYPE=FORMAT
:ATTRCFUNC=CALC_REG_N(SEQ,MAX_SEQUENCE)
:WORD_ADDRESS_BEF=N
:VAR=SEQ
:LEFT_PLACES=4
:RIGHT_PLACES=0
:CANNOT_BE_DECIMAL
:UNITFLAG=NON_CONVERT
:ATTREND
:CANNOT_BE_LEADING
Purpose
Global leading format flag.
Syntax
:CANNOT_BE_LEADING
Comments
This command allows you to override the global :LEADING=TRUE command for this
attribute only. No leading zeros will be output.
Example
:ATTRNAME=TIME HOURS
:ATTRTYPE=POST
:ATTRVTYPE=INTEGER
:ATTREMARK=Time in Hours
:CODETYPE=FORMAT
:ATTRCFUNC=CALC_REG_N(SEQ,MAX_SEQUENCE)
:WORD_ADDRESS_BEF=|ESTIMATED|MACHINE|TIME=
:WORD_ADDRESS_AFT=|HRS.||
:LEFT_PLACES=3
:RIGHT_PLACES=04
:CANNOT_BE_LEADING
:UNITFLAG=NON_CONVERT
:ATTREND
:CANNOT_BE_TRAILING
Purpose
Global trailing format flag.
Syntax
:CANNOT_BE_TRAILING
Comments
This command allows you to override the global :TRAILING=TRUE command for this
attribute only. No trailing zeros will be output.
Example
:ATTRNAME=TIME HOURS
:ATTRTYPE=POST
:ATTRVTYPE=INTEGER
:ATTREMARK=Time in Hours
:CODETYPE=FORMAT
:ATTRCFUNC=CALC_REG_N(SEQ,MAX_SEQUENCE)
:WORD_ADDRESS_BEF=|ESTIMATED|MACHINE|TIME=
:WORD_ADDRESS_AFT=|HRS.||
:LEFT_PLACES=3
:RIGHT_PLACES=04
:CANNOT_BE_TRAILING
:UNITFLAG=NON_CONVERT
:ATTREND
:CANNOT_BE_SIGNED
Purpose
Signed format definition.
Syntax
:CANNOT_BE_SIGNED
Comments
This command prevents the attribute from outputting a + or - sign to the output field. Only a
positive number will be output.
Example
:ATTRNAME=TIME HOURS
:ATTRTYPE=POST
:ATTRVTYPE=INTEGER
:ATTREMARK=Time in Hours
:CODETYPE=FORMAT
:ATTRCFUNC=CALC_REG_N(SEQ,MAX_SEQUENCE)
:WORD_ADDRESS_BEF=|ESTIMATED|MACHINE|TIME=
:WORD_ADDRESS_AFT=|HRS.||
:LEFT_PLACES=3
:RIGHT_PLACES=04
:CANNOT_BE_SIGNED
:UNITFLAG=NON_CONVERT
:ATTREND
:MUST_BE_DECIMAL
Purpose
Global decimal format flag.
Syntax
:MUST_BE_DECIMAL
Comments
This command sets the output to always have a decimal even if the output equals zero.
Example
:ATTRNAME=F
:ATTRTYPE=POST
:ATTRVTYPE=DECIMAL
:ATTREMARK=Feedrate IPM/MPM
:CODETYPE=FORMAT
:ATTRCFUNC=CALC_REG_F_(MACH,REG_E,F)
:WORD_ADDRESS_BEF=|F
:LEFT_PLACES=3
:RIGHT_PLACES=4
:MUST_BE_DECIMAL
:MODAL=YES
:ATTREND
:MUST_BE_LEADING
Purpose
Global leading format flag.
Syntax
:MUST_BE_LEADING
Comments
This command overrides the global :LEADING=FALSE command and always outputs
leading zeros.
Example
:ATTRNAME=F
:ATTRTYPE=POST
:ATTRVTYPE=DECIMAL
:ATTREMARK=Feedrate IPM/MPM
:CODETYPE=FORMAT
:ATTRCFUNC=CALC_REG_F_(MACH,REG_E,F)
:WORD_ADDRESS_BEF=|F
:LEFT_PLACES=3
:RIGHT_PLACES=4
:MUST_BE_LEADING
:MODAL=YES
:ATTREND
:MUST_BE_TRAILING
Purpose
Global trailing format flag.
Syntax
:MUST_BE_TRAILING
Comments
This command overrides the global :TRAILING=FALSE command and always outputs
trailing zeros.
Example
:ATTRNAME=F
:ATTRTYPE=POST
:ATTRVTYPE=DECIMAL
:ATTREMARK=Feedrate IPM/MPM
:CODETYPE=FORMAT
:ATTRCFUNC=CALC_REG_F_(MACH,REG_E,F)
:WORD_ADDRESS_BEF=|F
:LEFT_PLACES=3
:RIGHT_PLACES=4
:MUST_BE_TRAILING
:MODAL=YES
:ATTREND
:MUST_BE_SIGNED
Purpose
Signed format definition.
Syntax
:MUST_BE_SIGNED
Comments
This command forces the attribute to output a + or - sign to the output file.
Example
:ATTRNAME=F
:ATTRTYPE=POST
:ATTRVTYPE=DECIMAL
:ATTREMARK=Feedrate IPM/MPM
:CODETYPE=FORMAT
:ATTRCFUNC=CALC_REG_F_(MACH,REG_E,F)
:WORD_ADDRESS_BEF=|F
:LEFT_PLACES=3
:RIGHT_PLACES=4
:MUST_BE_SIGNED
:MODAL=YES
:ATTREND
:MUST_BE_LEADING_SPACES
Purpose
Global leading spaces format flag.
Syntax
:MUST_BE_LEADING_SPACES
Comments
This command forces leading spaces in the output file.
If G_LEFT_SPACES=3 and the number you output is -1., then you get a minus sign, one
space, then 1. (- 1.). If the number output is 1., you will get two spaces, then 1. ( 1.).
This command can be used for controllers where each space means something.
:MUST_BE_TRAILING_SPACES
Purpose
Global trailing spaces format flag.
Syntax
:MUST_BE_TRAILING_SPACES
Comments
This command forces trailing spaces in the output file.
If G_RIGHT_SPACES=4 and the number you output is -1., then you get a minus sign, 1.,
then four spaces (-.1 ). If the number output is 1.1, you will get the number and three
spaces, then 1. (1.1 ).
:MODAL
Purpose
Modality for code block.
Syntax
:MODAL=YES or NO
Comments
If MODAL=YES, then the attribute does not get output to the output file again until the
attribute's value changes.
MODAL=NO forces the attribute to be output to the output file. If this command is not used,
the default is NO.
Example
:ATTRNAME=F
:ATTRTYPE=POST
:ATTRVTYPE=DECIMAL
:ATTREMARK=Feedrate IPM/MPM
:CODETYPE=FORMAT
:ATTRCFUNC=CALC_REG_F_(MACH,REG_E,F)
:WORD_ADDRESS_BEF=|F
:LEFT_PLACES=3
:RIGHT_PLACES=4
:MUST_BE_SIGNED
:MODAL=YES
:ATTREND
:UNITFLAG=
Purpose
Global English/Metric definition.
Syntax
:UNITFLAG=CONVERT or NON_CONVERT
Comments
The default for this command is CONVERT. If the part is saved as metric, then the output
will be converted to metric. If set to NON_CONVERT, then the output will always be in
inches.
Example
:ATTRNAME=TIME HOURS
:ATTRTYPE=POST
:ATTRVTYPE=INTEGER
:ATTREMARK=Time in Hours
:CODETYPE=FORMAT
:ATTRCFUNC=CALC_REG_N(SEQ,MAX_SEQUENCE)
:WORD_ADDRESS_BEF=|ESTIMATED|MACHINE|TIME=
:WORD_ADDRESS_AFT=|HRS.||
:LEFT_PLACES=3
:RIGHT_PLACES=04
:CANNOT_BE_SIGNED
:UNITFLAG=NON_CONVERT
:ATTREND
:METRIC_UNITS
Purpose
Metric unit definition.
Syntax
:METRIC_UNITS=MM
:METRIC_UNITS=CM
:METRIC_UNITS=M
Comments
This command converts the output to always be whatever METRIC-UNITS is set to: MM
(millimeters), CM (centimeters) or M (meters). The default is MM (millimeters). Some
controllers may require a different metric unit.
Example
:ATTRNAME=REDUCED FEED
:ATTRTYPE=POST
:ATTRVTYPE=DECIMAL
:ATTREMARK=Reduced feed rate
:CODETYPE=FORMAT
:WORD_ADDRESS_BEF=|F
:VAR=REDUCED FEED
:LEFT_PLACES=4
:RIGHT_PLACES=0
:MODAL=YES
:CANNOT_BE_SIGNED
:CANNOT_BE_DECIMAL
:MUST_BE_TRAILING
:METRIC_UNITS=M
:ATTREND
:ATTRFUNC=
Purpose
Define the function to process the attribute.
Syntax
:ATTRFUNC=function
Comments
This command allows you to call a section you specify. When this attribute is attached to an
entity, it will then goto the specified function (:SECTION=) to output the code.
Example
In this example, the output is M01.
:ATTRNAME=optional stop
:ATTRTYPE=DISPLAY
:ATTREMARK=Optional Stop M01
:ATTRSEL=Y
:ATTRTEXT=
:ATTRFUNC=optional_stop
:CODETYPE=HARDCODE
:CODE=|M01
:ATTRUSED=1
:ATTREND
:SECTION=optional_stop
:T:<optional_stop>
:ATTRCFUNC=
Purpose
Define function to process the attribute.
Syntax
:ATTRCFUNC=function
Comments
This command allows you to call a section you specify. When this attribute is used, it will
first goto the specified function (:SECTION=), then return back to the attribute and output
the contents.
Example
:ATTRNAME=R
:ATTRTYPE=POST
:ATTRVTYPE=DECIMAL
:ATTREMARK=R Radius
:CODETYPE=FORMAT
:ATTRCFUNC=CALC_RADIUS(R,MACH,REG_R)
:WORD_ADDRESS_BEF=|R
:MODAL=YES
:ATTREND
:SECTION=CALC_RADIUS(RVAL,MACH,REGISTER)
*
* Arc Radius
*
:C: IF ATTROVERRIDE=YES THEN
:C: RVAL=ATTRDVALUE ELSE RVAL=ARC_RADIUS ENDIF
:C: SETON ()
:C: MACH(REGISTER)=RVAL
:C: IF ARC_INC_ANGLE>HALF_CIRCLE OR
:C: ARC_INC_ANGLE=HALF_CIRCLE
:C: THEN RVAL=(-MACH(REGISTER)) ENDIF
:SELECT=
Purpose
First value for codeblock.
Syntax
:SELECT=text
Comments
This command allows you have hardcoded selectable output.
Example
:ATTRNAME=G CODE
:ATTRTYPE=POST
:ATTREMARK=G code parameters
:CODETYPE=SELECT
:VAR=MOVE TYPE
:SELECT=LINE
:CODE=|G01
:MODAL=YES
:SELECT=CW ARC
:CODE=|G02
:MODAL=YES
:SELECT=CCW ARC
:CODE=|G03
:MODAL=YES
:SELECT=RAPID
:CODE=|G00
:MODAL=YES
:ATTREND
:VAR=
Purpose
First variable for code block.
Syntax
:VAR=variable
Comments
This command defines the first variable in a :CODETYPE=SELECT_FORMAT type
attribute.
Example
:ATTRNAME=X
:ATTRTYPE=POST
:ATTRVTYPE=DECIMAL
:ATTREMARK=X End
:CODETYPE=SELECT_FORMAT
:ATTRCFUNC=CALC_ENDPOINT(X,Y_POS,GC,GG,G_GROUP,MACH,PREV,REG_X,
RAD_OR_DIAM,SX)
:VAR=CURRENT_MODE
:SELECT=1
:WORD_ADDRESS_BEF=|X
:VERB=X
:MODAL=YES
:SELECT=2
:WORD_ADDRESS_BEF=|U
:VERB=X
:CODE=|G03
:MODAL=YES
:ATTREND
:VARB=
Purpose
Second variable for code block.
Syntax
:VARB=variable
Comments
This command defines the second variable in a :CODETYPE=SELECT_FORMAT type
attribute.
Example
:ATTRNAME=X
:ATTRTYPE=POST
:ATTRVTYPE=DECIMAL
:ATTREMARK=X End
:CODETYPE=SELECT_FORMAT
:ATTRCFUNC=CALC_ENDPOINT(X,Y_POS,GC,GG,G_GROUP,MACH,PREV,REG_X,
RAD_OR_DIAM,SX)
:VAR=CURRENT_MODE
:SELECT=1
:WORD_ADDRESS_BEF=|X
:VERB=X
:MODAL=YES
:SELECT=2
:WORD_ADDRESS_BEF=|U
:VERB=X
:CODE=|G03
:MODAL=YES
:ATTREND
:ATTRVCNT=
Purpose
Defines attribute as an array.
Syntax
:ATTRVCNT=value
Comments
This command defines the attribute as an array and the value indicates the size of the array.
Example
:ATTRNAME=GC
:ATTRTYPE=POST
:ATTRVTYPE=INTEGER
:ATTREMARK=G Codes
:ATTREND
:COLUMN=
Purpose
Position of code output.
Syntax
:COLUMN=value
Comments
This command determines the position of the code output. :COLUMN=9 positions the
output in the 10th place from the left. This command is used for some older controllers that
require fielded output where every space means something.
Example
:ATTRNAME=S
:ATTRTYPE=POST
:ATTRVTYPE=INTEGER
:ATTREMARK=Spindle RPM
:CODETYPE=FORMAT
:ATTRCFUNC=CALC_INT_REGISTER(S,MACH,OPR_SPEED,REG_S)
:WORD_ADDRESS_BEF=SP=
:WORD_ADDRESS_AFT=|RPM
:LEFT_PLACES=4
:RIGHT_PLACES=0
:COLUMN=9
:RIGHT_JUST=4
:ATTREND
N001 S1000
:LEFT_JUST=
Purpose
Left justification of the code output.
Syntax
:LEFT_JUST=value
Comments
This command determines the position of the code output from where you were last,
starting from the left.
Example
:ATTRNAME=S
:ATTRTYPE=POST
:ATTRVTYPE=INTEGER
:ATTREMARK=Spindle RPM
:CODETYPE=FORMAT
:ATTRCFUNC=CALC_INT_REGISTER(S,MACH,OPR_SPEED,REG_S)
:WORD_ADDRESS_BEF=SP=
:WORD_ADDRESS_AFT=|RPM
:LEFT_PLACES=4
:RIGHT_PLACES=0
:LEFT_JUST=7
:ATTREND
N001S1000 M03
:RIGHT_JUST=
Purpose
Right justification of the code output.
Syntax
:RIGHT_JUST=value
Comments
This command determines the position of the code output from where you were last,
starting from the right.
Example
:ATTRNAME=S
:ATTRTYPE=POST
:ATTRVTYPE=INTEGER
:ATTREMARK=Spindle RPM
:CODETYPE=FORMAT
:ATTRCFUNC=CALC_INT_REGISTER(S,MACH,OPR_SPEED,REG_S)
:WORD_ADDRESS_BEF=SP=
:WORD_ADDRESS_AFT=|RPM
:LEFT_PLACES=4
:RIGHT_PLACES=0
:RIGHT_JUST=7
:ATTREND
N001 S1000M03
:ATTRLNG=
Purpose
Add attribute to language file.
Syntax
:ATTRLNG=YES or NO
Comments
This command defines whether the attribute will be added to the language file (.LNG) when
the post is compiled. The compiler automatically knows which attributes to add to the
language file and this command is rarely used.
Example
:ATTRNAME=R
:ATTRTYPE=POST
:ATTRVTYPE=DECIMAL
:ATTREMARK=R Radius
:CODETYPE=FORMAT
:ATTRCFUNC=CALC_RADIUS(R,MACH,REG_R)
:WORD_ADDRESS_BEF=|R
:ATTRLNG=YES
:MODAL=YES
:ATTREND
:ATTRID
Purpose
Attribute ID number.
Syntax
:ATTRID=501
Comments
This command determines the ID number for any attribute that is defined in the
MASTER.ATR file.
Example
:ATTRNAME=MACHINE NAME
:ATTRTYPE=DESCRIPTOR
:ATTRVTYPE=CHARACTER
:ATTRID=501
:ATTREND
:IDHIGH
Purpose
Highest attribute ID in MASTER.ATR file.
Syntax
:IDHIGH=17501
Comments
This command determines the highest ID number used in the MASTER.ATR file. This
command should be put at the beginning of the MASTER.ATR file.
Example
None.
:ATTRMACHINE
Purpose
Set of machine-dependent attributes.
Syntax
:ATTRMACHINE=PUNCH
Comments
After this command is put in the post, any attachable attribute that is defined after it will be
assumed to be the system you entered in this command.
Example
None.
:SECTION
Purpose
Start function definitions.
Syntax
:SECTION=CALC_REMOVE_OFFSET
Comments
This command determines the name of a section and what type of section it is. If the
:SECTION=CALC_? section equals starts with a CALC, then it is a calculation section;
otherwise, it is a template section.
Example
:SECTION=CALC_REMOVE_OFFSET
:C: IF DEFINING_MACRO=YES AND JUST_STARTED_MACRO=1
:C: THEN SAV_MODE=CURRENT_MODE JUST_STARTED_MACRO=2
:C: ENDIF
:C: IF OFFSET_RESIDENT=NO THEN RETURN ENDIF
:C: X_OFFSET=(LAST_X-SYS_X_OFFSET)
:C: Y_OFFSET=(LAST_Y-SYS_Y_OFFSET)
:C: CALL(OFFSET_PART_PUNCH)
:C: OFFSET_RESIDENT=NO
:SECTION=OFFSET_PART_PUNCH
:T:<SEQ><ABS_PRESET><X_OFFSET><Y_OFFSET><EOL>
:OPERID
Purpose
Mill and Lathe operation ID name.
Syntax
:OPERID=MILL_PROFILING
Comments
This command determines the name of an operation ID. Any OPERLIST question asked
after this command will be added to the operation questions in CAD.
Operation List:
DRILLING MILL_DRILLING LATHE_DRILLING EDM_PROFILE
SPOT_DRILLING MILL_PROFILING LATHE_PROFILING EDM_SKIM
PECKING MILL_LACE LATHE_ROUGHING EDM_CORE
TAPPING MILL_POCKET LATHE_GROOVING EDM_MACROS
BORING MILL_MISC LATHE_THREADING
HIGH_SPEED_PECKING MILL_SPECIAL LATHE_MISC
VARIABLE_PECKING MILL_MACRO LATHE_SPECIAL
REVERSE_TAPPING MILL_UV_CUT LATHE_CUTOFF
REAMING MILL_SLICE_CUT LATHE_OPER_SETUP
REAMING_DWELL MILL_ROUGH_CUT
BORE_DWELL MILL_CURVE_CUT
BACK_BORING MILL_TOPO_CUT
FINE_BORING MILL_FREEFORM_CUT
MILL_PENCIL_CUT
MILL_OPER_SETUP
Example
:OPERID=MILL_PROFILING
:OPERLIST=machine compensation
:OPERLIST=abs inc
:OPERLIST=work coord
:OPERLIST=coolant
:OPEREND
:OPERSUB
Purpose
Mill drilling operation ID name.
Syntax
:OPERSUB=DRILLING
Comments
This command determines the name of a drilling operation ID. Any OPERLIST questions
asked after this command will be added to the operation questions in CAD. This command
is used in a drilling operation only. It should be placed after the
:OPERID=MILL_DRILLING.
Example
:OPERID=MILL_DRILLING
:OPERSUB=DRILLING
:OPERLIST=abs inc
:OPERLIST=work coord
:OPERLIST=coolant
:OPEREND
:OPERLIST
Purpose
Mill and Lathe operation question.
Syntax
:OPERLIST=abs inc
Comments
This command determines the name of an attribute question that is to be asked in CAD.
Example
:OPERID=MILL_PROFILING
:OPERLIST=machine compensation
:OPERLIST=abs inc
:OPERLIST=work coord
:OPERLIST=coolant
:OPEREND
:OPEREND
Purpose
Mill and Lathe operation definition end.
Syntax
:OPEREND
Comments
This command determines the end of an operation questions.
Example
:OPERID=MILL_PROFILING
:OPERLIST=machine compensation
:OPERLIST=abs inc
:OPERLIST=work coord
:OPERLIST=coolant
:OPEREND
:DEFINE
Purpose
Hardcoded definitions.
Syntax
:DEFINE RAPID_Z_UP=8
Comments
This command sets a define variable equal to a value. In the example below
RAPID_Z_UP=8 sets the value to eight. This command needs to be set at the beginning of
the attribute list in the library.
Example
:DEFINE RAPID_Z_UP=8
:LIBRARY
Purpose
Library definition.
Syntax
:LIBRARY=\MILL\LIBRARY\GENERAL.LIB
Comments
This command defines the name and location of the post library. The example below shows
that the GENERAL.LIB file is located in the \MILL\LIBRARY directory.
Example
:LIBRARY=\MILL\LIBRARY\GENERAL.LIB
:INCLUDE
Purpose
Include definition.
Syntax
:INCLUDE=\MILL\TOOLS\GENERAL.T32
Comments
This command defines the name and location of another file to be used when compiling.
Example
:INCLUDE=\MILL\TOOLS\GENERAL.T32
Syntax
FLAGGED(CAM_MOVE_FLAG, CAM_APPROACH)
Comments
CAM_MOVE_FLAG is a multiple bit variable and CAM_APPROACH is the value it will look for.
The bit value of CAM_APPROACH is 2. What the command FLAGGED is going to return is a
True or False value. In the CAM_MOVE_FLAG variable is CAM_APPROACH’s bit value equal
to True or False.
Example
:C: IF FLAGGED(CAM_MOVE_FLAG,CAM_APPROACH)=TRUE THEN
:C: IF FLAGGED(CAM_MOVE_FLAG, CAM_MOVE_X)=TRUE AND
:C: FLAGGED(CAM_MOVE_FLAG, CAM_MOVE_Z)=TRUE THEN
:C: CALL(RAPID_MOVE_LATHE)
:C: RETURN
:C: ELSE
:C: IF FLAGGED(CAM_MOVE_FLAG,CAM_MOVE_X)=TRUE THEN
:C: CALL(RAPID_MOVE_LATHE_X)
:C: RETURN
:C: ELSE
:C: IF FLAGGED(CAM_MOVE_FLAG,CAM_MOVE_Z)=TRUE THEN
:C: CALL(RAPID_MOVE_LATHE_Z)
:C: RETURN
:C: ENDIF
:C: ENDIF
:C: ENDIF
:C: ENDIF
FLUSH_SYNC_CODES
Purpose
Can be used with any post that uses sync codes.
Syntax
FLUSH_SYNC_CODES(REAR)
FLUSH_SYNC_CODES(FRONT)
Comments
You would use this command in CALC_END_OF_TAPE. To be used in CAMWorks 2014
or newer version.
MILL_OPER_SETUP
Usage
Creates post questions per setup. To be used in CAMWorks 2015 SP0 or newer versions.
:OPERID=MILL_OPER_SETUP
:OPERLIST=abs inc
:OPEREND
LATHE_OPER_SETUP
Usage
Creates post questions per setup. To be used in CAMWorks 2015 SP0 or newer versions.
:OPERID=LATHE_OPER_SETUP
:OPERLIST=abs inc
:OPEREND
:STATION_NUM
Purpose
Tool station number.
Syntax
:STATION_NUM=01
Comments
This command defines the tool number.
Example
STATION_NUM=01
AUTOINDEX=NO
KEYSIZE=4
KEYED=YES
LARGEDIAM=3.000000
XWDEAD=8.000000
YHDEAD=4.000000
XLORANGE=-1.000000
YLORANGE=-1.000000
XHIRANGE=50.000000
YHIRANGE=30.000000
:AUTOINDEX
Purpose
Tool station number.
Syntax
:AUTOINDEX=YES or NO
Comments
This command defines whether this is auto indexable or not. This should be set to NO if not
a punch. This should be set to YES if punch station is auto indexable.
Example
STATION_NUM=01
AUTOINDEX=NO
KEYSIZE=4
KEYED=YES
LARGEDIAM=3.000000
XWDEAD=8.000000
YHDEAD=4.000000
XLORANGE=-1.000000
YLORANGE=-1.000000
XHIRANGE=50.000000
YHIRANGE=30.000000
:KEYSIZE
Purpose
Tool station key size.
Syntax
:KEYSIZE=4
Comments
This command defines what size the key is:
1 = .5
2 = 1.25
3 = 2.0
4 = 3.5
5 = 4.5
6 = greater than 4.5
Example
STATION_NUM=01
AUTOINDEX=NO
KEYSIZE=4
KEYED=YES
LARGEDIAM=3.000000
XWDEAD=8.000000
YHDEAD=4.000000
XLORANGE=-1.000000
YLORANGE=-1.000000
XHIRANGE=50.000000
YHIRANGE=30.000000
:KEYED
Purpose
Tool station keyed.
Syntax
:KEYED=YES or NO
Comments
This command defines if the tool is keyed. Normally, you would set this to YES.
Example
STATION_NUM=01
AUTOINDEX=NO
KEYSIZE=4
KEYED=YES
LARGEDIAM=3.000000
XWDEAD=8.000000
YHDEAD=4.000000
XLORANGE=-1.000000
YLORANGE=-1.000000
XHIRANGE=50.000000
YHIRANGE=30.000000
:LARGEDIAM
Purpose
Tool station largest diameter used.
Syntax
:LARGEDIAM=3.000000
Comments
This command defines how big a diameter tool you can use in this station.
Example
STATION_NUM=01
AUTOINDEX=NO
KEYSIZE=4
KEYED=YES
LARGEDIAM=3.000000
XWDEAD=8.000000
YHDEAD=4.000000
XLORANGE=-1.000000
YLORANGE=-1.000000
XHIRANGE=50.000000
YHIRANGE=30.000000
:XWDEAD
Purpose
Define X dead zone.
Syntax
:XWDEAD=8.000000
Comments
This command defines how big the "X" width dead zone of a punch clamp is. If the system
is not a punch, laser or plasma then it does not matter what you set this to.
Example
STATION_NUM=01
AUTOINDEX=NO
KEYSIZE=4
KEYED=YES
LARGEDIAM=3.000000
XWDEAD=8.000000
YHDEAD=4.000000
XLORANGE=-1.000000
YLORANGE=-1.000000
XHIRANGE=50.000000
YHIRANGE=30.000000
:YHDEAD
Purpose
Define Y dead zone.
Syntax
:YHDEAD=4.000000
Comments
This command defines how big the "Y" height dead zone of a punch clamp is. If the system
is not a punch, laser or plasma, you can set this to anything.
Example
STATION_NUM=01
AUTOINDEX=NO
KEYSIZE=4
KEYED=YES
LARGEDIAM=3.000000
XWDEAD=8.000000
YHDEAD=4.000000
XLORANGE=-1.000000
YLORANGE=-1.000000
XHIRANGE=50.000000
YHIRANGE=30.000000
:XLORANGE
Purpose
Define X travel low range.
Syntax
:XLORANGE=1.000000
Comments
This command defines how far to the left side of the table you can travel or how far in the X
minus direction you can travel. If the system is not a punch, plasma or laser, then you can
set this to anything.
Example
STATION_NUM=01
AUTOINDEX=NO
KEYSIZE=4
KEYED=YES
LARGEDIAM=3.000000
XWDEAD=8.000000
YHDEAD=4.000000
XLORANGE=-1.000000
YLORANGE=-1.000000
XHIRANGE=50.000000
YHIRANGE=30.000000
:YLORANGE
Purpose
Define Y travel low range.
Syntax
:YLORANGE=1.000000
Comments
This command defines how far in the Y minus direction you can travel. If the system is not
a punch, plasma or laser, then you can set this to anything.
Example
STATION_NUM=01
AUTOINDEX=NO
KEYSIZE=4
KEYED=YES
LARGEDIAM=3.000000
XWDEAD=8.000000
YHDEAD=4.000000
XLORANGE=-1.000000
YLORANGE=-1.000000
XHIRANGE=50.000000
YHIRANGE=30.000000
:XHIRANGE
Purpose
Define X travel high range.
Syntax
:XHIRANGE=50.000000
Comments
This command defines how far in the X plus direction you can travel. If the system is not a
punch, plasma or laser, then you can set this to anything.
Example
STATION_NUM=01
AUTOINDEX=NO
KEYSIZE=4
KEYED=YES
LARGEDIAM=3.000000
XWDEAD=8.000000
YHDEAD=4.000000
XLORANGE=-1.000000
YLORANGE=-1.000000
XHIRANGE=50.000000
YHIRANGE=30.000000
:YHIRANGE
Purpose
Define Y travel high range.
Syntax
:YHIRANGE=50.000000
Comments
This command defines how far in the Y plus direction you can travel. If the system is not a
punch, plasma or laser, then you can set this to anything.
Example
STATION_NUM=01
AUTOINDEX=NO
KEYSIZE=4
KEYED=YES
LARGEDIAM=3.000000
XWDEAD=8.000000
YHDEAD=4.000000
XLORANGE=-1.000000
YLORANGE=-1.000000
XHIRANGE=50.000000
YHIRANGE=30.000000
:BCL_FORMAT
Purpose
Output BCL format.
Syntax
:BCL_FORMAT=TRUE or FALSE
Comments
This command determines whether the output is BCL or not. BCL stands for Binary Cutter
Location. The file is a fixed binary output called *.BCL.
:SYSTEM
Purpose
System type.
Syntax
:SYSTEM=PUNCH
Comments
This command determines what system you are in:
PLASMA
PUNCH
PLASMA/PUNCH
LASER
EDM
LATHE
MILL
LATHE/MILL
LATHE4AX
:LEADING
Purpose
Global leading flag.
Syntax
:LEADING=TRUE or FALSE
Comments
This command determines if the code output has leading zeros or not.
:TRAILING
Purpose
Global trailing flag.
Syntax
:TRAILING=TRUE OR FALSE
Comments
This command determines if the code output has trailing zeros or not.
:DECIMAL
Purpose
Global decimal flag.
Syntax
:DECIMAL=TRUE or FALSE
Comments
This command if code output has decimals or not.
:QUAD
Purpose
Global quadrant arc flag.
Syntax
:QUAD=TRUE, FALSE, NO181 or COORD
Comments
This command determines if code output has quadrant arcs or not. I
If QUAD=TRUE, a 360 degree arc will take four blocks of code to generate that arc.
If QUAD=FALSE, a 360 degree arc will take only one block of code to generate that arc.
If QUAD=NO181, the code will generate that arc in two moves.
If QUAD=COORD, the code will generate tiny line moves set by the chord_length
attribute instead of arcs.
:SPACE
Purpose
Global spaces flag.
Syntax
:SPACE=TRUE or FALSE
Comments
This command determines if code output has spaces or not.
:ARCS
Purpose
Global arc flag.
Syntax
:ARCS=RADIAL or CENTER
Comments
This command determines if arcs will output a radial command or I's and J's.
If set to RADIAL, then arc command output will output R's.
If set to CENTER, then arc command output will output I's and J's.
:METRIC_SHIFT
Purpose
Global metric shift flag.
Syntax
:METRIC_SHIFT=1
Comments
This defines the amount of shift in the output when switching to metric.
:G_LEFT_PLACES
Purpose
Global decimal places to the left of the decimal.
Syntax
:G_LEFT_PLACES=3
Comments
This defines the decimal places to the left of the decimal.
:G_RIGHT_PLACES
Purpose
Global decimal places to the right of the decimal.
Syntax
:G_RIGHT_PLACES=3
Comments
This defines the decimal places to the right of the decimal.
:G_INT_LEFT_PLACES
Purpose
Global integer places to the left of the decimal.
Syntax
:G_INT_LEFT_PLACES=2
Comments
This defines the integer places to the left of the decimal.
:INT_LEADING
Purpose
Global integer leading flag.
Syntax
:INT_LEADING=TRUE or FALSE
Comments
This command defines if integer has leading zeros or not.
:INT_TRAILING
Purpose
Global integer trailing flag.
Syntax
:INT_TRAILING=TRUE or FALSE
Comments
This command defines if integer has trailing zeros or not.
:PQCOMP
Purpose
P and Q compensation flag.
Syntax
:PQCOMP=TRUE or FALSE
Comments
This command is reserved for future use.
:QUALIFIED_TOOLING
Purpose
External tool file.
Syntax
:QUALIFIED_TOOLING=\PROCAD\TPPL\TOOLFILE.F6M
Comments
This command can be used if you want a specific tool file with tool offset lengths. The file
has 5 fields in it.
Field 1 is a record field
Fields2 and 3 are decimal fields
Field 4 is an integer field
Field 5 is a character field.
Commas are used as delimiters.
Example
Below is an example of what the file might have in it.
**********************************************
** Z Feed X Feed RPM Comment
**-------------------------------------------
*1, 5, 10, 1200, 1" End Mill *
*2, 6.375, 12.5, 1100, 2" Ball Nose *
**************************************************
:SINGLE_MACROS
Purpose
Single macro flag.
Syntax
:SINGLE_MACROS=YES or NO
Comments
This command defines if post can output single macro calls.
:MIRROR_MACROS
Purpose
Mirror macro flag.
Syntax
:MIRROR_MACROS=YES or NO
Comments
This command is reserved for future use.
:MACROS_REDEFINE
Purpose
Redefine macro flag.
Syntax
:MACROS_REDEFINE=YES or NO
Comments
This command determines if a macro has to be redefined each time it is called.
:MULT_MACROS
Purpose
Multiple macro flag.
Syntax
:MULT_MACROS=YES or NO
Comments
This command defines if post can output multiple macro calls.
:LAYOUT_MACROS
Purpose
Layout of macro's flag.
Syntax
:LAYOUT_MACROS=YES or NO
Comments
This command defines if post can output multiple macro calls.
:MACROS_CALL
Purpose
Calling single macro flag.
Syntax
:MACROS_CALL=BEFORE or AFTER
Comments
This command defines if post will call a single macro before or after the subroutine. Used
only if MACROS_MAIN=DURING.
:MACROS_MULT
Purpose
Calling multiple macro flag.
Syntax
:MACROS_MULT=BEFORE or AFTER
Comments
This command defines if post will call a single macro before or after the subroutine. Used
only if MACROS_MAIN=DURING.
:MACROS_LAYOUT
Purpose
Macro layout flag.
Syntax
:MACROS_LAYOUT=BEFORE or AFTER
Comments
This command defines if post will call a section called
CALC_MULTIPLE_MACRO_DEFINE_PUNCH.
:MACROS_MAIN
Purpose
Subroutine call flag.
Syntax
:MACROS_MAIN=BEFORE, DURING or AFTER
Comments
This command defines if the subroutine will be called before, after or during the main
program.
:MACROS_OUT
Purpose
Macro output flag.
Syntax
:MACROS_OUT=CALLED or NESTED
Comments
If set to CALLED, then the output will be in the order it was created in CAD.
If set to NESTED, then output will be in the reverse order.
:MACROS_TAPE
Purpose
Macro output flag.
Syntax
:MACROS_TAPE=SAME or SEPARATE
Comments
If set to SAME, then the output will be in the same file *.TXT.
If set to SEPARATE, then output of subroutine will be in a file called *.SUB.
:MACROS_XYZ
Purpose
Allow Z axis in macros.
Syntax
:MACROS_XYZ=TRUE or FALSE
Comments
This command allows the Z axis to step and repeat in a macro. This can only be done in
Mill.
:MACRO_ROTATE
Purpose
Allow macro rotation.
Syntax
:MACRO_ROTATE=TRUE or FALSE
Comments
If you set to MACRO_ROTATE_X=FALSE, MACRO_ROTATE_Y=FALSE and
MACRO_ROTATE_Z=FALSE, then XY numbers will rotate instead OD an angle. This
can only be done in Mill.
:MACRO_ROTATE_X
Purpose
Allow X axis rotation.
Syntax
:MACRO_ROTATE_X=TRUE or FALSE
Comments
Allows macro to rotate about the X axis. This can only be done in Mill.
:MACRO_ROTATE_Y
Purpose
Allow Y axis rotation.
Syntax
:MACRO_ROTATE_Y=TRUE or FALSE
Comments
Allows macro to rotate about the Y axis. This can only be done in Mill.
:MACRO_ROTATE_Z
Purpose
Allow Z axis rotation.
Syntax
:MACRO_ROTATE_Z=TRUE or FALSE
Comments
Allows macro to rotate about the Z axis. This can only be done in Mill.
:EDM4AXIS
Purpose
EDM 4 axis definition.
Syntax
:EDM4AXIS=TRUE or FALSE
Comments
Defines whether this post can do X,Y,U,V 4-axis output. This can only be done in EDM.
:TAPER
Purpose
EDM 2 axis taper definition.
Syntax
:TAPER=TRUE or FALSE
Comments
Defines whether this post can do 2 axis with taper output. This can only be done in EDM.
:ARC_TO_ARC
Purpose
EDM 4 axis arc definition.
Syntax
:ARC_TO_ARC=TRUE or FALSE
Comments
Defines whether this post can do 4 axis GO2 or GO3 output if top and bottom surface arcs
have equal radii. This can only be done in EDM.
:SHARP_CORNER
Purpose
EDM 2 axis corner definition.
Syntax
:SHARP_CORNER=TRUE or FALSE
Comments
Defines whether this post can do 2 axis sharp corners. This can only be done in EDM.
:EQUAL_CORNER
Purpose
EDM 2 axis corner definition.
Syntax
:EQUAL_CORNER=TRUE or FALSE
Comments
Defines whether this post can do 2 axis equal corners. This can only be done in EDM.
:INDEPENDENT_CORNER
Purpose
EDM 2 axis corner definition.
Syntax
:INDEPENDENT_CORNER=TRUE or FALSE
Comments
Defines whether this post can do 2 axis independent corners. This can only be done in
EDM.
:CONIC_CORNER
Purpose
EDM 2 axis corner definition.
Syntax
:CONIC_CORNER=TRUE or FALSE
Comments
Defines whether this post can do 2 axis conic corners. This can only be done in EDM.
:CHAMFER_CORNER
Purpose
EDM 2 axis corner definition.
Syntax
:CHAMFER_CORNER=TRUE or FALSE
Comments
Defines whether this post can do 2 axis chamfer corners. This can only be done in EDM.
:TAPER_DURING
Purpose
EDM 2 axis corner definition.
Syntax
:TAPER_DURING=TRUE or FALSE
Comments
Defines whether this post can do 2 axis taper during a move. This can only be done in
EDM.
:LOOK_AHEAD
Purpose
EDM look ahead definition.
Syntax
:LOOK_AHEAD=1
Comments
Defines how many entities to look ahead for compensation. This can only be done in EDM.
:TAPER_FILLET
Purpose
EDM taper fillet definition.
Syntax
:TAPER_FILLET=TRUE or FALSE
Comments
Defines if controller can do taper filleting. This can only be done in EDM.
:LIVE_Y_AXIS
Purpose
Lathe/Mill Y axis definition.
Syntax
:LIVE_Y_AXIS=TRUE or FALSE
Comments
Defines if controller can do Y axis moves in Live C post. This can only be done in
Lathe/Mill.
:OD_MILL
Purpose
Lathe/Mill OD mill definition.
Syntax
:OD_MILL=FREE, FIXED or BOTH
Comments
Defines if the rotation axis on OD milling can be free, fixed or both free and fixed. This can
only be done in Lathe/Mill.
:OD_DRILL
Purpose
Lathe/Mill OD drill definition.
Syntax
:OD_DRILL=FREE, FIXED or BOTH
Comments
Defines if the rotation axis on OD drilling can be free, fixed or both free and fixed. This can
only be done in Lathe/Mill.
:OD_ARC
Purpose
Lathe/Mill OD arc definition.
Syntax
:OD_ARC=FREE, FIXED or BOTH
Comments
Defines if the rotation axis on OD arcs can be free, fixed or both free and fixed. This can
only be done in Lathe/Mill.
:FACE_MILL
Purpose
Lathe/Mill Face mill definition.
Syntax
:FACE_MILL=FREE, FIXED or BOTH
Comments
Defines if the rotation axis on face milling can be free, fixed or both free and fixed. This
can only be done in Lathe/Mill.
:FACE_DRILL
Purpose
Lathe/Mill Face drill definition.
Syntax
:FACE_DRILL=FREE, FIXED or BOTH
Comments
Defines if the rotation axis on face drilling can be free, fixed or both free and fixed. This
can only be done in Lathe/Mill.
:FACE_ARC
Purpose
Lathe/Mill Face arc definition.
Syntax
:FACE_ARC=FREE, FIXED or BOTH
Comments
Defines if the rotation axis on face arcs can be free, fixed or both free and fixed. This can
only be done in Lathe/Mill.
:LATHE
Purpose
Mill 4th axis lathe definition.
Syntax
:LATHE=TRUE or FALSE
Comments
This command should be set to FALSE if doing a mill 4th axis cutting post.
:5AXIS_MILLING
Purpose
Allows access to 5 axis milling.
Syntax
:5AXIS_MILLING=TRUE or FALSE
Comments
This command should be set to FALSE if not using 5 axis work. This can only be done in
3D CAD.
:4AXIS_X_MILLING
Purpose
Allows access to 4 axis milling.
Syntax
:4AXIS_X_MILLING=TRUE or FALSE
Comments
This command should be set to FALSE if not using 4 axis work.
This command should be set to TRUE if rotating about the X axis.
This can only be done in 3D CAD.
:4AXIS_Y_MILLING
Purpose
Allows access to 4 axis milling.
Syntax
:4AXIS_Y_MILLING=TRUE or FALSE
Comments
This command should be set to FALSE if not using 4 axis work.
This command should be set to TRUE if rotating about the Y axis.
This can only be done in 3D CAD.
:HELICAL
Purpose
This command allows helical arc moves at start of profile.
Syntax
:HELICAL=TRUE or FALSE
Comments
This command is reserved for future use.
:MAXIMUM_LINE
Purpose
This command lets you set the maximum line length of *.TXT files.
Syntax
:MAXIMUM_LINE=100
Comments
The system default for this command is 100. If 100 is not a problem, then you can leave this
command out of your source.
:USE_SPECIAL_TOOL_TYPE
Purpose
This command allows special tooling.
Syntax
:USE_SPECIAL_TOOL_TYPE=TRUE or FALSE
Comments
If not using special tool type, set this command to FALSE.
If this command is set to TRUE, a special tool dialog box displays.
:SLOW_INDEXER
Purpose
Allows optimized autoindex output.
Syntax
:SLOW_INDEXER=TRUE or FALSE
Comments
If this command should be set to TRUE, the system will generate optimized autoindex
angles. It will punch all entities with the same autoindex angle, then go to the next
autoindex angle, then the next until finished.
:SORT_BY_TURRET
Purpose
For use with 2 or more turrets in turn or mill turn post.
If set to FALSE operations are posted out as operation tree order.
If set to TRUE operations are posted out with all rear turret operations first then the front
turret operations.
Syntax
:SORT_BY_TURRET=TRUE or FALSE
Comments
This command should be set to FALSE if not using 2 or more turrets.
This command can be set to TRUE if using 2 or more turrets and output needs to be in
separate files.
:SINGLE_Y_AXIS_DIRECTION
Purpose
To be used with Mill/Turn posts.
Syntax
:SINGLE_Y_AXIS_DIRECTION=TRUE or FALSE
Comments
If this is set to “TRUE then this will allow the new system changes to the Main and sub
spindle Y axis direction to be transferred to the post as corrected values If this is set to
“FALSE” then it assumes the post will make all the corrected changes manually to the
posted output. If this header is not in the post then it assumes “FALSE” and the post will
work as originally built.
GENERIC_POST
Purpose
Can be used with any post
Syntax
:GENERIC_POST=TRUE or FALSE
Comments
Set to “TRUE” if post will be used as a generic post for Eureka standard APT output. To be
used in CAMWorks 2014 or newer version.
System Variables
DISPLACED_Z
TOOL_DIAMETER
Y_AXIS
I_AXIS
J_AXIS
K_AXIS
ABS_PRESET_X
ABS_PRESET_Y
ABS_PRESET_Z
ABS_PRESET_C
X_START_POSITION
Z_START_POSITION
ATTRLVALUE
OPR_LOOKAHEAD
Name Value
CENTER 0
RADIAL 1
ARCS 0
NO 0
YES 1
OFF 0
ON 1
F 0
T 1
FALSE 0
TRUE 1
ZERO 0
LEFT 1
RIGHT 2
HORIZONTAL 1
VERTICAL 0
MPOINT POINT
MLINE LINE
MCW_ARC ARC | ARC_DIR
MCCW_ARC ARC
MARC ARC
MCIRCLE CIRCLE
MTEXT 0x10
MGRID 0x10
LINE 1
CW_ARC 2
CCW_ARC 3
RAPID 4
SINGLE_HIT 5
ABSOLUTE 1
INCREMENTAL 2
HALF_CIRCLE 180
FULL_CIRCLE 360
NONE 0
ENGLISH 1
METRIC 2
MILL MILL
Name Value
LATHE LATHE
PUNCH PUNCH
PLASMA PLASMA
LASER LASER
EDM EDM
WASINO WASINO
JIG JIG
BOTH 0
SHARP_CORNER 1009
EQUAL_CORNER 1010
INDEPENDENT_CORNER 2010
CONIC_CORNER 1011
CHAMFER_CORNER 2009
EDM4AXIS 1
TAPER 2
PROFILE 1
TABCUT 2
OFFSET_LEFT 0
OFFSET_RIGHT 1
CENTER_LEFT 2
CENTER_RIGHT 3
Z_DEPTH 1
Z_WALL 2
Z_EXTRUDE 3
DIST_ALONG 2
SINGLE 1
MULTIPLE 2
CW 1
CCW 2
FPR 1
FPM 2
SFPM 1
RPM 2
SYSTEM 1
MACHINE 2
TIP 0
FLAT 1
CONSTANT 1
PERCENTAGE 2
SINGLE_DEPTH 0
SINGLE_RETRACT 1
Name Value
MULTIPLE_RETRACT 0
TURNING 0
FACING 1
CONSTANT_DEPTH 0
CONSTANT_CUT 1
STRAIGHT_INFEED 0
ANGLE_INFEED 1
ROUND_CORNERS 0
SHARP_CORNERS 1
SQUARE_CORNERS 2
TRIANGLE_CORNERS 3
FANUC_CORNERS 4
DRILLING 1
SPOT_DRILLING 2
PECKING 3
TAPPING 4
BORING 5
HIGH_SPEED_PECKING 6
VARIABLE_PECKING 7
REVERSE_TAPPING 8
REAMING_DWELL 10
REAMING 9
BORE_DWELL 11
BACK_BORING 12
FINE_BORING 13
CLEARANCE_PLANE 1
RAPID_PLANE 2
FRONT 1
REAR 2
HOME 2
XZPOS 1
CFIXED 2
CFREE 1
MILL_OD 256
MILL_FACE 512
X_AXIS 7
Y_AXIS 8
Z_AXIS 6
ROUND 1
RECTANGLE 2
TRIANGLE 3
Name Value
CROSS 4
OBROUND 5
SQUARE 6
RECRAD 7
DOUBLED 8
SINGLED 9
SPETOOL 10
PREVIOUS 1
NEXT 2
CURRENT 0
FLAT_BOTTOM 1
HEELED 2
SHEAR_PROOF 3
LOUVER 4
FORM 5
MARKING 6
OPSETUP_AXIS_ANGLE 1
OPSETUP_AXIS_WORKPIECE_AUTOMATIC 2
OPSETUP_AXIS_EDGE 3
OPSETUP_AXIS_SKETCH 4
OPSETUP_AXIS_ASM_FCS 4
SIDE_EDGE 0
END_EDGE 1
HAVE_SYNC_CODE_ERROR 1
SYNC_CODE_UNKNOWN 0
SYNC_CODE_BEFORE_START 1
SYNC_CODE_BEFORE_FIRST_MOVE 2
SYNC_CODE_AFTER_END 3
LOCK 2
SYNC_SPEED 0
SYNC_PHASE 1
CAM_REV2011 110
CAM_REV2011_SP1 111
CAM_REV2011_SP2 112
CAM_REV2012 120
CAM_REV2012_SP1 121
CAM_REV2012_SP2 122
CAM_REV2012_PLUS 125
CAM_REV2013 130
CAM_REV2013_SP1 131
CAM_REV2013_SP2 132
Name Value
CAM_REV2013_SP3 133
CAM_REV2014 140
Name Value
CAM_REV2011_SP1 111
CAM_REV2011_SP2 112
CAM_REV2012 120
CAM_REV2012_SP1 121
CAM_REV2012_SP2 122
CAM_REV2012_PLUS 125
CAM_REV2013 130
CAM_REV2013_SP1 131
CAM_REV2013_SP2 132
CAM_REV2013_SP3 133
CAM_REV2014 140
CAM_REV2014_SP0.1 141
CAM_REV2014_SP1 142
UNLOCK 3
ENGAGE_MILL_MODE 4
DISENGAGE_MILL_MODE 5
SYNC_OFF 2
SYNC_MILL_CAXIS 3
SYNC_MILL_OFF 4
CAM_REV2014_SP2 143
CAM_REV2014_SP3 144
CAM_REV2015 150
CAM_REV2015_SP1 151
Example 1
Adding a Setup Question and Using its Value to Change the
Output
1. Make sure you copy the original source files to a folder where you can copy them back
into this folder (master.atr, class.src and class.lib).
2. Add an attribute to (master.atr) called “head position”. This attribute will be a select
type as described below. You will place it after ID number 17501.
*-----------------------------------
:ATTRNAME=shots to be fired
:ATTRTYPE=VALUE
:ATTRVTYPE=DECIMAL
:ATTRID=17501
:ATTREND
*-------
:ATTRNAME=head position ----------------- Attrname
:ATTRTYPE=SELECT
:ATTRID=17502 --------------------------- New ID number
:ATTREND
*:ATTRLIST=chord length
*:ATTRLISTDEF=.01
:ATTRLIST=material_type
:ATTRLISTDEF=
:ATTRLIST=head position ----------- Add this line
:ATTRLISTDEF=1 -------------------- Add this line
:ATTRUSED=1
:ATTRDEFAULT=1
:ATTREND
6. Open (class.lib) file and add the new attribute “head position” that you created in
(master.atr). Even though you defined it in (master.atr), you still need to define it in the
library file. See below for position.
:ATTRTITLE=Material Type
:ATTRSELSTR=Rolled Steel
:ATTRSELSTR=Aluminum
:ATTRSELSTR=Stainless Steel
:ATTRDEFAULT=1
:ATTRUSED=1
:ATTREND
*-----------------------------------
:ATTRNAME=CURRENT MACRO NAME
:ATTRTYPE=POST
:ATTREMARK=
:CODETYPE=FORMAT
:WORD_ADDRESS_BEF=|(
:VAR=CURRENT MACRO NAME
:WORD_ADDRESS_AFT=)
:LEFT_PLACES=0
:RIGHT_PLACES=0
:UNITFLAG=NON_CONVERT
:ATTRSPACES=YES
*:MODAL=YES
:ATTRUSED=1
:ATTREND
*-----------------------------------
:SECTION=CALC_INIT_TOOL_CHANGE_MILL
:C: IF SECTIONEXIST(DEBUG) THEN
:C: DEBUG=4 CALL(DEBUG)
:C: ENDIF
*
*:C: IF OPER_COUNT>1 THEN CALL(CALC_SUB_TOOL_CHANGE_MILL) RETURN
ENDIF
:C: IF MACH(REG_T2)<>0 THEN CALL(CALC_SUB_TOOL_CHANGE_MILL) RETURN
ENDIF
*
* If you are defining a macro then you stop here!
*
:C: P_MOVE_TYPE=TOOL_CHANGE
:C: IF DEFINING_MACRO=(YES) THEN CALL(CALC_CHECK_OPER_COMMENTS)
RETURN ENDIF
:C: IF MACH(REG_T)<>0 AND MACH(REG_T)=TOOL THEN RETURN ENDIF
:C: CALC_CHANGE_TOOL=1
:C: TOOL_ARRAY(ARRAY_COUNT)=NC_TOOL
:C: TOOL_DIAM_ARRAY(ARRAY_COUNT)=NC_TOOL_DIAMETER
:C: IF NC_TOOL=(-1) THEN
TOOL_DIAM_ARRAY(ARRAY_COUNT)=TOOL_DIAM_ARRAY(0) ENDIF
:C: NEXT_TOOL=TOOL_ARRAY(ARRAY_COUNT)
:C: POT_NUMBER=10
:C: IF TOOL_DIAMETER>LARGE_POT THEN POT_NUMBER=90 ENDIF
:C: NEXT_POT_NUMBER=10
:C: IF TOOL_DIAM_ARRAY(ARRAY_COUNT)>LARGE_POT THEN
NEXT_POT_NUMBER=90 ENDIF
:C: ARRAY_COUNT=(ARRAY_COUNT+1)
:C: IF SECTIONEXIST(OUTPUT_ESTIMATED_TIME) THEN
:C: CALL(CALC_TOOL_CHANGE_TIME)
:C: ENDIF
:C: IF TOOL_COMMENT={} THEN
:C: SETOFF(<TOOL_COMMENT>) ELSE
:C: SETON(<TOOL_COMMENT>)
:C: ENDIF
:C: IF head_position=1 THEN HEAD_P=101 ENDIF ---- Add these lines
:C: IF head_position=2 THEN HEAD_P=102 ENDIF
:C: IF head_position=3 THEN HEAD_P=103 ENDIF ---------- To here
:C: IF SECTIONEXIST(INIT_PRELOAD_TOOL_CHANGE_MILL) THEN
:C: CALL(CALC_INIT_PRELOAD_TOOL_CHANGE)
:C: CALL(CALC_CHECK_OPER_COMMENTS)
:C: MACH(REG_T)=TOOL
:C: FIRST_TOOL=TOOL
:C: LAST_TOOL=TOOL
:C: RETURN
:C: ENDIF
:C: IF SECTIONEXIST(INIT_TOOL_CHANGE_MILL) THEN
:C: CALL(INIT_TOOL_CHANGE_MILL)
:C: ENDIF
:C: CALL(CALC_CHECK_OPER_COMMENTS)
:C: MACH(REG_T)=TOOL
:C: FIRST_TOOL=TOOL
:C: LAST_TOOL=TOOL
10. Now assuming you put master.atr in the same folder as your source, you can save all the
files you edited and exit your editor.
To compile, you will need to type this at your DOS prompt –
WINMAKE CLASS.SRC MASTER.ATR ?:\PROCAD\CTL.
If you have installed the UPG, then you can compile the source in the UPG by selecting
the File menu and picking the Compile Post command.
Example 2
Adding an Operation Question and Using its Value to Change
the Output
1. If you want to save the previous example, then copy the source files (master.atr,
class.src and class.lib) to a save folder and recopy the original files back into the class
folder.
2. Add an attribute to (master.atr) called “changing pallets”. This attribute will be a select
type as described below. You will place it after ID number 17502
*-----------------------------------
:ATTRNAME=shots to be fired
:ATTRTYPE=VALUE
:ATTRVTYPE=DECIMAL
:ATTRID=17501
:ATTREND
*-------
:ATTRNAME=changing pallets ----------------- Attrname
:ATTRTYPE=SELECT
:ATTRID=17502 ------------------------------ New ID number
:ATTREND
*----------------------------------------------------------
* Operation List Questions
*----------------------------------------------------------
:OPERID=MILL_DRILLING
:OPERSUB=DRILLING
:OPERLIST=abs inc
:OPERLIST=work coord
:OPERLIST=coolant
6. Open (class.lib) file and add the new attribute “changing pallets” you created in
(master.atr). Even though you defined it in (master.atr), you still need to define it in the
library file. See below for position.
*-----------------------------------
:ATTRNAME=CURRENT MACRO NAME
:ATTRTYPE=POST
:ATTREMARK=
:CODETYPE=FORMAT
:WORD_ADDRESS_BEF=|(
:VAR=CURRENT MACRO NAME
:WORD_ADDRESS_AFT=)
:LEFT_PLACES=0
:RIGHT_PLACES=0
:UNITFLAG=NON_CONVERT
:ATTRSPACES=YES
*:MODAL=YES
:ATTRUSED=1
:ATTREND
*---------------------------- ------------- Add these lines
:ATTRNAME=P CHANGE
:ATTRTYPE=POST
:ATTRVTYPE=INTEGER
:ATTREMARK=Pallet Change
:CODETYPE=SELECT
:SELECT=2
:CODE=M51
:SELECT=3
:CODE=M52
:ATTREND ---------------------------------- To here
8. Now you need to add some logic to handle the output. You need to have this happen at
every tool change, so you have to change the calc sections
:SECTION=CALC_INIT_TOOL_CHANGE_MILL and
:SECTION=CALC_SUB_TOOL_CHANGE_MILL. Since both of these sections are not in
(class.lib), you have to copy them from (general.lib) to the end of (class.lib). See below
for position.
*-----------------------------------
:SECTION=CALC_INIT_TOOL_CHANGE_MILL
:C: IF SECTIONEXIST(DEBUG) THEN
:C: DEBUG=4 CALL(DEBUG)
:C: ENDIF
*
*:C: IF OPER_COUNT>1 THEN CALL(CALC_SUB_TOOL_CHANGE_MILL) RETURN
ENDIF
:C: IF MACH(REG_T2)<>0 THEN CALL(CALC_SUB_TOOL_CHANGE_MILL) RETURN
ENDIF
*
* If you are defining a macro then you stop here!
*
:C: P_MOVE_TYPE=TOOL_CHANGE
:C: IF DEFINING_MACRO=(YES) THEN CALL(CALC_CHECK_OPER_COMMENTS)
RETURN ENDIF
:C: IF MACH(REG_T)<>0 AND MACH(REG_T)=TOOL THEN RETURN ENDIF
:C: CALC_CHANGE_TOOL=1
:C: TOOL_ARRAY(ARRAY_COUNT)=NC_TOOL
:C: TOOL_DIAM_ARRAY(ARRAY_COUNT)=NC_TOOL_DIAMETER
:C: IF NC_TOOL=(-1) THEN
TOOL_DIAM_ARRAY(ARRAY_COUNT)=TOOL_DIAM_ARRAY(0) ENDIF
:C: NEXT_TOOL=TOOL_ARRAY(ARRAY_COUNT)
:C: POT_NUMBER=10
:C: IF TOOL_DIAMETER>LARGE_POT THEN POT_NUMBER=90 ENDIF
:C: NEXT_POT_NUMBER=10
:C: IF TOOL_DIAM_ARRAY(ARRAY_COUNT)>LARGE_POT THEN
NEXT_POT_NUMBER=90 ENDIF
:C: ARRAY_COUNT=(ARRAY_COUNT+1)
:C: IF SECTIONEXIST(OUTPUT_ESTIMATED_TIME) THEN
:C: CALL(CALC_TOOL_CHANGE_TIME)
:C: ENDIF
:C: IF TOOL_COMMENT={} THEN
:C: SETOFF(<TOOL_COMMENT>) ELSE
:C: SETON(<TOOL_COMMENT>)
:C: ENDIF
:C: P_CHANGE=changing_pallets ------ ----------- Add this line
:C: IF SECTIONEXIST(INIT_PRELOAD_TOOL_CHANGE_MILL) THEN
:C: CALL(CALC_INIT_PRELOAD_TOOL_CHANGE)
:C: CALL(CALC_CHECK_OPER_COMMENTS)
:C: MACH(REG_T)=TOOL
:C: FIRST_TOOL=TOOL
:C: LAST_TOOL=TOOL
:C: RETURN
:C: ENDIF
:C: IF SECTIONEXIST(INIT_TOOL_CHANGE_MILL) THEN
:C: CALL(INIT_TOOL_CHANGE_MILL)
:C: ENDIF
:C: CALL(CALC_CHECK_OPER_COMMENTS)
:C: MACH(REG_T)=TOOL
:C: FIRST_TOOL=TOOL
:C: LAST_TOOL=TOOL
*
:SECTION=CALC_SUB_TOOL_CHANGE_MILL
:C: IF SECTIONEXIST(DEBUG) THEN
:C: DEBUG=5 CALL(DEBUG)
:C: ENDIF
*
* Startup Seton Codes
*
:C: CALL(CALC_BEF_SETON_CODES)
:C: G=GC(G_LEN_COMP) SETON(<G>)
:C: M=MC(M_COOL_OFF) SETON(<M>)
*
* If you are defining a macro then you stop here!
*
:C: P_MOVE_TYPE=TOOL_CHANGE
:C: IF DEFINING_MACRO=(YES) THEN CALL(CALC_CHECK_OPER_COMMENTS)
RETURN ENDIF
:C: IF MACH(REG_T)<>0 AND MACH(REG_T)=TOOL THEN RETURN ENDIF
:C: CALC_CHANGE_TOOL=(CALC_CHANGE_TOOL+1)
:C: IF OFFSET_RESIDENT=YES THEN CALL(CALC_REMOVE_OFFSET) ENDIF
:C: IF TOOL=NC_TOOL THEN NC_TOOL=(-1) ENDIF
:C: TOOL_ARRAY(ARRAY_COUNT)=NC_TOOL
:C: TOOL_DIAM_ARRAY(ARRAY_COUNT)=NC_TOOL_DIAMETER
:C: IF NC_TOOL=(-1) THEN
TOOL_DIAM_ARRAY(ARRAY_COUNT)=TOOL_DIAM_ARRAY(0) ENDIF
:C: NEXT_TOOL=TOOL_ARRAY(ARRAY_COUNT)
:C: POT_NUMBER=10
:C: IF TOOL_DIAMETER>LARGE_POT THEN POT_NUMBER=90 ENDIF
:C: NEXT_POT_NUMBER=10
:C: IF TOOL_DIAM_ARRAY(ARRAY_COUNT)>LARGE_POT THEN
NEXT_POT_NUMBER=90 ENDIF
:C: ARRAY_COUNT=(ARRAY_COUNT+1)
:C: CALL(CALC_TOOL_CHANGE_TIME)
:C: IF TOOL_COMMENT={} THEN
:C: SETOFF(<TOOL_COMMENT>) ELSE
:C: SETON(<TOOL_COMMENT>)
:C: ENDIF
:C: P_CHANGE=changing_pallets -------------------- Add this line
:C: IF SECTIONEXIST(SUB_PRELOAD_TOOL_CHANGE_MILL) THEN
:C: CALL(CALC_SUB_PRELOAD_TOOL_CHANGE)
:C: CALL(CALC_CHECK_OPER_COMMENTS)
:C: CALL(CALC_AFT_SETON_CODES)
:C: MACH(REG_T)=TOOL
:C: LAST_TOOL=TOOL
:C: MACH(REG_Z)=MILL_Z_HOME
:C: RETURN
:C: ENDIF
:C: IF SECTIONEXIST(SUB_TOOL_CHANGE_MILL) THEN
:C: CALL(SUB_TOOL_CHANGE_MILL)
:C: ENDIF
:C: CALL(CALC_CHECK_OPER_COMMENTS)
:C: CALL(CALC_AFT_SETON_CODES)
:C: MACH(REG_T)=TOOL
:C: LAST_TOOL=TOOL
:C: MACH(REG_Z)=MILL_Z_HOME
9. Assuming you put master.atr in the same folder as your source, you can save all the files
you edited and exit your editor.
To compile you will need to type this at your DOS prompt –
WINMAKE CLASS.SRC MASTER.ATR [Drive]:\PROCAD\CTL.
If you have installed the UPG, then you can compile the source in the UPG by selecting
the File menu and picking "Compile Post".
Example 3
Adding an Operation Question and Using its Value to Change
the Output Depending on if it is Modal or Not
1. If you want to save the previous example, copy the source files (master.atr, class.src
and class.lib) to a save folder and recopy the original files back into the class folder.
2. You are going to add an attribute to (class.lib) called “spindle range”. Since this
attribute is already defined in (master.atr), you do not have to edit (master.atr). Add
“spindle range” to (class.lib) as shown below.
3. Open (class.src) and add the new attrname you created to all the operation lists as shown
below.
Since this question will be asked in the operation list, then the value is valid for that
operation only. Make sure you add the line to all the :OPERID= (Operations). If you add
it to just the Drilling one in the example below, then the drilling operation is the only
operation that will get the question asked.
*----------------------------------------------------------
* Operation List Questions
*----------------------------------------------------------
:OPERID=MILL_DRILLING
:OPERSUB=DRILLING
:OPERLIST=abs inc
:OPERLIST=work coord
:OPERLIST=coolant
:OPERLIST=spindle range -- Add this line to all “:OPERID=” lists
:OPEREND
:SECTION=CALC_INIT_MCODES
*------------------------------------------------------------------------*
* M Code M Group M Modal *
*------------------------------------------------------------------------*
:C: MC(M_STOP) = 0 MG(M_STOP) = 0 MM(M_STOP) = NO
:C: MC(M_OPT_STOP) = 1 MG(M_OPT_STOP) = 0 MM(M_OPT_STOP) = NO
:C: MC(M_PROG_END) = 2 MG(M_PROG_END) = 0 MM(M_PROG_END) = NO
:C: MC(M_SPIN_CW) = 3 MG(M_SPIN_CW) = 1 MM(M_SPIN_CW) = YES
:C: MC(M_SPIN_CCW) = 4 MG(M_SPIN_CCW) = 1 MM(M_SPIN_CCW) = YES
:C: MC(M_SPIN_STOP) = 5 MG(M_SPIN_STOP) = 1 MM(M_SPIN_STOP) = YES
:C: MC(M_TOOL_CHANGE = 6 MG(M_TOOL_CHANGE) = 0 MM(M_TOOL_CHANGE) = NO
:C: MC(M_COOL_MIST) = 7 MG(M_COOL_MIST) = 2 MM(M_COOL_MIST) = YES
:C: MC(M_COOL_FLOOD) = 8 MG(M_COOL_FLOOD) = 2 MM(M_COOL_FLOOD) = YES
:C: MC(M_COOL_OFF) = 9 MG(M_COOL_OFF) = 2 MM(M_COOL_OFF) = YES
:C: MC(M_LOCK_OFF) = 10 MG(M_LOCK_OFF) = 3 MM(M_LOCK_OFF) = YES
:C: MC(M_LOCK_ON) = 11 MG(M_LOCK_ON) = 3 MM(M_LOCK_ON) = YES
:C: MC(M_ORIENT) = 19 MG(M_ORIENT) = 0 MM(M_ORIENT) = NO
:C: MC(M_SPIN_LOW) = 40 MG(M_SPIN_LOW) = 4 MM(M_SPIN_LOW) = YES
:C: MC(M_SPIN_HI) = 41 MG(M_SPIN_HI) = 4 MM(M_SPIN_HI) = YES
:C: MC(M_END_PROG) = 30 MG(M_END_PROG) = 0 MM(M_END_PROG) = NO
:C: MC(M_SUB_CALL) = 98 MG(M_SUB_CALL) = 0 MM(M_SUB_CALL) = NO
:C: MC(M_SUB_END) = 99 MG(M_SUB_END) = 0 MM(M_SUB_END) = NO
6. Assuming you put master.atr in the same folder as your source, you can save all the files
you edited and exit your editor.
7. To compile you will need to type this at your DOS prompt –
WINMAKE CLASS.SRC MASTER.ATR ?:\PROCAD\CTL.
If you have installed the UPG, then you can compile the source in the UPG by selecting
the File menu and picking "Compile Post".
WORLD_POSITIONING
Purpose
Allows world coordinate posted output when indexing in 4 and 5 axis assembly parts using
CAMWorks 2005 or newer versions.
Syntax
:WORLD_POSITIONING=TRUE or FALSE
Comments
This command should be set to FALSE if you no not need world coordinate posted output
in 4 and 5 axis indexing.
This command should be set to TRUE if you need world coordinate posted output in 4 and 5
axis indexing, which means that the posted output will not translate the numbers when
indexing to another plane.
RIGHT_ANGLE_SHEAR_ATTACHED
Purpose
Allows the system to exit into Shear for a combination PUNCH/SHEAR machine.
Syntax
:RIGHT_ANGLE_SHEAR_ATTACHED=TRUE or FALSE
Comments
This command should be set to FALSE if you don’t need shear.
This command should be set to TRUE if you need shear and even though the post
“:SYSTEM=PUNCH” you can use this header command to exit into shear.
LASER_PLASMA_CUT_DATA
Purpose
Allows the laser and plasma systems to use the external fabrication database for special
cutting parameters while posting.
Syntax
:LASER_PLASMA_CUT_DATA=TRUE or FALSE
Comments
This command should be set to FALSE if you don’t need special cutting parameters output
to the post.
This command should be set to TRUE if you need special cutting parameters output to the
post. The files that are used when accessing the data are “FABDBENGLISH.MDB” in Inch
or “FABDBMETRIC.MDB” in metric. The post needs to be setup to use this function. See
using access database in the online help.
VECTOR_COMP
Purpose
Allows a CAMWorks mill post to output X,Y,Z,I, and J in vector coordinates.
Syntax
:VECTOR_COMP=TRUE or FALSE
Comments
This command should be set to FALSE if you do not need vector coordinates output.
This command should be set to TRUE if you need vector coordinates output. This will only
apply in the CAMWorks advanced cutting operations. The post system variable
“V_COMP” will be set to “0” if operations not using this option and will be set to “1” if it
is. Post system variables “XC”, “YC”, “ZC”, “IC”, “JC” and “KC” hold endpoints for the
posted output. XC=ABS_X_END, YC=ABS_Y_END, ZC=ABS_Z_END, IC=I_VECTOR,
JC=J_VECTOR and KC=K_VECTOR.
NO_SET_FILE
Purpose
Allows the posted *.set file to be created or not.
Syntax
:NO_SET_FILE=TRUE or FALSE
Comments
This command should be set to FALSE if you want the *.set file to be created every time
you post. If you do not want the *.set file to be created then this needs to be set to TRUE.
TRAPDOOR
Purpose
Allows post to create an auto Open Chute to be attached to a closed boundary.
Command
:TRAPDOOR=FALSE, DROP or TILT
Comments
This command should be set to FALSE if you do not have a trap door. If you have a trap
door you can set this to DROP or TILT depending on the style of the machines trap door.
Only one style of trap door can be set per post.
MOVE_CLAMP
Purpose
Allows punch system to move a clamp manually and then passes information to the post for
output.
Command
:MOVE_CLAMP=TRUE or FALSE
Comments
This command should be set to FALSE if you do not have a machine that supports
commands to move the clamps.
Set this command to TRUE if you have a machine that supports output code to move the
clamps.
When you trigger a clamp move it is then passed to the punch post calc section
CALC_MOVE_CLAMPS. It stores the clamp positioned amount in absolute numbers only in
post system variables CLAMP1_POSITION, CLAMP2_POSITION,
CLAMP3_POSITION, CLAMP4_POSITION. Up to 4 clamps are supported for this
command.
SORTER_ARM
Purpose
Allows Laser, Plasma or Punch system to have sorter arm options available in ProCAM 2D.
Command
:SORTER_ARM=TRUE or FALSE
Comments
This command should be set to FALSE if you do not have a machine that supports sorter
arm commands.
Set this command to TRUE if you have a machine that supports output code to support
sorter arm commands.
When you trigger a sorter arm move it does an auto attachment of “sorter arm pickup”
attribute, then it attaches a “sorter arm release” attribute and then attaches a “sorter arm hit
releases part “attribute. In the definition of each of these attributes is or should be defined
an ATTRFUNC command to call a Calc section for necessary output for this operation.
Available post variables are ARM_PICKUP_X, ARM_PICKUP_Y,
ARM_DESTINATION_X, ARM_DESTINATION_Y, ARM_OFFSET,
ARM_ACTIVE_CUPS.
MILL_OD_CYLINDRICAL
Purpose
Allows Lathe/Mill (Live C) machines to use special G-code for doing milling on the OD in
CAMWorks only.
Command
:MILL_OD_CYLINDRICAL=TRUE or FALSE
Comments
This command should be set to FALSE if your machine does not support special G-code for
doing milling on the OD.
Set this command to TRUE if you have a machine that supports the special G-code for doing
milling on the OD.
When your machine supports this the post will output cylindrical G-code output. The reason
for using this is the feedrate is in either IPM or MMPM and not degree minutes, which
requires a different degree minute feedrate on almost every line of code. Another reason is it
can have machine compensation added, plus it is shorter code to do the same operation then
in degree minutes.
MILL_FACE_POLAR
Purpose
Allows Lathe/Mill (Live C) machines to use special G-code for doing milling on the FACE
in CAMWorks only.
Command
:MILL_FACE_POLAR=TRUE or FALSE
Comments
This command should be set to FALSE if your machine does not support special G-code for
doing milling on the FACE.
Set this command to TRUE if you have a machine that supports the special G-code for doing
milling on the FACE.
When your machine supports this the post will output polar G-code output. The reason for
using this is the feedrate is in either IPM or MMPM and not degree minutes, which requires
a different degree minute feedrate on almost every line of code. Another reason is it can
have machine compensation added, plus it is shorter code to do the same operation then in
degree minutes.
MACROS_ROTATE
Purpose
Allows Laser or Plasma controllers to utilize rotating a macro and then call it with a
subroutine call.
Command
:MACROS_ROTATE=TRUE or FALSE
Comments
This command should be set to FALSE if your machine does not support rotating a macro
and then call it.
Most machines do not allow you to create a macro at lets say zero degrees and call it then
rotate it at 90 degrees and call the same subroutine. Normally what has to happen is once
you rotate the macro the system has to recreate another macro define and then call that
macro. The post variable that holds the rotated angle is ROTATE_ANGLE_Z.
DUAL_SPINDLE
Purpose
Allows Turn and Mill-Turn systems to machine on different spindles.
Syntax
:DUAL_SPINDLE=TRUE or FALSE
Comments
For more information, see DSPINDLE in Chapter 12.
LENGTH_DIAM_OFFSET_FROM_TOOL
Purpose
Tells CAMWorks whether the post supports using the Coolant, Length comp and diameter
comp from the tool definition or the post.
Syntax
:LENGTH_DIAM_OFFSET_FROM_TOOL=TRUE or FALSE
Comments
Supported in CAMWorks 2008 or later. Not supported in any ProCAM product.
USE_TOOL_COMMENT_AS_NAME
Purpose
This will instruct Machine Simulation to use the Tool Comment as the Tool Name.
Syntax
:USE_TOOL_COMMENT_AS_NAME=TRUE or FALSE
Comments
If you are not going to use tool comments for tool names, then this command should be set
to FALSE.
If you are going to use tool comments for tool names, then this command can be set to
TRUE.
This chapter contains system variables that were not documented previously and that are new in
CAMWorks releases.
System Variables
Variable Type Usage
DRILL_RAPID_X METRIC Drilled cycle rapid plane in X, Y and Z.
DECIMAL
CAMWorks 2005 or later: this variable will
output the world coordinate correctly if the
post has WORLD_POSITIONING set to TRUE.
ProCAM II 2004 or later: WORLD_POSITIONING
does not need to be set in the post.
DRILL_RAPID_Y METRIC Drilled cycle rapid plane in X, Y and Z.
DECIMAL
CAMWorks 2005 or later: this variable will
output the world coordinate correctly if the
post has WORLD_POSITIONING set to TRUE.
ProCAM II 2004 or later: WORLD_POSITIONING
does not need to be set in the post.
DRILL_RAPID_Z METRIC Drilled cycle rapid plane in X, Y and Z.
DECIMAL
CAMWorks 2005 or later: this variable will
output the world coordinate correctly if the
post has WORLD_POSITIONING set to TRUE.
ProCAM II 2004 or later: WORLD_POSITIONING
does not need to be set in the post.
DRILL_CLEAR_X METRIC Drilled cycle clearance plane in X, Y and Z.
DECIMAL
CAMWorks 2005 or later: this variable will
output the world coordinate correctly if the
post has WORLD_POSITIONING set to TRUE.
ProCAM II 2004 or later: WORLD_POSITIONING
does not need to be set in the post.
DRILL_CLEAR_Y METRIC Drilled cycle clearance plane in X, Y and Z.
DECIMAL
CAMWorks 2005 or later: this variable will
output the world coordinate correctly if the
post has WORLD_POSITIONING set to TRUE.
ProCAM II 2004 or later: WORLD_POSITIONING
does not need to be set in the post.
CAMWORKS=1
PROCAM_2D=2
PROCAM_3D=3
CURRENT=0
PREVIOUS=1
NEXT=2
Z_THEN_X=1
X_THEN_Z=2
DIRECT=3
AUTO=no value (CAMWorks attempts to
maintain the Retract strategy where possible.
For retract moves, CAMWorks will attempt to
avoid the WIP model by the specified
Clearance. This option allows you to set the
Retract type to automatically avoid collisions
with the WIP model.)
CAM_MOVE_FLAG INTEGER CAMWorks 2007 and later: Shows what type
of lathe move you are doing.
:C: IF FLAGGED(CAM_MOVE_FLAG,CAM_APPROACH)=TRUE
THEN
:C: IF FLAGGED(CAM_MOVE_FLAG, CAM_MOVE_X)=TRUE
AND
:C: FLAGGED(CAM_MOVE_FLAG, CAM_MOVE_Z)=TRUE
THEN
:C: CALL(RAPID_MOVE_LATHE)
:C: RETURN
:C: ELSE
:C: IF
FLAGGED(CAM_MOVE_FLAG,CAM_MOVE_X)=TRUE THEN
:C: CALL(RAPID_MOVE_LATHE_X)
:C: RETURN
:C: ELSE
:C: IF
FLAGGED(CAM_MOVE_FLAG,CAM_MOVE_Z)=TRUE THEN
:C: CALL(RAPID_MOVE_LATHE_Z)
:C: RETURN
:C: ENDIF
:C: ENDIF
:C: ENDIF
:C: ENDIF
CAM_MOVE_FLAG=CAM_RAPID
CAM_MOVE_FLAG=CAM_APPROACH
CAM_MOVE_FLAG=CAM_RETRACT
CAM_MOVE_FLAG=CAM_MOVE_X
CAM_MOVE_FLAG=CAM_MOVE_Y
CAM_MOVE_FLAG=CAM_MOVE_Z
Bit Values
CAM_RAPID=1
CAM_APPROACH =2
CAM_RETRACT=4
CAM_MOVE_X=8
CAM_MOVE_Y=16
CAM_MOVE_Z=32
CAM_LEADIN=64
CAM_LEADOUT=128
Options
N_CAM_MOVE_FLAG N_ = next move
P_CAM_MOVE_FLAG P_ = previous move
UP_RIGHT=1
UP_LEFT=2
DOWN_RIGHT=3
DOWN_LEFT=4
LEFT_UP=5
LEFT_DOWN=6
RIGHT_UP=7
RIGHT_DOWN=8
CAM_REV2006=0
CAM_REV2006EX=0
CAM_REV2007=7
CAM_REV2007_SP1=71
CAM_REV2007_SP2=72
CAM_REV2007_SP2_2=73
CAM_REV2007_SP3=74
CAM_REV2007_SP3_1=75
CAM_REV2007_SP4_1=76
CAM_REV2008=80
CAM_REV2008_SP1=81
CAM_REV2009=90
CAM_REV2009_SP1=91
:C: IF CAMWORKS_VER>CAM_REV2006EX THEN
:C: IF
FLAGGED(CAM_MOVE_FLAG,CAM_APPROACH)=TRUE THEN
:C: IF FLAGGED(CAM_MOVE_FLAG,
CAM_MOVE_X)=TRUE AND
:C: FLAGGED(CAM_MOVE_FLAG, CAM_MOVE_Z)=TRUE
THEN
:C: CALL(RAPID_MOVE_LATHE)
:C: RETURN
:C: ELSE
:C: IF
FLAGGED(CAM_MOVE_FLAG,CAM_MOVE_X)=TRUE THEN
:C: CALL(RAPID_MOVE_LATHE_X)
:C: RETURN
:C: ELSE
:C: IF
FLAGGED(CAM_MOVE_FLAG,CAM_MOVE_Z)=TRUE THEN
:C: CALL(RAPID_MOVE_LATHE_Z)
:C: RETURN
:C: ENDIF
:C: ENDIF
:C: ENDIF
:C: ENDIF
:C: ENDIF
OPR_SHIFT_TYPE INTEGER Stores the shift orientation selected in the
Lathe finish grooving cycle. This will be the
called section at the time of a shift
“CALC_SHIFT_TOOL_LATHE.” This section will
be called for selecting cutter comp direction
"CALC_CUTTER_COMP_LATHE". Supported in
CAMWorks 2007 and later. Not supported in
any ProCAM product.
SYNC_CODE_UNKNOWN = 0
SYNC_CODE_BEFORE_START = 1
SYNC_CODE_BEFORE_FIRST_MOVE = 2
SYNC_CODE_AFTER_END = 3
FRONT_SYNC_CODE This variable stores the current and previous
INTEGER
P_FRONT_SYNC_CODE front turret sync code number. Available in
Turn and Mill/Turn. These variables are set in
CW2010, however the option of syncing turrets
is not implemented in CW2010.
FRONT_SYNC_CODE_TYPE Stores the front turret sync code type.
INTEGER
Available in Turn and Mill/Turn. These
variables are set in CAMWorks 2010, however
the option of syncing turrets is not
implemented in CW2010.
FRONT_SYNC_CODE_TYPE=
SYNC_CODE_UNKNOWN
FRONT_SYNC_CODE_TYPE=
SYNC_CODE_BEFORE_START
FRONT_SYNC_CODE_TYPE=
SYNC_CODE_BEFORE_FIRST_MOVE
FRONT_SYNC_CODE_TYPE=
SYNC_CODE_AFTER_END
SYNC_CODE_UNKNOWN = 0
SYNC_CODE_BEFORE_START = 1
SYNC_CODE_BEFORE_FIRST_MOVE = 2
SYNC_CODE_AFTER_END = 3
ARC_NORM_X Stores the current, previous and next X axis arc
DECIMAL
P_ARC_NORM_X normal vector. Available in Mill, Turn and
N_ARC_NORM_X Mill/Turn.
ARC_NORM_Y Stores the current, previous and next Y axis arc
DECIMAL
P_ARC_NORM_Y normal vector. Available in Mill, Turn and
N_ARC_NORM_Y Mill/Turn.
SYS_CANNED
Purpose
To break an entity not supported by the post into a series of entities that are supported by
the post. Typically, this command is used the explode line, grid, arc, bolt hole patterns and
pecking canned cycles into single points
Syntax
SYS_CANNED(type,section)
Comments
Parameter Description
type the type of breakup and is a constant
1 Single points
2 Lines, arcs and bolt holes
(use only on grids and big hole patterns)
Breaks a thread cycle into diameters
3
(use only on threading cycles)
Breaks a Live C post Mill OD or Mill Face line move into increments
4 defined by post variable MILL_FACE_INC as a chord length(use only in
ProCAM 2D with post set to :SYSTEM=LATHE/MILL and on Mill line
moves only. It will also break the angle rotation of the C axis in the line
move).
Breaks an arc that is not on the top plane by ARC_DEVIATION set in the
5 arc calc section (use only in 4 and 5 axis posts that have arcs that are not
on the top plane. This command can only be used in ProCAM II 2004 and
CAMWorks 2005 or newer versions).
Breaks a canned peck drilling cycle into operation defined increments (use
only in CAMWorks 2005 or newer version for mill pecking canned
6
cycles).
section section that will handle the exploded entity
The word SYSTEM instructs the system to call the appropriate sections.
Example
SYS_CANNED(1,?????)
:SECTION=CALC_ARC_PATTERN_PUNCH
:C: SYS_CANNED(1,CALC_SINGLE_HIT_PUNCH)
:SECTION=CALC_GRID_PATTERN_PUNCH
:C: SYS_CANNED(2,SYSTEM)
:SECTION=CALC_MACHINE_THREAD_LATHE
:C: SYS_CANNED(3,CALC_MULTIPLE_THREAD_LATHE)
:C: SYS_CANNED(1,CALC_SINGLE_HIT_PUNCH)
:SECTION=CALC_GRID_PATTERN_PUNCH
:C: SYS_CANNED(1,CALC_SINGLE_HIT_PUNCH)
SYS_CANNED(4,?????)
:SECTION=CALC_LINE_MOVE_OD_FREE
:C: MILL_FACE_INC=chord_length
:C: SYS_CANNED(4,CALC_BREAK_LINE_OD)
SYS_CANNED(5,?????)
:SECTION=CALC_ARC_MOVE_MILL_YZ
:C: ARC_DEVIATION=max_arc_dev
:C: SYS_CANNED(5,CALC_BREAK_ARC)
SYS_CANNED(6,?????)
:SECTION=CALC_HIGH_SPEED_PECKING_CYCLE
:C: SYS_CANNED(6,CALC_HIGH_SPEED_PECKING)
GETID
Purpose
To allow a string, which is the attribute name that defines the record list in the OPENDB or
LOOKUPDB commands.
Syntax
GETID(cutdata_fields)
Comments
Basically to use a POST string attribute that will store the Record list and Lookup list
attributes. The "cutdata_fields" is the attrname that defines the RECORD_LIST. Since you
can have up to 20 different databases open at anytime, you would need to have 20 different
OPENDB and LOOKUPDB calc sections. With this function you can put a string in place
of the "cutdata_fields” attrname. As an example, you would use GETID(cutdata_fields) in a
calc section and then call the calc section that does the OPENDB or LOOKUPDB command
and all you need is one calc section to do the OPENDB or LOOKUPDB commands for as
many databases that are open.
(RECORD_LIST is an integer variable)
RECORD_LIST=GETID(cutdata_fields)
OPENDB(1,LASER_DBPATH,{FABDB},RECORD_LIST,DATABASE_STATUS)
OPENTXT
Purpose
Allows the post to open external files and write to them while posting.
Syntax
OPENTXT(FileNumber,FileName,Status)
Comments
Parameter Description
FileNumber Alternate text file ID number - range (0 to 20) – 0 reserved for Post
Text file and cannot be used in OPENTXT or CLOSETXT
FileName Alternate text filename – character string or character variable with full
path.
Status Integer variable to return status of the command – 1 = Success, 0 = Fail.
CLOSETXT
Purpose
Allows the post to close external files and write to them while posting.
Syntax
CLOSETXT(FileNumber)
Comments
Parameter Description
FileNumber Alternate text file ID number - range (0 to 20) – 0 reserved for Post Text
file and cannot be used in OPENTXT or CLOSETXT.
SETTXT
Purpose
To set the current FileNumber as the file to receive output from the posts template lines.
Syntax
SETTXT(FileNumber)
Comments
Parameter Description
FileNumber Alternate text file ID number - range (0 to 20) – 0 reserved for Post Text
file and cannot be used in OPENTXT or CLOSETXT. The FileNumber
must be opened before you can write to it.
UPPERTXT
Purpose
To set the output from the post's template lines as all upper case letters in the current
FileNumber.
Syntax
UPPERTXT(FileNumber)
Comments
Parameter Description
FileNumber Alternate text file ID number - range (0 to 20) – 0 reserved for Post Text
file and cannot be used in OPENTXT or CLOSETXT. The FileNumber
must be opened before you can write to it. You can do a SETTXT(?)
command and then do the UPPERTXT(?) command before you output any
post template lines.
LOWERTXT
Purpose
To set the output from the post's template lines as all lower case letters in the current
FileNumber.
Syntax
LOWERTXT(FileNumber)
Comments
Parameter Description
FileNumber Alternate text file ID number - range (0 to 20) – 0 reserved for Post Text
file and cannot be used in OPENTXT or CLOSETXT. The FileNumber
must be opened before you can write to it. You can do a SETTXT(?)
command and then do the LOWERTXT(?) command before you output
any post template lines.
ORIGINALTXT
Purpose
To set the output from the post's template lines as either upper or lower case letters in the
current FileNumber.
Syntax
ORIGINALTXT(FileNumber)
Comments
Parameter Description
FileNumber Alternate text file ID number - range (0 to 20) – 0 reserved for Post Text
file and cannot be used in OPENTXT or CLOSETXT. The FileNumber
must be opened before you can write to it. You can do a SETTXT(?)
command and then do the ORIGINALTXT(?). This is the standard format
if not specified to be upper or lower case.
OPENRWTXT
Purpose
Allows the post to open external files to read and write line by line while posting.
Syntax
OPENRWTXT(FileNumber,FileName,Status)
Comments
When reading line by line, you will use GETTXT(FileNumber, StringVar, Status) until
Status = 0 then you are at the end of the file. If you want to append to an existing file, you
can use the GETTXT command to get to the end of the file, then use SETTXT command to
append. To open a new file, you use either OPENTXT or OPENRWTXT command. You
can use this command with these commands: CLOSETXT , SETTXT, UPPERTXT,
LOWERTXT and ORIGINALTXT.
Parameter Description
FileNumber Alternate text file ID number - range (0 to 20) – 0 reserved for Post Text
file and cannot be used in OPENTXT or CLOSETXT.
FileName Alternate text filename – character string or character variable with full
path.
Status Integer variable to return status of the command – 1 = Success, 0 = Fail.
GETTXT
Purpose
To set the current FileNumber to read line by line.
Syntax
GETTXT(FileNumber,StringVar,Status)
Comments
This command will work only if the current file has been opened by OPENRWTXT only.
This will not work with OPENTXT.
Parameter Description
FileNumber Alternate text file ID number - range (0 to 20) – 0 reserved for Post Text
file and cannot be used in OPENTXT or CLOSETXT. The FileNumber
must be opened before you can read it.
StringVar Stores the read string variable.
Status Integer variable to return status of the command – 1 = Success, 0 = Fail or
at end of line.
GETMCS
Purpose
To get all the different MCS offsets inserted in the current part file using ProCAM II or
CAMWorks.
Syntax
GETMCS(1,calc_section)
GETMCS(2,calc_section)
GETMCS(3,calc_section)
Comments
Using GETMCS (1, calc_section) will call all Setups, including duplicate Setups.
To be used in CAMWorks 2015 SP1 or newer version.
Using GETMCS (2, calc_section) will do a search through the whole part file and
gather all the different MCS offsets along with the Tool, Tool Comment, Rotation
angles, Work Coordinate Offset values and TLP_SETUP_NAME . The calc_section
is any calc section you want to use for getting that information. The GETMCS will
call that calc section every time it finds a different MCS offset. This can be used for
machines that need to call out all the MCS offsets at the start of the program like
Fanuc’s G10 command. Variables that will have information stored during this
command are MCS_X_OFFSET, MCS_Y_OFFSET, MCS_Z_OFFSET, TOOL,
TOOL_COMMENT, ROT_TILT_A, ROT_TILT_B, work_coord,
sub_work_coord and fixture_offset.
Using GETMCS (3, calc_section) will call all unique Setups with different angles,
thus excluding duplicate Setups. To be used in CAMWorks 2015 SP1 or newer
version.
STRGLEN
Purpose
Allows the post to get the string length of any string.
Syntax
STRGLEN(string_var)
Comments
Parameter Description
string_var Is the string variable or hard coded. Hard coded means using the {} braces
and putting characters between them.
:C: STRG={TEST}
:C: STRG_LENGTH=STRGLEN(STRG)
The STRG_LENGTH would equal 4
LEFTSTRG
Purpose
Allows the post to capture a string starting from the left of the string to the right by a
character count (length).
Syntax
LEFTSTRG(target_string,string_var,length)
Comments
Parameter Description
target_string The receiving string variable. This can only be a defined POST
character variable.
string_var The string variable or hard coded. Hard coded means using the {}
braces and putting characters between them.
:C: STRG={TEST}
:C: LEFTSTRG(STRGA , STRG, 2)
The STRGA would equal “TE”
:C: LENGTH=2
:C: STRG={TEST}
:C: LEFTSTRG(STRGA , STRG, LENGTH)
The STRGA would equal “TE”
RIGHTSTRG
Purpose
Allows the post to capture a string starting from the right of the string to the left by a
character count (length).
Syntax
RIGHTSTRG(target_string,string_var,length)
Comments
Parameter Description
target_string The receiving string variable. This can only be a defined POST
character variable.
string_var The string variable or hard coded. Hard coded means using the {}
braces and putting characters between them.
:C: STRG={TEST}
:C: RIGHTSTRG(STRGA , STRG, 2)
The STRGA would equal “ST”
:C: LENGTH=2
:C: STRG={TEST}
:C: RIGHTSTRG(STRGA , STRG, LENGTH)
The STRGA would equal “ST”
MIDSTRG
Purpose
Allows the post to capture a string starting from a given character count from the left of the
string to the right by a character count (length).
Syntax
MIDSTRG(target_string,string_var,start,length)
Comments
Parameter Description
target_string The receiving string variable. This can only be a defined POST
character variable.
string_var The string variable or hard coded. Hard coded means using the {}
braces and putting characters between them.
start An integer or integer variable that defines the starting character to
capture.
length An integer or integer variable that stores the given character count
from the left of the string starting character to the right.
:C: START=6
:C: LENGTH=3
:C: STRG={TEST}
:C: MIDSTRG(STRGA , STRG, START, LENGTH)
The STRGA would equal “DOE”
STRGUPPER
Purpose
Allows the post to change the given string to have all upper case characters.
Syntax
STRGUPPER(target_string,string_var)
Comments
Parameter Description
target_string The receiving string variable. This can only be a defined POST
character variable.
string_var The string variable or hard coded. Hard coded means using the {}
braces and putting characters between them.
:C: STRG={test}
:C: STRGUPPER(STRGA , STRG)
The STRGA would equal “TEST”
STRGLOWER
Purpose
Allows the post to change the given string to have all lower case characters.
Syntax
STRGLOWER(target_string,string_var)
Comments
Parameter Description
target_string The receiving string variable. This can only be a defined POST
character variable.
string_var The string variable or hard coded. Hard coded means using the {}
braces and putting characters between them.
:C: STRG={TEST}
:C: STRGLOWER(STRGA , STRG)
The STRGA would equal “test”
GET_SELECT STRING
Purpose
To gather a string list from a life that will update the list selection from the Setup Info. It
lets the user put more materials in the file and not have to recompile the post. The file that
will store the string lists corresponds to the name of the compiled post. If the compiled post
is FANUC6M.CTL, then the file used will be FANUC6M.CNF.
Syntax
These commands are associated with this command, which will be in the *.CNF file.
Command Description
CONFIG_SELECT_NAME The name of the lowercase attribute that will show the list
in the Setup Info.
CONFIG_SELECT_OPTION The string that you want to select from. You can have as
many of these in a row as needed. It basically creates the
list.
CONFIG_SELECT_DEFAULT Sets the default selection from the list. If you wanted the
3rd string in the list as the default, then this would equal 3.
CONFIG_SELECT_END Lets the post know you are done with the list.
Comments
Below is an example of using this for gathering a list of materials.
*------------------------------
:ATTRNAME=material type
:ATTRTYPE=SELECT
:ATTREMARK=Material type
:ATTRSEL=N
:ATTRTITLE=Material Type
:ATTRSELSTR=Rolled Steel
:ATTRSELSTR=Aluminum
:ATTRSELSTR=Stainless Steel
:ATTRDEFAULT=1
:ATTRUSED=1
:ATTREND
*-----------------------------------
:ATTRNAME=S MATERIAL TYPE
:ATTRTYPE=POST
:ATTRVTYPE=CHARACTER
:ATTREMARK=
:CODETYPE=FORMAT
:WORD_ADDRESS_BEF=|(
:WORD_ADDRESS_AFT=)
:LEFT_PLACES=0
:RIGHT_PLACES=0
:UNITFLAG=NON_CONVERT
:ATTRSPACES=YES
:MODAL=YES
:ATTRUSED=1
:ATTREND
*-----------------------------------
:SECTION=CALC_INIT_TOOL_CHANGE_MILL
:C: IF SECTIONEXIST(DEBUG) THEN
:C: DEBUG=4 CALL(DEBUG)
:C: ENDIF
*
:C: GET_SELECT_STRING(material_type,S_MATERIAL_TYPE)
:C: CALL(OUPTUT_MATERIAL)
*-----------------------------------
:SECTION=OUTPUT_MATERIAL
:T:<S_MATERIAL_TYPE>
GET_SELECT_STRING(material_type,S_MATERIAL_TYPE)
Material_type is an attribute that is defined and is lower case, plus it needs to be defined in
the master.atr file. You can insert a few :ATTRSELSTR= in this definition as shown
above.
The next attribute defined is the output post attribute S_MATERIAL_CODE, which can be
any name you give it.
FASTLINE
Purpose
To output lines of code at a faster rate then normal. This is only available in the 3 axis
milling operations.
Syntax
FASTLINE(template_section)
Comments
Parameter Description
template_section The template section that will output the lines of code. You
will need to define the ATTRNAMES listed below.
*----------------------------------------------------------
:ATTRNAME=FX
:ATTRTYPE=POST
:ATTRVTYPE=DECIMAL
:ATTREMARK=X End
:CODETYPE=FORMAT
:WORD_ADDRESS_BEF=|X
:VAR=ABS_X_END
:MODAL=YES
:ATTREND
*-----------------------------------
:ATTRNAME=FY
:ATTRTYPE=POST
:ATTRVTYPE=DECIMAL
:ATTREMARK=Y End
:CODETYPE=FORMAT
:WORD_ADDRESS_BEF=|Y
:VAR=ABS_Y_END
:MODAL=YES
:ATTREND
*-----------------------------------
:ATTRNAME=FZ
:ATTRTYPE=POST
:ATTRVTYPE=DECIMAL
:ATTREMARK=Z End
:CODETYPE=FORMAT
:WORD_ADDRESS_BEF=|Z
:VAR=ABS_Z_END
:MODAL=YES
:ATTREND
Normally you will need to start this command in the CALC_START_OPERATION section
as shown below.
:C: IF SECTIONEXIST(FASTLINE) THEN
:C: IF OPR_TYPE=MILL_UV_CUT
:C: OR OPR_TYPE=MILL_SLICE_CUT
:C: OR OPR_TYPE=MILL_ROUGH_CUT
:C: OR OPR_TYPE=MILL_CURVE_CUT
:C: OR OPR_TYPE=MILL_TOPO_CUT
:C: OR OPR_TYPE=MILL_FREEFORM_CUT THEN
:C: FASTLINE(FASTLINE)
:C: ENDIF
:C: ENDIF
ATOF
Purpose
To turn a string input into a number. This will work in connection with opening an external
file. By reading in an external file line by line, you will be able to transform the string into a
number, if required.
Syntax
ATOF()
Comments
The example code below shows you how you could use this command. The post variable
TESTSTR could also be a string that was being read in line by line from an external file.
MyVal could be either an integer or decimal post value.
:C: TESTSTR={6.1957}
:C: MyVal=ATOF(TESTSTR)
:C: CALL(SEE_MY_VAL)
This chapter contains calc sections for CAMWorks and ProCAM and operation ID's for EDM in
ProCAM 2D that were not documented previously.
CALC_ARC_MOVE_ZX
Purpose
Mill calc section for arc moves on ZX plane using CAMWorks 2005 or ProCAM II 2004 or
newer versions.
Syntax
:SECTION=CALC_ARC_MOVE_ZX
Comments
The post will only get to this section when you are doing an arc movement that is on the ZX
plane. If section does not exist then post outputs line moves.
If you have an old post that does not have this section compiled in the source, then the post
will break the arcs into line moves by a default deviation. If you are creating a new post and
your machine does not support arcs on different planes, then you need to add the question
"max_arc_dev" to either the Setup Info or the operation questions to set the deviation
amount. This value will then set the post variable ARC_DEVIATION to this value.
:C: ARC_DEVIATION=max_arc_dev
:C: SYS_CANNED(5,CALC_BREAK_ARC
CALC_ARC_MOVE_YZ
Purpose
Mill calc section for arc moves on YZ plane using CAMWorks 2005 or ProCAM II 2004 or
newer versions.
Syntax
:SECTION=CALC_ARC_MOVE_YZ
Comments
The post will only get to this section when you are doing an arc movement that is on the YZ
plane. If section does not exist then post outputs line moves.
If you have an old post that does not have this section compiled in the source, then the post
will break the arcs into line moves by a default deviation. If you are creating a new post and
your machine does not support arcs on different planes, then you need to add the question
"max_arc_dev" to either the Setup Info or the operation questions to set the deviation
amount. This value will then set the post variable ARC_DEVIATION to this value.
:C: ARC_DEVIATION=max_arc_dev
:C: SYS_CANNED(5,CALC_BREAK_ARC)
CALC_ARC_MOVE_ANYPLANE
Purpose
Mill calc section for arc moves on none standard planes using CAMWorks 2005 or
ProCAM II 2004 or newer versions.
Syntax
:SECTION=CALC_ARC_MOVE_ANYPLANE
Comments
The post will only get to this section when you are doing an arc movement that is on none
standard planes. If section does not exist then post outputs line moves.
If you have an old post that does not have this section compiled in the source, then the post
will break the arcs into line moves by a default deviation. If you are creating a new post and
your machine does not support arcs on different planes, then you need to add the question
"max_arc_dev" to either the Setup Info or the operation questions to set the deviation
amount. This value will then set the post variable ARC_DEVIATION to this value.
:C: ARC_DEVIATION=max_arc_dev
:C: SYS_CANNED(5,CALC_BREAK_ARC)
CALC_POST_INITIALIZE
Purpose
Mill calc section for setting 4 and 5 axis parameters used in ProCAM II only.
Syntax
:SECTION=CALC_POST_INITIALIZE
:C: IF SECTIONEXIST(FIVE_AXIS_LINE_MOVE_MILL) THEN
:C: CALL(CALC_RESET_REGISTERS)
:C: CALL(CALC_RESET_FIVE_AXIS_REGISTERS)
:C: ENDIF
Comments
The post will only get to this section when you have either :4AXIS_X_MILLING=TRUE,
:4AXIS_Y_MILLING=TRUE or :5AXIS_MILLING=TRUE, It will get to this section
before it gets to CALC_START_OPERATION for the first time.
CALC_TOOL_INITIALIZE
Purpose
Mill calc section for setting 4 and 5 axis HEAD_LEN tool parameters. When you have a
machine that has the Head that rotates or tilts and you need to add the tool length on to the
posted output. Used in ProCAM II 2004 or CAMWorks 2005 or newer versions only.
Syntax
:SECTION=CALC_TOOL_INITIALIZE
:C: HEAD_LEN=(INIT_TOOL_LENGTH+head_length)
Comments
The post will only get to this section when you have either :4AXIS_X_MILLING=TRUE,
:4AXIS_Y_MILLING=TRUE or :5AXIS_MILLING=TRUE, It will get to this section
before it gets to CALC_START_OPERATION for the first time.
INIT_TOOL_LENGTH is a system post variable
INIT_TOOL_LENGTH holds the tool length from tool definition.
Head_length = is a post question and it can be added or subtracted
CALC_RAPID_MOVE_SHEAR
Purpose
Shear system rapid move calc section.
Syntax
:SECTION=CALC_RAPID_MOVE_SHEAR
Comments
This section will be called for every rapid move that occurs while you are shearing.
CALC_INIT_TOOL_CHANGE_SHEAR
Purpose
Shear system initial tool change calc section.
Syntax
:SECTION=CALC_INIT_TOOL_CHANGE_SHEAR
Comments
This section will be called for the first tool change that occurs while you are shearing.
CALC_SUB_TOOL_CHANGE_SHEAR
Purpose
Shear system sub tool change calc section.
Syntax
:SECTION=CALC_SUB_TOOL_CHANGE_SHEAR
Comments
This section will be called for every tool change that occurs after the first tool change while
you are shearing.
CALC_EVERY_MOVE_SHEAR
Purpose
Shear system every move calc section.
Syntax
:SECTION=CALC_EVERY_MOVE_SHEAR
Comments
This section will be called for every move type that occurs while you are shearing.
CALC_FULL_SHEAR
Purpose
Shear system full shear calc section.
Syntax
:SECTION=CALC_FULL_SHEAR
Comments
This section will be called for every stroke that uses a full shear while you are shearing.
CALC_HALF_SHEAR_X
Purpose
Shear system half shear in X calc section.
Syntax
:SECTION=CALC_HALF_SHEAR_X
Comments
This section will be called for every stroke that only uses half the shear tool in the X
direction while you are shearing.
CALC_HALF_SHEAR_Y
Purpose
Shear system half shear in Y calc section.
Syntax
:SECTION=CALC_HALF_SHEAR_Y
Comments
This section will be called for every stroke that only uses half the shear tool in the Y
direction while you are shearing.
CALC_FULL_SHEAR_DIAGONAL
Purpose
Shear system full shear diagonally calc section.
Syntax
:SECTION=CALC_FULL_SHEAR_DIAGONAL
Comments
This section will be called for every stroke that uses the full shear tool in a diagonal
direction while you are shearing.
CALC_HALF_SHEAR_DIAGONAL
Purpose
Shear system half shear diagonally calc section.
Syntax
:SECTION=CALC_HALF_SHEAR_DIAGONAL
Comments
This section will be called for every stroke that uses half of the shear tool in a diagonal
direction while you are shearing.
CALC_REPOSITION_SHEAR
Purpose
Shear system reposition calc section.
Syntax
:SECTION=CALC_REPOSITION_SHEAR
Comments
This section will be called for every reposition created while you are shearing.
CALC_RAPID_TO_TRAPDOOR_LASER
Purpose
Laser system rapid move to trap door calc section.
Syntax
:SECTION=CALC_RAPID_TO_TRAP_DOOR_LASER
Comments
This section will be called when a trap door is attached to any entity. The header command
:TRAPDOOR must equal either DROP or TILT. If this header command is not in the post or
is set to FALSE, then you will not get to this calc section.
CALC_RAPID_TO_TRAPDOOR_PLASMA
Purpose
Plasma system rapid move to trap door calc section.
Syntax
:SECTION=CALC_RAPID_TO_TRAP_DOOR_PLASMA
Comments
This section will be called when a trap door is attached to any entity. The header command
:TRAPDOOR must equal either DROP or TILT. If this header command is not in the post or
is set to FALSE, then you will not get to this calc section.
CALC_PROFILE_DRILL_LASER
Purpose
Used when you have a PUNCH/LASER combination machine that uses a pre-punched hole
for starting a laser profile.
Syntax
:SECTION=CALC_PROFILE_DRILL_LASER
Comments
This section will be called when you do pre-punch hole for the laser profile. Normally, you
would do a punch single hit and this, then give the laser a place to start the cut if not on the
edge of the sheet.
CALC_PROFILE_DRILL_PLASMA
Purpose
Used when you have a PUNCH/PLASMA combination machine that uses a pre-punched
hole for starting a plasma profile.
Syntax
:SECTION=CALC_PROFILE_DRILL_PLASMA
Comments
This section will be called when you do pre-punch hole for the plasma profile. Normally,
you would do a punch single hit and this, then give the plasma a place to start the cut if not
on the edge of the sheet.
CALC_GET_TAPER_EDM
Purpose
Used when you need to get all the different taper angles used in the current part and output
them at the start of the program.
Syntax
:SECTION=CALC_GET_TAPER_EDM
Comments
This section will be called only when it is inserted into the post source. When you start to
post out, the current EDM part file the system will go through the complete tool paths of the
part file to gather all the different taper changes, then it will start calling this section for
each different taper angle and you can store this information in post arrays. Now it will start
the normal post output.
:OPERID
Purpose
EDM operations ID names.
Syntax
Syntax Purpose
:OPERID=EDM_PROFILE EDM operation ID for creating an EDM Profile
operation.
CALC_SLOWDOWN_SPEED
Purpose
Called in a lathe cutoff cycle if a slowdown is selected in the cutoff operation.
Syntax
:SECTION=CALC_SLOWDOWN_SPEED
Comments
Supported in CAMWorks 2007 and later. Not supported in any ProCAM product.
The section needs to be in the *.src file: CHANGE_SPEED.
:SECTION=CALC_SLOWDOWN_SPEED
:SECTION:=CHANGE_SPEED
CALC_SHIFT_TOOL_LATHE
Purpose
Called in a lathe finish grooving cycle if a shift from one side of the groove tool to the
opposite side is detected.
Syntax
:SECTION=CALC_SHIFT_TOOL_LATHE
Comments
Supported in CAMWorks 2007 and later. Not supported in any ProCAM product.
These sections need to be added to the *src file: SHIFT_OFFSET_PRIMARY and
SHIFT_OFFSET_SECONDARY.
:SECTION=CALC_SHIFT_TOOL_LATHE
:SECTION: SHIFT_OFFSET_PRIMARY
:SECTION: SHIFT_OFFSET_SECONDARY
CALC_CUTTER_COMP_LATHE
Purpose
Called in a lathe finish grooving cycle if a shift from one side of the groove tool to the
opposite side is detected. This will support machine cutter comp values.
Syntax
:SECTION=CALC_CUTTER_COMP_LATHE
Comments
Supported in CAMWorks 2007 and later. Not supported in any ProCAM product.
These sections need to be added to the *.src file: LINE_LEADIN_MOVE_LATHE and
LINE_LEADOUT_MOVE_LATHE.
:SECTION=CALC_CUTTER_COMP_LATHE
:SECTION: LINE_LEADIN_MOVE_LATHE
:SECTION: LINE_LEADOUT_MOVE_LATHE
CALC_ALLOW_RAPID_DURING_DRILL
Purpose
This system section will be called in a mill drilling cycle and handles posted output of
toolpath editing in drilling cycles. This section is for allowing rapids in drilling cycles.
Syntax
:SECTION=CALC_ALLOW_RAPID_DURING_DRILL
Comments
This section will looks for a post variable called RAPID_DURING_DRILL_CYCLE. The
post will set this to a TRUE or FALSE value. If the post does not have this section or
variable, then the posting system assumes a FALSE value. When the value is set to TRUE,
then the system assumes that the post can support rapids in a drilling cycle that are added in
the Edit toolpath area of CAMWorks.
The drilling cycles were designed in a specific way and when you add rapids to the toolpath,
you may get unwanted results. You can adjust the drilling cycles in new posts if needed and
set RAPID_DURING=1. The default is handled by not having or setting
RAPID_DURING=0. Older posts do not have RAPID_DURING compiled in the source, so
in that case the default will be zero.
Supported in CAMWorks 2007 and later. Not supported in any ProCAM product.
Example
****************************************
:SECTION=CALC_ALLOW_RAPID_DURING_DRILL
:C: IF CAMWORKS_VER>CAM_REV2006EX THEN
:C: IF RAPID_DURING=1 THEN
:C: RAPID_DURING_DRILL_CYCLE=TRUE
:C: ENDIF
:C: ENDIF
****************************************
CALC_SET_PRE_POSITION_ROTARY_TYPE
Purpose
This system section handles the 5th axis preposition and simultaneous output. It will be
called automatically in a Mill 4th or 5th axis Preposition operation to set the preferred 4th
axis preposition axis output values, either in ROT_TILT_A or ROT_TILT_B.
Syntax
Integer variable: PRE_POSITION_ROTARY_TYPE
System Constants
ROTARY_TYPE_A=4
ROTARY_TYPE_B=5
Comments
Currently, posting will assume ROT_TILT_B for a 4th axis preposition move. A wrapped
feature will always be ROT_TILT_A.
PRE_POSITION_ROTARY_TYPE can be set by two constants ROTARY_TYPE_A and
ROTARY_TYPE_B. Setting this to ROTARY_TYPE_B supports old preposition posts.
Supported in CAMWorks 2007 and later. Not supported in any ProCAM product.
Example
*-----------------------------------
:SECTION=CALC_SET_PRE_POSITION_ROTARY_TYPE
:C: FOURTH_AXIS_SELECTION=ROTARY_TYPE_B
:C: IF FOURTH_AXIS_SELECTION>3 AND FOURTH_AXIS_SELECTION<6 THEN
:C: IF CAMWORKS_VER>CAM_REV2006EX THEN
:C: PRE_POSITION_ROTARY_TYPE=FOURTH_AXIS_SELECTION
:C: ENDIF
:C: ENDIF
CALC_ADD_REAR_SYNC_CODE
Purpose
CALC_ADD_REAR_SYNC_CODE gets called when a command to output rear sync code is
encountered and the post variables SYNC_CODE_COMMENT, REAR_SYNC_CODE and
REAR_SYNC_CODE_TYPE are set.
CALC_ADD_FRONT_SYNC_CODE
Purpose
CALC_ADD_FRONT_SYNC_CODE gets called when a command to output rear sync code is
encountered and the post variables SYNC_CODE_COMMENT, FRONT_SYNC_CODE and
FRONT_SYNC_CODE_TYPE are set.
CALC_CHANGE_MILL_SPEED
Purpose
This section will be called by CAMWorks automatically when you are in Volumill.
Comments
Supported in CAMWorks 2011 and later. Not supported in any ProCAM product.
Available in Mill, and Mill-Turn.
Example
*-----------------------------------
:SECTION=CALC_CHANGE_MILL_SPEED
:C: IF SECTIONEXIST(CHANGE_MILL_SPEED) THEN CALL(CHANGE_MILL_SPEED)
ENDIF
*-----------------------------------
CALC_OUTPUT_POLAR_SPINDLE_ORIENTATION
Purpose
This section will be called by CAMWorks automatically.
Syntax
To activate this option set post header as
:MILL_FACE_POLAR=X+_ONLY.
This will work for Face Polar and Fixed only.
SPINDLE_ORIENTATION post variable will have the value of rotation to get the feature
to C zero.
Comments
Supported in CAMWorks 2013 and later. Not supported in any ProCAM product.
Available in Mill-Turn.
Example
*-----------------------------------
:SECTION=CALC_OUTPUT_POLAR_SPINDLE_ORIENTATION
:C: IF SECTIONEXIST(OUTPUT_POLAR_SPINDLE_ORIENTATION) THEN
:C: CALL(OUTPUT_POLAR_SPINDLE_ORIENTATION)
:C: ENDIF
*-----------------------------------
CALC_OUTPUT_CANCEL_POLAR_SPINDLE_
ORIENTATION
Purpose
This section will be called by CAMWorks automatically. Available in Mill-Turn.
Syntax
To activate this option set post header as
:MILL_FACE_POLAR=X+_ONLY.
Comments
This will work for Face Polar and Fixed only.
Supported in CAMWorks 2013 and later. Not supported in any ProCAM product.
Example
*-----------------------------------
:SECTION=CALC_OUTPUT_CANCEL_POLAR_SPINDLE_ORIENTATION
:C: IF SECTIONEXIST(OUTPUT_CANCEL_POLAR_SPINDLE_ORIENTATION) THEN
:C: CALL(OUTPUT_CANCEL_POLAR_SPINDLE_ORIENTATION)
:C: ENDIF
*-----------------------------------
CALC_OUTPUT_SPINDLE_STATE
Purpose
This section will be called by CAMWorks automatically when using a sub spindle operation
and you insert a Spindle On/Off/Lock step.
Syntax
Post variable DSPINDLE will be available with values of either, 1= MAIN_SPINDLE,
2= SUB_SPINDLE
Post variable SPINDLE_STATE will be available with values of either:
0 = OFF, 1 =ON, 2 = LOCK
Comments
Supported in CAMWorks 2013 and later. Not supported in any ProCAM product.
Available in Mill-Turn and Turn.
Example
*-----------------------------------
:SECTION=CALC_OUTPUT_SPINDLE_STATE
:C: IF SECTIONEXIST(OUTPUT_SPINDLE_STATE) THEN
:C: CALL(OUTPUT_SPINDLE_STATE)
:C: ENDIF
*-----------------------------------
CALC_OUTPUT_SPINDLE_ORIENTATION
Purpose
This section will be called by CAMWorks automatically when using a sub spindle operation
and you insert a Spindle Orient step.
Syntax
Post variable SPINDLE_ORIENTATION will be available with an Orientation angle.
Comments
Supported in CAMWorks 2013 and later. Not supported in any ProCAM product.
Available in Mill-Turn and Turn.
Example
*-----------------------------------
:SECTION=CALC_OUTPUT_SPINDLE_ORIENTATION
:C: IF SECTIONEXIST(OUTPUT_SPINDLE_ORIENTATION) THEN
:C: CALL(OUTPUT_SPINDLE_ORIENTATION)
:C: ENDIF
*-----------------------------------
CALC_OUTPUT_SPINDLE_COMMENT
Purpose
This section will be called by CAMWorks automatically when using a sub spindle operation
and you insert a Text/with Comment selected step.
Syntax
Post variable SPINDLE_COMMENT will be available with a comment string.
This will output text as a comment "N1 (M05)".
Comments
Supported in CAMWorks 2013 and later. Not supported in any ProCAM product.
Available in Mill-Turn and Turn.
Example
*-----------------------------------
:SECTION=CALC_OUTPUT_SPINDLE_COMMENT
:C: IF SECTIONEXIST(OUTPUT_SPINDLE_COMMENT) THEN
:C: CALL(OUTPUT_SPINDLE_COMMENT)
:C: ENDIF
*-----------------------------------
CALC_OUTPUT_SPINDLE_COMMAND
Purpose
This section will be called by CAMWorks automatically when using a sub spindle operation
and you insert a Text/with No Comment selected step.
Syntax
Post variable SPINDLE_COMMENT will be available with a comment string.
This will output raw text (hardcoded) output "N1 M05".
Comments
Supported in CAMWorks 2013 and later. Not supported in any ProCAM product.
Available in Mill-Turn and Turn.
Example
*-----------------------------------
:SECTION=CALC_OUTPUT_SPINDLE_COMMAND
:C: IF SECTIONEXIST(OUTPUT_SPINDLE_COMMAND) THEN
:C: CALL(OUTPUT_SPINDLE_COMMAND)
:C: ENDIF
*-----------------------------------
CALC_OUTPUT_CHUCK_OPEN
Purpose
This section will be called by CAMWorks automatically when using a sub spindle operation
and you insert a Spindle Unclamp step.
Syntax
Post variable DSPINDLE will be available with values of either, 1= MAIN_SPINDLE,
2= SUB_SPINDLE
Comments
Supported in CAMWorks 2013 and later. Not supported in any ProCAM product.
Available in Mill-Turn and Turn.
Example
*-----------------------------------
:SECTION=CALC_OUTPUT_CHUCK_OPEN
:C: IF SECTIONEXIST(OUTPUT_CHUCK_OPEN) THEN
:C: CALL(OUTPUT_CHUCK_OPEN)
:C: ENDIF
*-----------------------------------
CALC_OUTPUT_CHUCK_CLOSE
Purpose
This section will be called by CAMWorks automatically when using a sub spindle operation
and you insert a Spindle Clamp step.
Syntax
Post variable DSPINDLE will be available with values of either, 1= MAIN_SPINDLE,
2= SUB_SPINDLE
Comments
Supported in CAMWorks 2013 and later. Not supported in any ProCAM product.
Available in Mill-Turn and Turn.
Example
*-----------------------------------
:SECTION=CALC_OUTPUT_CHUCK_CLOSE
:C: IF SECTIONEXIST(OUTPUT_CHUCK_CLOSE) THEN
:C: CALL(OUTPUT_CHUCK_CLOSE)
:C: ENDIF
*-----------------------------------
CALC_OUTPUT_SPEED
Purpose
This section will be called by CAMWorks automatically when using a sub spindle operation
and you insert a Spindle Speed step.
Syntax
Post variable DSPINDLE will be available with values of either, 1= MAIN_SPINDLE,
2= SUB_SPINDLE
Post variable OPR_SPEED_DIR will be available with values of either, 1= CW, 2= CCW
Post variable OPR_SPEED_RPM will be available with RPM value.
Comments
Supported in CAMWorks 2013 and later. Not supported in any ProCAM product.
Available in Mill-Turn and Turn.
Example
*-----------------------------------
:SECTION=OUTPUT_SPEED
:T: IF DSPINDLE=MAIN_SPINDLE AND OPR_SPEED_DIR=1 THEN
<N><G!:SPEED_TYPE><S!:OPR_SPEED_RPM><M!:MC(M_SPIN_CW)><EOL>ENDIF
:T: IF DSPINDLE=MAIN_SPINDLE AND OPR_SPEED_DIR<>1 THEN
<N><G!:SPEED_TYPE><S!:OPR_SPEED_RPM><M!:MC(M_SPIN_CCW)><EOL>ENDIF
:T: IF DSPINDLE=SUB_SPINDLE AND OPR_SPEED_DIR=1 THEN
<N><G!:SPEED_TYPE><S!:OPR_SPEED_RPM><M!:MC(M_SUB_CW)><EOL>ENDIF
:T: IF DSPINDLE=SUB_SPINDLE AND OPR_SPEED_DIR<>1 THEN
<N><G!:SPEED_TYPE><S!:OPR_SPEED_RPM><M!:MC(M_SUB_CCW)><EOL>ENDIF
*-----------------------------------
CALC_OUTPUT_RAPID_SPINDLE_TO_POSITION
Purpose
This section will be called by CAMWorks automatically when using a sub spindle operation
and you insert a Spindle Rapid step.
Syntax
Post variable DSPINDLE will be available with values of either, 1= MAIN_SPINDLE,
2= SUB_SPINDLE
Post variable ABS_SPINDLE_Z_END will be available with Decimal value.
Comments
Supported in CAMWorks 2013 and later. Not supported in any ProCAM product.
Available in Mill-Turn and Turn.
Example
*-----------------------------------
:SECTION=CALC_OUTPUT_RAPID_SPINDLE_TO_POSITION
:C: IF SECTIONEXIST(OUTPUT_RAPID_SPINDLE_TO_POSITION) THEN
:C: CALL(OUTPUT_RAPID_SPINDLE_TO_POSITION)
:C: ENDIF
*-----------------------------------
CALC_OUTPUT_FEED_SPINDLE_TO_POSITION
Purpose
This section will be called by CAMWorks automatically when using a sub spindle operation
and you insert a Spindle Feed step.
Syntax
Post variable DSPINDLE will be available with values of either, 1= MAIN_SPINDLE,
2= SUB_SPINDLE
Post variable OPR_FEED_FPM will be available with feedrate value.
Post variable ABS_SPINDLE_Z_END will be available with Decimal value.
Comments
Supported in CAMWorks 2013 and later. Not supported in any ProCAM product.
Available in Mill-Turn and Turn.
Example
*-----------------------------------
:SECTION=CALC_OUTPUT_FEED_SPINDLE_TO_POSITION
:C: IF SECTIONEXIST(OUTPUT_FEED_SPINDLE_TO_POSITION) THEN
:C: OPR_FEED_TYPE=2
:C: FEED_TYPE=GC(G_FPM)
:C: CALL(OUTPUT_FEED_SPINDLE_TO_POSITION)
:C: ENDIF
*-----------------------------------
CALC_OUTPUT_SPINDLE_SYNC
Purpose
This section will be called by CAMWorks automatically when using a Sub Spindle
operation and you insert a Spindle Feed step.
Syntax
Post variable DSPINDLE will be available with values of either, 1= MAIN_SPINDLE,
2= SUB_SPINDLE
Post variable SPINDLE_SYNC_TYPE will be available with values of either, 0= SPEED,
1= PHASE
Comments
Supported in CAMWorks 2013 and later. Not supported in any ProCAM product.
Available in Mill-Turn and Turn.
Example
*-----------------------------------
:C: SECTION=CALC_OUTPUT_SPINDLE_SYNC
:C: IF SECTIONEXIST(OUTPUT_SPINDLE_SYNC) THEN
:C: CALL(OUTPUT_SPINDLE_SYNC)
:C: ENDIF
*-----------------------------------
CALC_OUTPUT_REFERENCE_POINT
Purpose
Reserved for future use in Sub Spindle operation.
Comments
Available in Mill-Turn and Turn.
Example
*-----------------------------------
:SECTION=CALC_OUTPUT_REFERENCE_POINT
:C: IF SECTIONEXIST(OUTPUT_REFERENCE_POINT) THEN
:C: CALL(OUTPUT_REFERENCE_POINT)
:C: ENDIF
*-----------------------------------
CALC_OUTPUT_ARBOR_OPEN
Purpose
Reserved for future use in Sub Spindle operation.
Syntax
Post variable DSPINDLE will be available with values of either, 1= MAIN_SPINDLE,
2= SUB_SPINDLE
Example
*-----------------------------------
:SECTION=CALC_OUTPUT_ARBOR_OPEN
:C: IF SECTIONEXIST(OUTPUT_ARBOR_OPEN) THEN
:C: CALL(OUTPUT_ARBOR_OPEN)
:C: ENDIF
*-----------------------------------
CALC_OUTPUT_ARBOR_CLOSE
Purpose
Reserved for future use in Sub Spindle operation.
Syntax
Post variable DSPINDLE will be available with values of either, 1= MAIN_SPINDLE,
2= SUB_SPINDLE
Example
*-----------------------------------
:SECTION=CALC_OUTPUT_ARBOR_CLOSE
:C: IF SECTIONEXIST(OUTPUT_ARBOR_CLOSE) THEN
:C: CALL(OUTPUT_ARBOR_CLOSE)
:C: ENDIF
*-----------------------------------
CALC_OUTPUT_COLLET_OPEN
Purpose
Reserved for future use in Sub Spindle operation.
Syntax
Post variable DSPINDLE will be available with values of either, 1= MAIN_SPINDLE,
2= SUB_SPINDLE
Example
*-----------------------------------
:SECTION=CALC_OUTPUT_COLLET_OPEN
:C: IF SECTIONEXIST(OUTPUT_COLLET_OPEN) THEN
:C: CALL(OUTPUT_COLLET_OPEN)
:C: ENDIF
*-----------------------------------
CALC_OUTPUT_COLLET_CLOSE
Purpose
Reserved for future use in Sub Spindle operation.
Syntax
Post variable DSPINDLE will be available with values of either, 1= MAIN_SPINDLE,
2= SUB_SPINDLE
Example
*-----------------------------------
:SECTION=CALC_OUTPUT_COLLET_CLOSE
:C: IF SECTIONEXIST(OUTPUT_COLLET_CLOSE) THEN
:C: CALL(OUTPUT_COLLET_CLOSE)
:C: ENDIF
*-----------------------------------
CALC_OUTPUT_FEEDRATE
Purpose
Reserved for future use in Sub Spindle operation.
Syntax
Post variable OPR_FEED_FPM will be available with feedrate value.
Example
*-----------------------------------
:SECTION=CALC_OUTPUT_FEEDRATE
:C: IF SECTIONEXIST(OUTPUT_FEEDRATE) THEN
:C: CALL(OUTPUT_FEEDRATE)
:C: ENDIF
*-----------------------------------
CALC_QUERY_POST
Purpose
This is used in conjunction with CAMWorks Virtual Machine.
Comment
Supported in CAMWorks 2013 and later. Not supported in any ProCAM product.
Available in Mill, Turn and Mill-Turn.
Example
:SECTION=CALC_QUERY_POST
:C: IF QUERY_ITEM_ID = QUERY_INT_NUM_TURRETS_ABOVE THEN
QUERY_INT_VAL=1 RETURN ENDIF
:C: IF QUERY_ITEM_ID = QUERY_INT_NUM_TURRETS_BELOW THEN
QUERY_INT_VAL=1 RETURN ENDIF
:C: IF QUERY_ITEM_ID = QUERY_GCODE_DEFAULT_WCS THEN
:C: IF SECTIONEXIST(QUERY_WCS) THEN
:C: CALL(QUERY_WCS)
:C: RETURN
:C: ELSE
:C: CALL(AUTO_QUERY_WCS)
:C: RETURN
:C: ENDIF
:C: ENDIF
:C: IF QUERY_ITEM_ID = QUERY_GCODE_WCS THEN
:C: IF SECTIONEXIST(QUERY_WCS) THEN
:C: CALL(QUERY_WCS)
:C: RETURN
:C: ELSE
:C: CALL(AUTO_QUERY_WCS)
:C: RETURN
:C: ENDIF
:C: ENDIF
:C: IF QUERY_ITEM_ID = QUERY_INT_LENGTH_REG THEN
QUERY_INT_VAL=TOOL RETURN ENDIF
:C: IF QUERY_ITEM_ID = QUERY_INT_OFFSET_REG THEN
CALL(CALC_QUERY_DIAM_OFFSET_REG)RETURN ENDIF
:C: IF QUERY_ITEM_ID = QUERY_GCODE_AXIS_NAMES_T1A THEN
CALL(QUERY_AXIS_NAMES_T1A)RETURN ENDIF
:C: IF QUERY_ITEM_ID = QUERY_GCODE_AXIS_NAMES_T2A THEN
CALL(QUERY_AXIS_NAMES_T2A)RETURN ENDIF
:C: IF QUERY_ITEM_ID = QUERY_GCODE_AXIS_NAMES_T1B THEN
CALL(QUERY_AXIS_NAMES_T1B)RETURN ENDIF
:C: IF QUERY_ITEM_ID = QUERY_GCODE_AXIS_NAMES_T2B THEN
CALL(QUERY_AXIS_NAMES_T2B)RETURN ENDIF
CALC_PRE_POST_INITIALIZE
Purpose
Can be used with all posts.
Syntax
:SECTION=CALC_PRE_POST_INITIALIZE
Comments
This section will get called when posting before any other section gets called. Can be used
to set system or post variables before other main sections get called for initializing code. To
be used in CAMWorks 2014 or newer version.
CALC_OUTPUT_RAPID_SPINDLE_TO_HOME
Purpose
Can be used with any turn or mill/turn posts that support sub spindle operations.
Syntax
:SECTION=CALC_OUTPUT_RAPID_SPINDLE_TO_HOME
Comments
This section will get called when you insert a sub spindle operation and you select “Sub
Spindle Home” in a rapid step. To be used in CAMWorks 2014 or newer version.
CALC_OUTPUT_FEED_SPINDLE_TO_HOME
Purpose
Can be used with any turn or mill/turn posts that support sub spindle operations.
Syntax
:SECTION=CALC_OUTPUT_FEED_SPINDLE_TO_HOME
Comments
This section will get called when you insert a sub spindle operation and you select “Sub
Spindle Home” in a feed step. To be used in CAMWorks 2014 or newer version.
Commands
OPENDB
Purpose
Opens database and defines record variables.
Syntax
OPENDB(FileNumber, FileName, TableName, RecordList, Status)
CLOSEDB
Purpose
Closes database.
Syntax
CLOSEDB(FileNumber)
LOOKUPDB
Purpose
Lookup record based on variables in KeyList.
Syntax
LOOKUPDB(FileNumber, KeyList, Status)
Comments
Parameter Description
FileNumber Access database file ID number - range (0 to 19)
FileName Access database filename – character string or character variable with full
path
TableName Access database table name – character string or character variable
RecordList Attribute list that describes database fields 1 to 1
KeyList Attribute list that describes key fields to be used for lookup – all members
of
This list must also be members of the RecordList
Status Integer variable to return status of the command – 1 = Success, 0 = Fail
Example
For this example, the database has three fields Material, Thickness and Feedrate. In this demo
post, you are going to use the database to lookup values in the fld1 and fld2 attributes to find a
match and set the posts feedrate=fld3.
8. Unzip Demo.zip on any drive and in any folder.
9. Edit Demo.lib.
Look at the attributes that were created for the use of this database.
For this example, the database has three fields Material, Thickness and Feedrate. You
will open the database later in this example.
The attribute fld1 represents the material and it is a character type, fld2 represents the
thickness and it is a decimal type, fld3 represents the feedrate and it is a decimal type.
Below is the list of attributes needed for this example. In this demo post, you are going
to use the database to lookup values in fld1 and fld2 to find a match and set the posts
feedrate=fld3.
*----------------------------------------------------------
* Define Database Attributes
*----------------------------------------------------------
:ATTRNAME=fld1
:ATTRTYPE=VALUE
:ATTRVTYPE=CHARACTER
:ATTREMARK=Material
:ATTRSEL=N
:ATTRINLEN=25
:ATTRSHORT=Material
:ATTRLONG=ENTER Material Type
:ATTRHIGH=~
:ATTRLOW=
:ATTRDEFAULT=
:ATTRUSED=1
:ATTREND
*-----------------------------------
:ATTRNAME=fld2
:ATTRTYPE=VALUE
:ATTRVTYPE=DECIMAL
:ATTREMARK=Thickness
:ATTRSEL=N
:ATTRSHORT=Thickness
:ATTRLONG=ENTER Thickness
:ATTRHIGH=9999
:ATTRLOW=0
:ATTRDEFAULT=0
:ATTRUSED=1
:ATTREND
*-----------------------------------
:ATTRNAME=fld3
:ATTRTYPE=VALUE
:ATTRVTYPE=DECIMAL
:ATTREMARK=Feedrate
:ATTRSEL=N
:ATTRSHORT=Feedrate
:ATTRLONG=ENTER Feedrate
:ATTRHIGH=9999
:ATTRLOW=0
:ATTRDEFAULT=0
:ATTRUSED=1
:ATTREND
10. Along with defining the fields, you must also define the field attributes in a List type
attribute. In this post it is called demo fields. You must place these attributes in the
position that matches the database. See below.
*----------------------------------------------------------
:ATTRNAME=demo fields
:ATTRTYPE=LIST
:ATTRSEL=N
:ATTRTITLE=Demo Database Fields
:ATTRLIST=fld1
:ATTRLIST=fld2
:ATTRLIST=fld3
:ATTRUSED=1
:ATTRDEFAULT=1
:ATTREND
11. You must also define the lookup attributes in a list type attribute. In this post, it is called
demo lookup. Since you are going to use fields 1 and 2 for the lookup, then fld1 & fld2
are placed in the lookup attribute list as shown below.
*----------------------------------------------------------
:ATTRNAME=demo lookup
:ATTRTYPE=LIST
:ATTRSEL=N
:ATTRTITLE=Demo Database Lookup
:ATTRLIST=fld1
:ATTRLIST=fld2
:ATTRUSED=1
:ATTRDEFAULT=1
:ATTREND
12. In this demo post, you are allowing the user to enter the path and filename of the
database from the Setup Information command on the CAM menu. As shown below,
the default path and name are C:\DEMO\DEMO.MDB.
*-----------------------------------
:ATTRNAME=comment 1
:ATTRTYPE=VALUE
:ATTRVTYPE=CHARACTER
:ATTREMARK=Database Name & Location
:ATTRSEL=N
:ATTRINLEN=25
:ATTRSHORT=Database Name & Location
:ATTRLONG=ENTER Database Name & Location
:ATTRHIGH=~
:ATTRLOW=
:ATTRDEFAULT=C:\DEMO\DEMO.MDB
:ATTRUSED=1
:ATTREND
13. You also need to define an attribute to represent the status of opening the database and
the lookup of the database as shown below.
*-----------------------------------
:ATTRNAME=DATABASE_STATUS
:ATTRTYPE=POST
:ATTRVTYPE=INTEGER
:ATTREMARK=
:ATTREND
*-----------------------------------
:ATTRSEL=N
:ATTRTITLE=Attachable
:ATTRLIST=program stop
:ATTRLISTDEF=1
:ATTRLIST=optional stop
:ATTRLISTDEF=
:ATTRLIST=machine compensation
:ATTRLISTDEF=1
:ATTRLIST=feedrate
:ATTRLISTDEF=10
:ATTRLIST=abs inc
:ATTRLISTDEF=1
*************** Add the database attributes to the Attachable list
:ATTRLIST=fld1
:ATTRLIST=fld2
:ATTRLIST=fld3
:ATTRLIST=demo fields
:ATTRLIST=demo lookup
******************
:ATTRUSED=1
:ATTRDEFAULT=1
:ATTREND
:ATTRLIST=thickness --------------------------
:ATTRLISTDEF=.125
:ATTRLIST=init abs inc
:ATTRLISTDEF=1
:ATTRLIST=init feedrate
:ATTRLISTDEF=10
:ATTRLIST=i machine compensation
:ATTRLISTDEF=1
:ATTRLIST=d offset reg
:ATTRLISTDEF=1
**************** Add this for the database name and path
:ATTRLIST=comment 1
:ATTRLISTDEF=
****************
:ATTRUSED=1
:ATTRDEFAULT=1
:ATTREND
*
* AIC = 0 - Absolute Center
* AIC = 1 - Incremental distance from Start to Center
* AIC = 2 - Absolute or Incremental distance from Start to
Center
* AIC = 3 - Incremental distance from Center to Start
:C: AIC = 1
*
* D Offset Register Number
*
* If COMP_OFFSET=20 and TOOL=1 then
COMP_NUMBER=(TOOL+COMP_OFFSET)
* COMP_NUMBER=21 - <COMP_NUMBER>
*
:C: COMP_OFFSET=0
*
* Open the database and call the lookup
*
17. Now I called a calc section to do the open database. Six lines down in the src file shows
the OPENDB command line.
:C: CALL(CALC_OPEN_DATABASE)
18. Once I have opened the database, then I can do a lookup or multiple lookups until I
close the database.
:C: CALL(CALC_LOOKUP_DATABASE)
20. In the example below, comment_1 stores the path and file name of the database,
DEMO is the databases table name, demo_fields stores a list of the fields in the
database and DATABASE_STATUS stores the status of the open database command.
Notice that if it cannot open the database then, we call an error message close the
database. In this case, you might want to set a flag to not do a lookup, because the
database is not open and might error out.
:SECTION=CALC_OPEN_DATABASE
:C: OPENDB(1,comment_1,{DEMO},demo_fields,DATABASE_STATUS)
21. In the example below, you can set fld1=material and fld2=thickness because material
and thickness are asked in the Setup info.
In the example below, the lookup command uses demo_lookup list attribute that uses
fld1 and fld2 to find a match. If it finds a match, then feedrate is set to fld3. If it cannot
find a match, then we will default the feedrate to 999.
:SECTION=CALC_LOOKUP_DATABASE
:C: fld1=material
:C: fld2=thickness
:C: LOOKUPDB(1,demo_lookup,DATABASE_STATUS)
:C: IF DATABASE_STATUS=0 THEN
:C: CALL(LOOKUP_ERROR)
:C: fld1={0}
:C: fld2=0
:C: fld3=999
:C: ENDIF
:C: feedrate=fld3
*
:SECTION=LOOKUP_ERROR
:T: Error in Lookup In Demo Database or<EOL>
:T: Lookup found no matches in Demo Database<EOL>
*
23. Close the design window in the Demo.mdb and select the open button.
The form below shows the three fields with information filled in. This example only has
6 records. You can have as many fields and records as you want.
CALC Sections
The SECTION command determines the name of a section and what type of section it is. If the
:SECTION=CALC_? section equals starts with a CALC, then it is a calculation section; otherwise,
it is a template section.
Calc sections:
Mill
CALC_LINE_MOVE_MILL
CALC_ARC_MOVE_MILL
CALC_RAPID_MOVE_MILL
CALC_SINGLE_DRILL_MILL
CALC_INIT_TOOL_CHANGE_MILL
CALC_SUB_TOOL_CHANGE_MILL
CALC_EVERY_MOVE_MILL
CALC_GRID_PATTERN_DRILL
CALC_DRILL_INCREMENT_DRILL
CALC_BOLT_HOLE_CIR_DRILL
CALC_ARC_PATTERN_DRILL
CALC_RAPID_Z_UP_MILL
CALC_RAPID_Z_DOWN_MILL
CALC_FEED_Z_MILL
CALC_ROTATE_X
CALC_ROTATE_Y
CALC_ROTATE_Z
CALC_ARC_MOVE_MILL_ZX
CALC_ARC_MOVE_MILL_YZ
CALC_ARC_MOVE_MILL_ANYPLANE
CALC_POST_INITIALIZE
CALC_TOOL_INITIALIZ
Lathe
CALC_LINE_MOVE_LATHE
CALC_ARC_MOVE_LATHE
CALC_RAPID_MOVE_LATHE
CALC_SYSTEM_THREAD_LATHE
CALC_INIT_TOOL_CHANGE_LATHE
CALC_SUB_TOOL_CHANGE_LATHE
CALC_EVERY_MOVE_LATHE
CALC_MACHINE_THREAD_LATHE
CALC_SYSTEM_DRILL_LATHE
CALC_MACHINE_DRILL_LATHE
CALC_START_BOUNDARY_LATHE
CALC_END_BOUNDARY_LATHE
CALC_SLOWDOWN_SPEED
CALC_SHIFT_TOOL_LATHE
CALC_CUTTER_COMP_LATHE
Plasma
CALC_LINE_MOVE_PLASMA
CALC_ARC_MOVE_PLASMA
CALC_RAPID_MOVE_PLASMA
CALC_INIT_TOOL_CHANGE_PLASMA
CALC_SUB_TOOL_CHANGE_PLASMA
CALC_EVERY_MOVE_PLASMA
CALC_GRID_PATTERN_PLASMA
CALC_PLASMA_INCREMENT_PLASMA
CALC_BOLT_HOLE_CIR_PLASMA
CALC_ARC_PATTERN_PLASMA
CALC_REPOSITION_PLASMA
CALC_RAPID_TO_TRAPDOOR_PLASMA
CALC_PROFILE_DRILL_PLASMA
Mill-Turn
CALC_CHANGE_MILL_SPEED
CALC_OUTPUT_POLAR_SPINDLE_ORIENTATION
CALC_OUTPUT_CANCEL_POLAR_SPINDLE_ORIENTATION
CALC_OUTPUT_SPINDLE_STATE
CALC_OUTPUT_SPINDLE_ORIENTATION
CALC_OUTPUT_SPINDLE_COMMENT
CALC_OUTPUT_SPINDLE_COMMAND
CALC_OUTPUT_CHUCK_OPEN
CALC_OUTPUT_CHUCK_CLOSE
CALC_OUTPUT_ARBOR_OPEN
CALC_OUTPUT_ARBOR_CLOSE
CALC_OUTPUT_COLLET_OPEN
CALC_OUTPUT_COLLET_CLOSE
CALC_OUTPUT_FEEDRATE
CALC_OUTPUT_REFERENCE_POINT
CALC_OUTPUT_SPINDLE_SYNC
CALC_OUTPUT_RAPID_SPINDLE_TO_POSITION
CALC_OUTPUT_SPEED
CALC_OUTPUT_FEED_SPINDLE_TO_POSITION
CALC_QUERY_POST
CALC_OUTPUT_RAPID_SPINDLE_TO_HOME
CALC_OUTPUT_FEED_SPINDLE_TO_HOME
Punch
CALC_LINE_MOVE_PUNCH
CALC_ARC_MOVE_PUNCH
CALC_RAPID_MOVE_PUNCH
CALC_SINGLE_HIT_PUNCH
CALC_INIT_TOOL_CHANGE_PUNCH
CALC_SUB_TOOL_CHANGE_PUNCH
CALC_EVERY_MOVE_PUNCH
CALC_START_OF_TAPE_PUNCH
CALC_END_OF_TAPE_PUNCH
CALC_GRID_PATTERN_PUNCH
CALC_PUNCH_INCREMENT_PUNCH
CALC_BOLT_HOLE_CIR_PUNCH
CALC_ARC_PATTERN_PUNCH
CALC_WINDOW_PUNCH
CALC_WINDOW_FRAME_PUNCH
CALC_REPOSITION_PUNCH
CALC_OFFSET_PART_PUNCH
CALC_BEG_MACRO_PUNCH
CALC_END_MACRO_PUNCH
CALC_MULTIPLE_MACRO_CALL_PUNCH
CALC_MIRROR_MACRO_CALL_PUNCH
CALC_MACRO_CALL_PUNCH
CALC_MULTIPLE_MACRO_DEFINE_PUNCH
CALC_SETUP_SHEET_PUNCH
Shear
CALC_RAPID_MOVE_SHEAR
CALC_INIT_TOOL_CHANGE_SHEAR
CALC_SUB_TOOL_CHANGE_SHEAR
CALC_EVERY_MOVE_SHEAR
CALC_FULL_SHEAR
CALC_HALF_SHEAR_X
CALC_HALF_SHEAR_Y
CALC_FULL_SHEAR_DIAGONAL
CALC_HALF_SHEAR_DIAGONAL
CALC_REPOSITION_SHEAR
Laser
CALC_LINE_MOVE_LASER
CALC_ARC_MOVE_LASER
CALC_RAPID_MOVE_LASER
CALC_PROFILE_DRILL_LASER
CALC_INIT_TOOL_CHANGE_LASER
CALC_SUB_TOOL_CHANGE_LASER
CALC_EVERY_MOVE_LASER
CALC_GRID_PATTERN_LASER
CALC_LASER_INCREMENT_LASER
CALC_BOLT_HOLE_CIR_LASER
CALC_ARC_PATTERN_LASER
CALC_REPOSITION_LASER
CALC_RAPID_TO_TRAPDOOR_LASER
CALC_PROFILE_DRILL_LASER
EDM
CALC_LINE_MOVE_EDM
CALC_ARC_MOVE_EDM
CALC_POINT_MOVE_EDM
CALC_RAPID_MOVE_EDM
CALC_INIT_TOOL_CHANGE_EDM
CALC_SUB_TOOL_CHANGE_EDM
CALC_EVERY_MOVE_EDM
CALC_START_HOLE_EDM
CALC_END_HOLE_EDM
CALC_GET_TAPER_EDM
Misc
CALC_BEFORE_ATTRIBUTES
CALC_DURING_ATTRIBUTES
CALC_AFTER_ATTRIBUTES
CALC_SWITCH_TO_PLASMA
CALC_SWITCH_TO_PUNCH
CALC_START_OF_TAPE
CALC_END_OF_TAPE
CALC_OFFSET_PART
CALC_BEG_MACRO
CALC_END_MACRO
CALC_MULTIPLE_MACRO_CALL
CALC_MIRROR_MACRO_CALL
CALC_MACRO_CALL
CALC_MULTIPLE_MACRO_DEFINE
CALC_SETUP_SHEET
CALC_START_OPERATION
CALC_END_OPERATION