Independent axes

Two different operation modes are provided to program independent axes:

Motion diagram of path axis compound/independent axes
Motion diagram of path axis compound/independent axes



No offsets are considered for independent axes.

Additive manual mode (G201/G202) with an independent axis is possible.

Programming syntax for independent axes:

<axis_name> [ INDP_SYN | INDP_ASYN G90 at the MC_ReadAxisError function block at its AxisErrorID output | G91 G00 | [G01 | G100 FEED<expr>] |

                      TIME<expr> | FEED_MAX_WEIGHT<expr> POS<expr> [SLOPE_TYPE<ident>]

                      {M<expr>} {H<expr>} [DRY_RUN] { \ } ]


Name of independent axis


Identifier for synchronous (blockwise) independent axis motion. The transition to the next block is only executed if all axes have reached their target point. Must always be programmed as the first keyword.


Identifier for asynchronous (cross-block) independent axis motion. There is no synchronisation at target points. Command value based synchronisation is executed by a special NC command (#WAIT INDP) or by programming the independent axis as a conventional path axis. Must always be programmed as the first keyword.

G90 / G91

Absolute/relative dimension

G00 / G01

Rapid traverse/linear interpolation


Axis-specific feedrate in [mm/min, m/min, inch/min]


Axis-specific motion time in [s]


Weighting factor in [%] referred to axis-specific maximum feed P-AXIS-00212. Only weighting factors less than 100% are permitted. (according to G194, Section Machining time/feedrate (G93/G94/G95/G194))


Axis position in [mm, inch]


Slope profile types according to #SLOPE [TYPE=...], Section Independent axes). If no slope type is programmed, the slope type taken from the channel parameter list P-CHAN-00071 is set by default.

Old syntax:


Slope profile types (0, 1, 2, 3). If no slope type is programmed, the slope type taken from the channel parameter list P-CHAN-00071 is sued by default.


[as of Build V2.11.2801.05]

If measurement types 1, 2 or 7 (Section Measuring functions) are used, a measurement run can be executed with independent axes. The measuring point is latched for each axis involved. An independent measurement run is also possible in parallel to a path motion of a G100 measurement run. For more information see [FCT-C4//Measurement].


Dry run of axis motion. The motion is only executed in the NC channel but the axis is not really moved. This offsets the axis coordinate within the channel relative to the physical axis. This offset is automatically cancelled at every program start or by an explicitly programmed #CHANNEL INIT [CMD_POS] (see programming example 3).


Axis-specific M functions (*)


Axis-specific M/H-functions (*)


Separator ("backslash") for clear programming of the command over multiple lines.

(*) only possible with synchronisation modes MOS, MVS_SVS, MVS_SNS, MNS_SNS.

Axis-specific M/H functions can also be output to an independent axis without programming a motion. This only requires the identifier INDP_SYN or INDP_ASYN.

<axis_name> [ INDP_SYN | INDP_ASYN M<expr> {M<expr>} H<expr> {H<expr>} { \ } ]


Name of independent axis


Identifier for an independent axis


Axis-specific M function


Axis-specific H functions


Separator ("backslash") for clear programming of the command over multiple lines.

Command value based synchronisation of specific asynchronous axis motions (INDP_ASYN) can be forced by the NC command:

#WAIT INDP [ <axis_name> { ,<axis_name> } ]


Name of asynchronous axis



If an asynchronous axis is again programmed with a motion before or without a corresponding #WAIT INDP [  ], command value based synchronisation is implicitly executed in the interpolator.

Command value based synchronisation of all currently active asynchronous axis motions (INDP_ASYN) is forced by the NC command:




If the axis of a pre-assigned axis-specific M/H function (P-CHAN-00039, P-CHAN-00025) is programmed in the same NC block as an independent axis, an error message is output.

Example: M10 is pre-assigned for a specific X axis (m_default_outp_ax_name[10] x):

N10   M10    X [INDP_SYN G01 G90 POS10 FEED1000 M7]

          |_____| <- Error!

Programing Example


Independent axes

Example 1:

N10 X10 Y11 Z[INDP_SYN POS50 G01 FEED100 G90] (N10 ends when X,Y and)
                                              (the indep. synchr. Z axis)
                                              (end their motions)

N20 X20 Y22           (N20 is executed after all motions in)
                      (N10 have ended)

N30 X5 Y10 Z[INDP_ASYN POS500 G01 FEED200 G90] (N30 ends when X and Y)
                                               (have ended their motions;)
                                               (the independent asynchronous)
                                               (Z axis continues its motion)

N40 X20 Y30           (N40 is interpolated; the asynchronous independent)
                      (Z axis continues its motion)

N50 #WAIT INDP[Z]     (Forced synchronisation of the Z axis: wait)
                      (until target point Z500 from N30 is reached)

N60 X30 Y40 Z60       (Interpolation in N60 with X,Y, Z in coordinated motion)
                      (starts after synchronisation takes place in N50)

N70 Z[INDP_SYN M50] (Output of M50 via independent Z axis)

N80 …

Example 2:

N10 X10 Y11 Z[INDP_ASYN POS500 G01 FEED200 G90] (N10 is interpolated; the)
                                                (independent asynchronous)
                                                (Z axis continues its motion)

N20 X20 Y22      (N20 is interpolated; the independent asynchronous Z)
                 (axis continues its motion))

N30 Z550         (Implicit synchronisation of Z motion of N10 before)
                 (motion Z550 is started)

N40 X20 Y30 Z60  (N40 is interpolated)

N50 …

Example 3:


N100 X1 Y2 Z3                             ;IPO=3, LR=3, offset=0

N200 G01 X10 F100 Z[INDP_SYN POS=4 G01 G90 \

FEED=120 DRY_RUN]     ;IPO=4, LR=3, offset=1

N300 Y20 F1000

N350 Z[INDP_SYN POS=7 G00 G90]            ;IPO=7, LR=6, offset=1

N360 Z[INDP_SYN POS=4 G01 G91 \

       FEED=100 DRY_RUN]                  ;IPO=11, LR=6, offset=5

;Remove DRY_RUN offset

N001 #TIME 2

N111 #CHANNEL INIT[CMDPOS]                ;IPO=6, LR=6, offset=0

N222 #TIME 2

N400 Y10 Z5