What is the source for RMP Position Error?

Is Axis::PositionErrorGet() returning the difference between RMP’s commanded and actual positions, or the position error in the motor’s PID loop?

For example Yaskawa motors have their own position deviation settings that can result in alarms.

(Sigma-7S EtherCAT Manual_SIEP_S800001_55G_6_0.pdf; Section 8.3.3)

Is RMP reporting something about this internal value, or the difference between its own actual and commanded positions? And, is RMP’s limit error (RSISourceLIMIT_ERROR or Axis::ErrorLimitActionSet()) based on this value?

We’re trying to come up with some sensible values for limit error and need to decide if it’s based on internal properties of the motor or on RMP-level things, like PUU actual/cmd differences or motion buffer sizes.


Position Error is the difference between Commanded Position and Actual Position in the Motion Controller. Some EtherCAT Drives will allow us to exchange the its own position error as a PDO. These two values are not directly linked to each other but correlated because they represent the same thing.

And is this affected at all by the size of the motion buffer? In other words, which “commanded position” is being used as the reference, the one most recently sent to RMP or the one RMP most recently sent to the drive? I would expect the latter, but I couldn’t find any documentation to this effect. Perhaps it’s so obvious that only a theoretician like me would even ask the question.

The RMP processes everything once per cycle. If a motion command comes between cycles it will not load any frames generated until the next cycle so commanded position (and therefore Position Error) will not potentially change until then. After the processing is completed, the new commanded position will be sent out on the EtherCAT Network.

So for a cycle the RMP commanded position will always be the one sent out to the drive. The only question is if the motion request was arrived before process and was also immediate. Streaming motion is normally be appended and will happen at a later time based on buffer.