Currently, we’re using multi.movePVT() and assigning final velocities of 0 for every point. During multi-axis coordinated moves, the controller passes through each point but creates a long acceleration profile. For a 2-second move, the controller accelerates for half the distance, reaches peak velocity, then decelerates for the remaining half. This is in line with the PVT motion documentation.
Instead, we’d like to specify maximum acceleration values and have the controller reach peak velocity based on the specified acceleration. The controller should maintain this velocity throughout the move and decelerate based on the specified deceleration value as it approaches the target coordinate. We require final velocity values for each coordinate to be 0 and the controller needs to perform multi-axis interpolation as it does with movePVT.
Would using multi.movePVAJT() achieve this behavior? Or should we consider using multi.moveScurve() ? Please advise.
Thank you for your reply. We will definitely test it out.
We’ve seen in the documentation that when we use the axis class, we have a MoveSCurve function which allows us to specify final velocity. Similarly is there an option where we could do the same with Multiaxis class?
The reason we’re asking for this is as follows:
Suppose we need to create a circular motion where multiple coordinates are specified which represent a circle using the X and Y axis. If we use Multi.moveScurve the controller will take the final velocity to zero at the end of every point to point move. This results in a “start stop” kind of motion while traversing through every coordinate of the circle resulting in a jerky move. If using some logic we’re able to decide the final velocities for every axis we will be able to reduce the jerky nature of the move.
MultiAxis::MoveSCurve does not currently have an overload which supports the finalVelocity parameter, though it can be added.
Though for a circular motion (where you know the desired path in advance) you would be best served using MovePT or MovePVT to get continuous velocities through each of the path positions (as specified in the position arrays).
We are trying to use PVAJT and have calculated the P, V, A, J and T values correctly. But when we execute multi.movePVAJT(), our servo drive generates a command frequency error with index 035-1. In the documentation it says that “The command from the controller is excessive.”
The document also asks to follow the following steps :
Check if the command from the controller exceeds the maximum speed.
If the command exceeds the maximum speed, review the operation pattern.
To change the judgment value used to the permissible speed, change the
setting of [Pr. PA28.4 Speed range limit selection].
Can you send the PVAJT data as a CSV file? If so, we can run it on a Phantom Axis and record the resulting trajectory values every sample, to see how fast it moves. Your error implies that there is change in command position from sample to sample that exceeds your drive’s capabilities.
Couldn’t find an option to attach a CSV file therefore I am attaching this photo. The data is not much at all. You will be able to copy this at your end.
The AL 035 error is the drive protecting itself. This is likely just an unreasonable provide relative to the drives capability. What do the units of the position velocities and times represent? Rotations? What is the Speed range limit set to?
If you moderate the motion profile, are you able to do the motion?
As an experiment, I ran you PVAJT data and got bad behavior. Using PVAJT requires more than a single point. Lets connect by phone to discuss your needs.