I have some questions about specifics of the end result you are trying to achieve. Normally when people talk about dither they are referring to a sine or square wave superimposed on the Control Output to a servo-valve. In this case it sounds like you want to modify the target for an axis. Is this correct?
What characteristics are you trying to achieve with the superimposed sine wave? Constant or variable amplitude? Constant or variable frequency?
Do you need to superimpose the sine wave on the target all the time, only when the axis is following the curve, only during part of the curve or…?
Is the curve generated once and then used over and over? Do you dynamically calculate the curve each time you use it?
Does the sine wave need to be the same every time you run the curve or is it dynamically updated each time you run the curve?
Is the sine wave frequency dependent on the master virtual axis or is it based on time?
Any details about what you ultimately are trying to accomplish will probably be helpful.
The amount of flexibility you need in the curve and sine wave generation will dictate the complexity of the solution.
Here are three options for adding the sine wave to the curve:
Generate another curve in Excel that includes the sine motion added to your original curve. This is the most restrictive, but possibly the easiest.
Generate a modified curve within the RMC. There are two options for this:
a) Generate both the original curve and the sine wave all within the RMC.
b) Start with the curve from Excel and then add the sine wave to create a new curve.
This would probably be my first choice. The choice of a) or b) depends on how you currently have Excel set up to generate your original curve.
Generate the target for the axis on the fly using Advanced Gear Moves. This is the most flexible, but the most difficult.
Example: Outline of method 2b.
Load the original curve into the RMC.
Based on your sine wave frequency, select a suitable interval for the points on the new curve. (Lets say the space between points should be 1/10 of the sine wave period.)
Using the Curve Interpolation function CRV_INTERP_Y find the value of the Position of the original curve at the selected interval.
Add to this the position sine wave using the SIN function.
Create a new curve using these new points.
Do any of these mechanisms look like they will work for you?
The origin of the curves comes from CAD cross sections of a 3D model and are around 1k to 3k points, adding a hi freq dither to it would XXX the size for sure. My excel skills are lacking the chops too.
I’m curious, Is the curve offset parameter dynamic?
Example: use the sine generator virtual axis target position register in the curve offset parameter.
While the curve runs, the curve offset keeps changing to the sine generator?
It may actually be possible to do that by adjusting curve offset. However, resending the command will actually restart the curve, not continue it. You can still make it work as you want by setting the options to have an absolute master. That way, thee curve will be restarted at your current master position. You will need to use the transition command as well.
As David Shroyer mentioned, another way is to generate the target yourself with the Advanced Time Move or Advanced Gear Move commands. This is quite complicated, but we have some examples. Peter here may try it just for grins.
Another way is to run your curve on a virtual axis, and run the sine wave on another cirtual axis. Then, have a user program that continuously adds the Target Positions of the two virtual axes together and puts the result in a variable. Your real axis will then gear to that variable. For the gearing, you can use a Gear Absolute, or you can use what we call Poor-man’s gearing, where you have a user program that send a Move Absolute command every few milliseconds (requires the Target Jerk axis parameter to be set to zero).
Or, you can use just one virtual axis, and have user program contiuously calculate a sine wave that it adds to it.
So, there are several ways here to do it. The virtual axes method would require the least amount of programming.