Synchronized Position-Force

The RMC200, RMC150E, and RMC75 offer electronic platen leveling. This means the ability to control the total force of multiple independent rams while maintaining equal positions of all the rams, regardless of the load distribution. Many presses provide this synchronization via mechanically linking the rams together with very heavy guides and platens such that the rams cannot physically become skewed. Electronic synchronization of the rams reduces the need for such heavy construction.

Attached is a document explaining the control methodology, along with instructions for how to set up the synchronized position-force. The attached RMCTools project is completer and can be used to get you started. Synchronized position-force is a bit complicated, but works very well.

Important: In order to work successfully, the position control of each axis must be extremely good. This means the valves should be mounted on the cylinders, have linear, zero-lapped spools, and have high frequency response and minimal hysteresis. The position feedback must be mounted inside each cylinder. Delta has found that not following these guidelines makes the application quite difficult, if not impossible.

Delta has a video of a 2-cylinder press performing synchronized position-force control: Synchronized Position-Force Control on Multi-ram Presses - YouTube

The attached SyncPosForce Cascaded Loop.rmcproj example is a 2-axis example for the RMC150E. The attached RMC200 Synchronized Position Force 4 axis.rmcproj example is a 4-axis example for the RMC200.

Hi Jacob,

May I have a question? The digital first order low pass filter is expressed as :

Yn-1:Old value
Xn: New value

In this example, it looks like you use (_Axis[0].ActPos + _Axis[1].ActPos)/2 as old value and _Axis[2].ActPos as new value? Correct me if I am wrong.




Good question! The code is certainly quite confusing there. I think that it is opposite of what you wrote, that (_Axis[0].ActPos + _Axis[1].ActPos)/2 is the new value and _Axis[2].ActPos is the old value.
When assigning a value to Axis 2 Custom Counts, that value will appear as the Axis 2 Actual Position in the next loop time. Therefore, Axis 2 Actual Position is the old value of (_Axis[0].ActPos + _Axis[1].ActPos)/2.


Thnaks, but I am still confused.

If (_Axis[0].ActPos + _Axis[1].ActPos)/2 is the new value and _Axis[2].ActPos is the old value then the code in the function should be


Instead of



I have been contemplating how to control an application I will be starting to work on shortly using 4 axis that need to control force on a single object while staying synced together. This post caught my eye as I think it will be a great fit for the application. I may need to bend your ear a little bit Jacob as I work my way through it, but I will let you know how it turns out! Once again Delta is raising the bar with the RMC series controllers.


The difference in your form vs the one used in the user function just come down to how alpha is defined. The user function uses this form:
The coefficient α represents the degree of weighting decrease, a constant smoothing factor between 0 and 1. A higher α discounts older observations faster



Thanks, I got it.
I like this forum, in here I can learn everything about hydraulic, control and more…

Currently I work together with CNC controller manufacture,we use Modbus/TCP as a protocol, it works well.
The host now can write large curve data to RMC, we will connect the cylinder and do test next week.