APIs, concepts, guides, and more
Feed Rate

Adjust the speed of a loaded motion profile without affecting its trajectory, allowing for stops, pauses, and reversals along the path, useful for operations like retracing and altering operating speeds dynamically.

๐Ÿ”น What is Feed Rate?

Feed Rate (or Retrace) is a functionality that allows you to alter the speed of a loaded motion profile without affecting the motion profile (trajectory) itself.

Using Feed Rate, you can bring an Axis or MultiAxis to a stop (or pause) without going into an ERROR state. This allows the motion profile to be resumed to complete the rest of your motion profile.

Feed Rate also allows you to move in reverse along the path of the current loaded profile (โ€œretraceโ€).

EXAMPLE 1 - Retrace

Machine is laser etching and the user decides that previous laser etched areas need to redone. In this case, the user can simply change the feed rate, retrace, and repeat the motion instead of loading a new motion profile into the motion controller.

EXAMPLE 2 - Alter Operating Speed

Using vision or proximity sensor(s), machine operating speed automatically reduces when an operator is detected in various zones around the machine.

Orange zone: Machine operating speed reduces by 50%

Red zone: Machine operating speed reduces by 90%

Image

๐Ÿ”น Why use Feed Rate?

Feed rate gives you the ability to go back in a commanded motion without affecting any of the previously loaded motionโ€™s frames that reside in the controller.

EXAMPLE 3 - .Net Application

// Start Position Move
axis.MoveSCurve(15); // Call MoveScurve to move to position 15.
while (axis.ActualPositionGet() < 10) { } // Once position "10" is reached:
axis.Stop(); // Stop the axis/motor. (This will use the value from StopTimeSet())
axis.MotionDoneWait(); // Wait for axis to stop completely.
axis.FeedRateSet(-1); // Change FeedRate to reverse motion.
axis.Resume(); // Start Reverse Motion.
while (axis.ActualPositionGet() > 5) { } // Once position "5" is reached:
axis.Stop(); // Stop the axis/motor. (This will use the value from StopTimeSet())
axis.MotionDoneWait(); // Wait for axis to stop completely.
axis.FeedRateSet(1); // Change FeedRate to default value.
axis.Resume(); // Resume the MoveScurve Motion that was commanded initially..
axis.MotionDoneWait(); // Wait for MoveScurve to complete.

Image

๐Ÿ”น How does Feed Rate work?

Feed Rate accepts 64-bit double precision floating point values in between 2 and -2.

Note
Velocity (shown below) is the commanded velocity defined by user when loading a motion profile

FeedRate(2) โ†’ Velocity = 2 x Velocity

:

FeedRate(1) โ†’ Velocity = Velocity

:

FeedRate(0) โ†’ Velocity = 0 x Velocity

:

FeedRate(-1) โ†’ Velocity = -1 x Velocity

:

FeedRate(-2) โ†’ Velocity = -2 x Velocity

Note
For a position move Feed Rate will only function if the axis is within the origin position and the target position. If the origin position or target position is reached then the controller will command MOTION DONE.\ For a velocity move Feed Rate does not take into consideration position. Therefore, velocity can be adjusted at all times no matter what the position is.

๐Ÿ”น FAQโ€™s

  1. Do feedrate/retrace methods work with multi-axis streaming motion?
    Yes, feedrate override and retrace methods work with multi-axis streaming motion.

๐Ÿ“œ Sample Code

  • C#

    axis.AmpEnableSet(true);
    // start motion
    axis.MoveSCurve(POSITION);
    Console.WriteLine($"\tPosition commanded: {POSITION}");
    // set feedrate to 150%
    axis.FeedRateSet(1.5);
    // wait here until we reach position 10
    while (axis.CommandPositionGet() < 5)
    Thread.Sleep(10);
    // stop motion
    axis.Stop();
    axis.MotionDoneWait();
    Console.WriteLine($"\tPosition after FeedRate (1.5): {axis.CommandPositionGet()}");
    // set feedrate to reverse motion (-100%)
    axis.FeedRateSet(-1);
    // resume motion for a bit
    axis.Resume();
    Thread.Sleep(500);
    Console.WriteLine($"\tPosition after FeedRate (-1): {axis.CommandPositionGet()}");
    // restore feedrate (100%)
    axis.FeedRateSet(1);
    // wait for motion done
    axis.MotionDoneWait();
    Console.WriteLine($"\tPosition after FeedRate (1): {axis.CommandPositionGet()} (expected: {POSITION})");