Programming an axis polynomial

Release Note


This function is available as of CNC Build V2.11.2016.08

Characteristics of axis-specific polynomials

The motion rules for an axis can be programmed by specifying axis-specific polynomials.

This axis-specific polynomial motion is programmable for linear motions (G00, G01). The dynamic parameters of the currently active G function (G00 or G01) are used.

An upper limit of the polynomial parameter is specified for each axis polynomial up to which the polynomial parameter is interpolated. If the upper limit is not programmed, the value 1.0 is assigned.

The polynomial coefficients of an axis polynomial are defined in square brackets after the axis identifier in ascending order. The keyword POLY must always be specified first for identification purposes. Higher polynomial coefficients which are not required can be omitted. Coefficients which are not programmed are assigned the value 0. At least the first coefficient 'A0' must be set.

The maximum possible degree of the polynomial is 5.


The polynomial coefficients refer to the specification of absolute axis positions in a 5th degree polynomial:

p(s) = A0 + A1 * s + A2 * s² + A3 * s³ + A4 * s4 + A5 s5

The polynomial parameter is interpolated for the polynomial from zero up to the programmed upper limit simultaneously to the executed motion path.

This applies to the absolute position of the polynomial axis in [mm or °]:

At motion start (s = 0):
                                p(0) = A0

At motion end (s = L):

                            p(L) = A0 + A1 * L + A2 * L² + A3 * L³ + A4 * L4 + A5 L5

Axis-specific polynomial programming is only effective in the current NC block (non-modal). Therefore, if required, it must be reprogrammed in the next motion block for each axis.



When determining the polynomial coefficients, it is important to ensure that the axis position is continuous, i.e. the polynomial value at zero position must correspond to the axis position of the previous motion block.

The repeated programming of axis polynomials in sequenced NC blocks requires that the end position of a polynomial corresponds to the start position of the next polynomial.

Since the value at position 0 is only defined by the coefficient A0 for a polynomial, the following applies: A0 is equal to the axis position from the previous motion block.



Axis [ POLY L<Maximum value of polynomial parameter> A0 A1 A2 A3 A4 A5 ]


X [ POLY L=1.0 A0=0.1 A1=0.2 A2=0.3 A3=0.4 A4=0.5 A5=0.6 ]

The same NC block may contain a mixed programming of linear motions and one* axis-specific polynomial. Active offsets (G54, G92, #PSET...) may be included in the programmed polynomial positions.

No calculation or monitoring of the dynamic is executed for the programmed polynomial axis. Similarly, no command value monitoring of software limits takes place (only actual value specific monitoring of limits).

Syntax for programming axis-specific polynomials:

<axis_name> [ POLY [ L<max. poly param> ] A0<a0> [ A1<a1> A2<a2> A3<a3> A4<a4> A5<A5> ] ]


Name of the polynomial axis


Identifier for the polynomial programming of an axis. Must always be programmed as the first keyword.

L<max. poly param>

Upper limit of the polynomial parameter of the axis to be moved without unit (optional: if not programmed, L has value 1.0, programmed value must be > 0)


First polynomial coefficient, mandatory (start value of polynomial)

A1<a1> - A5<a5>

Second to sixth polynomial coefficient, x, x^2, x^3, x^4, x^5 (optional: default value of non-programmed coefficients is 0)

Programing Example


Programming an axis polynomial

;C axis, polynomial parameter L = 0.7 A0 = 0.1, A1 = 0.3, A2 = 0.5

Nxx C0.1

Nxx C[POLY L=0.7 A0=0.1 A1=0.3 A2=0.5]

;X axis, polynomial parameter L = 0.3, A0 = 0.2, A1= 0.5

Nxx X0.2

Nxx X[POLY L=0.3 A0=0.2 A1=0.5]

;Simple programming without polynomial parameter (default L1), only A0 coefficient

Nxx X0.2

Nxx X[POLY A0=0.2]

;Mixed programming of linear motion and axis polynomial

Nxx C0.1

Nxx G01 F1000 X100 Y150 C[POLY L=0.7 A0=0.1 A1=0.3 A2=0.5]

;Note: The equals signs between the keyword and the value are optional