© Copyright 2016 Delcam Ltd. All rights reserved.
This document is intended to outline CLDATA as used by PowerMill.
PowerMill uses CLDATA in a way that broadly conforms to ISO 3592-1978 and ISO 4343-1978: therefore copies of those documents would be a useful addition to the information given below. An additional document is available from Delcam which describes the structure of a generic CLDATA record.
These are given by class.
This class of records is not used by PowerMill.
These records are used extensively by PowerMill. A brief outline will be given below, in tabular form. Further detail will be given later. This table does not give all 2000 records that are currently meaningful to DUCTpost: rather it gives those 2000 records that are written by PowerMill.
| Code | Mnemonic | Description |
| 5 | RAPID | Indicates that following 5000 record may be performed as a point-to-point move |
| 17 | GOHOME | Indicates that the next 5000 record should be interpreted as a move to the home position |
| 1004 | CLEARP | PowerMill uses this for StartZ: this differs from the standard. |
| 1007 | CUTCOM | Cutter compensation |
| 1009 | FEDRAT | Specifies the feedrate |
| 1010 | DELAY | Specifies any dwell |
| 1014 | PPLOT | Used by PowerMill to indicate the size of the block. This differs from the standard |
| 1030 | COOLNT | Specifies coolant flow, or type, or both |
| 1031 | SPINDL | Specifies spindle function |
| 1044 | PPRINT | Specifies a comment string |
| 1045 | PARTNO | Gives a text string used to identify the part |
| 1046 | INSERT | Text which will be inserted in the output file |
| 1055 | LOADTL | Indicates that a tool should be loaded, and gives details of this tool |
| 1054 | CYCLE | Indicates a canned cycle |
| 1079 | PPFUN | PowerMill uses this a lot, almost as a "proprietary" record. See below for details |
| 1094 | SAFPOS | Used by PowerMill to specify SafeZ. This differs from the standard. |
This record has no effect itself, it used to flag the fact that the next 5000 5 record may be performed as a point-to-point move. This record may contain more than one move, and may be continued by one or more 5000 6 records. All moves within the 5000 5 (and its continuation, if present) should be treated as point-to-point.
| Word | Type | Represents |
| 1 | integer | plane code (always has value 33) |
| 2 | real | SafeZ value |
| Word | Type | Represents |
| 1 | integer | code |
The values the code can take have the following meanings:
| Word | Type | Represents |
| 1 | real | feedrate value |
| 2 | integer | units code (not actually used) |
| Word | Type | Represents |
| 1 | real | dwell time in seconds |
| Word | Type | Represents |
| 1 | real | Block XMin |
| 2 | real | Block Ymin |
| 3 | real | Block ZMin |
| 4 | real | Block XMax |
| 5 | real | Block YMax |
| 6 | real | Block ZMax |
| Word | Type | Represents |
| 1 | integer | coolant code |
This integer is interpreted as follows:
| Word | Type | Represents |
| 1 | integer | code (= 72, for spindle off) |
and like so, for spindle on:
| Word | Type | Represents |
| 1 | real | spindle speed, in RPM |
| 2 | integer | code (= 78, for spindle on) |
| 3 | integer | sense (=60 for clockwise, =59 for counterclockwise |
| 4 | integer | range (=145 always) |
| 5 | integer | ?, always 0 |
| 6 | integer | indicates a radius value follows, always =23 |
| 7 | real | tip radius: PowerMill uses this for the tip radius of a tool |
| 8 | integer | always 0 |
| 9 | real | always 0.0 |
| Word | Type | Represents |
| 1 | real | toolnumber (real is not a typo!) |
| 2 | integer | indicates that tool length follows (=9) |
| 3 | real | tool length |
| 4 | integer | indicates that the tool diameter follows (=509) |
| 5 | real | tool diameter |
| 6 | integer | indicates that the offset toolnumbers follow |
| 7 | real | the length offset register number for the tool |
| 8 | real | the diameter offset register number for the tool |
| 9* | integer | optionally present, indicates a toolname follows (=3017) |
| 10* | character | optionally present, forms the toolname |
| ...* | character | optionally present, any additional character records required to fully specify the tool name |
The following is for a multiple peck cycle:
| Word | Type | Represents |
| 1 | integer | code to indicate cycle type |
| 2 | real | clearance_plane + peck_depth |
| 3 | real | clearance_plane + 2.0*peck_depth |
| ... | ... | ... |
| N | real | clearance_plane + (N-1)*peck_depth |
| N+1 | real | total_depth |
| N+2 | integer | =315 |
| N+3 | real | feedrate |
| N+4 | real | =0.0 |
| N+5 | real | clearance_plane |
For single peck cycles, only the total depth is given. Note the somewhat odd manner in which the drill depths are defined. Also, note that the clearance plane is defined somewhat oddly, and is the distance between the Z height of the actual clearance plane, and the previous Z height. It would be always expected to be positive, since one expects to be above the clearance plane before drilling begins.
The drill type codes are like so:
| Word | Type | Represents |
| 1 | real | SafeZ value |
These contain character CLDATA. The original intention of PPFUN records is to allow a "user" CLDATA record that the post-processor can pick up and act upon. When the character CLDATA is decoded, there is a space delimited text string. The first token in this text string is the PPFUN command. These can be created by the user within PowerMill, but certain PPFUN records are used by PowerMill to indicate certain special properties. The PPFUN commands that have special meaning to PowerMill are listed below. Note that any numerical values are represented in character form.
These records are used to specify geometry. PowerMill uses these to specify circles (or arcs) and B-spline curves. The circle record is standard, and is structured as below, with major word taking the value 2:
| Word | Type | Represents |
| 1 | integer | =1 |
| 2 | integer | =4 |
| 3 | integer | =9 |
| 4 | integer | =0 |
| 5 | integer | =0 |
| 6 | real | centre X coordinate |
| 7 | real | centre Y coordinate |
| 8 | real | centre Z coordinate |
| 9 | real | axis X component |
| 10 | real | axis Y component |
| 11 | real | axis Z component |
| 12 | real | radius |
Delcam also uses the 3000 class record to represent non-rational B-spline curves. This use of the 3000 class record uses a major word of 0, and is structured as follows:
| Word | Type | Represents |
| 1 | integer | =0 |
| 2 | integer | Code to indicate spline record (=126) |
| 3 | integer | =1 |
| 4 | integer | order of spline (=3) |
The 3000 class of records are followed by 5000 5 records (possibly continued by 5000 6 records). In the case of a circle record, the 5000 5 record is a polygonisation of the circle. In the case of a spline record, the 5000 5 record gives points that lie on the underlying cubic B-spline curves. Assume that each individual curve is given [0,1] parameterisation:
These records contain the point data that is used to specify the tool motion. PowerMill uses three types of 5000 record:
| Code | Mnemonic | Description |
| 3 | FROM | Specifies the "home" point of the toolpath. |
| 5 | MOTION | General motion record, that may be modified by the immediately preceding record (CIRCLE, SPLINE, CYCLE, GOHOME). | 6 | CONT | Continuation of a 5000 5 record |
MOTION records are all structured as below, with the example record showing two points. In a 5000 5 or 5000 6 record there can be up to 80 points.
| Word | Type | Represents |
| 1 | real | X coordinate of point 1 |
| 2 | real | Y coordinate of point 1 |
| 3 | real | Z coordinate of point 1 |
| [4 | real | X coordinate of point 2] |
| [5 | real | Y coordinate of point 2] |
| [6 | real | Z coordinate of point 2] |
If the CLDATA is in MULTAX mode, then the 5000 5/6 records contain toolvector information in addition to tool position information. Thus, only 40 points may be contained in such a record.
| Word | Type | Represents |
| 1 | real | tolerance value |
| 2 | real | tolerance value |
| 3 | real | tolerance value |
6000 6 is the tool information record structured as follows.
| Word | Type | Represents |
| 1 | real | cutter diameter |
| 2 | real | corner radius |
| 3 | real | tip radius x |
| 4 | real | tip radius y |
| 5 | real | not used |
| 6 | real | taper angle |
| 7 | real | cutting length |
| Word | Type | Represents |
| 1 | integer | status: =1 (ON), =0 (OFF) |
MULTAX ON remains active until MULTAX OFF is seen.
| Word | Type | Represents |
| 1 | integer | code: =171 (MM), =173 (INCH) |
| Word | Type | Represents |
| 1 | integer | |
| 2 | integer | |
| 3 | integer | |
| 4 | String | Description |
The description consists of one of the following
| Word | Type | Word | Type | Word | Type | Represents |
| 1 | real | 2 | real | 3 | real | Position |
| 4 | real | 5 | real | 6 | real | X Vector |
| 7 | real | 8 | real | 9 | real | Y Vector |
| 10 | real | 11 | real | 12 | real | Z Vector |
| 13 | real | 14 | real | 15 | real | Euler angles |
| Word | Type | Represents |
| 1 | integer | Record Code |
| 2 | string | String value or name of record |
| 3 | real | Numeric value or 0 |
The following 29000 records are available:
| Integer | String | Real | Meaning |
| 1 | Tool type | Length | Length to be used for multiaxis calculation |
| 2 | "Recommended_length" | Length | Overhang |
| 3 | workplane name | 0 | Toolpath creation workplane name |
| 4 | "Tip" or "Centre" | 0 | Coordinate output - tool tip or centre |
| 5 | "Drill_dwell" | Dwell | Dwell for drilling cycle |
| 6 | "Hole_top" | Top | Hole top for drilling |
| 7 | "Hole_diameter" | Diameter | Hole diameter for drilling |
| 8 | "Rapid_feed" | Feedrate | Rapid feedrate |
| 9 | "Cutting_feed" | Feedrate | Cutting feedrate |
| 10 | "Plunge_feed" | Feedrate | Plunge feedrate |
| 11 | "Number_pecks" | Number | Number of pecks for drilling |
| 12 | "Pitch" | Value | Thread pitch for drilling | 20 | Workplane name | 0 | Output workplane name |
| 21 | "Expanded_cycle" | 0 | Only written if the following data is an expanded drilling cycle |
| 22 | "Peck_depth" | Depth | Peck depth for drilling |
| 23 | "Peck_decrement" | Value | Peck decrement if each peck is to be smaller than the last |
| 24 | "Minimum_peck" | Value | Smallest peck if each peck is to be smaller than the last |
| 25 | "Feed_reduction" | Value | Proportion by which feed is to be reduced at the bottom of the drill |
| 26 | "Rfeed_distance" | Distance | Distance for which feed is to be reduced at the bottom of the drill |
| 27 | "Full retract" | 0.0(partial retract) or 1.0(full retract) | Drilling : if 1 retract to safe Z (G98) otherwise to the clear plane (G99) |
| 28 | "User_par" | Value | User defined parameter for drilling |
| 29 | "Draft angle" | Value | Draft angle for drilling |
| 30 | "Sfeed_reduction" | Value | Factor for reducing the feedrate at the top of a hole. |
| 31 | "Sfeed_distance" | Value | Fraction of the drilled depth for which the feedrate is reduced. |
| 32 | "Overlap" | Value | The factor by which a profile overlaps in profile drilling. |
| 33 | "Retract_Factor" | Value | The factor of the peck used to retract for break chip drilling |
| 34 | "Retract_Feed_Factor" | Value | The retract may be done at a different feedrate from cutting |
| 35 | "Chamfer_Diameter" | Value | Chamfer diameter for drilling |
| 36 | "Sub_Peck" | Value | Subsidiary peck (for each peck several sub pecks are performed). |
| 37 | "Rapid_Retract" | 0 or 1 | If 1 then drilling cycle retracts at rapid. |
| 38 | "Hole_Depth" | Value | The depth of the actual hole (which may not be the drilled depth |
| 39 | strategy_subtype | Value | Strategy type (e.g. single peck for drilling) |
| 40 | strategy name | strategy code | Toolpath strategy name |
| 41 | "Number_flutes" | Number | The number of flutes on the tool |
| 42 | "Compensation" | Radius | Value for radius compensation (not usually the full radius) |
| 43 | "Toolpath_codebase" | Codebase | Toolpath creation codebase |
| 44 | "Modification_status" | 0.0 (not modified) or 1.0 (modified) | Has toolpath been edited |
| 45 | "Program Number" | Program Number | Number which can be used at start of program output. |
| 46 | "Varifeed" | 1.0 | The toolpath following this record contains some feedrates which are not plunge,cutting or rapid |
| 47 | "Finishing" | 1.0 | Toolpath Type |
| "Roughing" | 2.0 | ||
| "Drilling" | 3.0 | ||
| "Semi_Finishing" | 4.0 | ||
| 48 | tool_description | Text | Tool description |
| 60 | project name | 1.0 | The project name (not the full project path) |
| 61 | "Skim_distance" | Value | The skim distance |
| 62 | "Cut_direction" | Value | Cut direction |
| 70 | "Allowance" | Value | The allowance for a drill profile finishing pass |
| 71 | "Number_of_Cuts" | Value | The number of cuts for drilling |
| 72 | "Number_of_Turns" | Value | The number of turns for drilling |
| 73 | "Lead_angle" | Value | The drilling lead angle |
| 74 | "Incr_start" | Value | The distance above the clearance where pecking starts |
| 75 | "Secondary_Clearance" | Value | The secondary clearance |
| 99 | "Toolpath_end" | Value | The toolpath end |
| 100 | "required_ductpost" | Codebase | Minimum codebase of ductpost for this cutfile |
| 101 | "axial_thickness" | Value | Axial thickness for this toolpath |
| 102 | "SAFEAREAPLANEDIST" | Value | Safe area distance |
| 103 | "SAFEAREAPLANEPLUNGE" | Value | Safe area plunge distance |
| 104 | "SAFEAREAPLANENORMX" | Value | X component of the safe area axis |
| 105 | "SAFEAREAPLANENORMY" | Value | Y component of the safe area axis |
| 106 | "SAFEAREAPLANENORMZ" | Value | Z component of the safe area axis |
| 107 | "SAFEAREACYLPOINTX" | Value | X component of the safe area point |
| 108 | "SAFEAREACYLPOINTY" | Value | Y component of the safe area point |
| 109 | "SAFEAREACYLPOINTZ" | Value | Z component of the safe area point |
| 110 | "SAFEAREABOXLENX" | Value | X component of a safe area box length |
| 111 | "SAFEAREABOXLENY" | Value | Y component of a safe area box length |
| 112 | "SAFEAREABOXLENZ" | Value | Z component of a safe area box length |
| 113 | "SAFEAREATYPE" | 1 (plane), 2 (cylinder), 3 (sphere), 4 (Box) | The type of safe area |
| 114 | "CNC Cutter Comp Type" | 1 (full radius), 2 (wear), 0 (no) | Does the toolpath use cutter compensation |
| 115 | "Drill_Lead_Dist" | Value | Drill lead distance |
| 116 | "Feed_Ramp_LeadIn" | Value | Feedrate definition for ramp lead in moves |
| 117 | "Feed_LeadIn" | Value | Feedrate definition for lead in moves |
| 118 | "Feed_LeadOut" | Value | Feedrate definition for lead out moves |
| 119 | "Ramp_LeadIN_feed" | Value | Marker for ramp lead in moves |
| 120 | "LeadIN_feed" | Value | Marker for lead in moves |
| 121 | "LeadOUT_feed" | Value | Marker for lead out moves |
| 122 | Model location workplane name | 0 | Name of the model location workplane |
| Word | Type | Represents |
| 1 | int | 1 project, 2 toolpath, 3 tool |
| 2 | string | User parameter name |
| 3 | double | User parameter value |
| Word | Type | Represents |
| 1 | int | Not used (always 0) |
| 2 | string | Setting name |
| 3 | string | Setting value |
These records contain the point data that is used to specify the tool motion together with a contact normal vector
MOTION with contact normal records are all structured as below, with the example record showing two points. In a 32000 5 or 32000 6 record there can be up to 40 points.
| Word | Type | Represents |
| 1 | real | X coordinate of point 1 |
| 2 | real | Y coordinate of point 1 |
| 3 | real | Z coordinate of point 1 |
| 4 | real | I coordinate of 1st contact normal |
| 5 | real | J coordinate of 1st contact normal |
| 6 | real | K coordinate of 1st contact normal |
| [7 | real | X coordinate of point 2] |
| [8 | real | Y coordinate of point 2] |
| [9 | real | Z coordinate of point 2] |
| [10 | real | I coordinate of 2nd contact normal] |
| [11 | real | J coordinate of 2nd contact normal] |
| [12 | real | K coordinate of 2nd contact normal] |
If the CLDATA is in MULTAX mode, then the 32000 5/6 records contain toolvector information between the tool position information and contact normal. Thus, only 24 points may be contained in such a record.
These records contain the point data that is used to specify the tool motion together with an orientation vector
MOTION with orientation records are all structured as below, with the example record showing two points. In a 32000 5 or 32000 6 record there can be up to 40 points.
| Word | Type | Represents |
| 1 | real | X coordinate of point 1 |
| 2 | real | Y coordinate of point 1 |
| 3 | real | Z coordinate of point 1 |
| 4 | real | I coordinate of 1st orientation vector |
| 5 | real | J coordinate of 1st orientation vector |
| 6 | real | K coordinate of 1st orientation vector |
| [7 | real | X coordinate of point 2] |
| [8 | real | Y coordinate of point 2] |
| [9 | real | Z coordinate of point 2] |
| [10 | real | I coordinate of 2nd orientation vector] |
| [11 | real | J coordinate of 2nd orientation vector] |
| [12 | real | K coordinate of 2nd orientation vector] |
If the CLDATA is in MULTAX mode, then the 32100 5/6 records contain toolvector information between the tool position information and orientation vector. Thus, only 24 points may be contained in such a record.
| Rev No. | What | Who | When |
| 1 | Added 30000 and 32000 | mh | 28/01/10 |
| 1 | Added 28000 and 30100 | mh | 12/11/10 |
| 1 | Added 1046 | mh | 27/03/11 |