Skip to main content
Version: 1.0.14

ecdev::IMotionProfile

Facade-facing contract for a motion (drive) device. More...

#include <motion_profile.hpp>

Inherited by ecdev::CiA402DriveProfile

Public Functions

Name
virtual~IMotionProfile() =default
virtual std::int32_ttargetPosition() const =0
virtual std::uint16_tstatusword() const =0
virtual voidsetTargetVelocity(std::int32_t counts_per_sec) =0
Command CSV target velocity in counts/s; only honoured by a profile running in CSV.
virtual voidsetTargetTorque(std::int32_t per_mille_rated) =0
Command CST target torque in per-mille of rated torque; only honoured by a profile in CST.
virtual voidsetTargetPosition(std::int32_t counts) =0
Command CSP target position in encoder counts; implicitly leaves "hold actual" mode.
virtual voidsetOperatingMode(DriveOpMode mode)
Select the cyclic operating mode (CSP / CSV / CST).
virtual voidsetAutoFaultRecover(bool enable)
Set the CiA402 auto fault-reset/recover behaviour.
virtual voidrequestFaultReset() =0
One-shot fault-reset edge (acted on only while the drive reports Fault).
virtual voidrequestEnable() =0
Request the drive walk to Operation Enabled (cancels a prior disable request).
virtual voidrequestDisable() =0
Request the drive walk back to a de-energised resting state.
virtual std::int32_tmodeDisplay() const
Drive's modes-of-operation display (CiA402 0x6061; 8=CSP, 9=CSV, 10=CST).
virtual boolisOperationEnabled() const =0
virtual boolisFault() const =0
virtual std::int32_tactualVelocity() const =0
virtual std::int32_tactualTorque() const
Drive's reported actual torque (CiA402 0x6077, per-mille of rated).
virtual std::int32_tactualPosition() const =0

Detailed Description

class ecdev::IMotionProfile;

Facade-facing contract for a motion (drive) device.

This is the ONLY surface the Axis facade depends on – it knows nothing about CiA402 controlwords, the backend, or the ENI. Any drive profile (CiA402 today, others later) implements it so the same Axis works across drive families.

All methods are safe to call from an application thread concurrently with the RT cycle: the implementation backs them with lock-free state.

Pre-start configuration (call between prepare() and start()): setOperatingMode() / setAutoFaultRecover() are not thread-safe with the RT cycle; call them only after prepare() and before start(). Default no-ops make non-CiA402 profiles unaffected.

Public Functions Documentation

function ~IMotionProfile

virtual ~IMotionProfile() =default

function targetPosition

virtual std::int32_t targetPosition() const =0

Reimplemented by: ecdev::CiA402DriveProfile::targetPosition

function statusword

virtual std::uint16_t statusword() const =0

Reimplemented by: ecdev::CiA402DriveProfile::statusword

function setTargetVelocity

virtual void setTargetVelocity(
std::int32_t counts_per_sec
) =0

Command CSV target velocity in counts/s; only honoured by a profile running in CSV.

Reimplemented by: ecdev::CiA402DriveProfile::setTargetVelocity

function setTargetTorque

virtual void setTargetTorque(
std::int32_t per_mille_rated
) =0

Command CST target torque in per-mille of rated torque; only honoured by a profile in CST.

Reimplemented by: ecdev::CiA402DriveProfile::setTargetTorque

function setTargetPosition

virtual void setTargetPosition(
std::int32_t counts
) =0

Command CSP target position in encoder counts; implicitly leaves "hold actual" mode.

Reimplemented by: ecdev::CiA402DriveProfile::setTargetPosition

function setOperatingMode

inline virtual void setOperatingMode(
DriveOpMode mode
)

Select the cyclic operating mode (CSP / CSV / CST).

Reimplemented by: ecdev::CiA402DriveProfile::setOperatingMode

Call before start() to choose the initial mode, or while running to switch live. A live switch takes effect only when the ENI maps modes-of-operation (0x6060) into the RxPDO (eni_gen does this for CiA402 drives); otherwise the drive runs the mode set via SDO at PRE_OP and a later call has no cyclic effect. RT-safe. Default no-op so non-CiA402 profiles are unaffected.

function setAutoFaultRecover

inline virtual void setAutoFaultRecover(
bool enable
)

Set the CiA402 auto fault-reset/recover behaviour.

Reimplemented by: ecdev::CiA402DriveProfile::setAutoFaultRecover

Call between prepare() and start(); not RT-safe.

function requestFaultReset

virtual void requestFaultReset() =0

One-shot fault-reset edge (acted on only while the drive reports Fault).

Reimplemented by: ecdev::CiA402DriveProfile::requestFaultReset

function requestEnable

virtual void requestEnable() =0

Request the drive walk to Operation Enabled (cancels a prior disable request).

Reimplemented by: ecdev::CiA402DriveProfile::requestEnable

function requestDisable

virtual void requestDisable() =0

Request the drive walk back to a de-energised resting state.

Reimplemented by: ecdev::CiA402DriveProfile::requestDisable

function modeDisplay

inline virtual std::int32_t modeDisplay() const

Drive's modes-of-operation display (CiA402 0x6061; 8=CSP, 9=CSV, 10=CST).

Reimplemented by: ecdev::CiA402DriveProfile::modeDisplay

0 if unmapped.

function isOperationEnabled

virtual bool isOperationEnabled() const =0

Reimplemented by: ecdev::CiA402DriveProfile::isOperationEnabled

function isFault

virtual bool isFault() const =0

Reimplemented by: ecdev::CiA402DriveProfile::isFault

function actualVelocity

virtual std::int32_t actualVelocity() const =0

Reimplemented by: ecdev::CiA402DriveProfile::actualVelocity

function actualTorque

inline virtual std::int32_t actualTorque() const

Drive's reported actual torque (CiA402 0x6077, per-mille of rated).

Reimplemented by: ecdev::CiA402DriveProfile::actualTorque

0 if the profile does not map it. Diagnostic only.

function actualPosition

virtual std::int32_t actualPosition() const =0

Reimplemented by: ecdev::CiA402DriveProfile::actualPosition


Updated on 2026-07-04 at 23:28:44 +0000