# Move with Residual Velocity

Many Times in a machine or pressing operation you want to do a rapid move followed by a slower feed move as seen in the attached image

It would be nice if there was a variation of move absolute that let you specify a residual velocity at the end of the move so that when you reach the target position (vertical dashed line), you can continue on to a final position at the slower “feed” velocity with an additional MoveAbsolute with the slower feed velocity and final position.

I know the math isn’t all that daunting but if you have an operation like a peck drilling routine where you are continually doing this rapid/feed to deeper and deeper points it would be much easier if it was built into a command. I came up with the following to calculate the position where deceleration must start to reach the desired (feed) velocity at the target point.

```StartPos:=1.0; FeedPos:=5.0; FinalDepth:=5.25; VelRapid:=5.0; VelFeed:=0.2; Acel:=10.0; DeltaV:=VelRapid-VelFeed; TimeDecel:= DeltaV/Acel; DistDecel:=(VelRapid*TimeDecel)-(0.5*Acel*TimeDecel*TimeDecel); DecelPoint:=FeedPos-DistDecel;```

Then I start one MoveAbsolute to the FinalDepth and when the position is greater or equal than the DecelPoint, I start another MoveAbsolute with the VelFeed to the FinalDepth position.

Like I said, this works but perhaps people would benefit from this being in a command.

Thanks

Good request! We have considered this ourselves as well, but we have not yet had many requests from cusomters. We will certainly up the priority on it.

Thanks,

In the meantime I made a function that suites my needs.

Big Caution to anyone looking at this. There is absolutely no parameter checking here and I’m pretty sure it won’t work if you are moving in a negative direction. There, you have been warned :mrgreen:

[code](*
Insert Function Description Here
*)

FUNCTION dPoint : REAL
VAR_INPUT
FinalPoint : REAL;
Decel : REAL;
FinalV : REAL;
StartV : REAL;

``````END_VAR

VAR
t: REAL;
d:REAL;
END_VAR

(* Insert Function body here *)
t:= (StartV-FinalV)/Decel;
d:=(StartV*t)-(0.5*Decel*t*t);

dPoint := FinalPoint-d;
``````

END_FUNCTION[/code]

I am impressed! I will have to try it out!

I did try this out with the attached user program and user function and it appears to work!

I modified the user function slightly to account for the loop time delay in the calculations. I did not add any parameter checking.
dPoint.rmcflib (1.07 KB)
MoveWithFinalVelocity.rmcprog (1.79 KB)