Community

Capturing the Motion State in the Firmware?

Is there a way that I can capture the motion state of an axis? (E.g. in the scope)

I’m curious about when/why an axis transitions between states during some behavior, and it might help if I could know when and to what state the transitions are happening.

I looked for some interrupt events for this, but didn’t see anything I recognized as such.

Is there any way for me to track motion state (not including calling RapidCodeMotion::StateGet())?

I see these (axis) addresses:

  • RSIAxisAddressTypeSTATUS
  • RSIAxisAddressTypeMOTION_STATUS
  • RSIAxisAddressTypeMOTOR_DATA_STATUS

but there’s no explanation about what they might contain.

Hi Todd,

If you look within MotionScope, you will see a collection of Status options. These are specific bits of RSIAxisAddressTypeSTATUS. You add them and hit edit to see the specific masking that are used.

I believe you know how to add custom traces in MotionScope. Looking at those existing status options will help you create your own specific status bits. You can skip masking to get all of status together to decode later. You can use Axis::AddressGet() for each type.

RSIFirmwareStatus is the data that will be found in each of these.

Will this provide me with a means to deduce the actual motion state (Axis::StateGet()) of the axis?

Not exactly. You can infer states based on status bits, but they aren’t the same. RSIState is a lot simpler with less detail.