![]() |
APIs, concepts, guides, and more
|
Stream arrays of Positions, Velocities, and Time deltas for precise control over motion paths. The controller calculates acceleration for each segment, offering flexibility and control.
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. | ![]() |
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 | |
---|---|---|---|---|
AxisX |
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; | ![]() |
AxisY |
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; | ![]() |
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.