Is there a generic, programmatic method for getting the firmware address of the raw encoder value for an axis? I’m looking for the position reported by the drive before the origin offset is applied. (I want to verify that the motor is or isn’t actually moving; Changing the origin causes a jump in actual/commanded position, but not in the raw encoder value).
Most drives have a PDO for this, but the names are not (even close to being) guaranteed to be the same. I frequently see names like “Position Actual Value” (with varying case).
Rather than sift through the list of PDO objects, is there a generic way to get the firmware address of an axis’s raw encoder value?
(This doesn’t work for all drives, at least not with what I have in NodeInfo.xml.)
Others?
I assume that RMP inherently knows about this value, since it’s probably used internally to do all actual position calculations.
Is there some Good Way™ to get the host/firmware address of the data I want?
If Axis::NetworkIndexGet(NetworkIndexTypePOSITION_ACTUAL_INDEX ) returns a valid value, you can use that index with MotionController::NetworkIndexAddressGet(). This would be the raw EtherCAT actual position data (a signed, 32-bit integer). All DS402 drives should support this.
RSIAxisAddressTypeENCODER_PRIMARY sounds more like what you are looking for, it’s the RMP’s 64-bit double encoder position that isn’t scaled, unless you are using Axis::EncoderRatioSet(…).
What do you have in NodeInfo.xml that’s preventing these from working?