Multiple MultiAxis Objects and MotionIdExecutingGet and MotionElementIdExecutingGet

How does RMP manage motion IDs between multiple MultiAxis objects?

Does each MultiAxis object have its own numerical space for (16-bit) motion IDs independent of any other MultiAxis object? If I’m streaming points (via MovePT(...)) to both MultiAxis objects simultaneously, will they each get IDs from distinct number spaces (sometimes, coincidentally, equal in value), or are all motion IDs drawn from the same number space (where the executing ID for one could never be numerically equal to the other)?

Hi Todd,

Each Motion Supervisor (Axis or MultiAxis) has its own Motion ID counter. Each move call to an Axis or MultiAxis object will independently increase when a move call is applied to it.

In RapidSetup, you may see these jump around based on the source. Move twice on an Axis and the next Motion ID will be 2. Move 10 times on a multiAxis and its next move will be 10. Follow that up with a move on the Axis, the Motion ID will switch from 9 (Last MultiAxis) to 2 (3rd Axis move).

They can be equal to one another.

1 Like

First, which “move calls” count, in terms of altering the Motion ID?

  • MoveP*T(...)
  • MoveSCurve(...)
  • MoveTrapezoidal(...)

Also, What will the motion ID be at the end of this sequence?

  1. MultiAxis.MovePT(...) → 9
    1. Is the motion ID the same for the MultiAxis and all its “contained” Axis objects?
  2. Axis.MovePT(...) → 2
    1. Is this also the MotionID for the MultiAxis, or just the Axis?
  3. MultiAxis.MovePT(...) → ?

Internally there is a MotionSupervisor object which handles all motion. Each one can be assigned 0 or more Axes. An axis gets one with its axis attached. A MultiAxis gets one with nothing attached until you add axes.

The MotionId 16 bit int counter exists at the MotionSupervisor level and increase by 1 when you command a move.

There are MotionId functions for the MultiAxis object, but it wouldn’t surprise me if we don’t have repeated implementations in both types in some rare use cases.

  • Axis::MoveTrapezodial
  • Axis::MoveSCurve
  • Axis::MoveVelocitySCurve
  • Axis::MoveCam
  • MultiAxis::MoveSCurve
  • MultiAxis::MoveVelocitySCurve
  • MultiAxis::MoveVector
  • MultiAxis::PathMotionStart()
  • Path Line/Arc increase.
  • Any Move P*T

  1. Motion Id is 9
    1. They aren’t the same. All Axes are unknown (default 0), the MultiAxis is 9. However, I would expect to see 9 from Axis::MotionIdExecutingGet() because we are smart enough to the motion applied to the axis had the ID 9. The next Move on Axis will start with unknown(0).

  2. Motion Id is 2.
    1. The axis will show a 2. The MultiAxis should still show 9 because the individual axis move is not being applied the group.

  3. Next Motion should be 10 (9+1)

MultiAxis should show

  1. Motion ID 9
  2. Motion ID 9
  3. Motion ID 10

Axis should show

  1. Motion Id 9
  2. Motion Id 2
  3. Motion Id 10
1 Like