EN - 840Dsl Kinematic Chain Milling 0408 - 2019-03
EN - 840Dsl Kinematic Chain Milling 0408 - 2019-03
Kinematic Chain
Documentation
Sinumerik 840D sl
Edition 2019.03
Training Manual
Kinematic Chain
Manual
Valid for:
A175
Content
Fundamentals
of the kinematic
chain function A177 A178
A176
3-axis machine 5-axis machine
Simple
with dividing with table
3-axis machine
unit kinematics
A179
5-axis machine
with head
kinematics
A180
5-axis machine
with mixed
A182 kinematics
A183 Collision
A181
Collision Collision
avoidance, 3-axis avoidance, simple
avoidance, 5-axis
machine with
table kinematics 3-axis machine
A184 dividing unit
Collision
avoidance, 5-axis
head kinematics
A185
Collision
avoidance, 5-axis
mixed kinematics
A186
Transformation
for 5-axis
machines
End
A175 Fundamentals of the kinematic chain function
Sinumerik
Operate
Module Description:
The following chapters provide further details of the kinematic chain operating principle.
In particular, the following topics are discussed:
• Fundamentals of the "Kinematic chains" function
• Explanation of the individual blocks:
Module Objective:
The reader gains a general overview of the kinematic chains operating principle application and, in
various exercises, familiarized with the individual functions and their capabilities. After working through
all chapters, readers should be able to integrate their own machine kinematics in the system.
Content:
Sinumerik
840D sl SINUMERIK Operate v4.8 Page 1 This document was produced for training purposes. A175
Siemens assumes no responsibility for its contents.
A175 Fundamentals of the kinematic chain function
Fundamentals of the
kinematic chain function
START
Fundamentals
of the kinematic
chain
Explanation of
the individual
blocks
Fundamentals of the
kinematic chain function
END
Notes:
The next chapter discusses the "Modelling of kinematic Application of kinematic chains:
chains" topic. The creation of kinematic chains is illustrated
with several examples: The kinematic chains describe the geometric basic design of
the machine with regard to the linear and rotary axes installed
1. Simple 3-axis machine on the machine.
2. 3-axis machine with an optionally mounted A axis Using the kinematic chain as basis, a graphic representation
3. 5-axis machine with table kinematics for the simulation of movement sequences and for the
4. 5-axis machine with head kinematics permanent collision prevention of the NC during machine
5. 5-axis machine with mixed kinematics operation.
Whereby, the kinematics of the associated machine based on
Based on these machine models, the supplementary chapters the base frame are described once in the workpiece direction
explain the commissioning of Collision Avoidance (Chapter and once in the tool direction. Furthermore, the kinematic
A131) and of transformations based on kinematic chains chains can be used to integrate transformations in the NC.
(Chapter A114). Depending on the configuration of the machine, it is possible
that one "branch" of the kinematic chain (e.g. workpiece
branch for the 5-axis machine with head kinematics) is not
occupied with kinematic elements.
This may then remain open.
Compared with the usual capabilities (description of the Thanks to its architecture, the kinematic chain is more
machine kinematics for CYCLE800 via the $TC_CARR[n] flexible, has better performance (more functions can be
machine parameters or the transformation descriptions for implemented, e.g. collision prevention, transformations) and
TRAORI with the $MC_TRAFO5.. machine parameters), a is visualized on the HMI.
kinematic chain can be used for the following functions:
Furthermore, one or more branches can also be programmed
- Simulation of machine movements for a kinematic chain, for example, to consider mounted parts
- Collision check with Collision Avoidance such as
- Configuration and commissioning of transformations:
TRAORI_DYN - Quick-release devices
TRAORI_STAT - Mounted axes, such as dividing units, etc.
TRANSMIT_K - Changeable heads
TRACYL_K - Partitions that can be mounted and dismantled.
TRAANG_K
Tool Carrier based on kinematic chains These branches can be activated or deactivated from an NC
program (switch function).
This allows different machine configurations to be considered.
Notes:
Summary:
Simplified, a kinematic chain of a 3-axis machine tool can have the following structure:
Linear Note:
Spindle Tool The "ROOT" element represents the machine
axis
zero for all example machines used in this doc-
ument.
ROOT Each axis or deployed spindle should consist
of an offset element (distance from the previ-
Linear Linear Work- ous element) and an axis element (rotary axis,
axis axis piece linear axis).
MD 16800 $MN_ROOT_KIN_ELEM_NAME
Name of the root element. As delivered, the name "ROOT" is
entered for the controller, although the name can be custom-
ized to the individual machine.
MD 18882 $MN_MAXNUM_KIN_SWITCHES
The number of switches that can be defined to branch the
chain (see Chapter A177, 3-axis machine with dividing unit).
Notes:
Notes:
Various elements are available in the controller for describing a machine kinematic:
• Rotation
• Linear axis
• Rotation axis
• Offset
• Switch
Overview of the fundamental structure: Note: The sequence "upper tool" and
"lower workpiece" can be chosen
freely.
Branch 1 The associated chains are closed
END_TOOL_CHAIN with the elements
Direction tool
"END_TOOL_CHAIN" and
"END_PART_CHAIN". These two
ROOT
elements can be used for the
parameterization of transformations.
Branch 2 However, we recommend that bit 7
END_PART_CHAIN
Direction tool and bit 8 of the system tag
$NT_CNTRL[n] are used, because
then no manual adaptation of the
offset values is necessary.
Specifically with regard to the 5-axis table machine example:
Notes:
A direction vector and an angle are defined for the rotation. The specified rotation angle acts "mathematic positive" along the
defined rotational vector. Therefore, the direction (+/-) of the vector is critical!
$NK_TYPE[n]=“ROT_CONST“
$NK_OFF_DIR[n,0]=0
$NK_OFF_DIR[n,1]=0
$NK_OFF_DIR[n,2]=1
$NK_A_OFF[n]=90
Linear axis
This element can be used to define a linear axis. The definition of the element always requires a vector based on the coordinate
system currently valid in the chain. The sign of the vector is defined depending on whether the axis moves the workpiece or the
tool:
Sign +: The axis moves the tool
Sign -: The axis moves the workpiece
The assignment of the axis name is based on the machine name as defined in MD10000[n].
The channel axes are not considered here!
$NK_TYPE[n]=“AXIS_LIN“
$NK_OFF_DIR[n,0]=1
$NK_OFF_DIR[n,1]=0
$NK_OFF_DIR[n,2]=0
$NK_A_OFF[n]=0
Notes:
Rotation axis:
The "rotation axis" element makes an assignment to a rotary axis that turns by the defined vector.
The sign of the vector is defined depending on whether the axis moves the workpiece or the tool:
Sign +: The axis moves the tool
Sign -: The axis moves the workpiece
The assignment of the axis name is based on the machine name as defined in MD10000[n].
The channel axes are not considered here!
$NK_TYPE[n]=“AXIS_ROT“
$NK_OFF_DIR[n,0]=0
$NK_OFF_DIR[n,1]=0
$NK_OFF_DIR[n,2]=-1 ; Workpiece axis
$NK_A_OFF[n]=0
Offset:
This element can be deployed to represent constant offsets of elements (preferably rotary axes or also collision bodies). Where-
by, the total offset vector is formed from the individual offsets in X, Y, Z.
For the representation of rotary axes whose position should be corrected later with CYCLE9960, the total offset is formed by
chaining two individual offsets:
1. Offset = coarse offset, X/Y/Z values as specified in the design drawing
2. Offset = fine offset used as target element for correction by CYCLE9960.
$NK_TYPE[n]=“OFFSET“
$NK_OFF_DIR[n,0]=0
$NK_OFF_DIR[n,1]=0
$NK_OFF_DIR[n,2]=0
Notes:
Switch:
A switch allows a chain at a defined position to be steered specifically to a different branch. A typical use is for activation of the
dividing unit (see 3-axis machine with dividing unit) or for changeable heads. When value "-1" is written to the switch number, the
switch is considered to be closed. Otherwise, the switch must be brought to its switch setting with the "$NK_SWITCH[n]" tag.
$NK_TYPE[n]=“SWITCH“
$NK_SWITCH_INDEX[n]=-1
$NK_SWITCH_POS[n]=0
Note:
After switching a switch in the NC program, the command:
PROTA("R")
must be programmed so that the kinematic chain is
reinitialized.
A typical use is shown with a simple 3-axis milling machine with dividing unit:
Dividing unit
Switch
A axis Work-
piece
Linear Linear
axis axis
Work-
ROOT piece
Linear
Spindle Tool
axis
This structure allows the mounted dividing unit to be displayed only in the machine model for simultaneous recording with ma-
chine spatial view and included in the collision consideration when the switch is connected with the A axis. The switch must be
actuated in the NC program by the user or the machine manufacturer.
Notes:
For all considerations, this equivalent model has been introduced for the kinematic chain:
End
End
Workpiece ROOT
Tool chain
chain
Viewing direction
The positions of the rotary axes and of the correction elements are determined based on this equivalent model.
Similarly, the plausible sequence of the entries in the $NT_ROT_AX_NAME[n,m] system tags can be determined.
Notes:
Example for a kinematic chain for a machine with mixed kinematics with correction elements:
The original chain:
is reduced to:
End
Workpiece C axis B axis End
ROOT
chain (0,0,-1) (0,1,1) Tool chain
Viewing direction
This conceptual sequence can now be augmented with the correction elements (each in viewing direction "behind" the associated
rotary axis) for the CYCLE9960:
End Corr.
Corr. End
Workpiece C axis ROOT B axis Spindle
C offset Tool chain
chaine offset
Viewing direction
Notes:
Example for a kinematic chain for a machine with table kinematics with correction elements for CYCLE9960:
Vector Vector
Corr.
A axis
Corr.
C axis End
A offset C offset
C offset
A offset
(-1,0,0) (0,0,-1) Tool chain
is reduced to:
End
C axis A axis End
Workpiece Root
(0,0,-1) (-1,0,0) Tool chain
chain
Viewing direction
This conceptual sequence can now be augmented with the correction elements (each in viewing direction "behind" the associated
rotary axis) for CYCLE9960:
End
C axis Corr. A axis Corr. End
Workpiece ROOT
(0,0,-1) C offset (-1,0,0) A offset Tool chain
chain
Viewing direction
Notes:
Example for a kinematic chain for a machine with head kinematics with
correction elements for CYCLE9960:
End
ROOT Workpiece
chain
Offset Vector
Vector
Y X Z C axis C axis Corr. Offset
A axis
Linear Linear Linear (0,0,1) A axis A axis
(1,0,0)
End
Spindle Offset
Tool chain Corr.
Rot Spindle Spindle
(0,0,-1)
Is reduced to:
End
Root C axis A axis End
Workpiece
(0,0,1) (1,0,0) Tool chain
chain
Viewing direction
This conceptual sequence can now be augmented with the correction elements (each in viewing direction "behind" the
associated rotary axis) for the CYCLE9960:
End
C axis Corr. A axis Corr. End
Workpiece ROOT
(0,0,1) A axis (1,0,0) Spindle Tool chain
chain
Viewing direction
Notes:
The modeling of a machine representation with kinematic chain is performed in several steps:
• 1. Preparation of a principle machine structure with linear and rotary axes as well as all spindles, e.g. as a hand-drawn
sketch.
• 2. Creation of the kinematic chain in the NC based on this basic structure.
• 3. Assignment of protection areas to the individual axes (Chapter A181, A182, A183, A184, A185).
• 4. Assignment of collision bodies (Chapter A181, A182, A183, A184, A185).
• 5. Creation of collision pairs with all bodies to be included in the collision check (Chapter A181, A182, A183, A184, A185).
MD 10619 $MN_COLLISION_TOLERANCE = 1
MD 10621 $MN_COLLISION_PREP_CALC_TIME = 0.5
MD 10622 $MN_COLLISION_SAFETY_DIST = 5
MD 18866 $MN_MM_NUM_KIN_TRAFOS=6
MD 18880 $MN_MM_MAXNUM_KIN_CHAIN_ELEM=50
MD 18890 $MN_MM_MAXNUM_3D_PROT_AREAS = 17
MD 18891 $MN_MM_MAXIMUM_3D_WPFXPROT_ELEM = 0
MD 18892 $MN_MM_MAXNUM_3D_PROT_AREA_ELEM = 68
MD 18893 $MN_MM_MAXNUM_3D_T_PROT_ELEM = 1
MD 18894 $MN_MM_MAXNUM_3D_FACETS_INTERN = 1000
MD 18895 $MN_MM_MAXNUM_3D_FACETS = 0
MD 18896 $MN_MM_MAXIMUM_3D_COLLISION = 0
MD 18897 $MN_MM_MAXIMUM_3D_INTERFACE_IN = 16
MD 18898 $MN_MM_MAXNUM_3D_ COLL_PAIR = 10
MD 18899 $MN_PROT_AREA_TOOL_MASK = 1
MD 51160 $MNS_ACCESS_WRITE_CA_MACH_JOG = 6
MD 51161 $MNS_ACCESS_WRITE_CA_MACH_AUTO = 3
MD 51162 $MNS_ACCESS_WRITE_CA_TOOL = 1
Notes:
To manually switch the collision check via the user interface, a control screen from can be called:
The status of the collision check can be queried via the $AN_COLL_CHECK_OFF system tag:
AUTO mode: Bit 0-3 are not set when the collision check is active.
JOG/MDA operation: Bit 4-7 are not set when the collision check is active.
A175: END
Notes:
Module Description:
The following chapters provide further details of the kinematic chain operating principle. In particular,
the following topics are discussed:
Module Objective:
The reader gains a general overview of the kinematic chains operating principle application and, in
various exercises, familiarized with the individual functions and their capabilities. After working through
all chapters, readers should be able to integrate their own machine kinematics in the system.
Content:
Sinumerik
840D sl SINUMERIK Operate v4.8 Page 1 This document was produced for training purposes. A176
Siemens assumes no responsibility for its contents.
A176 Simple 3-axis machine
Simple
3-axis machine
START
Fundamentals
of the kinematic
chain
Design of the
kinematic chain
NC code of the
kinematic chain
Simple
3-axis machine
END
Notes:
Example 1:
Simple 3-axis milling machine with X and Z in the
workpiece branch, Y in the tool branch.
The machine zero is defined on the table surface (see position of the tool tip in the figure).
The machine provides the following software limit switches (they are required for checking the traversal areas):
X axis:
$MA_POS_LIMIT_MINUS[X]=-300
$MA_POS_LIMIT_PLUS[X]=300
Y axis:
$MA_POS_LIMIT_MINUS[Y]=-400
$MA_POS_LIMIT_PLUS[Y]=0
Z axis:
$MA_POS_LIMIT_MINUS[Z]=0
$MA_POS_LIMIT_PLUS[Z]=690
Notes:
SP1_AXIS:
„MSP1“
Y_AXIS:
„MY1“
ROOT / MCS:
X=0
Y=0
Z=0
Z
X_AXIS:
„MX1“
Z_AXIS:
„MZ1“
Notes:
The kinematic basic chain is described based on the machine tool table in the direction of the workpiece and in the direction of the
tool.
Direction
Workpiece
ROOT
Directiog
Tool
For the direction of the linear and rotary axes, the following declarations are made:
• Axes that move a tool are defined with a positive direction vector
• Axes that move a workpiece are defined with a negative direction vector
Z axis X axis
ROOT
Y axis Spindle
In more detail:
ROOT
Notes:
Before the actual creation of the model begins, the following program is
performed via MDA so that the machine axes are at the initial position when
creating the collision bodies:
TRAFOOF
CYCLE800
T0
M6
G500
G0 SUPA X0 Y0 Z0
M30
In general: The machine axes should be located at a defined position so that the assignment of the bodies in the graphic
window of the machine model can be better understood.
To make changes to the machine model, all transformations must be deactivated in the NC.
Notes:
Accept the selection with the "OK" (VS8) softkey This creates the ROOT element as first element in the
structure tree. The ROOT element should be considered as
being the base frame of the machine.
ROOT
Type "Offset" is selected from the "New kinematic element" dialog box.
Notes:
The name of the element is defined with "Z_OFFSET". Operating sequence for the Z axis:
The offset vector is initialized with (0,0,0). Place the cursor on line "Z_OFFSET".
New element → Kinematic element → Linear axis
Operating sequence for the offset of the X axis: Operating sequence for the X axis:
Place the cursor on line "Z_AXIS". Place the cursor on line "X_OFFSET".
New element → Kinematic element → Offset New element → Kinematic element → Linear axis
The name of the chain element is specified as "X_OFFSET". The name of the chain element is specified as "X_AXIS". The
The offset vector is defined with (0,0,0). direction vector is defined with (-1,0,0).
Notes:
Operating sequence for the TABLE-OFFSET: Operating sequence for the "END_PART_CHAIN" element:
Place the cursor on line "TABLE_OFFSET".
Place the cursor on line "X_AXIS". New element → Kinematic element → Offset
New element → Kinematic element → Offset
The name of the chain element is specified as
The name of the chain element is specified as "END_PART_CHAIN".
"TABLE_OFFSET". Because the kinematic chain in this example is not closed,
The offset is defined with the vector (0,0,0) and so points to the offset vector is initialized with (0,0,0).
the table surface.
Operating sequence for the offset of the Y linear axis: Operating sequence for the Y linear axis:
Place the cursor on line "ROOT". Place the cursor on line "Y_OFFSET".
New element → Kinematic element → Parallel offset New element → Kinematic element → Linear axis
The name of the chain element is specified as "Y_OFFSET". The name of the chain element is specified as "Y_AXIS".
The offset vector is assigned (0,0,0). The axis references machine axis "MY1" and has vector
(0,1,0).
Notes:
Operating sequence for the offset of the spindle: Operating sequence for the spindle:
Place the cursor on line "Y_AXIS". Place the cursor on line "SP1_OFFSET".
New element → Kinematic element → Offset New element → Kinematic element → Rotary axis
The name of the chain element is specified as The name of the chain element is specified as "SP1_AXIS".
"SP1_OFFSET" and has vector (0,0,0). The axis references machine axis "MSP1" and has vector
(0,0,-1).
The direction "-1" in the Z component is considered for the
deployment of turning tools or the tool type "L stylus".
To define uniquely the end of the chain in the tool branch, an The completed structure tree now has the following
offset element with the name "END_TOOL_CHAIN" is components:
appended as last element of the chain.
Operating sequence:
Place the cursor on line "SP1_AXIS".
New element → Kinematic element → Offset
The name of the chain element is specified as
"END_TOOL_CHAIN". Because no offset is used currently in
the complete tool chain, the offset values for X,Y,Z can remain
at the value "0".
Notes:
$NK_NAME[COUNT1]="Z_AXIS" $NK_NAME[COUNT1]="X_OFFSET"
$NK_NEXT[COUNT1]="X_OFFSET" $NK_NEXT[COUNT1]="X_AXIS"
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="AXIS_LIN" $NK_TYPE[COUNT1]="OFFSET"
$NK_OFF_DIR[COUNT1,0]=0 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=0 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=-1 $NK_OFF_DIR[COUNT1,2]=0
$NK_AXIS[COUNT1]="MZ1" $NK_AXIS[COUNT1]=""
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
Notes:
$NK_NAME[COUNT1]="X_AXIS" $NK_NAME[COUNT1]="TABLE_OFFSET"
$NK_NEXT[COUNT1]="TABLE_OFFSET" $NK_NEXT[COUNT1]="END_PART_CHAIN"
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="AXIS_LIN" $NK_TYPE[COUNT1]="OFFSET"
$NK_OFF_DIR[COUNT1,0]=-1 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=0 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=0 $NK_OFF_DIR[COUNT1,2]=0
$NK_AXIS[COUNT1]="MX1" $NK_AXIS[COUNT1]=""
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
$NK_NAME[COUNT1]="END_PART_CHAIN" $NK_NAME[COUNT1]="Y_OFFSET"
$NK_NEXT[COUNT1]="" $NK_NEXT[COUNT1]="Y_AXIS"
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="OFFSET" $NK_TYPE[COUNT1]="OFFSET"
$NK_OFF_DIR[COUNT1,0]=0 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=0 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=0 $NK_OFF_DIR[COUNT1,2]=0
$NK_AXIS[COUNT1]="" $NK_AXIS[COUNT1]=""
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
Notes:
$NK_NAME[COUNT1]="Y_AXIS" $NK_NAME[COUNT1]="SP1_OFFSET"
$NK_NEXT[COUNT1]="SP1_OFFSET" $NK_NEXT[COUNT1]="SPI_AXIS"
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="AXIS_LIN" $NK_TYPE[COUNT1]="OFFSET"
$NK_OFF_DIR[COUNT1,0]=0 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=1 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=0 $NK_OFF_DIR[COUNT1,2]=0
$NK_AXIS[COUNT1]="MY1" $NK_AXIS[COUNT1]=""
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
$NK_NAME[COUNT1]="SPI_AXIS" $NK_NAME[COUNT1]="END_TOOL_CHAIN"
$NK_NEXT[COUNT1]="END_TOOL_CHAIN" $NK_NEXT[COUNT1]=""
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="AXIS_ROT" $NK_TYPE[COUNT1]="OFFSET"
$NK_OFF_DIR[COUNT1,0]=0 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=0 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=-1 $NK_OFF_DIR[COUNT1,2]=0
$NK_AXIS[COUNT1]="MSP1" $NK_AXIS[COUNT1]=""
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
M30
A176: END
Notes:
Module Description:
The following chapters provide further details of the kinematic chain operating principle. In particular,
the following topics are discussed:
• Fundamentals of the "Kinematic chains" function
• Creation of machine models with kinematic chain:
- 3-axis milling machine with optional dividing unit
Module Objective:
The reader gains a general overview of the kinematic chains operating principle application and, in
various exercises, familiarized with the individual functions and their capabilities. After working through
all chapters, readers should be able to integrate their own machine kinematics in the system.
Content:
Sinumerik
840D sl SINUMERIK Operate v4.8 Page 1 This document was produced for training purposes. A177
Siemens assumes no responsibility for its contents.
A177 3-axis machine with dividing unit
Fundamentals
of the kinematic
chain
Design of the
kinematic chain
NC code of the
kinematic chain
Notes:
Example 2: Simple 3-axis milling machine with X and Z in the tool branch, Y in the workpiece branch.
Y axis:
$MA_POS_LIMIT_MINUS[Y]=-350
$MA_POS_LIMIT_PLUS[Y]=350
Z axis:
$MA_POS_LIMIT_MINUS[Z]=0
$MA_POS_LIMIT_PLUS[Z]=650
Dividing End
Y
ROOT Linear unit Workpiece
A axis chain
X Z Spindle End
Linear Linear Rot Tool chain
Notes:
MCS / ROOT
X=0
Y=0
Z=0
Z
Y
X_AXIS
Z_AXIS
Y_AXIS
A_AXIS
Notes:
ROOT
Y_OFFSET X_OFFSET
Y_AXIS X_AXIS
Z_OFFSET
TABLE_
A_CORR
OFFSET SP1_OFFSET
END_
A_OFFSET
PART_CHAIN_2
SP1_AXIS
A_AXIS
END_
TOOL_CHAIN
END_
PART_CHAIN_1
Notes:
TRAFOOF
CYCLE800
T0
M6
G0 SUPA X0 Y0 Z0
M30
Operating sequence for creating the ROOT element: Operating sequence for the offset of the Y linear axis:
Place the cursor on line "Active data". Place the cursor on line "ROOT".
New element → Kinematic element → Offset New element → Kinematic element → Offset
The name is initialized automatically with "ROOT" and does The name of the chain element is specified as "Y_OFFSET".
not need to be changed. The offset vector is defined with (0,0,0).
The offset values X,Y,Z do not need to be further assigned.
Notes:
Operating sequence for the Y linear axis: Operating sequence for creating the switch:
Place the cursor on line "ROOT".
New element → Kinematic element → Linear axis Place the cursor on line "Y_AXIS".
New element → Kinematic element → Switch
The name of the chain element is specified as "Y_AXIS".
The axis references machine axis "MY1" and has vector (0,- The name of the chain element is specified as
1,0). "SWITCH_0_1" (switch with index = 0 in switch setting = 1).
Operating sequence for the correction element of the A axis: Operating sequence for the coarse offset of the A axis:
Place the cursor on line "SWITCH_0_1". Place the cursor on line "A_CORR".
New element → Kinematic element → Offset New element → Kinematic element → Offset
The name of the chain element is specified as "A_CORR". The name of the chain element is specified as "A_OFFSET".
Because this element is used later by CYCLE996, the vector This element programs the coarse offset of the A axis. The
is entered with (0,0,0). offset is defined for the offset vector (-500,0,150). The A axis
is 150 mm above the table surface.
Notes:
Operating sequence for the A rotation axis: Operating sequence for the definition of
Place the cursor on line "A_OFFSET". "END_PART_CHAIN":
New element → Kinematic element → Rotation axis Place the cursor on line "A_AXIS".
New element → Kinematic element → Parallel offset
The name of the chain element is specified as "A_AXIS".
The axis references machine axis "MA1" and has vector The name of the chain element is specified as
(-1,0,0). "END_PART_CHAIN_1". The offset vector is initialized with
(0,0,0).
Operating sequence for the branch at SWITCH[0]: Operating sequence for the TABLE-OFFSET:
Place the cursor on line "SWITCH_0_1".
New element → Kinematic element → Parallel switch Place the cursor on line "SWITCH_0_2".
New element → Kinematic element → Offset
The name of the chain element is specified as
"SWITCH_0_2". The name of the chain element is specified as
"TABLE_OFFSET".
The offset is defined with the vector (0,0,0) and so points to
the table surface.
Notes:
Operating sequence for the "END_PART_CHAIN_2" element: Operating sequence for the offset of the X linear axis:
Place the cursor on line "TABLE_OFFSET". Place the cursor on line "ROOT".
New element → Kinematic element → Offset New element → Kinematic element → Parallel offset
The name of the chain element is specified as The name of the chain element is specified as "X_OFFSET".
"END_PART_CHAIN_2". The offset vector is defined with (0,0,0).
Because the kinematic chain in this example is not closed, the
offset vector is initialized with (0,0,0).
Operating sequence for the X linear axis: Operating sequence for the offset of the Z linear axis:
Place the cursor on line "X_OFFSET". Place the cursor on line "X_AXIS".
New element → Kinematic element → Linear axis New element → Kinematic element → Offset
The name of the chain element is specified as "X_AXIS". The name of the chain element is specified as "Z_OFFSET".
The axis references machine axis "MX1" and has vector The offset vector is defined with (0,0,0).
(1,0,0).
Notes:
Operating sequence for the Z linear axis: Operating sequence for the offset of the spindle:
Place the cursor on line "Z_OFFSET". Place the cursor on line "Z_AXIS".
New element → Kinematic element → Linear axis New element → Kinematic element → Offset
The name of the chain element is specified as "Z_AXIS". The name of the chain element is specified as
The axis references machine axis "MZ1" and has vector "SP1_OFFSET" and has direction vector (0,0,0).
(0,0,1).
Operating sequence for the spindle: To define uniquely the end of the chain in the tool branch, an
Place the cursor on line "SP1_OFFSET". offset element with the name "END_TOOL_CHAIN" is
New element → Kinematic element → Rotary axis appended as last element of the chain.
Notes:
$NK_NAME[COUNT1]="ROOT"
$NK_NEXT[COUNT1]="Y_OFFSET"
$NK_PARALLEL[COUNT1]="X_OFFSET"
$NK_TYPE[COUNT1]="OFFSET"
$NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=0
$NK_AXIS[COUNT1]=""
$NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1
$NK_NAME[COUNT1]="Y_OFFSET" $NK_NAME[COUNT1]="Y_AXIS"
$NK_NEXT[COUNT1]="Y_AXIS" $NK_NEXT[COUNT1]="SWITCH_0_1"
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="OFFSET" $NK_TYPE[COUNT1]="AXIS_LIN"
$NK_OFF_DIR[COUNT1,0]=0 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=0 $NK_OFF_DIR[COUNT1,1]=-1
$NK_OFF_DIR[COUNT1,2]=0 $NK_OFF_DIR[COUNT1,2]=0
$NK_AXIS[COUNT1]="" $NK_AXIS[COUNT1]="MY1"
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
Notes:
$NK_NAME[COUNT1]="SWITCH_0_1" $NK_NAME[COUNT1]="A_CORR"
$NK_NEXT[COUNT1]="A_CORR" $NK_NEXT[COUNT1]="A_OFFSET"
$NK_PARALLEL[COUNT1]="SWITCH_0_2" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="SWITCH" $NK_TYPE[COUNT1]="OFFSET"
$NK_OFF_DIR[COUNT1,0]=0 $NK_OFF_DIR[COUNT1,0]=-500
$NK_OFF_DIR[COUNT1,1]=0 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=0 $NK_OFF_DIR[COUNT1,2]=150
$NK_AXIS[COUNT1]="" $NK_AXIS[COUNT1]=""
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=0 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=1 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
$NK_NAME[COUNT1]="A_OFFSET" $NK_NAME[COUNT1]="A_AXIS"
$NK_NEXT[COUNT1]="A_AXIS" $NK_NEXT[COUNT1]="END_PART_CHAIN_1"
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="OFFSET" $NK_TYPE[COUNT1]="AXIS_ROT"
$NK_OFF_DIR[COUNT1,0]=0 $NK_OFF_DIR[COUNT1,0]=-1
$NK_OFF_DIR[COUNT1,1]=0 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=0 $NK_OFF_DIR[COUNT1,2]=0
$NK_AXIS[COUNT1]="" $NK_AXIS[COUNT1]="MA1"
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
Notes:
$NK_NAME[COUNT1]="END_PART_CHAIN_1" $NK_NAME[COUNT1]="SWITCH_0_2"
$NK_NEXT[COUNT1]="" $NK_NEXT[COUNT1]="TABLE_OFFSET"
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="OFFSET" $NK_TYPE[COUNT1]="SWITCH"
$NK_OFF_DIR[COUNT1,0]=0 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=0 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=0 $NK_OFF_DIR[COUNT1,2]=0
$NK_AXIS[COUNT1]="" $NK_AXIS[COUNT1]=""
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=0
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=2
COUNT1=COUNT1+1 COUNT1=COUNT1+1
$NK_NAME[COUNT1]="TABLE_OFFSET" $NK_NAME[COUNT1]="END_PART_CHAIN_2"
$NK_NEXT[COUNT1]="END_PART_CHAIN_2" $NK_NEXT[COUNT1]=""
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="OFFSET" $NK_TYPE[COUNT1]="OFFSET"
$NK_OFF_DIR[COUNT1,0]=0 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=0 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=0 $NK_OFF_DIR[COUNT1,2]=0
$NK_AXIS[COUNT1]="" $NK_AXIS[COUNT1]=""
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
Notes:
$NK_NAME[COUNT1]="X_OFFSET" $NK_NAME[COUNT1]="X_AXIS"
$NK_NEXT[COUNT1]="X_AXIS" $NK_NEXT[COUNT1]="Z_OFFSET"
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="OFFSET" $NK_TYPE[COUNT1]="AXIS_LIN"
$NK_OFF_DIR[COUNT1,0]=0 $NK_OFF_DIR[COUNT1,0]=1
$NK_OFF_DIR[COUNT1,1]=0 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=0 $NK_OFF_DIR[COUNT1,2]=0
$NK_AXIS[COUNT1]="" $NK_AXIS[COUNT1]="MX1"
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
$NK_NAME[COUNT1]="Z_OFFSET" $NK_NAME[COUNT1]="Z_AXIS"
$NK_NEXT[COUNT1]="Z_AXIS" $NK_NEXT[COUNT1]="SP1_OFFSET"
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="OFFSET" $NK_TYPE[COUNT1]="AXIS_LIN"
$NK_OFF_DIR[COUNT1,0]=0 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=0 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=0 $NK_OFF_DIR[COUNT1,2]=1
$NK_AXIS[COUNT1]="" $NK_AXIS[COUNT1]="MZ1"
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
Notes:
$NK_NAME[COUNT1]="SP1_OFFSET" $NK_NAME[COUNT1]="SP1_AXIS"
$NK_NEXT[COUNT1]="SP1_AXIS" $NK_NEXT[COUNT1]="END_TOOL_CHAIN"
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="OFFSET" $NK_TYPE[COUNT1]="AXIS_ROT"
$NK_OFF_DIR[COUNT1,0]=0 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=0 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=0 $NK_OFF_DIR[COUNT1,2]=-1
$NK_AXIS[COUNT1]="" $NK_AXIS[COUNT1]="MSP1"
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
$NK_NAME[COUNT1]="END_TOOL_CHAIN"
$NK_NEXT[COUNT1]=""
$NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="OFFSET"
$NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=0
$NK_AXIS[COUNT1]=""
$NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1
A177: END
Notes:
Module Description:
The following chapters provide further details of the kinematic chain operating principle. In particular,
the following topics are discussed:
Module Objective:
The reader gains a general overview of the kinematic chains operating principle application and, in
various exercises, familiarized with the individual functions and their capabilities. After working through
all chapters, readers should be able to integrate their own machine kinematics in the system.
Content:
Sinumerik
840D sl SINUMERIK Operate v4.8 Page 1 This document was produced for training purposes. A178
Siemens assumes no responsibility for its contents.
A178 5-axis machine with table kinematics
Fundamentals
of the kinematic
chain
Design of the
kinematic chain
NC code of the
kinematic chain
Notes:
Once the modeling of the 3-axis machine is completed, the use of rotary axes is explained in the next examples.
A rotary axis always consists of an "Offset" kinematic element for describing the spatial position of the rotary axis and of a
"Rotation axis" element for defining the rotary axis direction as vector and the assignment to a machine axis.
For the subsequent deployment of the CYCLE9960 measuring cycle, an offset element with the name extension "CORR" that
serves as correction target for CYCLE9960 is used. This second offset element can be considered as being a fine offset for the
rotary axis position. This allows the rotary axis position values from the design drawing of the machine to be transferred to the
main offset element.
For the table kinematics, with viewing direction from the end of the part chain, the offset elements lie behind the rotary axes; with
viewing direction from the ROOT element, the correction elements is added in front of the rotary axis.
The machine zero (MCS) lies in the center of the C axis on the The vectors are defined for the linear axes:
table surface (current position of the tool tip). X (1,0,0)
Y (0,1,0)
Z (0,0,1)
Notes:
The position of the reference system and the orientation of the axes:
MCS / ROOT
X=0
Y=0
Z=0
Z_AXIS
X_AXIS
Y_AXIS
Note:
No visible bodies are
available for the X axis.
SP1_AXIS
A_AXIS
C_AXIS
Notes:
Next element for the ROOT Next, parallel element for the
"ROOT" element "ROOT" element
Y_OFFSET A_OFFSET
X_AXIS C_OFFSET
TABLE_
SP1_OFFSET
OFFSET
END_
SP1_AXIS
PART_CHAIN
END_
TOOL_CHAIN
Notes:
Design of the kinematic chain The machine provides the following software limit switch-
es (they are required for checking the traversal areas):
Before the modeling begins, the machine should be posi-
tioned via MDA to "MCS-0": X axis:
$MA_POS_LIMIT_MINUS[X]=-450
TRAFOOF $MA_POS_LIMIT_PLUS[X]=450
CYCLE800
T0 Y axis:
M6 $MA_POS_LIMIT_MINUS[Y]=-450
G0 SUPA X0 Y0 Z0 A0 C0 $MA_POS_LIMIT_PLUS[Y]=1000
M30
Z axis:
$MA_POS_LIMIT_MINUS[Z]=-150
$MA_POS_LIMIT_PLUS[Z]=500
The rotary axes should be configured with the following offset A axis:
values: $MA_POS_LIMIT_MINUS[A]=-120
Offset from ROOT to A: (0,0,100) $MA_POS_LIMIT_PLUS[A]=120
Offset from A to C: (0,0,-100)
The machine has the following machine axis names:
MD 10000[0]=„MX1“ Machine X axis
MD 10000[1]=„MY1“ Machine Y axis
MD 10000[2]=„MZ1“ Machine Z axis
MD 10000[3]=„MSP1“ Machine spindle
The following steps must be performed to create the structure Operating sequence for the creation of the ROOT element:
tree: Place the cursor on line "Active data".
New element → Kinematic element → Offset
• Set the manufacturer password The name is initialized automatically with "ROOT" and does
• Call the "Commissioning" operating area not need to be changed.
The offset values X,Y,Z do not need to be further assigned;
consequently, the machine zero lies on the world coordinate
system.
Notes:
Operating sequence for the offset of the Y linear axis: Operating sequence for the Y linear axis:
Place the cursor on line "ROOT". Place the cursor on line "Y_OFFSET".
New element → Kinematic element → Offset New element → Kinematic element → Linear axis
The name of the chain element is specified as "Y_OFFSET" The name of the chain element is specified as "Y_AXIS".
and has direction vector (0,0,0). The axis references machine axis "MY1" and has vector
(0,1,0).
Operating sequence for the offset of the X linear axis: Operating sequence for the X linear axis:
Place the cursor on line "Y_AXIS". Place the cursor on line "X_OFFSET".
New element → Kinematic element → Offset New element → Kinematic element → Linear axis
The name of the chain element is specified as "X_OFFSET" The name of the chain element is specified as "X_AXIS".
and has direction vector (0,0,0). The axis references machine axis "MX1" and has vector
(1,0,0).
Notes:
Operating sequence for the offset of the Z linear axis: Operating sequence for the Z linear axis:
Place the cursor on line "X_AXIS". Place the cursor on line "Z_OFFSET".
New element → Kinematic element → Offset New element → Kinematic element → Linear axis
The name of the chain element is specified as "Z_OFFSET" The name of the chain element is specified as "Z_AXIS".
and has direction vector (0,0,0). The axis references machine axis "MZ1" and has vector
(0,0,1).
Operating sequence for the offset of the spindle: Bedienfolge für die Spindel:
Place the cursor on line "Z_AXIS". Operating sequence for the spindle:
New element → Kinematic element → Offset Place the cursor on line "SP1_OFFSET".
New element → Kinematic element → Rotary axis
The name of the chain element is specified as
"SP1_OFFSET" and has direction vector (0,0,0). The name of the chain element is specified as "SP1_AXIS".
The axis references machine axis "MSP1" and has vector
(0,0,-1).
The direction "-1" in the Z component is considered for the
deployment of turning tools or the tool type "L stylus".
Notes:
To define uniquely the end of the chain in the tool branch, an The "upper part" in the schematic representation of the kine-
offset element with the name "END_TOOL_CHAIN" is matic chain is so defined completely. To still describe the low-
appended as last element of the chain. er part, a parallel A-correction element on the ROOT
element must be linked to the Y_OFFSET element.
Operating sequence:
Place the cursor on line "SP1_AXIS".
New element → Kinematic element → Offset
The name of the chain element is specified as
"END_TOOL_CHAIN". Because no offset is used currently in
the complete tool chain, the offset values for X,Y,Z can
remain at the value "0".
Chain in direction
ROOT
tool
Chain in direction
workpiece
Notes:
Operating sequence for the correction element of the A axis: Operating sequence for the rotation component of the A axis:
Place the cursor on line "CORR_A_OFFSET".
New element → Kinematic element → Offset Place the cursor on line "CORR_A_OFFSET".
New element → Kinematic element → Rotation axis
The name of the chain element is specified as
"CORR_A_OFFSET". The name of the chain element is specified as "A_AXIS".
Because this element is used later by CYCLE996, the offset The axis references machine axis "MA1" and has
vector is entered with (0,0,0). vector (-1,0,0).
Operating sequence for the correction element of the C axis: Operating sequence for the coarse offset of the C axis:
Place the cursor on line "A_AXIS". Place the cursor on line "C_OFFSET".
New element → Kinematic element → Offset New element → Kinematic element → Offset
The name of the chain element is specified as "C_OFFSET". The name of the chain element is specified as
This element programs the coarse offset of the C axis. The "CORR_C_OFFSET".
offset in the Z direction is -100 mm, this results in offset vector Because this element is used later by CYCLE996, the offset
(0,0,-100). vector is entered with (0,0,0).
Notes:
Operating sequence for the rotation component of the C axis: Operating sequence for the TABLE-OFFSET:
Place the cursor on line "CORR_C_OFFSET". Place the cursor on line "C_AXIS".
New element → Kinematic element → Rotation axis New element → Kinematic element → Offset
The name of the chain element is specified as "C_AXIS". The name of the chain element is specified as
The axis references machine axis "MC1" and has vector "TABLE_OFFSET".
(0,0,-1). The offset is defined with the vector (0,0,0) and so points to
the table surface.
Operating sequence for the "END_PART_CHAIN" element: This completes the definition of the kinematic chain that can
Place the cursor on line "TABLE_OFFSET". be used for further applications (Collision Avoidance, transfor-
New element → Kinematic element → Offset mations).
The name of the chain element is specified as The following design of the machine kinematics results in the
"END_PART_CHAIN". structure tree of the NC:
Because the kinematic chain in this example is not closed, the
offset vector is initialized with (0,0,0).
Notes:
$NK_NAME[COUNT1]="Y_AXIS" $NK_NAME[COUNT1]="X_OFFSET"
$NK_NEXT[COUNT1]="X_OFFSET" $NK_NEXT[COUNT1]="X_AXIS"
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="AXIS_LIN" $NK_TYPE[COUNT1]="OFFSET"
$NK_OFF_DIR[COUNT1,0]=0 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=1 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=0 $NK_OFF_DIR[COUNT1,2]=0
$NK_AXIS[COUNT1]="MY1" $NK_AXIS[COUNT1]=""
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
Notes:
$NK_NAME[COUNT1]="X_AXIS" $NK_NAME[COUNT1]="Z_OFFSET"
$NK_NEXT[COUNT1]="Z_OFFSET" $NK_NEXT[COUNT1]="Z_AXIS"
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="AXIS_LIN" $NK_TYPE[COUNT1]="OFFSET"
$NK_OFF_DIR[COUNT1,0]=1 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=0 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=0 $NK_OFF_DIR[COUNT1,2]=0
$NK_AXIS[COUNT1]="MX1" $NK_AXIS[COUNT1]=""
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
$NK_NAME[COUNT1]="Z_AXIS" $NK_NAME[COUNT1]="SP1_OFFSET"
$NK_NEXT[COUNT1]="SP1_OFFSET" $NK_NEXT[COUNT1]="SP1_AXIS"
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="AXIS_LIN" $NK_TYPE[COUNT1]="OFFSET"
$NK_OFF_DIR[COUNT1,0]=0 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=0 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=1 $NK_OFF_DIR[COUNT1,2]=0
$NK_AXIS[COUNT1]="MZ1" $NK_AXIS[COUNT1]=""
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
Notes:
$NK_NAME[COUNT1]="SP1_AXIS" $NK_NAME[COUNT1]="END_TOOL_CHAIN"
$NK_NEXT[COUNT1]="END_TOOL_CHAIN" $NK_NEXT[COUNT1]=""
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="AXIS_ROT" $NK_TYPE[COUNT1]="OFFSET"
$NK_OFF_DIR[COUNT1,0]=0 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=0 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=-1 $NK_OFF_DIR[COUNT1,2]=0
$NK_AXIS[COUNT1]="MSP1" $NK_AXIS[COUNT1]=""
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
$NK_NAME[COUNT1]="A_OFFSET" $NK_NAME[COUNT1]="CORR_A_OFFSET"
$NK_NEXT[COUNT1]="CORR_A_OFFSET" $NK_NEXT[COUNT1]="A_AXIS"
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="OFFSET" $NK_TYPE[COUNT1]="OFFSET"
$NK_OFF_DIR[COUNT1,0]=0 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=0 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=100 $NK_OFF_DIR[COUNT1,2]=0
$NK_AXIS[COUNT1]="" $NK_AXIS[COUNT1]=""
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
Notes:
$NK_NAME[COUNT1]="A_AXIS" $NK_NAME[COUNT1]="C_OFFSET"
$NK_NEXT[COUNT1]="C_OFFSET" $NK_NEXT[COUNT1]="CORR_C_OFFSET"
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="AXIS_ROT" $NK_TYPE[COUNT1]="OFFSET"
$NK_OFF_DIR[COUNT1,0]=-1 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=0 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=0 $NK_OFF_DIR[COUNT1,2]=-100
$NK_AXIS[COUNT1]="MA1" $NK_AXIS[COUNT1]=""
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
$NK_NAME[COUNT1]="CORR_C_OFFSET" $NK_NAME[COUNT1]="C_AXIS"
$NK_NEXT[COUNT1]="C_AXIS" $NK_NEXT[COUNT1]="TABLE_OFFSET"
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="OFFSET" $NK_TYPE[COUNT1]="AXIS_ROT"
$NK_OFF_DIR[COUNT1,0]=0 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=0 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=0 $NK_OFF_DIR[COUNT1,2]=-1
$NK_AXIS[COUNT1]="" $NK_AXIS[COUNT1]="MC1"
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
Notes:
$NK_NAME[COUNT1]="TABLE_OFFSET" $NK_NAME[COUNT1]="END_PART_CHAIN"
$NK_NEXT[COUNT1]="END_PART_CHAIN" $NK_NEXT[COUNT1]=""
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="OFFSET" $NK_TYPE[COUNT1]="OFFSET"
$NK_OFF_DIR[COUNT1,0]=0 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=0 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=0 $NK_OFF_DIR[COUNT1,2]=0
$NK_AXIS[COUNT1]="" $NK_AXIS[COUNT1]=""
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
A178: END
Notes:
Notes:
Module Description:
The following chapters provide further details of the kinematic chain operating principle. In particular,
the following topics are discussed:
Module Objective:
The reader gains a general overview of the kinematic chains operating principle application and, in
various exercises, familiarized with the individual functions and their capabilities. After working through
all chapters, readers should be able to integrate their own machine kinematics in the system.
Content:
Sinumerik
840D sl SINUMERIK Operate v4.8 Page 1 This document was produced for training purposes. A179
Siemens assumes no responsibility for its contents.
A179 5-axis machine with head kinematics
Fundamentals
of the kinematic
chain
Design of the
kinematic chain
NC code of the
kinematic chain
Notes:
MCS / ROOT
X=0
Y=0
Z=0
Z
Y
Notes:
Z_AXIS
Y_AXIS X_AXIS
A_AXIS
C_AXIS
SP1_AXIS
Notes:
ROOT
Y_OFFSET
TABLE_
OFFSET
Y_AXIS
END_
PART_CHAIN
X_OFFSET
X_AXIS
Z_OFFSET
Z_AXIS
C_OFFSET
C_AXIS
CORR_A_OFFSET
A_OFFSET
A_AXIS
CORR_SP1_OFFSET
SP1_OFFSET
END_
SP1_AXIS
TOOL_CHAIN
Notes:
Design of the kinematic chain The machine provides the following software limit switch-
es (they are required for checking the traversal areas):
Before the modeling begins, the machine should be positioned
via MDA to "MCS-0": X-A axis:
$MA_POS_LIMIT_MINUS[X]=-1200
TRAFOOF $MA_POS_LIMIT_PLUS[X]=1200
CYCLE800
T0 Y axis:
M6 $MA_POS_LIMIT_MINUS[Y]=-900
G0 SUPA X0 Y0 Z0 A0 C0 $MA_POS_LIMIT_PLUS[Y]=700
M30
Z axis:
$MA_POS_LIMIT_MINUS[Z]=0
The position of spin axis "A" in MCS is assumed 220 mm $MA_POS_LIMIT_PLUS[Z]=750
above the tool acceptance.
This value is considered in the A_OFF_1 and SPI_OFF ele- The machine has the following machine axis names:
ments. MD 10000[0]=„MX1“ Machine X axis
MD 10000[1]=„MY1“ Machine Y axis
To prevent a jump in the WCS display when transformations MD 10000[2]=„MZ1“ Machine Z axis
are activated, the kinematic chain is closed with an offset MD 10000[3]=„MSP1“ Machine spindle
element at the end of the workpiece and tool chains. MD 10000[4]=„MA1“ Machine A axis
As alternative, the chain can be closed automatically via the MD 10000[5]=„MC1“ Machine C axis
system tag $NT_CNTRL[n] bit 7 and bit 8 (recommended).
A axis:
$MA_POS_LIMIT_MINUS[A]=-100
$MA_POS_LIMIT_PLUS[A]=100
No modulo axis!
Keine Modulo-Achse!
C axis:
$MA_POS_LIMIT_MINUS[C]=-180 Operating sequence:
$MA_POS_LIMIT_PLUS[C]=540 Place the cursor on line "Active data".
No modulo axis! New element → Kinematic element → Offset
Notes:
Operating sequence for the offset of the Y linear axis: Operating sequence for the Y linear axis:
Place the cursor on line "ROOT". Place the cursor on line "Y_OFFSET".
New element → Kinematic element → Offset New element → Kinematic element → Linear axis
The name of the chain element is specified as "Y_OFFSET". The name of the chain element is specified as "Y_AXIS".
The direction vector is initialized with (0,0,0). The axis references machine axis "MY1" and has vector
(0,1,0).
Operating sequence for the offset of the X linear axis: Operating sequence for the X linear axis:
Place the cursor on line "Y_AXIS". Place the cursor on line "X_OFFSET".
New element → Kinematic element → Offset New element → Kinematic element → Linear axis
The name of the chain element is specified as "X_OFFSET". The name of the chain element is specified as "X_AXIS".
The direction vector is initialized with (0,0,0). The axis references machine axis "MX1" and has vector
(1,0,0).
Notes:
Operating sequence for the offset of the Z linear axis: Operating sequence for the Z linear axis:
Place the cursor on line "X_AXIS". Place the cursor on line "Z_OFFSET".
New element → Kinematic element → Offset New element → Kinematic element → Linear axis
The name of the chain element is specified as "Z_OFFSET". The name of the chain element is specified as "Z_AXIS".
The direction vector is initialized with (0,0,0). The axis references machine axis "MZ1" and has vector
(0,0,1).
Operating sequence for the offset of the C axis: Operating sequence for the C rotation axis:
Place the cursor on line "Z_AXIS". Place the cursor on line "C_OFFSET".
New element → Kinematic element → Offset New element → Kinematic element → Rotation axis
The name of the chain element is specified as "C_OFFSET". The name of the chain element is specified as "C_AXIS".
This element programs the offset of the C axis to the Z axis. The axis references machine axis "MC1" and has vector
The offset vector of the C axis is initialized with (0,0,0). (0,0,1).
Notes:
Operating sequence for correction element Operating sequence for the coarse offset of the A axis:
"CORR_A_OFFSET": Place the cursor on line "CORR_A_OFFSET".
Place the cursor on line "C_AXIS". New element → Kinematic element → Offset
New element → Kinematic element → Offset
The name of the chain element is specified as "A_OFFSET".
The name of the chain element is specified as This element programs the coarse offset of the A axis. The
"CORR_A_OFFSET". Because this element is used later by offset in the Z direction is 220 mm, this results in offset vector
CYCLE996, the offset vector is entered with (0,0,0). (0,0,220).
Operating sequence for the A rotation axis: Operating sequence for correction element
Place the cursor on line "A_OFFSET". "CORR_SP1_OFFSET":
New element → Kinematic element → Rotation axis Place the cursor on line "A_AXIS".
New element → Kinematic element → Offset
The name of the chain element is specified as "A_AXIS".
The axis references machine axis "MA1" and has vector The name of the chain element is specified as
(1,0,0). "CORR_SP1_OFFSET". Because this element is used later
by CYCLE996, the offset vector is entered with (0,0,0).
Notes:
Operating sequence for the offset of the spindle: Operating sequence for the spindle:
Place the cursor on line "CORR_SP1_OFFSET". Place the cursor on line "SP1_OFFSET".
New element → Kinematic element → Offset New element → Kinematic element → Rotary axis
The name of the chain element is specified as The name of the chain element is specified as "SP1_AXIS".
"SP1_OFFSET" and has offset vector (0,0,-220). The axis references machine axis "MSP1" and has vector
(0,0,-1).
The direction "-1" in the Z component is considered for the
deployment of turning tools or the tool type "L stylus".
To define uniquely the end of the chain in the tool branch, an Operating sequence for the definition of "TABLE_OFFSET":
offset element with the name "END_TOOL_CHAIN" is Place the cursor on line "ROOT".
appended as last element of the chain. New element → Kinematic element → Parallel offset
Notes:
Operating sequence for the definition of Overall view of the fully defined kinematic chain:
"END_PART_CHAIN":
Place the cursor on line "ROOT".
New element → Kinematic element → Parallel offset
Notes:
$NK_NAME[COUNT1]="Y_AXIS" $NK_NAME[COUNT1]="X_OFFSET"
$NK_NEXT[COUNT1]="X_OFFSET" $NK_NEXT[COUNT1]="X_AXIS"
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="AXIS_LIN" $NK_TYPE[COUNT1]="OFFSET"
$NK_OFF_DIR[COUNT1,0]=0 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=1 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=0 $NK_OFF_DIR[COUNT1,2]=0
$NK_AXIS[COUNT1]="MY1" $NK_AXIS[COUNT1]=""
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
$NK_NAME[COUNT1]="X_AXIS" $NK_NAME[COUNT1]="Z_OFFSET"
$NK_NEXT[COUNT1]="Z_OFFSET" $NK_NEXT[COUNT1]="Z_AXIS"
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="AXIS_LIN" $NK_TYPE[COUNT1]="OFFSET"
$NK_OFF_DIR[COUNT1,0]=1 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=0 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=0 $NK_OFF_DIR[COUNT1,2]=0
$NK_AXIS[COUNT1]="MX1" $NK_AXIS[COUNT1]=""
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
Notes:
$NK_NAME[COUNT1]="Z_AXIS" $NK_NAME[COUNT1]="C_OFFSET"
$NK_NEXT[COUNT1]="C_OFFSET" $NK_NEXT[COUNT1]="C_AXIS"
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="AXIS_LIN" $NK_TYPE[COUNT1]="OFFSET"
$NK_OFF_DIR[COUNT1,0]=0 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=0 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=1 $NK_OFF_DIR[COUNT1,2]=0
$NK_AXIS[COUNT1]="MZ1" $NK_AXIS[COUNT1]=""
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
$NK_NAME[COUNT1]="C_AXIS" $NK_NAME[COUNT1]="CORR_A_OFFSET"
$NK_NEXT[COUNT1]="CORR_A_OFFSET" $NK_NEXT[COUNT1]="A_OFFSET"
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="AXIS_ROT" $NK_TYPE[COUNT1]="OFFSET"
$NK_OFF_DIR[COUNT1,0]=0 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=0 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=1 $NK_OFF_DIR[COUNT1,2]=0
$NK_AXIS[COUNT1]="MC1" $NK_AXIS[COUNT1]=""
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
Notes:
$NK_NAME[COUNT1]="A_OFFSET" $NK_NAME[COUNT1]="A_AXIS"
$NK_NEXT[COUNT1]="A_AXIS" $NK_NEXT[COUNT1]="CORR_SP1_OFFSET"
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="OFFSET" $NK_TYPE[COUNT1]="AXIS_ROT"
$NK_OFF_DIR[COUNT1,0]=0 $NK_OFF_DIR[COUNT1,0]=1
$NK_OFF_DIR[COUNT1,1]=0 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=220 $NK_OFF_DIR[COUNT1,2]=0
$NK_AXIS[COUNT1]="" $NK_AXIS[COUNT1]="MA1"
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
$NK_NAME[COUNT1]="CORR_SP1_OFFSET" $NK_NAME[COUNT1]="SP1_OFFSET"
$NK_NEXT[COUNT1]="SP1_OFFSET" $NK_NEXT[COUNT1]="SP1_AXIS"
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="OFFSET" $NK_TYPE[COUNT1]="OFFSET"
$NK_OFF_DIR[COUNT1,0]=0 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=0 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=0 $NK_OFF_DIR[COUNT1,2]=-220
$NK_AXIS[COUNT1]="" $NK_AXIS[COUNT1]=""
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
Notes:
$NK_NAME[COUNT1]="SP1_AXIS" $NK_NAME[COUNT1]="END_TOOL_CHAIN"
$NK_NEXT[COUNT1]="END_TOOL_CHAIN" $NK_NEXT[COUNT1]=""
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="AXIS_ROT" $NK_TYPE[COUNT1]="OFFSET"
$NK_OFF_DIR[COUNT1,0]=0 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=0 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=-1 $NK_OFF_DIR[COUNT1,2]=0
$NK_AXIS[COUNT1]="MSP1" $NK_AXIS[COUNT1]=""
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
$NK_NAME[COUNT1]="TABLE_OFFSET" $NK_NAME[COUNT1]="END_PART_CHAIN"
$NK_NEXT[COUNT1]="END_PART_CHAIN" $NK_NEXT[COUNT1]=""
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="OFFSET" $NK_TYPE[COUNT1]="OFFSET"
$NK_OFF_DIR[COUNT1,0]=0 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=0 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=0 $NK_OFF_DIR[COUNT1,2]=0
$NK_AXIS[COUNT1]="" $NK_AXIS[COUNT1]=""
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
A179: END
Notes:
Module Description:
The following chapters provide further details of the kinematic chain operating principle. In particular,
the following topics are discussed:
Module Objective:
The reader gains a general overview of the kinematic chains operating principle application and, in
various exercises, familiarized with the individual functions and their capabilities. After working through
all chapters, readers should be able to integrate their own machine kinematics in the system.
Content:
Sinumerik
840D sl SINUMERIK Operate v4.8 Page 1 This document was produced for training purposes. A180
Siemens assumes no responsibility for its contents.
A180 5-axis machine with mixed kinematics
Fundamentals
of the kinematic
chain
Kinematic
chain
NC code of the
kinematic chain
Notes:
Example 5:
Kinematic chain of a milling machine with one rotary axis in
the table and one rotary axis in the head.
MCS / ROOT
X=0
Y=0
Z=0
Z
Y
Notes:
Z_AXIS
B_AXIS
X_AXIS
SP1_AXIS
C_AXIS
Y_AXIS
Notes:
X_OFFSET Y_OFFSET
X_AXIS Y_AXIS
The structure of the axes is config-
ured so that each machine axis
always consists of an offset ele-
ment and an axis element.
This method is used identically for
C_OFFSET rotary and linear axes.
Z_OFFSET This provides the capability to
adapt the chain easier for future
functions (based on the kinematic
chain).
Z_AXIS CORR_C_OFFSET
CORR_SP1_OFFSET END_PART_CHAIN
SP1_OFFSET
SP1_AXIS END_TOOL_CHAIN
Notes:
Design of the kinematic chain The machine provides the following software limit switch-
Before the modeling begins, the machine should be positioned es (they are required for checking the traversal areas):
via MDA to "MCS-0":
X axis:
TRAFOOF $MA_POS_LIMIT_MINUS[X]=-700
CYCLE800 $MA_POS_LIMIT_PLUS[X]=700
T0
M6 Y axis:
G0 SUPA X0 Y0 Z0 B0 C0 $MA_POS_LIMIT_MINUS[Y]=-100
M30 $MA_POS_LIMIT_PLUS[Y]=950
Z axis:
The rotary axes should be configured with the following offset $MA_POS_LIMIT_MINUS[Z]=0
values: $MA_POS_LIMIT_PLUS[Z]=750
Offset from ROOT to B: (0,0,-15)
Offset from ROOT to C: (0,0,0) The machine has the following machine axis names:
MD 10000[0]=„MX1“ Machine X axis
The rotary axes should be configured with the following MD 10000[1]=„MY1“ Machine Y axis
direction vectors: MD 10000[2]=„MZ1“ Machine Z axis
Vector of the B axis: (0,1,1) MD 10000[3]=„MSP1“ Machine spindle
Vector of the C axis: (0,0,-1) MD 10000[4]=„MB1“ Machine B axis
MD 10000[5]=„MC1“ Machine C axis
To prevent a jump in the WCS display when transformations
are activated, the kinematic chain is closed with an offset
element at the end of the workpiece and tool chains.
As alternative, the chain can be closed automatically via the
system tag $NT_CNTRL[n] bit 7 and bit 8 (recommended).
The following steps must be performed to create the structure Operating sequence:
tree: Place the cursor on line "Active data".
New element → Kinematic element → Offset
• Set the manufacturer password The name is initialized automatically with "ROOT" and does
• Call the "Commissioning" operating area not need to be changed.
The offset values X,Y,Z do not need to be further assigned.
Notes:
Operating sequence for the offset of the X linear axis: Operating sequence for the X linear axis:
Place the cursor on line "ROOT". Place the cursor on line "X_OFFSET".
New element → Kinematic element → Offset New element → Kinematic element → Linear axis
The name of the chain element is specified as "X_OFFSET". The name of the chain element is specified as "X_LIN".
The direction vector is defined with (0,0,0). The axis references machine axis "MX1" and has vector
(1,0,0).
Operating sequence for the offset of the Z linear axis: Operating sequence for the Z linear axis:
Place the cursor on line "X_AXIS". Place the cursor on line "Z_OFFSET".
New element → Kinematic element → Offset New element → Kinematic element → Linear axis
The name of the chain element is specified as "Z_OFFSET". The name of the chain element is specified as "Z_AXIS".
The direction vector is initialized with (0,0,0). The axis references machine axis "MZ1" and has vector
(0,0,1).
Notes:
Operating sequence for the offset of the B axis: Operating sequence for the B rotation axis:
Place the cursor on line "Z_AXIS". Place the cursor on line "B_OFFSET".
New element → Kinematic element → Offset New element → Kinematic element → Rotation axis
The name of the chain element is specified as "B_OFFSET". The name of the chain element is specified as "B_AXIS".
This element programs the offset of the B axis to the Z axis. The axis references machine axis "MB1" and has vector
The offset vector of the B axis is initialized with (0,0,-15). (0,1,1).
Operating sequence for the correction element between the B Operating sequence for the offset of the spindle:
axis and the spindle: Place the cursor on line "CORR_SP1_OFFSET".
Place the cursor on line "B_AXIS". New element → Kinematic element → Offset
New element → Kinematic element → Offset
The name of the chain element is specified as
The name of the chain element is specified as "SP1_OFFSET" and has offset vector (0,0,15).
"CORR_SP1_OFFSET". Because this element is used later
by CYCLE996, the offset vector is entered with (0,0,0).
Notes:
Operating sequence for the spindle: To define uniquely the end of the chain in the tool branch, an
Place the cursor on line "SP1_OFFSET". offset element with the name "END_TOOL_CHAIN" is ap-
New element → Kinematic element → Rotary axis pended as last element of the chain.
Notes:
After this step, the kinematic chain in the tool branch is fully described. In the next steps, the elements in the workpiece branch
must be defined.
ROOT
X_OFFSET Y_OFFSET
Y_AXIS
X_AXIS
C_OFFSET
Z_OFFSET
CORR_C_
Z_AXIS OFFSET
B_OFFSET C_AXIS
TABLE_
B_AXIS OFFSET
CORR_SP1_ END_
OFFSET PART_CHAIN
SP1_OFFSET
END_
SP1_AXIS
TOOL_CHAIN
Notes:
Operating sequence for the offset of the Y linear axis: Operating sequence for the Y linear axis:
Place the cursor on line "ROOT". Place the cursor on line "Y_OFFSET".
New element → Kinematic element → Parallel offset New element → Kinematic element → Parallel linear axis
The name of the chain element is specified as "Y_OFFSET". The name of the chain element is specified as "Y_AXIS".
The offset vector of the Y axis is initialized with (0,0,0). The axis references machine axis "MY1" and has vector
(0,-1,0).
Operating sequence for the coarse offset of the C axis: Operating sequence for the correction element of the C axis:
Place the cursor on line "Y_AXIS". Place the cursor on line "C_OFFSET".
New element → Kinematic element → Offset New element → Kinematic element → Offset
The name of the chain element is specified as "C_OFFSET". The name of the chain element is specified as
This element programs the coarse offset of the C axis. The "CORR_C_OFFSET". Because this element is used later by
offset vector is defined with (0,0,0). CYCLE996, the offset vector is entered with (0,0,0).
Notes:
Operating sequence for the rotation component of the C axis: Operating sequence for the TABLE-OFFSET:
Place the cursor on line "CORR_C_OFFSET". Place the cursor on line "C_AXIS".
New element → Kinematic element → Rotation axis New element → Kinematic element → Offset
The name of the chain element is specified as "C_AXIS". The name of the chain element is specified as
The axis references machine axis "MC1" and has "TABLE_OFFSET".
vector (0,0,-1). The offset is defined with the vector (0,0,0) and so points to
the table surface.
Operating sequence for the "END_PART_CHAIN" element: This completes the definition of the kinematic chain that can
Place the cursor on line "TABLE_OFFSET". be used for further applications (collision avoidance, transfor-
New element → Kinematic element → Offset mations).
The following design of the machine kinematics results in the
The name of the chain element is specified as structure tree of the NC:
"END_PART_CHAIN".
Because the kinematic chain in this example is not closed, the
offset vector is initialized with (0,0,0).
Notes:
$NK_NAME[COUNT1]="X_AXIS" $NK_NAME[COUNT1]="Z_OFFSET"
$NK_NEXT[COUNT1]="Z_OFFSET" $NK_NEXT[COUNT1]="Z_AXIS"
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="AXIS_LIN" $NK_TYPE[COUNT1]="OFFSET"
$NK_OFF_DIR[COUNT1,0]=1 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=0 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=0 $NK_OFF_DIR[COUNT1,2]=0
$NK_AXIS[COUNT1]="MX1" $NK_AXIS[COUNT1]=""
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
Notes:
$NK_NAME[COUNT1]="Z_AXIS" $NK_NAME[COUNT1]="B_OFFSET"
$NK_NEXT[COUNT1]="B_OFFSET" $NK_NEXT[COUNT1]="B_AXIS"
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="AXIS_LIN" $NK_TYPE[COUNT1]="OFFSET"
$NK_OFF_DIR[COUNT1,0]=0 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=0 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=1 $NK_OFF_DIR[COUNT1,2]=-15
$NK_AXIS[COUNT1]="MZ1" $NK_AXIS[COUNT1]=""
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
$NK_NAME[COUNT1]="B_AXIS" $NK_NAME[COUNT1]="CORR_SP1_OFFSET"
$NK_NEXT[COUNT1]="CORR_SP1_OFFSET" $NK_NEXT[COUNT1]="SP1_OFFSET"
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="AXIS_ROT" $NK_TYPE[COUNT1]="OFFSET"
$NK_OFF_DIR[COUNT1,0]=0 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=1 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=1 $NK_OFF_DIR[COUNT1,2]=0
$NK_AXIS[COUNT1]="MB1" $NK_AXIS[COUNT1]=""
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
Notes:
$NK_NAME[COUNT1]="SP1_OFFSET" $NK_NAME[COUNT1]="SP1_AXIS"
$NK_NEXT[COUNT1]="SP1_AXIS" $NK_NEXT[COUNT1]="END_TOOL_CHAIN"
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="OFFSET" $NK_TYPE[COUNT1]="AXIS_ROT"
$NK_OFF_DIR[COUNT1,0]=0 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=0 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=15 $NK_OFF_DIR[COUNT1,2]=-1
$NK_AXIS[COUNT1]="" $NK_AXIS[COUNT1]="MSP1"
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
$NK_NAME[COUNT1]="END_TOOL_CHAIN" $NK_NAME[COUNT1]="Y_OFFSET"
$NK_NEXT[COUNT1]="" $NK_NEXT[COUNT1]="Y_AXIS"
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="OFFSET" $NK_TYPE[COUNT1]="OFFSET"
$NK_OFF_DIR[COUNT1,0]=0 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=0 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=0 $NK_OFF_DIR[COUNT1,2]=0
$NK_AXIS[COUNT1]="" $NK_AXIS[COUNT1]=""
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
Notes:
$NK_NAME[COUNT1]="Y_AXIS" $NK_NAME[COUNT1]="C_OFFSET"
$NK_NEXT[COUNT1]="C_OFFSET" $NK_NEXT[COUNT1]="CORR_C_OFFSET"
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="AXIS_LIN" $NK_TYPE[COUNT1]="OFFSET"
$NK_OFF_DIR[COUNT1,0]=0 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=-1 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=0 $NK_OFF_DIR[COUNT1,2]=0
$NK_AXIS[COUNT1]="MY1" $NK_AXIS[COUNT1]=""
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
$NK_NAME[COUNT1]="CORR_C_OFFSET" $NK_NAME[COUNT1]="C_AXIS"
$NK_NEXT[COUNT1]="C_AXIS" $NK_NEXT[COUNT1]="TABLE_OFFSET"
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="OFFSET" $NK_TYPE[COUNT1]="AXIS_ROT"
$NK_OFF_DIR[COUNT1,0]=0 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=0 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=0 $NK_OFF_DIR[COUNT1,2]=-1
$NK_AXIS[COUNT1]="" $NK_AXIS[COUNT1]="MC1"
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
Notes:
$NK_NAME[COUNT1]="TABLE_OFFSET" $NK_NAME[COUNT1]="END_PART_CHAIN"
$NK_NEXT[COUNT1]="END_PART_CHAIN" $NK_NEXT[COUNT1]=""
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="OFFSET" $NK_TYPE[COUNT1]="OFFSET"
$NK_OFF_DIR[COUNT1,0]=0 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=0 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=0 $NK_OFF_DIR[COUNT1,2]=0
$NK_AXIS[COUNT1]="" $NK_AXIS[COUNT1]=""
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
A180: END
Notes:
Module Description:
The following chapters provide further details of the kinematic chain operating principle. In particular,
the following topics are discussed:
Module Objective:
The reader gains a general overview of the kinematic chains operating principle application and, in
various exercises, familiarized with the individual functions and their capabilities. After working through
all chapters, readers should be able to integrate their own machine kinematics in the system.
Content:
Sinumerik
840D sl SINUMERIK Operate v4.8 Page 1 This document was produced for training purposes. A181
Siemens assumes no responsibility for its contents.
A181 Collision avoidance, simple 3-axis machine
Collision
avoidance,
simple
3-axis machine
Notes:
The associated license for the collision check must be considered in more detail:
• Collision avoidance
Collision check using primitive and STL model bodies, 1 channel, all operating modes
• ECO collision avoidance
Collision check using primitive model bodies, 1 channel, all operating modes, max. 34 collision bodies,
max. 17 protection areas, max. 10 collision pairs (no STL models)
• Advanced collision avoidance
Collision check using primitive and STL model bodies, 1 channel, all operating modes, dynamic material removal and
dynamically moved bodies (tool changer, etc.) can be simulated, connection to the IPC possible,
ModuleWorks package can be integrated
The maximum number of chain elements is defined independent of the selected license with the
MD 18880 $MN_MM_MAXNUM_KIN_CHAIN_ELEM.
In this section, an extension for a collision check for the previously created machine model is performed.
In the examples, the modeling is performed with the "Primitive body" provided by the system:
Frame
Box
Sphere
Cylinder
Cone / truncated cone
These primitive bodies have the advantage that they requires little main memory and consequently place only a low computing
load on the NCU.
All collision bodies connected with a rotary axis that should also be used in spindle operation are subject the supplementary
conditions listed below:
• The bodies must be rotation-symmetric (cylinder, sphere or cone / truncated cone).
• The rotation axis of the bodies must be congruent with the rotary axis center.
If necessary, a switchover to an adapted body via a switch must be made for non-rotation-symmetric bodies.
When STL files are used, where possible, all superfluous surfaces (indentations for screws or small roundings at body edges)
should be removed before conversion to STL. Curved surfaces greatly increase the data volume of the collision bodies.
Example 1: Cylinder with coarse resolution, file Example 2: The same cylinder as in Example 1,
size 40 KB. but with a finer resolution, file size 120 KB.
Notes:
For the graphic representation of the machine or for performing a collision check, protection areas must be defined at appropriate
locations in the kinematic chain. These protection areas can then be assigned collision bodies.
Where possible, the collision bodies for representation of the spindle nose should be assigned to the higher-level rotary or linear
axis, rather than to the spindle itself, because otherwise the bodies in spindle operation are considered to be "rotating" in the NC.
Element of the
kinematic chain
Protection area
All required bodies are defined within the
protection area.
1st collision body within the
protection area
Application:
A machine protection area defines a collision group for bodies that should be checked for machine movements or are required for
the graphic representation.
A tool protection area defines the tool change location (namely, represents the tool reference point).
For machines with a tool spindle, just one tool protection area below the spindle is required.
Notes:
$NP_PROT_TYPE[n]=“MACHINE“
$NP_PROT_NAME[n]=“Z_PROT“ ;adapt
$NP_PROT_D_LEVEL[n]=0
$NP_BIT_NO[n]=-1
$NP_INIT_STAT[n]=“I“
A=Activated
P=Preactivated
I=Deactivated
$NP_PROT_TYPE[n]=“TOOL_PROT“
$NP_PROT_NAME[n]=“TOOL_PROT“ ;adapt
$NP_PROT_D_LEVEL[n]=0
$NP_BIT_NO[n]=-1
$NP_INIT_STAT[n]=“I“
$NP_INDEX[n,0]=1
$NP_INDEX[n,1]=9998
$NP_INDEX[n,2]=1
Notes:
Frame:
The "Frame" element does not represent any body itself, but rather defines a coordinate system for subsequent bodies.
$NP_TYPE[n]=“FRAME“
$NP_NAME[n]=“FRAME_1“ ;adapt
$NP_OFF[n,0]=0
$NP_OFF[n,1]=0
$NP_OFF[n,2]=0
$NP_DIR[n,0]=0
$NP_DIR[n,1]=0
$NP_DIR[n,2]=0
$NP_ANG[n]=0
Box
The "Box" element type describes a cuboid with a reference point in its center that serves as reference for the offset values. To
rotate the body in space, a direction vector and a rotation angle can be specified.
$NP_TYPE[n]=“BOX“
$NP_NAME[n]=“BOX_1“ ;adapt
$NP_CLOR[n]=0
$NP_D_LEVEL[n]=0
$NP_USAGE[n]=“A“
$NP_PARA[n,0]=200
$NP_PARA[n,1]=200
$NP_PARA[n,2]=200
$NP_OFF[n,0]=0
$NP_OFF[n,1]=0
$NP_OFF[n,2]=0
$NP_DIR[n,0]=0
$NP_DIR[n,1]=0
$NP_DIR[n,2]=0
$NP_ANG[n]=0
Notes:
Sphere
The "Sphere" element type is defined only with the radius; the reference point for the offset values is located in the center.
$NP_TYPE[n]=“SPHERE“
$NP_NAME[n]=“SPHERE_1“ ;adapt
$NP_CLOR[n]=0
$NP_D_LEVEL[n]=0
$NP_USAGE[n]=“A“
$NP_PARA[n,0]=20
$NP_PARA[n,1]=0 ;not used
$NP_OFF[n,0]=0
$NP_OFF[n,1]=0
$NP_OFF[n,2]=0
$NP_DIR[n,0]=0
$NP_DIR[n,1]=0
$NP_DIR[n,2]=0
Cylinder
The "Cylinder" element type is defined with a height and a radius. The reference point for the offset and rotation values is located
in the center of the body.
$NP_TYPE[n]=“CYLINDER“
$NP_NAME[n]=“CYL_1“ ;adapt
$NP_CLOR[n]=0
$NP_D_LEVEL[n]=0
$NP_USAGE[n]=“A“
$NP_PARA[n,0]=200
$NP_PARA[n,1]=50
$NP_PARA[n,2]=0 ;not used
$NP_OFF[n,0]=0
$NP_OFF[n,1]=0
$NP_OFF[n,2]=0
$NP_DIR[n,0]=0
$NP_DIR[n,1]=0
$NP_DIR[n,2]=0
$NP_ANG[n]=0
Notes:
The "Cone / truncated cone" element type describes a tapered body with a reference point in its center that serves as reference
for the offset and rotation values. The body is defined with a height as well as the upper and lower radiuses.
$NP_TYPE[n]=“CONE“
$NP_NAME[n]=“CONE_1“ ;adapt
$NP_CLOR[n]=0
$NP_D_LEVEL[n]=0
$NP_USAGE[n]=“A“
$NP_PARA[n,0]=200
$NP_PARA[n,1]=20
$NP_PARA[n,2]=50
$NP_OFF[n,0]=0
$NP_OFF[n,1]=0
$NP_OFF[n,2]=0
$NP_DIR[n,0]=0
$NP_DIR[n,1]=0
$NP_DIR[n,2]=0
$NP_ANG[n]=0
File
The "File" element accesses a file in STL format. This allows machine parts to be represented with geometries that otherwise can
be represented by standard bodies only with great effort.
$NP_TYPE[n]=“FILE“
$NP_NAME[n]=“FILE_1“ ;adapt
$NP_CLOR[n]=0
$NP_D_LEVEL[n]=0
$NP_USAGE[n]=“A“
$NP_FILENAME[n]=“TEST.STL“
$NP_OFF[n,0]=0
$NP_OFF[n,1]=0
$NP_OFF[n,2]=0
$NP_DIR[n,0]=0
$NP_DIR[n,1]=0
$NP_DIR[n,2]=0
$NP_ANG[n]=0
Notes:
The reference point for the individual bodies is always in their The absolute center point of this cylinder based on the MCS
center and the offset values of each individual body always is then (0,0,10).
refer to its predecessor. The next attached body then takes this point as reference
point. The Z_CYL_2 body should be placed exactly on its
Example: predecessor. The two halves of the body dimensions (20
Arrangement of the collision bodies of the Z axis on the 5-axis mm / 2 + 80 mm / 2) result in the total offset of 50 mm, etc.
machine with table kinematics: The red control points in the lower sketch are the center
points of the bodies.
Z_BOX_1
200 x 200 x 1000
Absolute Z: 60mm
Because in the elements of the kinematic chain, no offset
values are programmed previously starting at the root, the
first body in this example (Z_CYL_1) is clamped Z_CYL_2
symmetrically at the machine zero. H80 x R75
If it is assumed for G0 SUPA Z0 D0 that the lower edge of the
cylinder should lie exactly at MCS=0, the cylinder must be
moved by half its height in Z+ (here 10 mm). Absolute Z: 10mm
Z_CYL_1
H20 x R50 Absolute Z:
If two bodies need to attached together at one reference point, this can be implemented with the element type for parallel ele-
ments.
Tip:
If two parallel elements need to be integrated immediately below the protection area, a frame with the offset values (0,0,0) can be
added on which the desired elements can be attached in parallel:
Notes:
Selection: PROTS("R")
Deselection: PROTS("I")
The distance of the bodies for which a collision should be reported can be defined via the
MD10619 $MN_COLLISION_TOLERANCE
MD10622 $MN_COLLISION_SAFETY_DIST
Example:
The deployed bodies with their dimensions are listed sepa-
The kinematic chain of the 3-axis machine is augmented with rately below:
the collision avoidance in Chapter A176.
• Connected with the ROOT element:
For this purpose, the associated protection areas and collision - ROOT_BOX_1 X=300, Y=600, Z=1500
bodies must be augmented with the chain. - ROOT_BOX_2 X=800, Y=1000, Z=200
Notes:
Y axis
Spindle
X axis
Z axis
Note:
The machine position in the
Picture is MCS X0 Y0 Z150.
Notes:
Y_PROT
Firstly, the individual elements of the kinematic chain are assigned machine protection areas to which defined bodies are then
assigned.
The machine tool table, consisting of frame and base plate, is defined in step 1.
The graphic (VS2) is activated at the begin of the definition:
All three represented reference points of the axes (sphere on each axis) should be united as a single point so that only "one"
sphere is visible. This means that all axes have the MCS value "0". If this is not possible because of the machine traversal paths,
the machine axes in the MCS should be moved to a defined position.
Notes:
In the structure tree of the machine, a machine protection area for the ROOT components is then defined.
The two collision bodies "frame" and "base plate" are then assigned to this protection area.
Note:
The "NEXT WINDOW" key switches between the "Tree" and "Graphic" windows. The active window receives a blue background
at the top.
The focus is placed on the ROOT element in the structure The "Collision element" (VS2) is selected from the vertical
tree, softkey bar.
Notes:
The machine protection area receives its name from the element of the "ROOT" structure tree with suffix "_PROT". The activation
status is written as "activated". The color can be chosen freely.
Y500mm
Z -750mm
Z –850mm
ROOT_BOX_2 reference point
Notes:
To assign a body to the protection area, actuate the "New The size and the properties of the collision body are specified
element" (VS3) softkey. as in the next screenshot:
The offset values are used to write the collision body in the
correct position. The offset values refer to the center point of
the "Box" element type.
Notes:
For a better differentiation between the base plate and the After accepting the data with "OK" (VS8), the tool table is dis-
frame, a different color is selected. Because the base plate is played completely in the graphic window:
placed completely outside the collision zone, the "Display"
selection is used for the "Use" selection.
In the next steps, the collision bodies are integrated within the Select the "Machine protection area" type from the dialog
kinematic chain in the workpiece direction. First, the protection window.
area for the Z axis with the associated collision body is
created. To do this, position the cursor on the "Z_AXIS"
element and actuate the "New element" (VS3) softkey:
Notes:
The protection area has the following parameters: The "New element" (VS3) softkey assigns a collision body to
the defined protection area:
The collision element is assigned the name "Z_BOX_1" and To complete the workpiece branch, a body must be defined for
the following parameters are set: the X axis. To do this, position the cursor on the "X_AXIS"
element.
Notes:
Select the "Machine protection area" type from the dialog The protection area has the following parameters:
window.
The "New element" (VS3) softkey assigns a collision body to For the X axis (this represents the machine table), the
the defined protection area: parameters are defined as follows in the dialog box:
Notes:
To complete the model, the tool chain must be augmented Select the "Machine protection area" type from the dialog
with protection areas and collision bodies. window.
The cursor is positioned on the "Y_AXIS" element in the
structure tree.
Notes:
Y_CYL_1 Y –325mm
Z150mm
Y_BOX_1
Y_BOX_3
Y -625mm
Z20mm Y525mm
Z150mm
Z –160mm Y625mm
Z150mm
Y_BOX_2
Y_CYL_2
The "New element" (VS3) softkey assigns a collision body to For the Y axis, the parameters are defined as follows in the
the defined protection area: dialog box:
Notes:
In addition to the Y axis, a box for the drive belt and a spindle The following parameters apply:
motor is mounted. Both bodies are not relevant for the
collision check; they should only give the model a
characteristic appearance. The belt box is defined as
subordinate element for the "Y_BOX_1" collision body.
The collision element type "Cylinder" is used for the motor; The following parameters apply:
the motor is turned by 90° with a rotational vector.
Notes:
Operating sequence for the "Y_BOX_3" (milling head) ele- Operating sequence for the "CYL_2" (spindle nose) element
ment Place the cursor on line "Y_BOX_3".
Place the cursor on line "Y_BOX_1". New element → Collision element → Cylinder
New element → Collision element → Parallel box
The name of the chain element is specified as "CYL_2".
The name of the chain element is specified as "Y_BOX_3". The following parameters apply:
The following parameters apply:
A protection area for the tool must then be defined. This infor- The new collision element must have type "Tool protection
mation serves as information for the position of the tool ac- area".
ceptance location in the collision model. To define this protec-
tion area, the cursor must be placed on the "SPI_AXIS" ele-
ment:
Notes:
The TO unit is 1, the magazine number is 9998, the magazine This completes the machine model, except for the assignment
slot is 1. This means the tool is placed at the correct location of the collision consideration. The model function can be
after the tool call. checked by traversing the machine axis and placing a tool.
The limit switches of the three linear axes are also set. Before
defining the limit switches, check that all axes are located
within the working area!
Y: $MA_POS_LIMIT_MINUS[Y]=-380
$MA_POS_LIMIT_PLUS[Y]=0
Z: $MA_POS_LIMIT_MINUS[Z]=0
$MA_POS_LIMIT_PLUS[Z]=600
Notes:
$NP_PROT_NAME[COUNT3]="X_PROT" $NP_PROT_NAME[COUNT3]="Y_PROT"
$NP_CHAIN_ELEM[COUNT3]="X_AXIS" $NP_CHAIN_ELEM[COUNT3]="Y_AXIS"
$NP_PROT_TYPE[COUNT3]="MACHINE" $NP_PROT_TYPE[COUNT3]="MACHINE"
$NP_1ST_PROT[COUNT3]="X_BOX_1" $NP_1ST_PROT[COUNT3]="Y_BOX_1"
$NP_PROT_COLOR[COUNT3]=-16711936 $NP_PROT_COLOR[COUNT3]=-16711936
$NP_PROT_D_LEVEL[COUNT3]=0 $NP_PROT_D_LEVEL[COUNT3]=0
$NP_BIT_NO[COUNT3]=-1 $NP_BIT_NO[COUNT3]=-1
$NP_INIT_STAT[COUNT3]="A" $NP_INIT_STAT[COUNT3]="A"
$NP_INDEX[COUNT3,0]=0 $NP_INDEX[COUNT3,0]=0
$NP_INDEX[COUNT3,1]=0 $NP_INDEX[COUNT3,1]=0
$NP_INDEX[COUNT3,2]=0 $NP_INDEX[COUNT3,2]=0
;$AN_COLL_STATE[COUNT3]=1 ;$AN_COLL_STATE[COUNT3]=1
;$AN_COLL_STATE_COND[COUNT3]=00011011 ;$AN_COLL_STATE_COND[COUNT3]=00011011
COUNT3=COUNT3+1 COUNT3=COUNT3+1
$NP_PROT_NAME[COUNT3]="TOOL_PROT"
$NP_CHAIN_ELEM[COUNT3]="SPI_AXIS"
$NP_PROT_TYPE[COUNT3]="TOOL"
$NP_1ST_PROT[COUNT3]=""
$NP_PROT_COLOR[COUNT3]=-16744448
$NP_PROT_D_LEVEL[COUNT3]=0
$NP_BIT_NO[COUNT3]=-1
$NP_INIT_STAT[COUNT3]="A"
$NP_INDEX[COUNT3,0]=1
$NP_INDEX[COUNT3,1]=9998
$NP_INDEX[COUNT3,2]=1
;$AN_COLL_STATE[COUNT3]=0
;$AN_COLL_STATE_COND[COUNT3]=00001010
COUNT3=COUNT3+1
Notes:
$NP_NAME[COUNT4]="Z_BOX_1" $NP_NAME[COUNT4]="X_BOX_1"
$NP_NEXT[COUNT4]="" $NP_NEXT[COUNT4]=""
$NP_NEXTP[COUNT4]="" $NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=8421504 $NP_COLOR[COUNT4]=32768
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="BOX" $NP_TYPE[COUNT4]="BOX"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=1200 $NP_PARA[COUNT4,0]=600
$NP_PARA[COUNT4,1]=200 $NP_PARA[COUNT4,1]=400
$NP_PARA[COUNT4,2]=400 $NP_PARA[COUNT4,2]=150
$NP_OFF[COUNT4,0]=0 $NP_OFF[COUNT4,0]=0
$NP_OFF[COUNT4,1]=100 $NP_OFF[COUNT4,1]=-200
$NP_OFF[COUNT4,2]=-200 $NP_OFF[COUNT4,2]=-75
$NP_DIR[COUNT4,0]=0 $NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=0
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=0 $NP_ANG[COUNT4]=0
COUNT4=COUNT4+1 COUNT4=COUNT4+1
Notes:
$NP_NAME[COUNT4]="Y_BOX_1" $NP_NAME[COUNT4]="Y_BOX_2"
$NP_NEXT[COUNT4]="Y_BOX_2" $NP_NEXT[COUNT4]="Y_CYL_1"
$NP_NEXTP[COUNT4]="Y_BOX_3" $NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=0 $NP_COLOR[COUNT4]=8421504
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="V"
$NP_TYPE[COUNT4]="BOX" $NP_TYPE[COUNT4]="BOX"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=300 $NP_PARA[COUNT4,0]=300
$NP_PARA[COUNT4,1]=1000 $NP_PARA[COUNT4,1]=50
$NP_PARA[COUNT4,2]=300 $NP_PARA[COUNT4,2]=600
$NP_OFF[COUNT4,0]=0 $NP_OFF[COUNT4,0]=0
$NP_OFF[COUNT4,1]=625 $NP_OFF[COUNT4,1]=525
$NP_OFF[COUNT4,2]=150 $NP_OFF[COUNT4,2]=150
$NP_DIR[COUNT4,0]=0 $NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=0
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=0 $NP_ANG[COUNT4]=0
COUNT4=COUNT4+1 COUNT4=COUNT4+1
$NP_NAME[COUNT4]="Y_CYL_1" $NP_NAME[COUNT4]="Y_BOX_3"
$NP_NEXT[COUNT4]="" $NP_NEXT[COUNT4]="Y_CYL_2"
$NP_NEXTP[COUNT4]="" $NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=32768 $NP_COLOR[COUNT4]=8388608
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="V" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="CYLINDER" $NP_TYPE[COUNT4]="BOX"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=600 $NP_PARA[COUNT4,0]=250
$NP_PARA[COUNT4,1]=150 $NP_PARA[COUNT4,1]=250
$NP_PARA[COUNT4,2]=0 $NP_PARA[COUNT4,2]=300
$NP_OFF[COUNT4,0]=0 $NP_OFF[COUNT4,0]=0
$NP_OFF[COUNT4,1]=-325 $NP_OFF[COUNT4,1]=-625
$NP_OFF[COUNT4,2]=150 $NP_OFF[COUNT4,2]=20
$NP_DIR[COUNT4,0]=1 $NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=0
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=90 $NP_ANG[COUNT4]=0
COUNT4=COUNT4+1 COUNT4=COUNT4+1
Notes:
$NP_NAME[COUNT4]="Y_CYL_2"
$NP_NEXT[COUNT4]=""
$NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=0
$NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="CYLINDER"
$NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=20
$NP_PARA[COUNT4,1]=40
$NP_PARA[COUNT4,2]=0
$NP_OFF[COUNT4,0]=0
$NP_OFF[COUNT4,1]=0
$NP_OFF[COUNT4,2]=-160
$NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=0
$NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=0
COUNT4=COUNT4+1
To allow the collision consideration to become active, those protection areas that must not collide with each other must be
defined.
To define the collision pairs, place the cursor on the "Collision groups" folder in the structure tree:
Notes:
In the first declaration, the two protection areas TOOL_PROT Protection area TOOL_PROT → ROOT_PROT:
and X_PROT are checked against each other:
Operating sequence: Place the cursor on "Collision groups"
New element → Collision pair → OK
Operating sequence: Place the cursor on "Collision groups" DEF INT COUNT5
New element → Collision pair → OK
$NP_COLL_PAIR[COUNT5,0]="TOOL_PROT"
$NP_COLL_PAIR[COUNT5,1]="ROOT_PROT"
$NP_SAFETY_DIST[COUNT5]=0
COUNT5=COUNT5+1
$NP_COLL_PAIR[COUNT5,0]="TOOL_PROT"
$NP_COLL_PAIR[COUNT5,1]="X_PROT"
$NP_SAFETY_DIST[COUNT5]=0
COUNT5=COUNT5+1
$NP_COLL_PAIR[COUNT5,0]="Y_PROT"
$NP_COLL_PAIR[COUNT5,1]="X_PROT"
$NP_SAFETY_DIST[COUNT5]=0
COUNT5=COUNT5+1
M30
Notes:
Y_BOX_2
Y_CYL_2
Final Body from the npp file: YBOX The file "YBOX.npp" is filled with the following Content:
$NP_NAME[0] = "YBOX"
$NP_COLOR[0] = 'HFF97AAAE'
$NP_USAGE[0] = "A"
$NP_TYPE[0] = "BOX"
$NP_PARA[0,0] = 300
$NP_PARA[0,1] = 1000
$NP_PARA[0,2] = 300
$NP_OFF[0,0] = 0
$NP_OFF[0,1] = 625
$NP_OFF[0,2] = 150
$NP_NEXT[0] = "Y_BOX_2"
$NP_NAME[1] = "Y_BOX_2"
For this purpose, the System data in the Directory $NP_COLOR[1] = 'HFF97AAAE'
NC data/3D collision model/mm file YBOX.npp $NP_USAGE[1] = "A"
(take care with upper and lower case!) Generated. $NP_TYPE[1] = "BOX"
$NP_PARA[1,0] = 300
$NP_PARA[1,1] = 50
$NP_PARA[1,2] = 600
$NP_OFF[1,0] = 0
$NP_OFF[1,1] = 525
$NP_OFF[1,2] = 150
$NP_NEXT[1] = "Y_CYL_1"
Notes:
The Structural Tree is changed at the Point "Y _ PROT": The The following Settings are adopted:
existing collision bodies are deleted and a new Collision ele-
ment with the Type "File" is created in the Protection Area "Y
_ PROT."
Operator sequence:
Cursor on "Y _ PROT," Soft-key "New Element" (VS3), Soft-
key "Collision element" (VS2), "File," OK.
A181: END
Notes:
Notes:
Module Description:
The following chapters provide further details of the kinematic chain operating principle. In particular,
the following topics are discussed:
Module Objective:
The reader gains a general overview of the kinematic chains operating principle application and, in
various exercises, familiarized with the individual functions and their capabilities. After working through
all chapters, readers should be able to integrate their own machine kinematics in the system.
Content:
Sinumerik
840D sl SINUMERIK Operate v4.8 Page 1 This document was produced for training purposes. A182
Siemens assumes no responsibility for its contents.
A182 Collision avoidance, 3-axis machine with dividing unit
Collision
avoidance,
3-axis machine
with
dividing unit
Notes:
To augment the kinematic chain of the 3-axis machine with collision check, various steps must be performed:
As precaution, the positions of the machine axes should be checked before starting work, because the positions affect the
representation in the graphic.
Moveable bodies should be defined for the following elements from the kinematic chain:
• ROOT
• X_AXIS
• Y_AXIS
• Z_AXIS
• A_AXIS
X_PROT
Z_PROT
Y_PROT
A_PROT
Notes:
Definition of the protection areas and of the collision bodies for the "ROOT" element:
In this example, a machine protection area that contains all elements of the base frame and of the tool changer is defined for the
"ROOT" element:
ROOT_BOX_4
ROOT_BOX_5 ROOT_BOX_3
ROOT_BOX_2
ROOT_BOX_1
Notes:
Operating sequence for the creation: Operating sequence for creating the base plate:
Place the cursor on line "ROOT". Place the cursor on line "ROOT_PROT".
New element → Collision element → Machine protection area New element → Collision element → Box
The name of the chain element is specified as The name of the chain element is specified as
"ROOT_PROT"; the mode is switched to "Activated". "ROOT_BOX_1"; the use is switched to
"Display + Monitoring".
Operating sequence for creating the left side panel: Operating sequence for creating the rear panel:
Place the cursor on line "ROOT_BOX_1". Place the cursor on line "ROOT_BOX_1".
New element → Collision element → Box New element → Collision element → Parallel box
The name of the chain element is specified as The name of the chain element is specified as
"ROOT_BOX_2"; the use is switched to "ROOT_BOX_3"; the use is switched to
"Display + Monitoring". "Display + Monitoring".
Notes:
Operating sequence for creating the X bar: Operating sequence for creating the tool magazine:
Place the cursor on line "ROOT_BOX_3". Place the cursor on line "ROOT_BOX_2".
New element → Collision element → Box New element → Collision element → Box
The name of the chain element is specified as
"ROOT_BOX_4"; the use is switched to The name of the chain element is specified as
"Display + Monitoring". "ROOT_BOX_5"; the use is switched to
"Display + Monitoring".
Operating sequence for creating the protection area for the Y Operating sequence for creating the machine table:
axis:
Place the cursor on line "Y_LIN_PROT".
Place the cursor on line "Y_AXIS". New element → Collision element → Box
New element → Collision element → Machine protection area
The name of the chain element is specified as "Y_BOX_1";
The name of the chain element is specified as the use is switched to "Display + Monitoring".
"Y_LIN_PROT"; the mode is switched to "Activated".
Notes:
Operating sequence for creating the protection area for the A Operating sequence for creating the main body of the A axis:
axis:
Place the cursor on line "A_PROT".
Place the cursor on line "A_OFFSET". New element → Collision element → Box
New element → Collision element → Machine protection area
The name of the chain element is specified as "A_BOX_1";
The name of the chain element is specified as "A_PROT"; the the use is switched to "Display + Monitoring".
mode is switched to "Activated".
Operating sequence for creating the chuck of the A axis: Operating sequence for creating the protection area for the X
axis:
Place the cursor on line "A_BOX_1".
New element → Collision element → Cylinder Place the cursor on line "X_AXIS".
New element → Collision element → Machine protection area
The name of the chain element is specified as "A_CYL_1"; the
use is switched to "Display + Monitoring". The name of the chain element is specified as
"X_LIN_PROT"; the mode is switched to "Activated".
Notes:
Operating sequence for creating the support plate for the X Operating sequence for creating the protection area for the Z
axis: axis:
Place the cursor on line "X_LIN_PROT". Place the cursor on line "Z_AXIS".
New element → Collision element → Box New element → Collision element → Machine protection area
The name of the chain element is specified as "X_BOX_1"; The name of the chain element is specified as "Z_LIN_PROT";
the use is switched to "Display + Monitoring". the mode is switched to "Activated".
Two elements are specified for the Z axis: A cylinder for the Operating sequence for creating the outer body for the Z axis:
spindle nose and a box for the outer body of the Z axis.
Operating sequence for creating the spindle nose for the Z Place the cursor on line "Z_CYL_1".
axis: New element → Collision element → Box
Place the cursor on line "Z_LIN_PROT". The name of the chain element is specified as "Z_BOX_1"; the
New element → Collision element → Cylinder use is switched to "Display + Monitoring".
Notes:
Finally, the tool change location on the Z axis must be defined This completes the modeling of the complete machine; the
as tool protection area. structure tree has the design:
Operating sequence:
Notes:
$NP_PROT_NAME[COUNT3]="X_LIN_PROT" $NP_PROT_NAME[COUNT3]="Z_LIN_PROT"
$NP_CHAIN_ELEM[COUNT3]="X_AXIS" $NP_CHAIN_ELEM[COUNT3]="Z_AXIS"
$NP_PROT_TYPE[COUNT3]="MACHINE" $NP_PROT_TYPE[COUNT3]="MACHINE"
$NP_1ST_PROT[COUNT3]="X_BOX_1" $NP_1ST_PROT[COUNT3]="Z_CYL_1"
$NP_PROT_COLOR[COUNT3]=-8388608 $NP_PROT_COLOR[COUNT3]=-16744448
$NP_PROT_D_LEVEL[COUNT3]=0 $NP_PROT_D_LEVEL[COUNT3]=0
$NP_BIT_NO[COUNT3]=-1 $NP_BIT_NO[COUNT3]=-1
$NP_INIT_STAT[COUNT3]="A" $NP_INIT_STAT[COUNT3]="A"
$NP_INDEX[COUNT3,0]=0 $NP_INDEX[COUNT3,0]=0
$NP_INDEX[COUNT3,1]=0 $NP_INDEX[COUNT3,1]=0
$NP_INDEX[COUNT3,2]=0 $NP_INDEX[COUNT3,2]=0
COUNT3=COUNT3+1 COUNT3=COUNT3+1
$NP_PROT_NAME[COUNT3]="TOOL_PROT" $NP_PROT_NAME[COUNT3]="A_PROT"
$NP_CHAIN_ELEM[COUNT3]="SP1_AXIS" $NP_CHAIN_ELEM[COUNT3]="A_OFFSET"
$NP_PROT_TYPE[COUNT3]="TOOL" $NP_PROT_TYPE[COUNT3]="MACHINE"
$NP_1ST_PROT[COUNT3] $NP_1ST_PROT[COUNT3]="A_BOX_1"
="__TOOL_00001_09998_01_0000" $NP_PROT_COLOR[COUNT3]=-8388608
$NP_PROT_COLOR[COUNT3]=0 $NP_PROT_D_LEVEL[COUNT3]=0
$NP_PROT_D_LEVEL[COUNT3]=0 $NP_BIT_NO[COUNT3]=-1
$NP_BIT_NO[COUNT3]=-1 $NP_INIT_STAT[COUNT3]="A"
$NP_INIT_STAT[COUNT3]="A" $NP_INDEX[COUNT3,0]=0
$NP_INDEX[COUNT3,0]=1 $NP_INDEX[COUNT3,1]=0
$NP_INDEX[COUNT3,1]=9998 $NP_INDEX[COUNT3,2]=0
$NP_INDEX[COUNT3,2]=1 COUNT3=COUNT3+1
COUNT3=COUNT3+1
Notes:
$NP_NAME[COUNT4]="ROOT_BOX_2" $NP_NAME[COUNT4]="ROOT_BOX_3"
$NP_NEXT[COUNT4]="ROOT_BOX_5" $NP_NEXT[COUNT4]="ROOT_BOX_4"
$NP_NEXTP[COUNT4]="" $NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=0 $NP_COLOR[COUNT4]=0
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="BOX" $NP_TYPE[COUNT4]="BOX"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=50 $NP_PARA[COUNT4,0]=2050
$NP_PARA[COUNT4,1]=1800 $NP_PARA[COUNT4,1]=380
$NP_PARA[COUNT4,2]=2400 $NP_PARA[COUNT4,2]=1750
$NP_OFF[COUNT4,0]=-1025 $NP_OFF[COUNT4,0]=-25
$NP_OFF[COUNT4,1]=0 $NP_OFF[COUNT4,1]=710
$NP_OFF[COUNT4,2]=1075 $NP_OFF[COUNT4,2]=1000
$NP_DIR[COUNT4,0]=0 $NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=0
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=0 $NP_ANG[COUNT4]=0
COUNT4=COUNT4+1 COUNT4=COUNT4+1
Notes:
$NP_NAME[COUNT4]="ROOT_BOX_4" $NP_NAME[COUNT4]="X_BOX_1"
$NP_NEXT[COUNT4]="" $NP_NEXT[COUNT4]=""
$NP_NEXTP[COUNT4]="" $NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=0 $NP_COLOR[COUNT4]=0
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="BOX" $NP_TYPE[COUNT4]="BOX"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=2000 $NP_PARA[COUNT4,0]=380
$NP_PARA[COUNT4,1]=500 $NP_PARA[COUNT4,1]=70
$NP_PARA[COUNT4,2]=450 $NP_PARA[COUNT4,2]=460
$NP_OFF[COUNT4,0]=25 $NP_OFF[COUNT4,0]=0
$NP_OFF[COUNT4,1]=-440 $NP_OFF[COUNT4,1]=185
$NP_OFF[COUNT4,2]=650 $NP_OFF[COUNT4,2]=1005
$NP_DIR[COUNT4,0]=0 $NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=0
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=0 $NP_ANG[COUNT4]=0
COUNT4=COUNT4+1 COUNT4=COUNT4+1
$NP_NAME[COUNT4]="Z_BOX_1" $NP_NAME[COUNT4]="Z_CYL_1"
$NP_NEXT[COUNT4]="" $NP_NEXT[COUNT4]="Z_BOX_1"
$NP_NEXTP[COUNT4]="" $NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=0 $NP_COLOR[COUNT4]=0
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="BOX" $NP_TYPE[COUNT4]="CYLINDER"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=380 $NP_PARA[COUNT4,0]=100
$NP_PARA[COUNT4,1]=300 $NP_PARA[COUNT4,1]=90
$NP_PARA[COUNT4,2]=1200 $NP_PARA[COUNT4,2]=0
$NP_OFF[COUNT4,0]=0 $NP_OFF[COUNT4,0]=0
$NP_OFF[COUNT4,1]=0 $NP_OFF[COUNT4,1]=0
$NP_OFF[COUNT4,2]=650 $NP_OFF[COUNT4,2]=50
$NP_DIR[COUNT4,0]=0 $NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=0
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=0 $NP_ANG[COUNT4]=0
COUNT4=COUNT4+1 COUNT4=COUNT4+1
Notes:
$NP_NAME[COUNT4]="ROOT_BOX_5" $NP_NAME[COUNT4]="A_BOX_1"
$NP_NEXT[COUNT4]="" $NP_NEXT[COUNT4]="A_CYL_1"
$NP_NEXTP[COUNT4]="" $NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=0 $NP_COLOR[COUNT4]=0
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="BOX" $NP_TYPE[COUNT4]="BOX"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=1000 $NP_PARA[COUNT4,0]=100
$NP_PARA[COUNT4,1]=1800 $NP_PARA[COUNT4,1]=200
$NP_PARA[COUNT4,2]=500 $NP_PARA[COUNT4,2]=300
$NP_OFF[COUNT4,0]=-525 $NP_OFF[COUNT4,0]=0
$NP_OFF[COUNT4,1]=0 $NP_OFF[COUNT4,1]=0
$NP_OFF[COUNT4,2]=500 $NP_OFF[COUNT4,2]=0
$NP_DIR[COUNT4,0]=0 $NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=0
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=0 $NP_ANG[COUNT4]=0
COUNT4=COUNT4+1 COUNT4=COUNT4+1
$NP_NAME[COUNT4]="A_CYL_1"
$NP_NEXT[COUNT4]=""
$NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=0
$NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="CYLINDER"
$NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=50
$NP_PARA[COUNT4,1]=80
$NP_PARA[COUNT4,2]=0
$NP_OFF[COUNT4,0]=75
$NP_OFF[COUNT4,1]=0
$NP_OFF[COUNT4,2]=0
$NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=1
$NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=90
COUNT4=COUNT4+1
Notes:
To allow the collision consideration to become active, those protection areas that must not collide with each other must
be defined.
To define the collision pairs, place the cursor on the "Collision groups" folder in the structure tree:
In the first declaration, the two protection areas Z_LIN_PROT Protection area TOOL_PROT → A_PROT:
and ROOT_PROT are checked against each other:
Operating sequence: Place the cursor on "Collision groups"
New element → Collision pair → OK
Notes:
Operating sequence: Place the cursor on "Collision groups" Operating sequence: Place the cursor on "Collision groups"
New element → Collision pair → OK New element → Collision pair → OK
$NP_COLL_PAIR[COUNT5,0]
="Z_LIN_PROT" ;Index COUNT5=2
$NP_COLL_PAIR[COUNT5,1]="Y_LIN_PROT"
$NP_SAFETY_DIST[COUNT5]=0
COUNT5=COUNT5+1
$NP_COLL_PAIR[COUNT5,0]
="Z_LIN_PROT" ;Index COUNT5=3
$NP_COLL_PAIR[COUNT5,1]="A_PROT"
$NP_SAFETY_DIST[COUNT5]=0
COUNT5=COUNT5+1
A182: END
Notes:
Module Description:
The following chapters provide further details of the kinematic chain operating principle. In particular,
the following topics are discussed:
Module Objective:
The reader gains a general overview of the kinematic chains operating principle application and, in
various exercises, familiarized with the individual functions and their capabilities. After working through
all chapters, readers should be able to integrate their own machine kinematics in the system.
Content:
Sinumerik
840D sl SINUMERIK Operate v4.8 Page 1 This document was produced for training purposes. A183
Siemens assumes no responsibility for its contents.
A183 Collision avoidance, 5-axis table kinematics
Collision
avoidance,
5-axis table
kinematics
Notes:
To augment the kinematic chain of the 5-axis machine with table kinematics with collision check, various steps must be per-
formed:
As precaution, the positions of the machine axes should be checked before starting work, because the positions affect the repre-
sentation in the graphic.
Moveable bodies should be defined for the following elements from the kinematic chain:
• ROOT
• Y_AXIS
• Z_AXIS
• A_AXIS
• C_AXIS
Z_PROT
ROOT_PROT_1
Y_PROT
A_PROT
C_PROT
Notes:
Definition of the protection areas and of the collision bodies for the "ROOT" element:
In this example, two machine protection areas are defined for the "ROOT" element:
1. Protection area for the machine frame
2. Protection area for the tool change door
ROOT_BOX_4
ROOT_PROT_2
ROOT_BOX_7
ROOT_BOX_6
ROOT_BOX_2
ROOT_BOX_5
ROOT_BOX_3
ROOT_BOX_1
Notes:
Note:
The HMI display causes the "ROOT_PROT_2" protection
area to be displayed first in the structure tree, although it was
defined after the "ROOT_PROT_1" protection area.
An "empty" frame is defined initially below the "ROOT_PROT" The next installed element is the machine base plate as Box
protection area. This frame is only used later to link two element type.
parallel elements in the structure tree.
Operating sequence for the creation:
Operating sequence for the creation:
Place the cursor on line "ROOT_FRAME_1".
Place the cursor on line "ROOT_PROT_1". New element → Collision element → Box
New element → Collision element → Frame
The name of the chain element is specified as
The name of the chain element is specified as "ROOT_BOX_1".
"ROOT_FRAME_1". The complete element remains in the
initial setting.
Notes:
The "ROOT_BOX_2" element is subordinate to the base The right side panel is defined as following element to
plate; this element represents the left side panel and has ele- "ROOT_BOX_2" as Box element type.
ment type Box.
Operating sequence for the creation:
Operating sequence for the creation:
Place the cursor on line "ROOT_BOX_2".
Place the cursor on line "ROOT_BOX_1". New element → Collision element → Box
New element → Collision element → Box
The name of the chain element is specified as
The name of the chain element is specified as "ROOT_BOX_3".
"ROOT_BOX_2".
The rear panel is defined as parallel box to "ROOT_BOX_1" The work space partition is defined as parallel box to
as Box element type. "ROOT_FRAME_1" as Box element type.
Operating sequence for the creation: Operating sequence for the creation:
Place the cursor on line "ROOT_BOX_1". Place the cursor on line "ROOT_FRAME_1".
New element → Collision element → Parallel box New element → Collision element → Parallel box
The name of the chain element is specified as The name of the chain element is specified as
"ROOT_BOX_4". "ROOT_BOX_5".
Notes:
The upper part of the work space partition is divided into three
parts:
• Left part
• Right part
• Tool change door in the center
The right part der work space partition is defined as following The "ROOT_BOX_8" element is subordinate to the
box to "ROOT_BOX_6" as Box element type. ROOT_PROT_2; the ROOT_PROT_2 can be fixed in the
same way than the ROOT_PROT_1 element
Operating sequence for the creation:
Operating sequence for the creation:
Place the cursor on line "ROOT_BOX_6".
New element → Collision element → Box Place the cursor on line "ROOT_PROT_2".
New element → Collision element → Box
The name of the chain element is specified as
"ROOT_BOX_7". The name of the chain element is specified as
"ROOT_BOX_8".
Notes:
The name of the chain element is specified as Place the cursor on line "ROOT_PROT_2".
"ROOT_PROT_2"; the mode is switched to "Activated". New element → Collision element → Box
Definition of the protection area and of the collision body for the "Y_AXIS" element:
A machine protection area and a collision body are defined for the element "Y_AXIS".
Notes:
Operating sequence for the creation: The traverse of the Y axis of the machine is defined as box
below the "Y_PROT" protection area.
Place the cursor on line "Y_AXIS".
New element → Collision element → Machine protection area Operating sequence for the creation:
The name of the chain element is specified as "Y_PROT"; the Place the cursor on line "Y_PROT".
mode is switched to "Activated". New element → Collision element → Box
The X axis of the machine is not visualized. This is located outside the collision zone, and the movement of the X axis is visual-
ized adequately by the body of the Z axis.
Definition of the protection area and of the collision body for the element.
A machine protection area and several collision bodies are defined for the element "Z_AXIS".
Z_CYL_2
Z_CYL_1
Z_BOX_1
Notes:
Operating sequence for the creation: As first element, the lower spindle ring is defined as cylinder
below the "Z_PROT" protection area.
Place the cursor on line "Z_AXIS".
New element → Collision element → Machine protection area Operating sequence for the creation:
The name of the chain element is specified as "Z_PROT"; the Place the cursor on line "Z_PROT".
mode is switched to "Activated". New element → Collision element → Cylinder
The next, subordinate element for the lower spindle ring is the As last element of the Z axis, the main body is defined as box.
upper spindle ring, this is also defined as cylinder.
Operating sequence for the creation:
Operating sequence for the creation:
Place the cursor on line "Z_CYL_2".
Place the cursor on line "Z_CYL_1". New element → Collision element → Box
New element → Collision element → Cylinder
The name of the chain element is specified as "Z_BOX_1";
The name of the chain element is specified as "Z_CYL_2"; the the use is switched to "Display + Monitoring".
use is switched to "Display + Monitoring".
Notes:
The A axis and the C axis are modeled in the workpiece branch of the machine.
First, the protection area and collision bodies are defined for the A axis.
Because the A bridge should have a detailed representation, a machine protection area and several collision bodies are defined
for the element "A_ROT".
Notes:
An overview diagram shows which elements are arranged parallel to each other. This makes it easier to understand the number-
ing order.
A_FRAME
A_CYL_1 A_BOX_5
A_CYL_3 A_CYL_5
Notes:
A_CYL_2
A_CYL_4
A_BOX_7 A_BOX_2
A_CYL_1
A_BOX_5 A_CYL_3
A_BOX_3
A_BOX_6
A_BOX_4
A_BOX_1
A_CYL_5
Operating sequence for the creation: As first element, the frame is defined as dummy element for
the first branch below the "A_PROT" protection area.
Place the cursor on line "A_AXIS".
New element → Collision element → Machine protection area Operating sequence for the creation:
The name of the chain element is specified as "A_PROT"; the Place the cursor on line "A_PROT".
mode is switched to "Activated". New element → Collision element → Frame
Notes:
As first element after the frame, the bearing housing of the C Below the bearing housing of the C axis, the A main body is
axis is defined as cylinder. defined as box.
Operating sequence for the creation: Operating sequence for the creation:
Place the cursor on line "A_FRAME_1". Place the cursor on line "A_CYL_1".
New element → Collision element → Cylinder New element → Collision element → Box
The name of the chain element is specified as "A_CYL_1". The name of the chain element is specified as "A_BOX_1".
The left bearing cartridge is attached as cylinder below the A The right bearing cartridge is attached as cylinder below the
axis main body. left bearing cartridge.
Operating sequence for the creation: Operating sequence for the creation:
Place the cursor on line "A_BOX_1". Place the cursor on line "A_CYL_2".
New element → Collision element → Cylinder New element → Collision element → Cylinder
The name of the chain element is specified as "A_CYL_2". The name of the chain element is specified as "A_CYL_3".
Notes:
The left bridge cylinder is attached as cylinder parallel below The right bridge cylinder is attached as cylinder below the
the A_BOX_1. element A_CYL_4.
Operating sequence for the creation: Operating sequence for the creation:
Place the cursor on line "A_BOX_1". Place the cursor on line "A_CYL_4".
New element → Collision element → Parallel cylinder New element → Collision element → Cylinder
The name of the chain element is specified as "A_CYL_4". The name of the chain element is specified as "A_CYL_5".
The complete right side flange is defined parallel below the The 2nd body of the right flange is defined as box below ele-
A_CYL_1. ment "A_BOX_2".
Operating sequence for the creation: Operating sequence for the creation:
Place the cursor on line "A_CYL_1". Place the cursor on line "A_BOX_2".
New element → Collision element → Parallel box New element → Collision element → Box
The name of the chain element is specified as "A_BOX_2". The name of the chain element is specified as "A_BOX_3".
Notes:
The 3rd body of the right flange is defined as parallel box be- Similar to the right side flange, the left side flange is also de-
low element "A_BOX_2". fined as three individual bodies.
Operating sequence for the creation: Operating sequence for the creation:
Place the cursor on line "A_BOX_2". Place the cursor on line "A_FRAME_1".
New element → Collision element → Parallel box New element → Collision element → Parallel box
The name of the chain element is specified as "A_BOX_4". The name of the chain element is specified as "A_BOX_5".
The 2nd body of the left flange is defined as box below ele- The last body of the A axis flange is defined as parallel box
ment "A_BOX_5". below element "A_BOX_5".
Operating sequence for the creation: Operating sequence for the creation:
Place the cursor on line "A_BOX_5". Place the cursor on line "A_BOX_5".
New element → Collision element → Box New element → Collision element → Parallel box
The name of the chain element is specified as "A_BOX_6". The name of the chain element is specified as "A_BOX_7".
Notes:
To complete the machine modeling, a machine protection area and a collision body are required for the C axis.
Operating sequence for the creation: The clamping table of the C axis is defined as cylinder below
the "C_PROT" protection area.
Place the cursor on line "C_AXIS".
New element → Collision element → Machine protection area Operating sequence for the creation:
The name of the chain element is specified as "C_PROT"; the Place the cursor on line "C_PROT".
mode is switched to "Activated". New element → Collision element → Cylinder
Notes:
$NP_PROT_NAME[COUNT3]="Y_PROT" $NP_PROT_NAME[COUNT3]="Z_PROT"
$NP_CHAIN_ELEM[COUNT3]="Y_AXIS" $NP_CHAIN_ELEM[COUNT3]="Z_AXIS"
$NP_PROT_TYPE[COUNT3]="MACHINE" $NP_PROT_TYPE[COUNT3]="MACHINE"
$NP_1ST_PROT[COUNT3]="Y_BOX_1" $NP_1ST_PROT[COUNT3]="Z_CYL_1"
$NP_PROT_COLOR[COUNT3]=-4144960 $NP_PROT_COLOR[COUNT3]=0
$NP_PROT_D_LEVEL[COUNT3]=0 $NP_PROT_D_LEVEL[COUNT3]=0
$NP_BIT_NO[COUNT3]=-1 $NP_BIT_NO[COUNT3]=-1
$NP_INIT_STAT[COUNT3]="A" $NP_INIT_STAT[COUNT3]="A"
$NP_INDEX[COUNT3,0]=0 $NP_INDEX[COUNT3,0]=0
$NP_INDEX[COUNT3,1]=0 $NP_INDEX[COUNT3,1]=0
$NP_INDEX[COUNT3,2]=0 $NP_INDEX[COUNT3,2]=0
COUNT3=COUNT3+1 COUNT3=COUNT3+1
Notes:
$NP_PROT_NAME[COUNT3]="TOOL_PROT" $NP_PROT_NAME[COUNT3]="A_PROT"
$NP_CHAIN_ELEM[COUNT3]="SP1_AXIS" $NP_CHAIN_ELEM[COUNT3]="A_AXIS"
$NP_PROT_TYPE[COUNT3]="TOOL" $NP_PROT_TYPE[COUNT3]="MACHINE"
$NP_1ST_PROT[COUNT3] $NP_1ST_PROT[COUNT3]="A_FRAME_1"
="__TOOL_00001_09998_01_0000" $NP_PROT_COLOR[COUNT3]=-6250332
$NP_PROT_COLOR[COUNT3]=0 $NP_PROT_D_LEVEL[COUNT3]=0
$NP_PROT_D_LEVEL[COUNT3]=0 $NP_BIT_NO[COUNT3]=-1
$NP_BIT_NO[COUNT3]=-1 $NP_INIT_STAT[COUNT3]="A"
$NP_INIT_STAT[COUNT3]="A" $NP_INDEX[COUNT3,0]=0
$NP_INDEX[COUNT3,0]=1 $NP_INDEX[COUNT3,1]=0
$NP_INDEX[COUNT3,1]=9998 $NP_INDEX[COUNT3,2]=0
$NP_INDEX[COUNT3,2]=1 COUNT3=COUNT3+1
COUNT3=COUNT3+1
Notes:
$NP_NAME[COUNT4]="ROOT_BOX_5" $NP_NAME[COUNT4]="ROOT_BOX_6"
$NP_NEXT[COUNT4]="ROOT_BOX_6" $NP_NEXT[COUNT4]="ROOT_BOX_7"
$NP_NEXTP[COUNT4]="" $NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=8421504 $NP_COLOR[COUNT4]=8421504
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="BOX" $NP_TYPE[COUNT4]="BOX"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=1300 $NP_PARA[COUNT4,0]=500
$NP_PARA[COUNT4,1]=5 $NP_PARA[COUNT4,1]=5
$NP_PARA[COUNT4,2]=500 $NP_PARA[COUNT4,2]=400
$NP_OFF[COUNT4,0]=0 $NP_OFF[COUNT4,0]=-400
$NP_OFF[COUNT4,1]=850 $NP_OFF[COUNT4,1]=0
$NP_OFF[COUNT4,2]=-150 $NP_OFF[COUNT4,2]=450
$NP_DIR[COUNT4,0]=1 $NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=0
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=-10 $NP_ANG[COUNT4]=0
COUNT4=COUNT4+1 COUNT4=COUNT4+1
$NP_NAME[COUNT4]="ROOT_BOX_7" $NP_NAME[COUNT4]="ROOT_BOX_1"
$NP_NEXT[COUNT4]="" $NP_NEXT[COUNT4]="ROOT_BOX_2"
$NP_NEXTP[COUNT4]="" $NP_NEXTP[COUNT4]="ROOT_BOX_4"
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=8421504 $NP_COLOR[COUNT4]=0
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="BOX" $NP_TYPE[COUNT4]="BOX"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=500 $NP_PARA[COUNT4,0]=1700
$NP_PARA[COUNT4,1]=5 $NP_PARA[COUNT4,1]=2000
$NP_PARA[COUNT4,2]=400 $NP_PARA[COUNT4,2]=200
$NP_OFF[COUNT4,0]=800 $NP_OFF[COUNT4,0]=0
$NP_OFF[COUNT4,1]=0 $NP_OFF[COUNT4,1]=500
$NP_OFF[COUNT4,2]=0 $NP_OFF[COUNT4,2]=-500
$NP_DIR[COUNT4,0]=0 $NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=0
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=0 $NP_ANG[COUNT4]=0
COUNT4=COUNT4+1 COUNT4=COUNT4+1
Notes:
$NP_NAME[COUNT4]="ROOT_BOX_4" $NP_NAME[COUNT4]="ROOT_BOX_2"
$NP_NEXT[COUNT4]="" $NP_NEXT[COUNT4]="ROOT_BOX_3"
$NP_NEXTP[COUNT4]="" $NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=0 $NP_COLOR[COUNT4]=0
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="BOX" $NP_TYPE[COUNT4]="BOX"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=1700 $NP_PARA[COUNT4,0]=200
$NP_PARA[COUNT4,1]=200 $NP_PARA[COUNT4,1]=2000
$NP_PARA[COUNT4,2]=1400 $NP_PARA[COUNT4,2]=900
$NP_OFF[COUNT4,0]=0 $NP_OFF[COUNT4,0]=-750
$NP_OFF[COUNT4,1]=1100 $NP_OFF[COUNT4,1]=0
$NP_OFF[COUNT4,2]=600 $NP_OFF[COUNT4,2]=550
$NP_DIR[COUNT4,0]=0 $NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=0
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=0 $NP_ANG[COUNT4]=0
COUNT4=COUNT4+1 COUNT4=COUNT4+1
$NP_NAME[COUNT4]="ROOT_BOX_3" $NP_NAME[COUNT4]="ROOT_BOX_8"
$NP_NEXT[COUNT4]="" $NP_NEXT[COUNT4]=""
$NP_NEXTP[COUNT4]="" $NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=0 $NP_COLOR[COUNT4]=0
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="BOX" $NP_TYPE[COUNT4]="BOX"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=200 $NP_PARA[COUNT4,0]=320
$NP_PARA[COUNT4,1]=2000 $NP_PARA[COUNT4,1]=5
$NP_PARA[COUNT4,2]=900 $NP_PARA[COUNT4,2]=405
$NP_OFF[COUNT4,0]=1500 $NP_OFF[COUNT4,0]=0
$NP_OFF[COUNT4,1]=0 $NP_OFF[COUNT4,1]=925
$NP_OFF[COUNT4,2]=0 $NP_OFF[COUNT4,2]=290
$NP_DIR[COUNT4,0]=0 $NP_DIR[COUNT4,0]=1
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=0
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=0 $NP_ANG[COUNT4]=-10
COUNT4=COUNT4+1 COUNT4=COUNT4+1
Notes:
$NP_NAME[COUNT4]="Y_BOX_1" $NP_NAME[COUNT4]="Z_CYL_1"
$NP_NEXT[COUNT4]="" $NP_NEXT[COUNT4]="Z_CYL_2"
$NP_NEXTP[COUNT4]="" $NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=0 $NP_COLOR[COUNT4]=-6710887
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="BOX" $NP_TYPE[COUNT4]="CYLINDER"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=1700 $NP_PARA[COUNT4,0]=20
$NP_PARA[COUNT4,1]=350 $NP_PARA[COUNT4,1]=50
$NP_PARA[COUNT4,2]=350 $NP_PARA[COUNT4,2]=0
$NP_OFF[COUNT4,0]=0 $NP_OFF[COUNT4,0]=0
$NP_OFF[COUNT4,1]=275 $NP_OFF[COUNT4,1]=0
$NP_OFF[COUNT4,2]=675 $NP_OFF[COUNT4,2]=10
$NP_DIR[COUNT4,0]=0 $NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=0
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=0 $NP_ANG[COUNT4]=0
COUNT4=COUNT4+1 COUNT4=COUNT4+1
$NP_NAME[COUNT4]="Z_CYL_2" $NP_NAME[COUNT4]="Z_BOX_1"
$NP_NEXT[COUNT4]="Z_BOX_1" $NP_NEXT[COUNT4]=""
$NP_NEXTP[COUNT4]="" $NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=12632256 $NP_COLOR[COUNT4]=0
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="CYLINDER" $NP_TYPE[COUNT4]="BOX"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=80 $NP_PARA[COUNT4,0]=200
$NP_PARA[COUNT4,1]=75 $NP_PARA[COUNT4,1]=200
$NP_PARA[COUNT4,2]=0 $NP_PARA[COUNT4,2]=1000
$NP_OFF[COUNT4,0]=0 $NP_OFF[COUNT4,0]=0
$NP_OFF[COUNT4,1]=0 $NP_OFF[COUNT4,1]=0
$NP_OFF[COUNT4,2]=50 $NP_OFF[COUNT4,2]=540
$NP_DIR[COUNT4,0]=0 $NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=0
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=0 $NP_ANG[COUNT4]=0
COUNT4=COUNT4+1 COUNT4=COUNT4+1
Notes:
$NP_NAME[COUNT4]="A_FRAME_1" $NP_NAME[COUNT4]="A_BOX_5"
$NP_NEXT[COUNT4]="A_CYL_1" $NP_NEXT[COUNT4]="A_BOX_6"
$NP_NEXTP[COUNT4]="A_BOX_5" $NP_NEXTP[COUNT4]="A_BOX_7"
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=0 $NP_COLOR[COUNT4]=0
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="FRAME" $NP_TYPE[COUNT4]="BOX"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=0 $NP_PARA[COUNT4,0]=100
$NP_PARA[COUNT4,1]=0 $NP_PARA[COUNT4,1]=275
$NP_PARA[COUNT4,2]=0 $NP_PARA[COUNT4,2]=300
$NP_OFF[COUNT4,0]=0 $NP_OFF[COUNT4,0]=-500
$NP_OFF[COUNT4,1]=0 $NP_OFF[COUNT4,1]=0
$NP_OFF[COUNT4,2]=0 $NP_OFF[COUNT4,2]=-100
$NP_DIR[COUNT4,0]=0 $NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=1
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=0 $NP_ANG[COUNT4]=-20
COUNT4=COUNT4+1 COUNT4=COUNT4+1
$NP_NAME[COUNT4]="A_BOX_7" $NP_NAME[COUNT4]="A_BOX_6"
$NP_NEXT[COUNT4]="" $NP_NEXT[COUNT4]=""
$NP_NEXTP[COUNT4]="" $NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=0 $NP_COLOR[COUNT4]=0
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="BOX" $NP_TYPE[COUNT4]="BOX"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=100 $NP_PARA[COUNT4,0]=100
$NP_PARA[COUNT4,1]=100 $NP_PARA[COUNT4,1]=100
$NP_PARA[COUNT4,2]=325 $NP_PARA[COUNT4,2]=325
$NP_OFF[COUNT4,0]=0 $NP_OFF[COUNT4,0]=0
$NP_OFF[COUNT4,1]=125 $NP_OFF[COUNT4,1]=-125
$NP_OFF[COUNT4,2]=0 $NP_OFF[COUNT4,2]=0
$NP_DIR[COUNT4,0]=1 $NP_DIR[COUNT4,0]=1
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=0
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=15 $NP_ANG[COUNT4]=-15
COUNT4=COUNT4+1 COUNT4=COUNT4+1
Notes:
$NP_NAME[COUNT4]="A_CYL_1" $NP_NAME[COUNT4]="A_BOX_2"
$NP_NEXT[COUNT4]="A_BOX_1" $NP_NEXT[COUNT4]="A_BOX_3"
$NP_NEXTP[COUNT4]="A_BOX_2" $NP_NEXTP[COUNT4]="A_BOX_4"
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=0 $NP_COLOR[COUNT4]=0
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="CYLINDER" $NP_TYPE[COUNT4]="BOX"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=50 $NP_PARA[COUNT4,0]=100
$NP_PARA[COUNT4,1]=225 $NP_PARA[COUNT4,1]=275
$NP_PARA[COUNT4,2]=0 $NP_PARA[COUNT4,2]=300
$NP_OFF[COUNT4,0]=0 $NP_OFF[COUNT4,0]=500
$NP_OFF[COUNT4,1]=0 $NP_OFF[COUNT4,1]=0
$NP_OFF[COUNT4,2]=-200 $NP_OFF[COUNT4,2]=100
$NP_DIR[COUNT4,0]=0 $NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=1
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=0 $NP_ANG[COUNT4]=20
COUNT4=COUNT4+1 COUNT4=COUNT4+1
$NP_NAME[COUNT4]="A_BOX_4" $NP_NAME[COUNT4]="A_BOX_3"
$NP_NEXT[COUNT4]="" $NP_NEXT[COUNT4]=""
$NP_NEXTP[COUNT4]="" $NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=0 $NP_COLOR[COUNT4]=0
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="BOX" $NP_TYPE[COUNT4]="BOX"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=100 $NP_PARA[COUNT4,0]=100
$NP_PARA[COUNT4,1]=100 $NP_PARA[COUNT4,1]=100
$NP_PARA[COUNT4,2]=325 $NP_PARA[COUNT4,2]=325
$NP_OFF[COUNT4,0]=0 $NP_OFF[COUNT4,0]=0
$NP_OFF[COUNT4,1]=125 $NP_OFF[COUNT4,1]=-125
$NP_OFF[COUNT4,2]=0 $NP_OFF[COUNT4,2]=0
$NP_DIR[COUNT4,0]=1 $NP_DIR[COUNT4,0]=1
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=0
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=15 $NP_ANG[COUNT4]=-15
COUNT4=COUNT4+1 COUNT4=COUNT4+1
Notes:
$NP_NAME[COUNT4]="A_BOX_1" $NP_NAME[COUNT4]="A_CYL_2"
$NP_NEXT[COUNT4]="A_CYL_2" $NP_NEXT[COUNT4]="A_CYL_3"
$NP_NEXTP[COUNT4]="A_CYL_4" $NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=0 $NP_COLOR[COUNT4]=0
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="BOX" $NP_TYPE[COUNT4]="CYLINDER"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=1000 $NP_PARA[COUNT4,0]=150
$NP_PARA[COUNT4,1]=425 $NP_PARA[COUNT4,1]=150
$NP_PARA[COUNT4,2]=150 $NP_PARA[COUNT4,2]=0
$NP_OFF[COUNT4,0]=0 $NP_OFF[COUNT4,0]=-575
$NP_OFF[COUNT4,1]=0 $NP_OFF[COUNT4,1]=0
$NP_OFF[COUNT4,2]=-95 $NP_OFF[COUNT4,2]=300
$NP_DIR[COUNT4,0]=0 $NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=1
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=0 $NP_ANG[COUNT4]=90
COUNT4=COUNT4+1 COUNT4=COUNT4+1
$NP_NAME[COUNT4]="A_CYL_3" $NP_NAME[COUNT4]="A_CYL_4"
$NP_NEXT[COUNT4]="" $NP_NEXT[COUNT4]="A_CYL_5"
$NP_NEXTP[COUNT4]="" $NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=0 $NP_COLOR[COUNT4]=8421504
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="CYLINDER" $NP_TYPE[COUNT4]="CYLINDER"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=150 $NP_PARA[COUNT4,0]=450
$NP_PARA[COUNT4,1]=150 $NP_PARA[COUNT4,1]=75
$NP_PARA[COUNT4,2]=0 $NP_PARA[COUNT4,2]=0
$NP_OFF[COUNT4,0]=0 $NP_OFF[COUNT4,0]=-450
$NP_OFF[COUNT4,1]=0 $NP_OFF[COUNT4,1]=0
$NP_OFF[COUNT4,2]=1150 $NP_OFF[COUNT4,2]=50
$NP_DIR[COUNT4,0]=0 $NP_DIR[COUNT4,0]=1
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=0
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=0 $NP_ANG[COUNT4]=90
COUNT4=COUNT4+1 COUNT4=COUNT4+1
Notes:
$NP_NAME[COUNT4]="A_CYL_5" $NP_NAME[COUNT4]="C_CYL_1"
$NP_NEXT[COUNT4]="" $NP_NEXT[COUNT4]=""
$NP_NEXTP[COUNT4]="" $NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=8421504 $NP_COLOR[COUNT4]=-13421773
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="CYLINDER" $NP_TYPE[COUNT4]="CYLINDER"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=450 $NP_PARA[COUNT4,0]=80
$NP_PARA[COUNT4,1]=75 $NP_PARA[COUNT4,1]=250
$NP_PARA[COUNT4,2]=0 $NP_PARA[COUNT4,2]=0
$NP_OFF[COUNT4,0]=900 $NP_OFF[COUNT4,0]=0
$NP_OFF[COUNT4,1]=0 $NP_OFF[COUNT4,1]=0
$NP_OFF[COUNT4,2]=0 $NP_OFF[COUNT4,2]=-40
$NP_DIR[COUNT4,0]=0 $NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=0
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=0 $NP_ANG[COUNT4]=0
COUNT4=COUNT4+1 COUNT4=COUNT4+1
Notes:
To allow the collision consideration to become active, those protection areas that must not collide with each other must be
defined.
In the first declaration, the two protection areas Z_PROT and Protection area Z_PROT → A_PROT:
C_PROT are checked against each other:
Operating sequence: Place the cursor on "Collision groups"
Operating sequence: Place the cursor on "Collision groups" New element → Collision pair → OK
New element → Collision pair → OK
Notes:
Operating sequence: Place the cursor on "Collision groups" Operating sequence: Place the cursor on "Collision groups"
New element → Collision pair → OK New element → Collision pair → OK
Operating sequence: Place the cursor on "Collision groups" Operating sequence: Place the cursor on "Collision groups"
New element → Collision pair → OK New element → Collision pair → OK
Notes:
Operating sequence: Place the cursor on "Collision groups" Operating sequence: Place the cursor on "Collision groups"
New element → Collision pair → OK New element → Collision pair → OK
Notes:
Complementing a Switching function for the Tool Change Integration of the TOOL _ FLAP _ SWITCH switch:
Door:
Operator sequence:
The Tool Change Door is to be deactivated as a Collision Put Cursor on Line "A _ OFFSET."
element when Changing tools and reactivated after the Tool New Element → Kinematics Element → Paralleler Switch
change has taken place. The Name of the Chain Element is given as "TOOL _ FLAP _
SWITCH."
For this purpose, a Switch (SWITCH) is supplemented in the The following Settings are used:
kinematic Chain, which can interrupt the Connection of the
protection Area with the Tool Changing Door to the ROOT
element.
Integration of the Offset TOOL _ FLAP _ OFFSET: Integration of a Protected Area TOOL _ FLAP _ PROT:
The Offset element serves only as a Placeholder, as the Pro- Operator sequence:
tection Area cannot be attached directly to the SWITCH. Put Cursor on Line "TOOL _ FLAP _ OFFSET."
New Element → collision element → Machine protection Area
Operator sequence: The Name of the Protection Area is given as "TOOL _ FLAP
Put Cursor on Line "TOOL _ FLAP _ SWITCH." _ PROT."
New Element → Kinematics Element → Offset The following Settings are used:
The Name of the Chain Element is given as "TOOL _ FLAP _
OFFSET."
The following Settings are used:
Notes:
Notes:
Notes:
Notes:
Module Description:
The following chapters provide further details of the kinematic chain operating principle. In particular,
the following topics are discussed:
Module Objective:
The reader gains a general overview of the kinematic chains operating principle application and, in
various exercises, familiarized with the individual functions and their capabilities. After working through
all chapters, readers should be able to integrate their own machine kinematics in the system.
Content:
Sinumerik
840D sl SINUMERIK Operate v4.8 Page 1 This document was produced for training purposes. A184
Siemens assumes no responsibility for its contents.
A184 5x head kinematics collision avoidance
Collision
avoidance
T
Notes:
Dimensions of interest:
Internal width of the Y guides: 3350mm
Half width to the Y guide center: 1775mm
Total head length: 400mm
To augment the kinematic chain with the collision check, several steps must be performed:
As precaution, the positions of the machine axes should be checked before starting work, because the positions affect the
representation in the graphic.
Moveable bodies should be defined for the following elements from the kinematic chain:
• ROOT
• Y_AXIS
• X_AXIS
• Z_AXIS
• C_AXIS
• A_AXIS
Notes:
Z_PROT
Y_PROT X_PROT
A_PROT
C_PROT
ROOT_PROT
Notes:
Definition of the protection area and of the collision bodies for the "ROOT" element:
The "ROOT" element contains the machine frame that consists of four individual parts within the "ROOT_PROT" protection area:
Note:
ROOT_BOX_3
ROOT_BOX_1
ROOT_BOX_4
ROOT_BOX_2
Notes:
Notes:
The collision bodies are defined within the machine protection area. The machine table is defined as first element so that the body
surface is congruent with the machine zero.
Caution:
All other bodies linked to this box refer in their spatial
arrangement to the center point of the current box.
Notes:
The linear guide in Y on the left side is attached below the The linear guide in Y on the right side is attached as "Parallel
base plate (ROOT_BOX_2): box" element type below the base plate (ROOT_BOX_2):
Operating sequence for the creation: Operating sequence for the creation:
Place the cursor on line "ROOT_BOX_2".
Place the cursor on line "ROOT_BOX_2". New element → Collision element → Parallel box
New element → Collision element → Box The name of the chain element is specified as
The name of the chain element is specified as "ROOT_BOX_4"; the use is switched to
"ROOT_BOX_3"; the use is switched to "Display + Monitor- "Display + Monitoring".
ing".
The next protection area with its associated collision bodies is created for the Y axis.
The machine portal that consists of four individual parts within the "Y_PROT" protection area belongs to the "Y_AXIS" element:
Notes:
Y_BOX_5
Y_BOX_4
Y_BOX_2
Y_BOX_3
Y_BOX_1
Notes:
Notes:
Operating sequence for the creation: Place the cursor on line "Y_PROT".
New element → Collision element → Box
Place the cursor on line "Y_AXIS". The name of the chain element is specified as "Y_BOX_1";
New element → Collision element → Machine protection area the use is switched to "Display + Monitoring".
The name of the chain element is specified as "Y_PROT"; the
mode is switched to "Activated".
The collision bodies are defined within the machine protection Note:
area. Initially, the right follower of the Y axis is defined. The Y offset is required so that the Z body can be displaced to
Y-MCS=0 in the Y direction. Consequently, the complete portal
Operating sequence for the creation: must be moved by 350 mm in the Y direction.
The right Y bar is defined below "Y_BOX_1"; because the The left Y follower is also defined as parallel box below
reference point is taken from the right follower, an offset is "Y_BOX_1".
programmed only in the Z direction. Operating sequence for the creation:
Operating sequence for the creation: Place the cursor on line "Y_BOX_1".
New element → Collision element → Parallel box
Place the cursor on line "Y_BOX_1". The name of the chain element is specified as "Y_BOX_3";
New element → Collision element → Box the use is switched to "Display + Monitoring".
Based on the center point of the right follower, the left follower
The name of the chain element is specified as "Y_BOX_2"; is displaced in the X direction.
the use is switched to "Display + Monitoring".
Notes:
The left Y bar is defined as box below "Y_BOX_3". Finally, the upper bar of the portal is defined as "Y_BOX_5".
Operating sequence for the creation: In this example, the box is created as subordinate element for
"Y_BOX_2". Alternatively, the body can also be attached to
Place the cursor on line "Y_BOX_3". "Y_BOX_4".
New element → Collision element → Box
Operating sequence for the creation:
The name of the chain element is specified as "Y_BOX_4";
the use is switched to "Display + Monitoring". Place the cursor on line "Y_BOX_2".
New element → Collision element → Box
The protection area for the X axis consists only of a collision body, the connection element between the upper part of the traverse
and the Z axis.
Notes:
Operating sequence for the creation: The X axis is defined as box below the "X_PROT" protection
area.
Place the cursor on line "X_AXIS". Operating sequence for the creation:
New element → Collision element → Machine protection area
Place the cursor on line "X_PROT".
The name of the chain element is specified as "X_PROT"; the New element → Collision element → Box
mode is switched to "Activated".
The name of the chain element is specified as "X_BOX_1";
the use is switched to "Display + Monitoring".
The protection area for the Z axis consists only of a collision body, the Z axis itself.
Notes:
Operating sequence for the creation: The Z axis is defined as box below the "Z_PROT" protection
area.
Place the cursor on line "Z_AXIS".
New element → Collision element → Machine protection area Operating sequence for the creation:
The name of the chain element is specified as "Z_PROT"; the Place the cursor on line "Z_PROT".
mode is switched to "Activated". New element → Collision element → Box
Note:
The offset values are defined so that the lower edge for MCS XYZ=0 is 400 mm from the table upper edge.
The protection area for which the C axis consists, includes the body of the "fork head" that is formed from several individual parts:
Notes:
C_BOX_1
C_BOX_2
C_BOX_3
C_CYL_1
C_CYL2
Notes:
Notes:
Operating sequence for the creation: The cover plate of the C axis is defined as box below the
"C_PROT" protection area.
Place the cursor on line "C_AXIS".
New element → Collision element → Machine protection area Operating sequence for the creation:
The name of the chain element is specified as "C_PROT"; the Place the cursor on line "C_PROT".
mode is switched to "Activated". New element → Collision element → Box
Note:
The offset values are defined so that the upper edge of the
box has contact with the lower edge of the Z axis.
As next body, the left side flange is connected as box with the
"C_BOX_1" element.
Notes:
Parallel to the left side flange, the right side flange is connect- Each of the two side flanges is augmented with a cylinder.
ed as box with the "C_BOX_1" element. The cylinder is turned by 90° at a spin axis (0,1,0).
Operating sequence for the creation: Operating sequence for the creation:
Place the cursor on line "C_BOX_1".
New element → Collision element → Parallel box Place the cursor on line "C_BOX_3".
The name of the chain element is specified as "C_BOX_3"; New element → Collision element → Parallel box
the use is switched to "Display + Monitoring".
The name of the chain element is specified as "C_CYL_1";
the use is switched to "Display + Monitoring".
Notes:
The protection area for the A axis consists only of one collision body as "Box" element type. The lower spindle ring is linked later
directly to the spindle.
Operating sequence for the creation: The cover plate of the A axis is defined as box below the
"A_PROT" protection area.
Place the cursor on line "A_AXIS".
New element → Collision element → Machine protection area Operating sequence for the creation:
The name of the chain element is specified as "A_PROT"; the Place the cursor on line "A_PROT".
mode is switched to "Activated". New element → Collision element → Box
Notes:
Note: The protection area for the spindle consists only of one area:
The "A_OFF_1" element moves the offset in Z by 220 mm.
• Tool protection area for definition of the tool change location
The A_BOX_1 is installed so that 25 mm space for the spindle
nose remains between the A_BOX lower edge and the table
surface.
The complete structure has the following architecture:
Operating sequence for creating the spindle nose:
Place the cursor on line "A_BOX_1".
The tool protection area for definition of the tool change loca-
tion still needs to be defined below the "SP1_AXIS" element.
Notes:
The machine is so prepared completely for representation in the graphic and the function can be checked by a traversal in JOG or
with an NC program.
When a tool is called and no further zero offset is active, for G0 X0 Y0 Z0, the tool must be positioned in the center of the table
and on its upper edge.
The rotary axes function can also be checked by moving the appropriate axes.
Representation of the
completed machine for
position:
G0 G500 X0 Y0 Z200 D0
Notes:
$NP_PROT_NAME[COUNT3]="X_PROT" $NP_PROT_NAME[COUNT3]="Z_PROT"
$NP_CHAIN_ELEM[COUNT3]="X_AXIS" $NP_CHAIN_ELEM[COUNT3]="Z_AXIS"
$NP_PROT_TYPE[COUNT3]="MACHINE" $NP_PROT_TYPE[COUNT3]="MACHINE"
$NP_1ST_PROT[COUNT3]="X_BOX_1" $NP_1ST_PROT[COUNT3]="Z_BOX_1"
$NP_PROT_COLOR[COUNT3]=-16711681 $NP_PROT_COLOR[COUNT3]=-16744448
$NP_PROT_D_LEVEL[COUNT3]=0 $NP_PROT_D_LEVEL[COUNT3]=0
$NP_BIT_NO[COUNT3]=-1 $NP_BIT_NO[COUNT3]=-1
$NP_INIT_STAT[COUNT3]="A" $NP_INIT_STAT[COUNT3]="A"
$NP_INDEX[COUNT3,0]=0 $NP_INDEX[COUNT3,0]=0
$NP_INDEX[COUNT3,1]=0 $NP_INDEX[COUNT3,1]=0
$NP_INDEX[COUNT3,2]=0 $NP_INDEX[COUNT3,2]=0
COUNT3=COUNT3+1 COUNT3=COUNT3+1
Notes:
$NP_PROT_NAME[COUNT3]="C_PROT" $NP_PROT_NAME[COUNT3]="A_PROT"
$NP_CHAIN_ELEM[COUNT3]="C_AXIS" $NP_CHAIN_ELEM[COUNT3]="A_AXIS"
$NP_PROT_TYPE[COUNT3]="MACHINE" $NP_PROT_TYPE[COUNT3]="MACHINE"
$NP_1ST_PROT[COUNT3]="C_BOX_1" $NP_1ST_PROT[COUNT3]="A_BOX_1"
$NP_PROT_COLOR[COUNT3]=-6250332 $NP_PROT_COLOR[COUNT3]=-16711681
$NP_PROT_D_LEVEL[COUNT3]=0 $NP_PROT_D_LEVEL[COUNT3]=0
$NP_BIT_NO[COUNT3]=-1 $NP_BIT_NO[COUNT3]=-1
$NP_INIT_STAT[COUNT3]="A" $NP_INIT_STAT[COUNT3]="A"
$NP_INDEX[COUNT3,0]=0 $NP_INDEX[COUNT3,0]=0
$NP_INDEX[COUNT3,1]=0 $NP_INDEX[COUNT3,1]=0
$NP_INDEX[COUNT3,2]=0 $NP_INDEX[COUNT3,2]=0
COUNT3=COUNT3+1 COUNT3=COUNT3+1
Notes:
$NP_NAME[COUNT4]="ROOT_BOX_2" $NP_NAME[COUNT4]="ROOT_BOX_3"
$NP_NEXT[COUNT4]="ROOT_BOX_3" $NP_NEXT[COUNT4]=""
$NP_NEXTP[COUNT4]="ROOT_BOX_4" $NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=0 $NP_COLOR[COUNT4]=0
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="BOX" $NP_TYPE[COUNT4]="BOX"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=3800 $NP_PARA[COUNT4,0]=200
$NP_PARA[COUNT4,1]=2800 $NP_PARA[COUNT4,1]=2800
$NP_PARA[COUNT4,2]=150 $NP_PARA[COUNT4,2]=300
$NP_OFF[COUNT4,0]=0 $NP_OFF[COUNT4,0]=-1775
$NP_OFF[COUNT4,1]=0 $NP_OFF[COUNT4,1]=0
$NP_OFF[COUNT4,2]=-505 $NP_OFF[COUNT4,2]=225
$NP_DIR[COUNT4,0]=0 $NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=0
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=0 $NP_ANG[COUNT4]=0
COUNT4=COUNT4+1 COUNT4=COUNT4+1
$NP_NAME[COUNT4]="ROOT_BOX_4" $NP_NAME[COUNT4]="Y_BOX_1"
$NP_NEXT[COUNT4]="" $NP_NEXT[COUNT4]="Y_BOX_2"
$NP_NEXTP[COUNT4]="" $NP_NEXTP[COUNT4]="Y_BOX_3"
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=0 $NP_COLOR[COUNT4]=65280
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="BOX" $NP_TYPE[COUNT4]="BOX"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=200 $NP_PARA[COUNT4,0]=400
$NP_PARA[COUNT4,1]=2800 $NP_PARA[COUNT4,1]=460
$NP_PARA[COUNT4,2]=300 $NP_PARA[COUNT4,2]=300
$NP_OFF[COUNT4,0]=1775 $NP_OFF[COUNT4,0]=1775
$NP_OFF[COUNT4,1]=0 $NP_OFF[COUNT4,1]=350
$NP_OFF[COUNT4,2]=225 $NP_OFF[COUNT4,2]=-550
$NP_DIR[COUNT4,0]=0 $NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=0
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=0 $NP_ANG[COUNT4]=0
COUNT4=COUNT4+1 COUNT4=COUNT4+1
Notes:
$NP_NAME[COUNT4]="Y_BOX_2" $NP_NAME[COUNT4]="Y_BOX_3"
$NP_NEXT[COUNT4]="Y_BOX_5" $NP_NEXT[COUNT4]="Y_BOX_4"
$NP_NEXTP[COUNT4]="" $NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=65280 $NP_COLOR[COUNT4]=65280
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="BOX" $NP_TYPE[COUNT4]="BOX"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=200 $NP_PARA[COUNT4,0]=400
$NP_PARA[COUNT4,1]=300 $NP_PARA[COUNT4,1]=460
$NP_PARA[COUNT4,2]=1800 $NP_PARA[COUNT4,2]=300
$NP_OFF[COUNT4,0]=0 $NP_OFF[COUNT4,0]=-3550
$NP_OFF[COUNT4,1]=0 $NP_OFF[COUNT4,1]=0
$NP_OFF[COUNT4,2]=1050 $NP_OFF[COUNT4,2]=0
$NP_DIR[COUNT4,0]=0 $NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=0
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=0 $NP_ANG[COUNT4]=0
COUNT4=COUNT4+1 COUNT4=COUNT4+1
$NP_NAME[COUNT4]="Y_BOX_5" $NP_NAME[COUNT4]="X_BOX_1"
$NP_NEXT[COUNT4]="" $NP_NEXT[COUNT4]=""
$NP_NEXTP[COUNT4]="" $NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=65280 $NP_COLOR[COUNT4]=0
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="BOX" $NP_TYPE[COUNT4]="BOX"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=3750 $NP_PARA[COUNT4,0]=460
$NP_PARA[COUNT4,1]=300 $NP_PARA[COUNT4,1]=560
$NP_PARA[COUNT4,2]=300 $NP_PARA[COUNT4,2]=460
$NP_OFF[COUNT4,0]=-1775 $NP_OFF[COUNT4,0]=0
$NP_OFF[COUNT4,1]=0 $NP_OFF[COUNT4,1]=250
$NP_OFF[COUNT4,2]=1050 $NP_OFF[COUNT4,2]=1550
$NP_DIR[COUNT4,0]=0 $NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=0
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=0 $NP_ANG[COUNT4]=0
COUNT4=COUNT4+1 COUNT4=COUNT4+1
Notes:
$NP_NAME[COUNT4]="Z_BOX_1" $NP_NAME[COUNT4]="C_BOX_1"
$NP_NEXT[COUNT4]="" $NP_NEXT[COUNT4]="C_BOX_2"
$NP_NEXTP[COUNT4]="" $NP_NEXTP[COUNT4]="C_BOX_3"
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=0 $NP_COLOR[COUNT4]=8421504
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="BOX" $NP_TYPE[COUNT4]="BOX"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=300 $NP_PARA[COUNT4,0]=300
$NP_PARA[COUNT4,1]=300 $NP_PARA[COUNT4,1]=300
$NP_PARA[COUNT4,2]=1500 $NP_PARA[COUNT4,2]=90
$NP_OFF[COUNT4,0]=0 $NP_OFF[COUNT4,0]=0
$NP_OFF[COUNT4,1]=0 $NP_OFF[COUNT4,1]=0
$NP_OFF[COUNT4,2]=1150 $NP_OFF[COUNT4,2]=355
$NP_DIR[COUNT4,0]=0 $NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=0
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=0 $NP_ANG[COUNT4]=0
COUNT4=COUNT4+1 COUNT4=COUNT4+1
$NP_NAME[COUNT4]="C_BOX_2" $NP_NAME[COUNT4]="C_BOX_3"
$NP_NEXT[COUNT4]="C_CYL_2" $NP_NEXT[COUNT4]="C_CYL_1"
$NP_NEXTP[COUNT4]="" $NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=0 $NP_COLOR[COUNT4]=0
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="BOX" $NP_TYPE[COUNT4]="BOX"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=75 $NP_PARA[COUNT4,0]=75
$NP_PARA[COUNT4,1]=300 $NP_PARA[COUNT4,1]=300
$NP_PARA[COUNT4,2]=90 $NP_PARA[COUNT4,2]=90
$NP_OFF[COUNT4,0]=-112.5 $NP_OFF[COUNT4,0]=112.5
$NP_OFF[COUNT4,1]=0 $NP_OFF[COUNT4,1]=0
$NP_OFF[COUNT4,2]=-90 $NP_OFF[COUNT4,2]=-90
$NP_DIR[COUNT4,0]=0 $NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=0
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=0 $NP_ANG[COUNT4]=0
COUNT4=COUNT4+1 COUNT4=COUNT4+1
Notes:
$NP_NAME[COUNT4]="C_CYL_1" $NP_NAME[COUNT4]="C_CYL_2"
$NP_NEXT[COUNT4]="" $NP_NEXT[COUNT4]=""
$NP_NEXTP[COUNT4]="" $NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=0 $NP_COLOR[COUNT4]=0
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="CYLINDER" $NP_TYPE[COUNT4]="CYLINDER"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=75 $NP_PARA[COUNT4,0]=75
$NP_PARA[COUNT4,1]=150 $NP_PARA[COUNT4,1]=150
$NP_PARA[COUNT4,2]=0 $NP_PARA[COUNT4,2]=0
$NP_OFF[COUNT4,0]=0 $NP_OFF[COUNT4,0]=0
$NP_OFF[COUNT4,1]=0 $NP_OFF[COUNT4,1]=0
$NP_OFF[COUNT4,2]=-45 $NP_OFF[COUNT4,2]=-45
$NP_DIR[COUNT4,0]=0 $NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=1 $NP_DIR[COUNT4,1]=1
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=90 $NP_ANG[COUNT4]=90
COUNT4=COUNT4+1 COUNT4=COUNT4+1
$NP_NAME[COUNT4]="A_BOX_1" $NP_NAME[COUNT4]="A_CYL_1"
$NP_NEXT[COUNT4]="A_CYL_1" $NP_NEXT[COUNT4]=""
$NP_NEXTP[COUNT4]="" $NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=0 $NP_COLOR[COUNT4]=0
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="BOX" $NP_TYPE[COUNT4]="CYLINDER"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=150 $NP_PARA[COUNT4,0]=25
$NP_PARA[COUNT4,1]=150 $NP_PARA[COUNT4,1]=55
$NP_PARA[COUNT4,2]=300 $NP_PARA[COUNT4,2]=0
$NP_OFF[COUNT4,0]=0 $NP_OFF[COUNT4,0]=0
$NP_OFF[COUNT4,1]=0 $NP_OFF[COUNT4,1]=0
$NP_OFF[COUNT4,2]=-45 $NP_OFF[COUNT4,2]=-162.5
$NP_DIR[COUNT4,0]=0 $NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=0
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=0 $NP_ANG[COUNT4]=0
COUNT4=COUNT4+1 COUNT4=COUNT4+1
Notes:
$NP_NAME[COUNT4]="Y_BOX_4"
$NP_NEXT[COUNT4]=""
$NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=65280
$NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="BOX"
$NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=200
$NP_PARA[COUNT4,1]=300
$NP_PARA[COUNT4,2]=1800
$NP_OFF[COUNT4,0]=0
$NP_OFF[COUNT4,1]=0
$NP_OFF[COUNT4,2]=1050
$NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=0
$NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=0
COUNT4=COUNT4+1
Notes:
To allow the collision consideration to become active, those protection areas that must not collide with each other must be de-
fined.
To define the collision pairs, place the cursor on the "Collision groups" folder in the structure tree:
In the first declaration, the two protection areas ROOT_PROT Protection area ROOT_PROT → A_PROT:
and TOOL are checked against each other:
Operating sequence: Place the cursor on "Collision groups"
New element → Collision pair → OK
Notes:
Operating sequence: Place the cursor on "Collision groups" DEF INT COUNT5
New element → Collision pair → OK
$NP_COLL_PAIR[COUNT5,0]="ROOT_PROT"
$NP_COLL_PAIR[COUNT5,1]="TOOL"
$NP_SAFETY_DIST[COUNT5]=0
COUNT5=COUNT5+1
$NP_COLL_PAIR[COUNT5,0]="ROOT_PROT"
$NP_COLL_PAIR[COUNT5,1]="A_PROT"
$NP_SAFETY_DIST[COUNT5]=0
COUNT5=COUNT5+1
$NP_COLL_PAIR[COUNT5,0]="ROOT_PROT"
$NP_COLL_PAIR[COUNT5,1]="C_PROT"
$NP_SAFETY_DIST[COUNT5]=0
COUNT5=COUNT5+1
A184: END
Notes:
Notes:
Module Description:
The following chapters provide further details of the kinematic chain operating principle. In particular,
the following topics are discussed:
Module Objective:
The reader gains a general overview of the kinematic chains operating principle application and, in
various exercises, familiarized with the individual functions and their capabilities. After working through
all chapters, readers should be able to integrate their own machine kinematics in the system.
Content:
Sinumerik
840D sl SINUMERIK Operate v4.8 Page 1 This document was produced for training purposes. A185
Siemens assumes no responsibility for its contents.
A185 Collision avoidance for 5x mixed kinematics
Collision avoidance
for 5x mixed kinematics
START
Collision
avoidance
for 5x mixed
kinematics
Collision avoidance
for 5x mixed kinematics
END
Notes:
To augment the kinematic chain with the collision check, several steps must be performed:
As precaution, the positions of the machine axes should be checked before starting work, because the positions affect the
representation in the graphic.
Moveable bodies should be defined for the following elements from the kinematic chain:
• ROOT
• X_AXIS
• Y_AXIS
• Z_AXIS
• B_AXIS
• C_AXIS
• SP1_AXIS
Z_PROT
B_PROT
SP1_PROT X_PROT
C_PROT
Y_PROT
ROOT_PROT
Notes:
Notes:
Notes:
Operating sequence for the creation: The base plate of the machine is defined as box below the
"ROOT_PROT" protection area.
Place the cursor on line "ROOT".
New element → Collision element → Machine protection area Operating sequence for the creation:
The name of the chain element is specified as Place the cursor on line "ROOT_PROT".
"ROOT_PROT"; the mode is switched to "Activated". New element → Collision element → Box
Note:
The offset value of the Y axis results because the traversal
path of the machine is not symmetric.
The limit switches of the Y axis are at Y-100, Y+950
Notes:
Definition of the protection area and of the collision bodies for the "X_AXIS" element:
The "X_AXIS" element contains only a machine protection area and a collision body that should represent the X axis.
Notes:
Definition of the protection area and of the collision bodies for the "Z_AXIS" element:
The "Z_AXIS" element contains only a machine protection area and a collision body that should represent the Z axis.
Notes:
Operating sequence for the creation: The Z axis of the machine is defined as box below the
"Z_PROT" protection area.
Place the cursor on line "Z_AXIS".
New element → Collision element → Machine protection area Operating sequence for the creation:
The name of the chain element is specified as "Z_PROT"; the Place the cursor on line "Z_PROT".
mode is switched to "Activated". New element → Collision element → Box
The name of the chain element is specified as "Z_BOX_1";
the use is switched to "Display + Monitoring".
Definition of the protection area and of the collision bodies for the "B_ROT" element:
The "B_ROT" element contains a machine protection area with various collision bodies that should represent the B axis.
Depending on the need, the head at the edges can be further defined with various inclined box elements.
Notes:
B_CYL_1 B_CONE_2
B_BOX_1
B_BOX_2
B_CONE_1
Operating sequence for the creation: Initially, the main body of the B axis is defined as box below
the "B_PROT" protection area.
Place the cursor on line "B_AXIS".
New element → Collision element → Machine protection area Operating sequence for the creation:
The name of the chain element is specified as "B_PROT"; the Place the cursor on line "B_PROT".
mode is switched to "Activated". New element → Collision element → Box
Notes:
The rear part of the B axis is defined as 2nd box below the In parallel, the bearing housing of the B axis is defined as
"B_BOX_1" body. parallel truncated cone below the "B_BOX_1" body.
Operating sequence for the creation: Operating sequence for the creation:
Place the cursor on line "B_BOX_1". Place the cursor on line "B_BOX_1".
New element → Collision element → Box New element → Collision element → Parallel truncated cone
The name of the chain element is specified as "B_BOX_2"; The name of the chain element is specified as "B_CONE_1";
the use is switched to "Display + Monitoring". the use is switched to "Display + Monitoring".
Notes:
The bearing cartridge of the B axis is defined as cylinder below the "B_CONE_1" body.
The name of the chain element is specified as "B_CYL_1"; the use is switched to "Display + Monitoring".
Note:
The rotation of the coordinate system by -45° at
the X axis is taken from the preceding element
and does not need to be programmed again here.
For the connection of the complete B body with the Z axis, a further body is defined as truncated cone at the "B_CYL_1" bearing
cartridge.
The name of the chain element is specified as "B_CONE_2"; the use is switched to "Display + Monitoring".
Notes:
Definition of the protection area and of the collision bodies for the "SP1_AXIS" element:
The "SP1_AXIS" element contains a machine protection area with two cylinders that represent the spindle nose as well as a tool
protection area that defines the change position of the tool.
Operating sequence for the creation: Initially, the lower spindle ring is defined as cylinder below the
"SP1_PROT" protection area.
Place the cursor on line "SP1_AXIS".
New element → Collision element → Machine protection area Operating sequence for the creation:
The name of the chain element is specified as "SP1_PROT"; Place the cursor on line "SP1_PROT".
the mode is switched to "Activated". New element → Collision element → Box
Notes:
The upper "SP1_CYL_2" spindle ring is defined as cylinder. Finally, the tool protection area must be defined as change
position for the tool.
Operating sequence for the creation:
Operating sequence for the creation:
Place the cursor on line "SP1_CYL_1".
New element → Collision element → Box Place the cursor on line "SP1".
New element → Collision element → Tool protection area
The name of the chain element is specified as "SP1_CYL_2";
the use is switched to "Display + Monitoring". The name of the protection area is specified as
"TOOL_PROT"; the use is switched to "Activated".
Definition of the protection area and of the collision bodies for the "Y_AXIS" element:
A machine protection area and six collision bodies are defined for the "Y_AXIS" element.
Notes:
Y_CYL_1 Y_BOX_4
Y_BOX_1
Y_BOX_5
Y_BOX_2 Y_BOX_3
Operating sequence for the creation: Operating sequence for creating the "Y_CYL_1" collision body:
Place the cursor on line "Y_AXIS". Place the cursor on line "Y_PROT".
New element → Collision element → Machine protection area New element → Collision element → Cylinder
The name of the chain element is specified as "Y_PROT"; the The name of the chain element is specified as "Y_CYL_1"; the
mode is switched to "Activated". use is switched to "Display + Monitoring".
Notes:
Operating sequence for creating the "Y_BOX_1" collision Operating sequence for creating the "Y_BOX_2" collision
body: body:
Place the cursor on line "Y_CYL_1". Place the cursor on line "Y_CYL_1".
New element → Collision element → Box New element → Collision element → Parallel box
The name of the chain element is specified as "Y_BOX_1"; The name of the chain element is specified as "Y_BOX_2"; the
the use is switched to "Display + Monitoring". use is switched to "Display + Monitoring".
Operating sequence for creating the "Y_BOX_3" collision Operating sequence for creating the "Y_BOX_4" collision
body: body:
Place the cursor on line "Y_BOX_2". Place the cursor on line "Y_BOX_1".
New element → Collision element → Box New element → Collision element → Box
The name of the chain element is specified as "Y_BOX_3"; The name of the chain element is specified as "Y_BOX_4"; the
the use is switched to "Display + Monitoring". use is switched to "Display + Monitoring".
Notes:
Definition of the protection area and of the collision bodies for the "C_AXIS" element:
A machine protection area and a collision body are defined for the "C_AXIS" element.
Notes:
Operating sequence for the creation: Operating sequence for creating the "C_CYL_1" collision body:
Place the cursor on line "C_AXIS". Place the cursor on line "C_PROT".
New element → Collision element → Machine protection area New element → Collision element → Cylinder
The name of the chain element is specified as "C_PROT"; the The name of the chain element is specified as "C_CYL_1"; the
mode is switched to "Activated". use is switched to "Display + Monitoring".
Notes:
$NP_PROT_NAME[COUNT3]="ROOT_PROT" $NP_PROT_NAME[COUNT3]="X_PROT"
$NP_CHAIN_ELEM[COUNT3]="ROOT" $NP_CHAIN_ELEM[COUNT3]="X_AXIS"
$NP_PROT_TYPE[COUNT3]="MACHINE" $NP_PROT_TYPE[COUNT3]="MACHINE"
$NP_1ST_PROT[COUNT3]="ROOT_BOX_1" $NP_1ST_PROT[COUNT3]="X_BOX_1"
$NP_PROT_COLOR[COUNT3]=-16744256 $NP_PROT_COLOR[COUNT3]=-16744448
$NP_PROT_D_LEVEL[COUNT3]=0 $NP_PROT_D_LEVEL[COUNT3]=0
$NP_BIT_NO[COUNT3]=-1 $NP_BIT_NO[COUNT3]=-1
$NP_INIT_STAT[COUNT3]="A" $NP_INIT_STAT[COUNT3]="A"
$NP_INDEX[COUNT3,0]=0 $NP_INDEX[COUNT3,0]=0
$NP_INDEX[COUNT3,1]=0 $NP_INDEX[COUNT3,1]=0
$NP_INDEX[COUNT3,2]=0 $NP_INDEX[COUNT3,2]=0
COUNT3=COUNT3+1 COUNT3=COUNT3+1
Notes:
$NP_PROT_NAME[COUNT3]="TOOL_PROT" $NP_PROT_NAME[COUNT3]="SP1_PROT"
$NP_CHAIN_ELEM[COUNT3]="SP1_AXIS" $NP_CHAIN_ELEM[COUNT3]="SP1_AXIS"
$NP_PROT_TYPE[COUNT3]="TOOL" $NP_PROT_TYPE[COUNT3]="MACHINE"
$NP_1ST_PROT[COUNT3] $NP_1ST_PROT[COUNT3]="SP1_CYL_1"
="__TOOL_00001_09998_01_0000" $NP_PROT_COLOR[COUNT3]=-16776961
$NP_PROT_COLOR[COUNT3]=0 $NP_PROT_D_LEVEL[COUNT3]=0
$NP_PROT_D_LEVEL[COUNT3]=0 $NP_BIT_NO[COUNT3]=-1
$NP_BIT_NO[COUNT3]=-1 $NP_INIT_STAT[COUNT3]="A"
$NP_INIT_STAT[COUNT3]="A" $NP_INDEX[COUNT3,0]=0
$NP_INDEX[COUNT3,0]=1 $NP_INDEX[COUNT3,1]=0
$NP_INDEX[COUNT3,1]=9998 $NP_INDEX[COUNT3,2]=0
$NP_INDEX[COUNT3,2]=1 COUNT3=COUNT3+1
COUNT3=COUNT3+1
$NP_PROT_NAME[COUNT3]="B_PROT" $NP_PROT_NAME[COUNT3]="Z_PROT"
$NP_CHAIN_ELEM[COUNT3]="B_AXIS" $NP_CHAIN_ELEM[COUNT3]="Z_AXIS"
$NP_PROT_TYPE[COUNT3]="MACHINE" $NP_PROT_TYPE[COUNT3]="MACHINE"
$NP_1ST_PROT[COUNT3]="B_BOX_1" $NP_1ST_PROT[COUNT3]="Z_BOX_1"
$NP_PROT_COLOR[COUNT3]=-16777088 $NP_PROT_COLOR[COUNT3]=-8388608
$NP_PROT_D_LEVEL[COUNT3]=0 $NP_PROT_D_LEVEL[COUNT3]=0
$NP_BIT_NO[COUNT3]=-1 $NP_BIT_NO[COUNT3]=-1
$NP_INIT_STAT[COUNT3]="A" $NP_INIT_STAT[COUNT3]="A"
$NP_INDEX[COUNT3,0]=0 $NP_INDEX[COUNT3,0]=0
$NP_INDEX[COUNT3,1]=0 $NP_INDEX[COUNT3,1]=0
$NP_INDEX[COUNT3,2]=0 $NP_INDEX[COUNT3,2]=0
COUNT3=COUNT3+1 COUNT3=COUNT3+1
Notes:
$NP_NAME[COUNT4]="Y_BOX_1" $NP_NAME[COUNT4]="Y_BOX_2"
$NP_NEXT[COUNT4]="Y_BOX_4" $NP_NEXT[COUNT4]="Y_BOX_3"
$NP_NEXTP[COUNT4]="Y_BOX_5" $NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=0 $NP_COLOR[COUNT4]=0
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="BOX" $NP_TYPE[COUNT4]="BOX"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=1100 $NP_PARA[COUNT4,0]=500
$NP_PARA[COUNT4,1]=870 $NP_PARA[COUNT4,1]=1400
$NP_PARA[COUNT4,2]=250 $NP_PARA[COUNT4,2]=370
$NP_OFF[COUNT4,0]=0 $NP_OFF[COUNT4,0]=0
$NP_OFF[COUNT4,1]=0 $NP_OFF[COUNT4,1]=0
$NP_OFF[COUNT4,2]=-185 $NP_OFF[COUNT4,2]=-245
$NP_DIR[COUNT4,0]=0 $NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=0
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=0 $NP_ANG[COUNT4]=0
COUNT4=COUNT4+1 COUNT4=COUNT4+1
Notes:
$NP_NAME[COUNT4]="Y_BOX_3" $NP_NAME[COUNT4]="Y_BOX_4"
$NP_NEXT[COUNT4]="" $NP_NEXT[COUNT4]=""
$NP_NEXTP[COUNT4]="" $NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=0 $NP_COLOR[COUNT4]=0
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="BOX" $NP_TYPE[COUNT4]="BOX"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=1550 $NP_PARA[COUNT4,0]=643
$NP_PARA[COUNT4,1]=1400 $NP_PARA[COUNT4,1]=1400
$NP_PARA[COUNT4,2]=250 $NP_PARA[COUNT4,2]=300
$NP_OFF[COUNT4,0]=0 $NP_OFF[COUNT4,0]=425
$NP_OFF[COUNT4,1]=0 $NP_OFF[COUNT4,1]=0
$NP_OFF[COUNT4,2]=-310 $NP_OFF[COUNT4,2]=-183
$NP_DIR[COUNT4,0]=0 $NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=1
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=0 $NP_ANG[COUNT4]=35.17
COUNT4=COUNT4+1 COUNT4=COUNT4+1
$NP_NAME[COUNT4]="Y_BOX_5" $NP_NAME[COUNT4]="ROOT_BOX_1"
$NP_NEXT[COUNT4]="" $NP_NEXT[COUNT4]="ROOT_BOX_2"
$NP_NEXTP[COUNT4]="" $NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=0 $NP_COLOR[COUNT4]=0
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="BOX" $NP_TYPE[COUNT4]="BOX"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=643 $NP_PARA[COUNT4,0]=1800
$NP_PARA[COUNT4,1]=1400 $NP_PARA[COUNT4,1]=3000
$NP_PARA[COUNT4,2]=300 $NP_PARA[COUNT4,2]=300
$NP_OFF[COUNT4,0]=-425 $NP_OFF[COUNT4,0]=0
$NP_OFF[COUNT4,1]=0 $NP_OFF[COUNT4,1]=-350
$NP_OFF[COUNT4,2]=-183 $NP_OFF[COUNT4,2]=-1010
$NP_DIR[COUNT4,0]=0 $NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=1 $NP_DIR[COUNT4,1]=0
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=-35.17 $NP_ANG[COUNT4]=0
COUNT4=COUNT4+1 COUNT4=COUNT4+1
Notes:
$NP_NAME[COUNT4]="ROOT_BOX_2" $NP_NAME[COUNT4]="X_BOX_1"
$NP_NEXT[COUNT4]="" $NP_NEXT[COUNT4]=""
$NP_NEXTP[COUNT4]="" $NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=0 $NP_COLOR[COUNT4]=0
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="BOX" $NP_TYPE[COUNT4]="BOX"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=3500 $NP_PARA[COUNT4,0]=700
$NP_PARA[COUNT4,1]=300 $NP_PARA[COUNT4,1]=300
$NP_PARA[COUNT4,2]=3000 $NP_PARA[COUNT4,2]=2200
$NP_OFF[COUNT4,0]=0 $NP_OFF[COUNT4,0]=0
$NP_OFF[COUNT4,1]=1650 $NP_OFF[COUNT4,1]=1000
$NP_OFF[COUNT4,2]=1350 $NP_OFF[COUNT4,2]=500
$NP_DIR[COUNT4,0]=0 $NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=0
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=0 $NP_ANG[COUNT4]=0
COUNT4=COUNT4+1 COUNT4=COUNT4+1
$NP_NAME[COUNT4]="SP1_CYL_1" $NP_NAME[COUNT4]="SPI_CYL_2"
$NP_NEXT[COUNT4]="SPI_CYL_2" $NP_NEXT[COUNT4]=""
$NP_NEXTP[COUNT4]="" $NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=0 $NP_COLOR[COUNT4]=0
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="CYLINDER" $NP_TYPE[COUNT4]="CYLINDER"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=15 $NP_PARA[COUNT4,0]=40
$NP_PARA[COUNT4,1]=80 $NP_PARA[COUNT4,1]=110
$NP_PARA[COUNT4,2]=0 $NP_PARA[COUNT4,2]=0
$NP_OFF[COUNT4,0]=0 $NP_OFF[COUNT4,0]=0
$NP_OFF[COUNT4,1]=0 $NP_OFF[COUNT4,1]=0
$NP_OFF[COUNT4,2]=7.5 $NP_OFF[COUNT4,2]=27.5
$NP_DIR[COUNT4,0]=0 $NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=0
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=0 $NP_ANG[COUNT4]=0
COUNT4=COUNT4+1 COUNT4=COUNT4+1
Notes:
$NP_NAME[COUNT4]="B_BOX_1" $NP_NAME[COUNT4]="B_BOX_2"
$NP_NEXT[COUNT4]="B_BOX_2" $NP_NEXT[COUNT4]=""
$NP_NEXTP[COUNT4]="B_CONE_1" $NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=0 $NP_COLOR[COUNT4]=0
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="BOX" $NP_TYPE[COUNT4]="BOX"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=300 $NP_PARA[COUNT4,0]=300
$NP_PARA[COUNT4,1]=300 $NP_PARA[COUNT4,1]=500
$NP_PARA[COUNT4,2]=640 $NP_PARA[COUNT4,2]=280
$NP_OFF[COUNT4,0]=0 $NP_OFF[COUNT4,0]=0
$NP_OFF[COUNT4,1]=0 $NP_OFF[COUNT4,1]=100
$NP_OFF[COUNT4,2]=390 $NP_OFF[COUNT4,2]=-180
$NP_DIR[COUNT4,0]=0 $NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=0
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=0 $NP_ANG[COUNT4]=0
COUNT4=COUNT4+1 COUNT4=COUNT4+1
$NP_NAME[COUNT4]="B_CONE_1" $NP_NAME[COUNT4]="B_CYL_1"
$NP_NEXT[COUNT4]="B_CYL_1" $NP_NEXT[COUNT4]="B_CONE_2"
$NP_NEXTP[COUNT4]="" $NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=0 $NP_COLOR[COUNT4]=0
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="CONE" $NP_TYPE[COUNT4]="CYLINDER"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=80 $NP_PARA[COUNT4,0]=30
$NP_PARA[COUNT4,1]=170 $NP_PARA[COUNT4,1]=220
$NP_PARA[COUNT4,2]=220 $NP_PARA[COUNT4,2]=0
$NP_OFF[COUNT4,0]=0 $NP_OFF[COUNT4,0]=0
$NP_OFF[COUNT4,1]=300 $NP_OFF[COUNT4,1]=0
$NP_OFF[COUNT4,2]=-90 $NP_OFF[COUNT4,2]=55
$NP_DIR[COUNT4,0]=1 $NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=0
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=-45 $NP_ANG[COUNT4]=0
COUNT4=COUNT4+1 COUNT4=COUNT4+1
Notes:
$NP_NAME[COUNT4]="Z_BOX_1" $NP_NAME[COUNT4]="B_CONE_2"
$NP_NEXT[COUNT4]="" $NP_NEXT[COUNT4]=""
$NP_NEXTP[COUNT4]="" $NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=0 $NP_COLOR[COUNT4]=0
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="BOX" $NP_TYPE[COUNT4]="CONE"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=500 $NP_PARA[COUNT4,0]=200
$NP_PARA[COUNT4,1]=500 $NP_PARA[COUNT4,1]=220
$NP_PARA[COUNT4,2]=500 $NP_PARA[COUNT4,2]=180
$NP_OFF[COUNT4,0]=0 $NP_OFF[COUNT4,0]=0
$NP_OFF[COUNT4,1]=600 $NP_OFF[COUNT4,1]=0
$NP_OFF[COUNT4,2]=580 $NP_OFF[COUNT4,2]=115
$NP_DIR[COUNT4,0]=0 $NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=0
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=0 $NP_ANG[COUNT4]=0
COUNT4=COUNT4+1 COUNT4=COUNT4+1
To allow the collision consideration to become active, those protection areas that must not collide with each other must be de-
fined.
To define the collision pairs, place the cursor on the "Collision groups" folder in the structure tree:
Notes:
In the first declaration, the two protection areas C_PROT and Protection area C_PROT → SP1_PROT:
TOOL_PROT are checked against each other:
Operating sequence: Place the cursor on "Collision groups"
New element → Collision pair → OK
Operating sequence: Place the cursor on "Collision groups" Operating sequence: Place the cursor on "Collision groups"
New element → Collision pair → OK New element → Collision pair → OK
Notes:
$NP_COLL_PAIR[COUNT5,0]="C_PROT"
$NP_COLL_PAIR[COUNT5,1]="TOOL_PROT"
$NP_SAFETY_DIST[COUNT5]=0
COUNT5=COUNT5+1
$NP_COLL_PAIR[COUNT5,0]="C_PROT"
$NP_COLL_PAIR[COUNT5,1]="SP1_PROT"
$NP_SAFETY_DIST[COUNT5]=0
COUNT5=COUNT5+1
$NP_COLL_PAIR[COUNT5,0]="C_PROT"
$NP_COLL_PAIR[COUNT5,1]="B_PROT"
$NP_SAFETY_DIST[COUNT5]=0
COUNT5=COUNT5+1
$NP_COLL_PAIR[COUNT5,0]="X_PROT"
$NP_COLL_PAIR[COUNT5,1]="Y_PROT"
$NP_SAFETY_DIST[COUNT5]=0
COUNT5=COUNT5+1
A185: END
Notes:
Module Description:
The following chapters provide further details of the kinematic chain operating principle. In particular,
the following topics are discussed:
Module Objective:
The reader gains a general overview of the kinematic chains operating principle application and, in
various exercises, familiarized with the individual functions and their capabilities. After working through
all chapters, readers should be able to integrate their own machine kinematics in the system.
Content:
Sinumerik
Appendix
840D sl SINUMERIK Operate v4.8 Page 1 This document was produced for training purposes. A186
Siemens assumes no responsibility for its contents.
A186 Transformations
Transformation
START
Fundamentals for
"transformations
with a kinematic
chain":
Kinematic
transformations
for the 5x machine
with P
Kinematic
transformations for
the 5x machine with
mixed kinematics
Kinematic
transformations
for the 5x machine
with head
kinematics
Example:
TRANSMIT
excentric
Appendix
Transformation
END
Notes:
Possible are:
TRAORI_DYN
TRAORI_STAT
TRANSMIT_K
TRACYL_K
TRAANG_K
If an "alternative call" with the transformation number is The maximum possible number of transformations that can be
parameterized during the commissioning, the transformation defined via the kinematic chain is parameterized with
can also be called with this number. MD18866 $MN_MM_NUM_KIN_TRAFOS.
TRAORI(7)
M0
TRAFOOF
M30
Notes:
For the parameterization of transformations with several rotary axes in a chain branch (tool or workpiece branch), the following
sequence governs the specification of rotary axis names:
• Sequence in the "End of part chain" to "End of tool chain" direction. The rotary axis nearer the "End of part chain" is specified
first in the screen and stored first in the $NT_ROT_AX_NAME[n,0] NC tag.
Similarly:
If correction elements should be used for CYCLE9960, they must lie behind the associated rotary axes in the "End of part chain"
to "End of tool chain" viewing direction.
Example for a kinematic chain for a machine with mixed kinematics (for further examples, see Chapter A100):
The original chain is implicitly included in this sequence (restricted to the essentials):
End
Workpiece End
C axis ROOT B axis
chain Tool chain
View
This conceptual sequence can now be augmented with the correction elements (each in viewing direction "behind" the associat-
ed rotary axis) for CYCLE9960:
End Corr.
Corr. End
Workpiece C axis ROOT B axis Spindle
C Offset Tool chain
chain Offset
View
Notes:
Kinematic transformations for the 5-axis machine with table kinematics ("P")
Movement transformations can be represented based on the For the example of the 5-axis machine with table kinematics,
kinematic chain. The kinematic chain supplies the geometric the transformations
information as input data for the associated transformation.
1. TRAORI_DYN
The kinematic chain can be used for the following 2. TRAORI_STAT
transformations: 3. TRANSMIT_K
4. TRACYL_K
TRAORI_DYN Dynamic orientation transformation with
1-3 rotary axes can be deployed.
TRAORI_STAT Static "Face transformation" orientation Commissioning the associated transformations is explained in
transformation for milling and turning the next steps.
machines for turning with a tool that can
be oriented
Notes:
1. Commissioning the TRAORI_DYN transformation Commissioning screen call for the transformation:
The TRAORI_DYN transformation can be used like the • Set the manufacturer password
previous TRAORI transformation. No changes need to be
• Select → Commissioning → NC → Transformations menu
made to existing NC programs that used the TRAORI
function.
In the overview of the existing transformations, the cursor is
positioned on the line in which the new transformation should
For this transformation, the linear and rotary axes positions to
be created.
be approached so that the tool tip is positioned correctly with
the appropriate alignment in the WCS are calculated from a
requested rotary axis direction or a vector direction.
The TRAORI_DYN transformation is selected from the input For the example machine with table kinematics, two rotary
dialog. axes (A and C) are used in the workpiece chain. No rotary
axis is used in the tool chain.
Notes:
TRAORI_DYN_AC is specified as name for the For the tool chain, SP1_OFFSET (softkey: Select element) is
transformation, the selection field for the alternative call is selected as last element from the kinematic chain, the mode
changed to "Yes" and the associated TRAORI selection block for closing the tool chain is set to AUTO.
is set to 1.
In the workpiece chain, the two rotary axes are specified with The transformation is linked with the linear axes of the
the associated correction elements for the kinematic machine in the next screen block.
measurement. The elements from the kinematic chain for the X/Y/Z axes
The associated elements are selected with the "Element" must be selected with the "Element" softkey in Explorer.
softkey in Explorer and transferred to the screen.
The sequence of the axes is considered from the machine
frame viewpoint.
Notes:
For the transformation properties, the "Accept rotary offset The transformation is now fully configured and can be used
from WO" setting must be set to "Yes" so that zero offset of from an NC program.
the C axis determined from a measuring cycle is transferred to
the transformation. The transformation can be tested with a small program:
The "End angle tolerances" can be set similarly for the TRAFOOF
previous TRAORI transformation. The two direction vectors CYCLE800
can be left initialized automatically as for the screen.
T0
The normal vector can be specified as required because it is M6
not evaluated for a transformation with two rotary axes. $P_UIFR[1]=CTRANS()
The "Ignore active tool" mode is switched to "No" because the
G0 G54 X200 Y0 Z50
active tool of the NC should be considered in the G0 A0 C0
transformation. TRAORI
ORIMKS
G0 A-5 C90
M0 ;MX=0 MY=-194.881 MZ=32.759
G0 A0 C0
TRAFOOF
M30
2. Commissioning the TRAORI_STAT transformation 2.1 Commissioning screen call for the transformation:
The TRAORI_STAT transformation is required to implement • Set the manufacturer password
turning on milling machines. Unlike for TRAORI_DYN, the
rotary axes are no longer moved during machining (tool cutter • Select → Commissioning → NC → Transformations menu
is engaged).
In the overview of the existing transformations, the cursor is
The transformation can be started or ended from the NC part positioned on the line in which the new transformation should
program with the "Various", "Swivel tool", "Align turning tool" be created.
function.
Notes:
"TRAORI_STAT" is selected from the transformation For the example machine with table kinematics, two rotary
selection list. axes (A and C) are used in the workpiece chain and, for the
orientation of the turning tool, the milling spindle in the tool
chain (the spindle is used as rotary axis in this case).
The name of the transformation can be assigned freely, see For the workpiece chain, the A axis and the C axis with the
below in the "TURN_TRAFO" screenshot. The tool for spindle associated correction elements are specified as first and
SP1 is oriented in the tool chain. The "END_TOOL_CHAIN" second axis, respectively.
element is the last element in the tool chain; the offset vectors To prevent a WCS jump when switching on the
of the tool chain should be closed automatically by the NC. transformation, close mode is switched to "auto".
The symbol at the right next to the parameter field for the
rotation axis can remain as the "Without Hirth coupling"
setting.
Because for the measurement of the kinematics, there should
not be a correction to the spindle offset, no correction element
is selected.
Notes:
The X/Y/Z linear machine axes can be assigned to the associ- The properties of the input screen must the adapted to the
ated elements of the kinematic chain with the "Select element" properties of the real machine. It is desirable to block
softkey in Explorer. impermissible retraction modes in the CUST_800.
All available capabilities are permitted for the example
machine used here. An MCS position in X-, Y+ and Z+ is
specified as retract position.
N1000 TRAFOOF
N1010 CYCLE800 N1140 G96 S2=600 M2=3 LIMS=700 M8
N1020 $P_UIFR[1]=CTRANS(Z,300) N1150 DIAMON
N1030 G0 SUPA Z500 D0
N1040 G0 A0 C0 N1160 G0 X210 Y0 Z100
N1050 WORKPIECE(,"C",,"CYLINDER",64, N1170 G0 X205 Z0
2,-200,-80,200) N1180 G1 X0 F0.3
N1190 G0 Z2
N1060 T="TOOL_3" N1200 G0 X210
N1070 M6
N1080 M6 N1290 CYCLE800(2,"TURN_TRAFO",200,57,
N1090 D1 ,,,90,0,0,,,,-1,100,2)
N1100 G54 N1300 CYCLE800(1,"0",200,57,
,,,0,0,0,,,,-1,100,12)
N1110 CYCLE800(2,"TURN_TRAFO",200,57, N1310 M9
,,,90,0,0,,,,-1,100,2) N1320 T0
N1120 SETMS(2) N1330 M6
N1130 G18 N1340 M30
Notes:
3. Commissioning the TRANSMIT_K transformation 3.1 Commissioning screen call for the transformation:
The TRANSMIT_K transformation is selected from TRANSMIT_AC is specified as name for the transformation;
the input dialog. the selection field for the alternative call is changed to "Yes"
and the associated TRANSMIT selection block is set to 1.
Notes:
Notes:
Notes:
4. Commissioning the TRACYL_K transformation 4.1 Commissioning screen call for the transformation:
The TRACYL_K transformation should be used to machine • Set the manufacturer password
round, centrically clamped workpieces on the jacket surface. • Select → Commissioning → NC → Transformations menu
The XY movement in the G17 work plane should be
transformed to a CY movement. In the overview of the existing transformations, the cursor is
The transformation is parameterized in conjunction with positioned on the line in which the new transformation should
CYCLE800. CYCLE800 is used to swivel the rotation axis of be created.
the workpiece perpendicular to the spindle axis.
The TRACYL_K transformation is selected from the input TRACYL_AC is specified as name for the transformation; the
dialog. selection field for the alternative call is changed to "Yes" and
the associated TRACYL selection block is set to 1.
The part program can activate or deactivate the new
transformation with the TRACYL or TRAFOOF command,
respectively.
Notes:
Parameterization of the transformation properties: The sequence of the geometry axes is subject to the
reference:
• The direction of rotation of the rotary axis should not be X references the content of $NT_GEO_AX_NAME[n,0]
inverted. Y references the content of $NT_ROT_AX_NAME[n,1]
Z references the content of $NT_GEO_AX_NAME[n,2]
• The sequence of the geometry axes should be "YZX".
• A WCS jump when selecting the transformation should be The system tags have the following meaning:
suppressed for all three axes. $NT_GEO_AX_NAME[n,0] is the radial axis (infeed axis)
• The base offsets are initialized with value 0. $NT_GEO_AX_NAME[n,2] is the longitudinal axis
• The tool direction Z should not be specified explicitly $NT_ROT_AX_NAME[n,1] is the rotary axis
(because already specified for this machine).
It must be considered that a coordinate system is created
internally in the controller (transformation coordinate system)
whose Z axis coincides with the WCS axis defined at
"longitudinal axis" and whose X axis coincides with the WCS
axis defined at "infeed axis". The Y axis of this coordinate
system is simulated for the active TRACYL by the rotary axis.
Notes:
ZW
XT XT
YT /C YW
YT /C
Longit. axis
XW
ZT
Infeed axis ZT
Notes:
N1000 TRAFOOF
N1010 CYCLE800
N1020 T="FR_12"
N1030 M6
N1040 D1
N1050 G17 G54 G60 G90 S5000 M3
N1060 G0 X0
N1070 CYCLE800(1,"TISCH_AC",100000,57,0,0,0,-90,0,0,0,0,0,-1,,1)
N1080 TRACYL(100) ;TRACYL with 100 diameter
N1090 G0 X=IC(10) ;MCS: C=-11.459
N1100 G0 X=IC(-10) ;MCS: C=+11.459
N1110 G0 Y=IC(10) ;MCS: Y=+10
N1120 G0 Y=IC(-10) ;MCS: Y=-10
N1130 G0 Z=IC(10) ;MCS: Z=+10
N1140 G0 Z=IC(-10) ;MCS: Z=-10
N1150 TRAFOOF
N1160 CYCLE800
N1170 M5
N1180 M2
Programming note:
Z
Y
X/C
Notes:
Note:
To use the classic tool carriers, MD 18088
$MN_NUM_TOOL_CARRIER >0 must be set!
Selection: Swivel table The name for the classic tool carrier is specified as
"TISCH_AC" and the data block is released.
Notes:
The rotary axes are entered as shown in the screen below. Ensure that the names of the channel axes (A and C) are entered for
the definition of the tool carrier.
The screen settings must be adapted to the associated need; the reference of the preferred direction to rotary axis number 1 (A
axis) is important.
Notes:
The rotary axes are entered as shown in the screen below. The END_PART_CHAIN element is used as end of the workpiece
chain. The workpiece chain should be closed automatically by the transformation.
Notes:
The screen settings must be adapted to the associated need; the reference of the preferred direction to rotary axis number 1
(A axis) is important.
Kinematic transformations for the 5-axis machine with mixed kinematics ("M")
Notes:
Kinematic transformations for the 5-axis machine with mixed kinematics ("M")
1. Commissioning the TRAORI_DYN transformation Commissioning screen call for the transformation:
The TRAORI_DYN transformation can be used like the • Set the manufacturer password
previous TRAORI transformation. No changes need to be • Select → Commissioning → NC → Transformations menu
made to existing NC programs that used the TRAORI
function. In the overview of the existing transformations, the cursor is
positioned on the line in which the new transformation should
For this transformation, the linear and rotary axes positions to be created.
be approached so that the tool tip is positioned correctly with
the appropriate alignment in the WCS are calculated from a
requested rotary axis direction or a vector direction.
The TRAORI_DYN transformation is selected from the input For the example machine with mixed kinematics, a rotary axis
dialog. (B) and a rotary axis (C) are used in the tool chain and in the
workpiece chain, respectively.
Notes:
TRAORI_DYN_BC is specified as name for the The B_AXIS element is used for the rotation axis of the tool
transformation, the selection field for the alternative call is chain; the CORR_SP1_OFFSET element is used as
changed to "Yes" and the associated TRAORI selection block correction element for CYCLE9960.
is set to 1. For the tool chain, END_TOOL_CHAIN (softkey: Select
The new transformation can then be activated or deactivated element) is selected as last element from the kinematic chain,
by the part program with the TRAORI or TRAFOOF the mode for closing the tool chain is set to AUTO.
command, respectively.
The transformation is linked with the linear axes of the For the transformation properties, the "Accept rotary offset
machine in the next screen block. from WO" setting must be set to "Yes" so that zero offset of
The elements from the kinematic chain for the X/Y/Z axes the C axis determined from a measuring cycle is transferred
must be selected with the "Element" softkey in Explorer. to the transformation.
The "End angle tolerances" can be set similarly for the
previous TRAORI transformation. The two direction vectors
can be left initialized automatically as for the screen.
Notes:
The transformation is now fully configured and can be used Commissioning the TRAORI_STAT transformation
from an NC program.
The TRAORI_STAT transformation is required to implement
The transformation can be tested with a small program: turning on milling machines. Unlike for TRAORI_DYN, the
rotary axes are no longer moved during machining (tool cutter
TRAFOOF is engaged).
CYCLE800
The transformation can be started or ended from the NC part
T0 program with the "Various", "Swivel tool", "Align turning tool"
M6 function.
$P_UIFR[1]=CTRANS()
To allow complete use of the function, various program
G0 G54 X100 Y0 Z100 sections in CUST_800.SPF must be augmented with the
G0 B0 C0 required functions (clamp the spindle clamping of the milling
TRAORI spindle, etc.).
ORIMKS
G0 B10 C15
M0 ;MX=94.751 MY=-25.996 MZ=100.114
G0 B0 C0
TRAFOOF
M30
Commissioning screen call for the transformation: "TRAORI_STAT" is selected from the transformation selection
list.
• Set the manufacturer password
• Select → Commissioning → NC → Transformations menu
In the overview of the existing transformations, the cursor is
positioned on the line in which the new transformation should
be created.
Notes:
For the example machine with mixed kinematics, two rotary The name of the transformation can be assigned freely, see
axes (B and spindle) are used in the tool chain and one rotary below in the "TURN_TRAFO" screenshot. In the tool chain,
axis (C) used in the workpiece chain. the tool is oriented in the B_AXIS axis and by the SP1_AXIS
spindle. The "END_TOOL_CHAIN" element is the last
element in the tool chain; the offset vectors of the tool chain
should be closed automatically by the NC.
The symbol at the right next to the parameter field for the
rotation axis can remain as the "Without Hirth coupling"
setting.
For the workpiece chain, the C axis is specified with the The properties of the input screen must the adapted to the
C_AXIS element; the correction element is C_CORR. properties of the real machine. It is desirable to block
To prevent a WCS jump when switching on the impermissible retraction modes in the CUST_800.
transformation, close mode is switched to "auto". All available capabilities are permitted for the example
machine used here. An MCS position in X-, Y+ and Z+ is
specified as retract position.
Notes:
N1000 TRAFOOF
N1010 CYCLE800
N1020 $P_UIFR[1]=CTRANS(Z,300)
N1030 G0 SUPA Z500 D0
N1040 G0 B0 C0
N1050 WORKPIECE(,"C",,"CYLINDER",64,2,-200,-80,200)
N1060 T="TOOL_3"
N1070 M6
N1080 M6
N1090 D1
N1100 G54
N1110 CYCLE800(2,"TURN_TRAFO",200,57,,,,90,0,0,,,,-1,100,2)
N1120 SETMS(2)
N1130 G18
N1140 G96 S2=600 M2=3 LIMS=700 M8
N1150 DIAMON
N1160 G0 X210 Y0 Z100
N1170 G0 X205 Z0
N1180 G1 X0 F0.3
N1190 G0 Z2
N1200 G0 X210
N1210 CYCLE62("TESTCONTOUR",1,,)
N1220 CYCLE952
("OUTPUT_1",,"REST_1",2101311,0.3,0.3,0,2,0.1,0.1,0.1,0.1,0.1,0,1,0,0,,,,,2,2,
,,0,1,,0,12,1110110,1,0)
N1230 M2=5
N1240 CYCLE800(1,"TURN_TRAFO",200,57,,,,,45,0,,,,1,100,2)
N1250 G96 S2=600 M2=3 LIMS=700 M8
N1260 G0 X250 Y0 Z50
N1270 CYCLE952
("OUTPUT_2","REST_1","",1101311,0.3,2,0,2,0.1,0.1,0.1,0.1,0.1,0,1,0,,,,,,2,2,,
,0,1,,0,112,1100110,1,0)
N1280 M2=5
N1290 CYCLE800(2,"TURN_TRAFO",200,57,,,,90,0,0,,,,-1,100,2)
N1300 CYCLE800(1,"0",200,57,,,,0,0,0,,,,-1,100,12)
N1310 M9
N1320 T0
N1330 M6
N1340 M30
Notes:
Notes:
Commissioning the TRANSMIT_K transformation 3.1 Commissioning screen call for the transformation:
The TRANSMIT_K transformation is selected from the input TRANSMIT_BC is specified as name for the transformation,
dialog. the selection field for the alternative call is changed to "Yes"
and the associated TRAORI selection block is set to 1.
The part program can activate or deactivate the new transfor-
mation with the TRANSMIT or TRAFOOF command, respec-
tively.
Notes:
For the tool chain, the SP1_OFFSET element is selected as The "X_AXIS" element is selected for the transformation axis
reference and as last element from the CORR_SP1_OFFSET (the linear axis that should be moved by the transformation to
kinematic chain. form the XY coordinate system). A compensation axis to
correct the tool offset is not required in this case.
The "Z_AXIS" axis is specified as infeed axis.
Notes:
Notes:
Commissioning the TRACYL_K transformation Commissioning screen call for the transformation:
The TRACYL_K transformation should be used to machine • Set the manufacturer password
round, centrically clamped workpieces on the jacket surface. • Select → Commissioning → NC → Transformations menu
The XY movement in the G17 work plane should be
transformed to a CY movement. In the overview of the existing transformations, the cursor is
The transformation is parameterized in conjunction with positioned on the line in which the new transformation should
CYCLE800. CYCLE800 is used to swivel the rotation axis of be created.
the workpiece perpendicular to the spindle axis.
The TRACYL_K transformation is selected from the input TRACYL_BC is specified as name for the transformation; the
dialog. selection field for the alternative call is changed to "Yes" and
the associated TRACYL selection block is set to 1.
The part program can activate or deactivate the new
transformation with the TRACYL or TRAFOOF command,
respectively.
Notes:
Parameterization of the transformation properties: For the sequence of the geometry axes, note that the use of
CYCLE800 requires that the assignment of the geometry ax-
• The direction of rotation of the rotary axis should not be es must be adapted especially for this configuration.
inverted. The swivel setting of CYCLE800 (in particular, the rotations
and the selection of the +/- solution) actually deployed must
• The sequence of the geometry axes should be "YXZ".
be documented for the end user by the machine
• A WCS jump when selecting the transformation should be manufacturer.
suppressed for all three axes. Changing the alignment of the WCS via CYCLE800 changes
• The base offsets are initialized with value 0. the transformation behavior!
• The tool direction Z should not be specified explicitly
(because already specified for this machine). The transformation is parameterized so that the WCS X axis
is represented by the C rotary axis, the WCS Y axis runs
parallel to the cylinder axis and the WCS Z axis is the infeed
axis.
The resulting handling must be considered like the "G17"
level for a 3 axis milling machine.
Notes:
The workpiece coordinate system for the transformation has Programming note:
the alignment:
Before switching on the TRACYL function, the X axis of the
machine must be positioned exactly at the rotation center of
the C axis.
Y
X/C
Z
Y
Note:
In this diagram, the coordinate system is moved to the surface X/C
of the cylinder after the rotation in Z.
The relationship between the transformation coordinate system and the workpiece coordinate system is shown in the following
diagram:
YW
ZW
ZT
YT
Notes:
The transformation coordinate system is represented in the To find the appropriate selection for the sequence of the
controller within the active CYCLE800 workpiece coordinate geometry axes, ask the following questions:
system in accordance with a fixed rule:
1st question:
• The Z axis runs parallel to the rotation axis of the cylinder Which axis should be moved by the transformation coordinate
(in this example: Z axis of the machine). system when "X" is programmed in the part program?
1st answer: Y (handling axis)
• The X axis points in the direction of the feed axis (in this
example: Y axis of the WCS).
2nd question:
• The Y axis (this is always simulated by the rotary axis) Which axis should be moved for the transformation
results from the arrangement of the two other coordinate coordinate system when "Y" is programmed in the part
systems and augments these to form a perpendicular, right- program?
handed Cartesian coordinate system. 2nd answer: X
3rd question:
Which axis should be moved for the transformation
coordinate system when "Z" is programmed in the part
program?
2nd answer: Z
Example program:
N1000 TRAFOOF
N1010 CYCLE800
N1020 T="FR_12"
N1030 M6
N1040 D1
N1050 G17 G54 G60 G90 S5000 M3
N1060 G0 X0
N1070 CYCLE800(1,"MIXED_BC",200000,39,0,0,0,180,90,0,0,0,0,1,,1)
N1075 G0 Z100 Y0
N1080 TRACYL(100)
N1090 G0 X=IC(10) ;MKS: C=+11.459
N1100 G0 X=IC(-10) ;MKS: C=-11.459
N1110 G0 Y=IC(10) ;MKS: Z=+10
N1120 G0 Y=IC(-10) ;MKS: Z=-10
N1130 G0 Z=IC(10) ;MKS: Y=+10
N1140 G0 Z=IC(-10) ;MKS: Y=-10
N1150 TRAFOOF
N1160 CYCLE800
N1170 M5
N1180 M2
Notes:
Note:
To use the classic tool carriers, MD 18088
$MN_NUM_TOOL_CARRIER >0 must be set!
Notes:
The rotary axes are entered as shown in the screen below. Ensure that the names of the channel axes are entered for the
definition of a classic tool carrier.
The screen settings must be adapted to the associated need; the reference of the preferred direction to rotary axis number 1
(B axis) is important.
Notes:
Notes:
The rotary axes are entered as shown in the screen below. The END_TOOL_CHAIN element is used as end of the tool chain; the
END_PART_CHAIN element is used as end of the workpiece chain. Both chains should be closed automatically by the
transformation.
The screen settings must be adapted to the associated need; the reference of the preferred direction to rotary axis number 1
(B axis) is important.
Notes:
Notes:
Commissioning the TRAORI_DYN transformation: Commissioning screen call for the transformation:
The TRAORI_DYN transformation can be used like the • Set the manufacturer password
previous TRAORI transformation. No changes need to be
made to existing NC programs that used the TRAORI
• Select → Commissioning → NC → Transformations menu
function.
In the overview of the existing transformations, the cursor is
positioned on the line in which the new transformation should
For this transformation, the linear and rotary axes positions to
be approached so that the tool tip is positioned correctly with be created.
the appropriate alignment in the WCS are calculated from a
requested rotary axis direction or a vector direction.
The TRAORI_DYN transformation is selected from the input For the example machine with head kinematics, both rotary
dialog. axes (A and C) are used in the tool chain.
Notes:
TRAORI_DYN_AC is specified as name for the transfor- The C_AXIS, CORR_A_OFFSET, A_AXIS and
mation, the selection field for the alternative call is changed to CORR_SP1_OFFSET elements are used for the rotation axes
"Yes" and the associated TRAORI selection block is set to 1. of the tool chain.
The new transformation can then be activated or deactivated For the tool chain, SP1_OFFSET (softkey: Select
by the part program with the TRAORI or TRAFOOF element) is selected as last element from the kinematic chain,
command, respectively. the mode for closing the tool chain is set to AUTO.
The transformation is linked with the linear axes of the For the transformation properties, the "Accept rotary offset
machine in the next screen block. from WO" setting must be set to "Yes" so that zero offset of
The elements from the kinematic chain for the X/Y/Z axes the C axis determined from a measuring cycle is transferred to
must be selected with the "Element" softkey in Explorer. the transformation.
The "End angle tolerances" can be set similarly for the
previous TRAORI transformation. The two direction vectors
can be left initialized automatically as for the screen.
The "Ignore active tool" mode is switched to "No" because the
active tool of the NC should be considered in the
transformation.
Notes:
The transformation is now fully configured and can be used from an NC program.
TRAFOOF
CYCLE800
T0
M6
$P_UIFR[1]=CTRANS()
G0 G54 X100 Y0 Z100
G0 A0 C0
TRAORI
ORIMKS
G0 A10 C15
M0 ;MX=109.888 MY=-36.901 MZ=96.658
G0 A0 C0
TRAFOOF
M30
For the M0 line, the machine axes must be placed on the positions specified as comment. A tool correction has been waived
intentionally.
Note:
To use the classic tool carriers, MD 18088
$MN_NUM_TOOL_CARRIER >0 must be set!
Notes:
The rotary axes are entered as shown in the screen below. Ensure that the names of the channel axes are entered for the
definition of a classic tool carrier. The vector chain must be closed manually.
Notes:
The screen settings must be adapted to the associated need; the reference of the preferred direction to rotary axis number 2
(A axis) is important.
Notes:
The rotary axes are entered as shown in the screen below. The END_TOOL_CHAIN element is used as end of the tool
chain. The chain should be closed automatically by the transformation.
Notes:
The screen settings must be adapted to the associated need; the reference of the preferred direction to rotary axis number 2
(A axis) is important.
Notes:
Example of a TRANSMIT transformation for a rotary axis Overview of the machine example with C axis:
that does not lie at the machine zero.
Overview of the kinematic chain of the machine: For the correct representation in the simulation, the C axis
must be parameterized in MD 52207:
Note: For this machine, the C axis is the fifth axis in the channel,
In the program example, the offset for the rotary axis is only which is why MD 52207[4] is used for the C axis.
formed from the two elements „C_CORR“ and „C_OFFSET“.
If additional elements with offset values <>0 are integrated in
the kinematic chain before these two elements, then these
must also be taken into consideration.
Notes:
Creating the transformation: Call the commissioning screen form for the transformation:
Notes:
Notes:
G54
X0 Y0 Z0
Notes:
The correct
positioning is
achieved by
programming
ATRANS and AROT
commands.
CMCS=63.435°
Geometry overview:
NPV_X=$P_UIFR[$P_UIFRNUM,X,TR]-OFFSET_X
NPV_Y=$P_UIFR[$P_UIFRNUM,Y,TR]-OFFSET_Y
ATAN2(NPV_Y,NPV_X)
NPV_X
OFFSET_X=-500
OFFSET_Y=-200
Notes:
Notes:
Notes:
Notes:
Notes:
XMCS=-500mm
CMCS=333.435°
YMCS=-32.295mm
Notes:
$NK_NAME[COUNT1]="C_CORR" $NK_NAME[COUNT1]="C_AXIS"
$NK_NEXT[COUNT1]="C_OFFSET" $NK_NEXT[COUNT1]="END_PART_CHAIN_1"
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="OFFSET" $NK_TYPE[COUNT1]="AXIS_ROT"
$NK_OFF_DIR[COUNT1,0]=0 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=0 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=0 $NK_OFF_DIR[COUNT1,2]=-1
$NK_AXIS[COUNT1]="" $NK_AXIS[COUNT1]="MC1"
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
$NK_NAME[COUNT1]="C_OFFSET" $NK_NAME[COUNT1]="END_PART_CHAIN_1"
$NK_NEXT[COUNT1]="C_AXIS" $NK_NEXT[COUNT1]=""
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="OFFSET" $NK_TYPE[COUNT1]="OFFSET"
$NK_OFF_DIR[COUNT1,0]=-500 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=-200 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=0 $NK_OFF_DIR[COUNT1,2]=0
$NK_AXIS[COUNT1]="" $NK_AXIS[COUNT1]=""
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
Notes:
$NK_NAME[COUNT1]="" $NK_NAME[COUNT1]=""
$NK_NEXT[COUNT1]="" $NK_NEXT[COUNT1]=""
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="" $NK_TYPE[COUNT1]=""
$NK_OFF_DIR[COUNT1,0]=0 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=0 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=0 $NK_OFF_DIR[COUNT1,2]=0
$NK_AXIS[COUNT1]="" $NK_AXIS[COUNT1]=""
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
$NK_NAME[COUNT1]="" $NK_NAME[COUNT1]="X_OFFSET"
$NK_NEXT[COUNT1]="" $NK_NEXT[COUNT1]="X_AXIS"
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="" $NK_TYPE[COUNT1]="OFFSET"
$NK_OFF_DIR[COUNT1,0]=0 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=0 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=0 $NK_OFF_DIR[COUNT1,2]=0
$NK_AXIS[COUNT1]="" $NK_AXIS[COUNT1]=""
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
$NK_NAME[COUNT1]="X_AXIS" $NK_NAME[COUNT1]="Z_AXIS"
$NK_NEXT[COUNT1]="Z_OFFSET" $NK_NEXT[COUNT1]="SP1_OFFSET"
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="AXIS_LIN" $NK_TYPE[COUNT1]="AXIS_LIN"
$NK_OFF_DIR[COUNT1,0]=1 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=0 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=0 $NK_OFF_DIR[COUNT1,2]=1
$NK_AXIS[COUNT1]="MX1" $NK_AXIS[COUNT1]="MZ1"
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
$NK_NAME[COUNT1]="Z_OFFSET" $NK_NAME[COUNT1]="SP1_OFFSET"
$NK_NEXT[COUNT1]="Z_AXIS" $NK_NEXT[COUNT1]="SP1_AXIS"
$NK_PARALLEL[COUNT1]="" $NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="OFFSET" $NK_TYPE[COUNT1]="OFFSET"
$NK_OFF_DIR[COUNT1,0]=0 $NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=0 $NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=0 $NK_OFF_DIR[COUNT1,2]=0
$NK_AXIS[COUNT1]="" $NK_AXIS[COUNT1]=""
$NK_A_OFF[COUNT1]=0 $NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1 $NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0 $NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1 COUNT1=COUNT1+1
Notes:
$NK_NAME[COUNT1]="SP1_AXIS"
$NK_NEXT[COUNT1]="END_TOOL_CHAIN"
$NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="AXIS_ROT"
$NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=-1
$NK_AXIS[COUNT1]="MSP1"
$NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1
$NK_NAME[COUNT1]="END_TOOL_CHAIN"
$NK_NEXT[COUNT1]=""
$NK_PARALLEL[COUNT1]=""
$NK_TYPE[COUNT1]="OFFSET"
$NK_OFF_DIR[COUNT1,0]=0
$NK_OFF_DIR[COUNT1,1]=0
$NK_OFF_DIR[COUNT1,2]=0
$NK_AXIS[COUNT1]=""
$NK_A_OFF[COUNT1]=0
$NK_SWITCH_INDEX[COUNT1]=-1
$NK_SWITCH_POS[COUNT1]=0
COUNT1=COUNT1+1
Notes:
$NP_PROT_NAME[COUNT3]="TOOL_PROT"
$NP_CHAIN_ELEM[COUNT3]="SP1_AXIS"
$NP_PROT_TYPE[COUNT3]="TOOL"
$NP_1ST_PROT[COUNT3]="__TOOL_00001_09998_01_0000"
$NP_PROT_COLOR[COUNT3]=0
$NP_PROT_D_LEVEL[COUNT3]=0
$NP_BIT_NO[COUNT3]=-1
$NP_INIT_STAT[COUNT3]="A"
$NP_INDEX[COUNT3,0]=1
$NP_INDEX[COUNT3,1]=9998
$NP_INDEX[COUNT3,2]=1
COUNT3=COUNT3+1
$NP_PROT_NAME[COUNT3]="C_PROT"
$NP_CHAIN_ELEM[COUNT3]="C_AXIS"
$NP_PROT_TYPE[COUNT3]="MACHINE"
$NP_1ST_PROT[COUNT3]="C_CYL_1"
$NP_PROT_COLOR[COUNT3]=-8388608
$NP_PROT_D_LEVEL[COUNT3]=0
$NP_BIT_NO[COUNT3]=-1
$NP_INIT_STAT[COUNT3]="A"
$NP_INDEX[COUNT3,0]=0
$NP_INDEX[COUNT3,1]=0
$NP_INDEX[COUNT3,2]=0
COUNT3=COUNT3+1
Notes:
$NP_NAME[COUNT4]="ROOT_BOX_2" $NP_NAME[COUNT4]="ROOT_BOX_3"
$NP_NEXT[COUNT4]="ROOT_BOX_5" $NP_NEXT[COUNT4]="ROOT_BOX_4"
$NP_NEXTP[COUNT4]="" $NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=0 $NP_COLOR[COUNT4]=0
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="BOX" $NP_TYPE[COUNT4]="BOX"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=50 $NP_PARA[COUNT4,0]=2050
$NP_PARA[COUNT4,1]=1800 $NP_PARA[COUNT4,1]=380
$NP_PARA[COUNT4,2]=2400 $NP_PARA[COUNT4,2]=1750
$NP_OFF[COUNT4,0]=-1025 $NP_OFF[COUNT4,0]=-25
$NP_OFF[COUNT4,1]=0 $NP_OFF[COUNT4,1]=710
$NP_OFF[COUNT4,2]=1075 $NP_OFF[COUNT4,2]=1000
$NP_DIR[COUNT4,0]=0 $NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=0
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=0 $NP_ANG[COUNT4]=0
COUNT4=COUNT4+1 COUNT4=COUNT4+1
$NP_NAME[COUNT4]="ROOT_BOX_4" $NP_NAME[COUNT4]="X_BOX_1"
$NP_NEXT[COUNT4]="" $NP_NEXT[COUNT4]=""
$NP_NEXTP[COUNT4]="" $NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=0 $NP_COLOR[COUNT4]=0
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="BOX" $NP_TYPE[COUNT4]="BOX"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=2000 $NP_PARA[COUNT4,0]=400
$NP_PARA[COUNT4,1]=500 $NP_PARA[COUNT4,1]=70
$NP_PARA[COUNT4,2]=450 $NP_PARA[COUNT4,2]=460
$NP_OFF[COUNT4,0]=25 $NP_OFF[COUNT4,0]=0
$NP_OFF[COUNT4,1]=-440 $NP_OFF[COUNT4,1]=185
$NP_OFF[COUNT4,2]=650 $NP_OFF[COUNT4,2]=1005
$NP_DIR[COUNT4,0]=0 $NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=0
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=0 $NP_ANG[COUNT4]=0
COUNT4=COUNT4+1 COUNT4=COUNT4+1
Notes:
$NP_NAME[COUNT4]="Z_BOX_1" $NP_NAME[COUNT4]="Z_CYL_1"
$NP_NEXT[COUNT4]="" $NP_NEXT[COUNT4]="Z_BOX_1"
$NP_NEXTP[COUNT4]="" $NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=0 $NP_COLOR[COUNT4]=0
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="BOX" $NP_TYPE[COUNT4]="CYLINDER"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=380 $NP_PARA[COUNT4,0]=100
$NP_PARA[COUNT4,1]=300 $NP_PARA[COUNT4,1]=90
$NP_PARA[COUNT4,2]=1200 $NP_PARA[COUNT4,2]=0
$NP_OFF[COUNT4,0]=0 $NP_OFF[COUNT4,0]=0
$NP_OFF[COUNT4,1]=0 $NP_OFF[COUNT4,1]=0
$NP_OFF[COUNT4,2]=650 $NP_OFF[COUNT4,2]=50
$NP_DIR[COUNT4,0]=0 $NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=0
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=0 $NP_ANG[COUNT4]=0
COUNT4=COUNT4+1 COUNT4=COUNT4+1
$NP_NAME[COUNT4]="ROOT_BOX_5" $NP_NAME[COUNT4]="C_CYL_1"
$NP_NEXT[COUNT4]="" $NP_NEXT[COUNT4]=""
$NP_NEXTP[COUNT4]="" $NP_NEXTP[COUNT4]=""
$NP_ADD[COUNT4]="" $NP_ADD[COUNT4]=""
$NP_COLOR[COUNT4]=0 $NP_COLOR[COUNT4]=0
$NP_D_LEVEL[COUNT4]=0 $NP_D_LEVEL[COUNT4]=0
$NP_USAGE[COUNT4]="A" $NP_USAGE[COUNT4]="A"
$NP_TYPE[COUNT4]="BOX" $NP_TYPE[COUNT4]="CYLINDER"
$NP_FILENAME[COUNT4]="" $NP_FILENAME[COUNT4]=""
$NP_PARA[COUNT4,0]=1000 $NP_PARA[COUNT4,0]=50
$NP_PARA[COUNT4,1]=1800 $NP_PARA[COUNT4,1]=250
$NP_PARA[COUNT4,2]=500 $NP_PARA[COUNT4,2]=0
$NP_OFF[COUNT4,0]=-525 $NP_OFF[COUNT4,0]=0
$NP_OFF[COUNT4,1]=0 $NP_OFF[COUNT4,1]=0
$NP_OFF[COUNT4,2]=500 $NP_OFF[COUNT4,2]=25
$NP_DIR[COUNT4,0]=0 $NP_DIR[COUNT4,0]=0
$NP_DIR[COUNT4,1]=0 $NP_DIR[COUNT4,1]=0
$NP_DIR[COUNT4,2]=0 $NP_DIR[COUNT4,2]=0
$NP_ANG[COUNT4]=0 $NP_ANG[COUNT4]=0
COUNT4=COUNT4+1
Notes:
$NP_COLL_PAIR[COUNT5,0]="TOOL_PROT"
$NP_COLL_PAIR[COUNT5,1]="C_PROT"
$NP_SAFETY_DIST[COUNT5]=0
COUNT5=COUNT5+1
$NP_COLL_PAIR[COUNT5,0]="Z_LIN_PROT"
$NP_COLL_PAIR[COUNT5,1]="Y_LIN_PROT"
$NP_SAFETY_DIST[COUNT5]=0
COUNT5=COUNT5+1
$NP_COLL_PAIR[COUNT5,0]="Z_LIN_PROT"
$NP_COLL_PAIR[COUNT5,1]="C_PROT"
$NP_SAFETY_DIST[COUNT5]=0
COUNT5=COUNT5+1
$NP_COLL_PAIR[COUNT5,0]="Z_LIN_PROT“
$NP_COLL_PAIR[COUNT5,1]="ROOT_PROT"
$NP_SAFETY_DIST[COUNT5]=0
Notes:
Notes:
Appendix
TRAORI STAT:
2 rotary axes in the workpiece
1 rotary axis in the tool
$NT_NAME[n]
$NT_CLOSE_CHAIN_T[n]
$NT_CLOSE_CHAIN_P[n]
Notes:
TRAORI STAT:
1 rotary axis in the workpiece
2 rotary axes in the tool
$NT_NAME[n]
$NT_CLOSE_CHAIN_T[n]
$NT_CLOSE_CHAIN_P[n]
Further MD:
$NT_CNTRL[n]=2097154
$NT_ROT_AX_CNT[n,0]=1 ;1 rotary axis in the part chain
$NT_ROT_AX_CNT[n,1]=2 ;2 rotary axes in the tool chain
Notes:
TRAORI:
2 rotary axes in the workpiece
0 rotary axes in the tool
TRAORI:
0 rotary axes in the workpiece
2 rotary axes in the tool
Notes:
TRAORI:
1 rotary axis in the workpiece
1 rotary axis in the tool
TRANSMIT:
Notes:
TRACYL:
Notes:
Bit Description
0 Not used
9 Not used
10 Not used
11 Not used
16 Not used
17 Not used
18 Not used
19 Not used
20 Not used
0: redundant rotary axes do not output an alarm if they are moved when a transformation is active
1: redundant rotary axes output an alarm if they are moved when a transformation is active
21
Notes:
Bit Description
0 Not used
1 Not used
2 Not used
3 Not used
4 Not used
5 Not used
6 Not used
7 Not used
8 Not used
0: no center offset linear axis being used (compensating axis)
9
1: center offset linear axis is being used (compensating axis)
10 Not used
11 Inverts the direction of rotation of the rotary axis
12 Reserved for OEM transformation
13 Reserved for OEM transformation
14 Reserved for OEM transformation
15 If bit 15 = 1, then the last element of the tool chain must be a rotary axis or a constant rotation.
16 Coding for the sequence of geometry axes, see Table 1
17 Coding for the sequence of geometry axes, see Table 1
18 Coding for the sequence of geometry axes, see Table 1
1: The last element of the kinematic chain is a rotary axis or a constant rotation. The Z axis of the WCS
19
is obtained from the direction vector of the rotary axis
20 If bit 19 = 1 and bit 20 = 1: The direction of the Z axis of the WCS is inverted.
0: redundant rotary axes do not output an alarm if they are moved when the transformation is active
21
1: redundant rotary axes output an alarm if they are moved when the transformation is active
Notes:
Table 1:
A decimal number with a value from 0 to 5 is calculated from bits 16, 17 and 18 . The
sequence of the geometry axes (= emulation of the geometry axes on the
transformation) is assigned based on the following table:
Example:
Combination YXZ should be used. According to the table, the decimal value should be = 5.
5=4+1, and therefore:
Bit 16=1 ; delivers decimal 1
Bit 17=0 ; delivers decimal 0
Bit 18=1 ; delivers decimal 4
Notes:
Bit Description
0 Not used
1 Not used
2 Not used
3 Not used
4 Not used
5 Not used
6 Not used
7 Not used
8 Not used
9 Configuration of the Tracyl property with/without groove side compensation, see Table 2
10 Configuration of the Tracyl property with/without groove side compensation, see Table 2
11 Inverts the direction of rotation of the rotary axis
12 Reserved for OEM transformation
13 Reserved for OEM transformation
14 Reserved for OEM transformation
15 If bit 15 = 1, then the last element of the tool chain must be a rotary axis or a constant rotation.
16 Coding of the sequence of the geometry axes, see Table 1
17 Coding of the sequence of the geometry axes, see Table 1
0: redundant rotary axes do not output an alarm if they are moved with the transformation active
21
1: redundant rotary axes output an alarm if they are moved with the transformation active
Bit 10 Bit 9
0 0 Tracyl without groove side compensation
0 1 Tracyl with groove side compensation
Tracyl with groove side compensation that can be activated; when switched on: groove
1 0
side compensation is not active
Tracyl with groove side compensation that can be activated; when switched on: groove
1 1
side compensation is active
Notes:
Notes:
A186: END
Notes: