How to Change Cam Motion Symmetry in TwinCAT 3 (Polynom5 Profile Explained)

Abstract
Typical motion curves (such as the Polynom5 curve) usually accelerate in the first half of the distance and decelerate in the second half. In some special application scenarios, full symmetry may not be required: they might need faster acceleration in the first half and slower deceleration in the second half, or vice versa. In TwinCAT 3 Motion Designer, when selecting the Polynom5 curve, there is a parameter called Symmetry that can adjust the symmetry of the curve to achieve this requirement. This article explains how to modify this parameter in TwinCAT.


Hardware and Software Versions

  • Controller hardware: TwinCAT-controlled controllers (PC or EPC), including:
    ‒ Embedded controller: CX5020-0125 (IMG version: CX1800-0411-0007 v3.92)
    ‒ Industrial PCs: C6xxx, CP2xxx, CP6xxx, etc.

  • Software: Both the engineering notebook and the controller run TwinCAT 3.1 Build 4024.7.


Operation Steps

  1. In TE1510, set the Function: only “Rest → Rest” interpolation types can be selected — for example, MOTIONFUNCTION_POLYNOM5.

  2. The Symmetry parameter’s valid range is from 0.00001 to 0.99999.

  3. If you change Symmetry to 0.2, the first half of the motion accelerates faster, and the second half decelerates more slowly.


  4. If Symmetry = 0.5, the acceleration in the first half and deceleration in the second half take the same amount of time.


  5. If Symmetry = 0.8, the first half accelerates more slowly, and the second half decelerates more quickly.



Modifying the Parameter from the PLC Program
When populating a cam table (i.e., cam-point generation), you can set parameters in the PLC, for example:

astZAxisCamTableValueDrive[1].FunctionType := MOTIONFUNCTYPE_POLYNOM5; astZAxisCamTableValueDrive[1].SlaveJerk := 0.1;


Relationship between Symmetry and SlaveJerk
Through testing, the following empirical relationship was found:

Symmetry = 0.5 + SlaveJerk

  • The valid range for SlaveJerk is between –0.5 and +0.5.

  • When SlaveJerk < 0, then Symmetry < 0.5, which gives faster acceleration in the first half / slower deceleration in the second half.

  • When SlaveJerk = 0, Symmetry = 0.5, resulting in a symmetric profile.

  • When SlaveJerk > 0, Symmetry > 0.5, resulting in slower acceleration in the first half / faster deceleration in the second half.