What is PVT Motion?

PVT Motion is another Streaming Motion. PVT Motion is a bit more complicated to use because it requires an array of Positions, Velocities, and Time deltas. The controller is only responsible for figuring out the acceleration for each motion segment. This makes it more flexible and gives users more control over the motion path.

Move PVT

Output Motion Scope

The PVT algorithm is very good for smooth and close path control. The points can be spaced very close or very far apart. For complex paths (or path portions) the points should be spaced close together. For simple paths (or path portions) the points can be spaced far apart. PVT can handle virtually any list of points. The most difficult part is determining the appropriate velocities at

each point.

Trapezoidal move example:

pos[0] = 050; v[0] = 100; t[0] = 1;

pos[1] = 400; v[1] = 100; t[1] = 3.5;

pos[2] = 450; v[2] = 000; t[2] = 1;

Note: Both the Position and Velocity arrays are direction sensitive meaning you must put a (-) sign on negative numbers.

MultiAxis PVT Motion

All motion streaming methods can be used for coordinated motion on multi-axis objects. It is important that you set up your arrays appropriately for a multi-axis object. See the examples below on how to structure your arrays for multi-axis motion.

EXAMPLE 1 - Two-Axis MultiAxisXY with MovePVT

The position and velocity data for both axes are combined into the arrays. The time array is shared for both axes. This is why you need twice as many position and velocity points than you need time points. See the example below:

p[0] = 050; v[0] = 100; t[0] = 1; p[1] = 025; v[1] = 050; p[2] = 400; v[2] = 100; t[1] = 3.5; p[3] = 200; v[3] = 050; p[4] = 450; v[4] = 000; t[2] = 1; p[5] = 225; v[5] = 000;

1st Segment

2nd Segment

3rd Segment

Resulting Motion Plot


p[0] = 050;

v[0] = 100;

t[0] = 1;

p[2] = 400;

v[2] = 100;

t[1] = 3.5;

p[4] = 450;

v[4] = 000;

t[2] = 1;


p[1] = 025;

v[1] = 050;

t[0] = 1;

p[3] = 200;

v[3] = 050;

t[1] = 3.5;

p[5] = 225;

v[5] = 000;

t[2] = 1;

Previously Asked PVT Motion Questions

1) What does the β€œretain” parameter do?

β€œretain” will keep the points in RAM in the library for possible backup on the path feature (loading the points backward when FeedRateSet(...) is negative)

2) How does setting the β€œfinal” parameter to β€œtrue” affect the motion?

β€œFinal” means the velocity will end at zero and you cannot append points. How this affects motion depends on the type: SPLINE, BSPLINE, etc.

3) If I set β€œfinal” to false and fail to add more points what happens? Does β€œemptyCount” affect this?

You will starve the Axis/MultiAxis and it will either abruptly stop (emptyCount=0) or gracefully E-Stop (emptyCount > 0) and either way you should get OUT_OF_FRAMES status bit and from StateGet() / SourceGet().

4) Is there a way I can start a new path without stopping the current move first?

Currently, there is no way. But we recommend you don’t load all your streaming points at once. Instead, load one after another one if you need more control over the move.

Last updated