Skip to main content

AxisConfig

Struct AxisConfig 

Source
pub struct AxisConfig {
Show 16 fields pub invert_direction: bool, pub jog_speed: f64, pub jog_accel: f64, pub jog_decel: f64, pub home_position: f64, pub homing_speed: f64, pub homing_accel: f64, pub homing_decel: f64, pub soft_home_method: i8, pub halt_blocks_setpoint_ack: bool, pub operation_timeout_secs: f64, pub homing_timeout_secs: f64, pub enable_max_position_limit: bool, pub enable_min_position_limit: bool, pub max_position_limit: f64, pub min_position_limit: f64, /* private fields */
}
Expand description

Configuration for a single motion axis.

Stores encoder resolution, user-unit scaling, jog defaults, and position limits. Used by Axis internally and also available for direct use (e.g. logging, HMI display).

§Examples

use autocore_std::motion::AxisConfig;

// ClearPath with 12,800 counts/rev, user units = degrees
let cfg = AxisConfig::new(12_800).with_user_scale(360.0);
assert!((cfg.to_counts(45.0) - 1600.0).abs() < 0.01);
assert!((cfg.to_user(1600.0) - 45.0).abs() < 0.01);

// mm on a 5 mm/rev ballscrew
let mm = AxisConfig::new(12_800).with_user_scale(5.0);
assert!((mm.to_counts(5.0) - 12800.0).abs() < 0.01);

Fields§

§invert_direction: bool

When true, invert the sign of all position/velocity conversions. Use when the motor counts in the opposite direction to your user-unit convention.

§jog_speed: f64

Jog speed in user units/s.

§jog_accel: f64

Jog acceleration in user units/s².

§jog_decel: f64

Jog deceleration in user units/s².

§home_position: f64

User-unit position assigned at the home reference point.

§homing_speed: f64

Homing search speed in user units/s.

§homing_accel: f64

Homing acceleration in user units/s².

§homing_decel: f64

Homing deceleration in user units/s².

§soft_home_method: i8

CiA 402 homing method used when the axis needs to declare “current position = home offset” — i.e. the terminal step of software homing (after a sensor search) and the integrated [HomingMethod::CurrentPosition] variant.

Methods 37 and 35 are functionally equivalent; 37 is the newer CiA 402 addition. Default: 37 (works on Teknic ClearPath and other modern drives). Set to 35 for drives whose 6098h range stops at 35 (Inovance SV660N).

§halt_blocks_setpoint_ack: bool

Drive trait: does this drive refuse to assert set-point-acknowledge (status word bit 12) while Halt (control word bit 8) is asserted?

In CiA-402 Profile Position mode the cancel handshake that closes out a halt issues a new set-point (current position, zero velocity) and waits for the drive to acknowledge it. Drives disagree on whether that acknowledge is produced while Halt is still active — and this is the one behavioral split between the drives we support:

  • true — the drive will NOT acknowledge a set-point while halted, so command_cancel_move must clear the halt bit while issuing the cancel set-point. The Kollmorgen AKD and Inovance SV660N both behave this way. Two independent, reference-grade CiA-402 implementations agreeing makes this the standard behavior.
  • false (default) — halt is held through the whole cancel handshake. The Teknic ClearPath needs this: it acknowledges the set-point while halted, and clearing halt early makes it resume the prior move. Teknic is the oddball here.

The default is false deliberately as the safe fallback, not because it is the common case: if an unknown drive actually needs halt cleared, the halt merely times out with the motor already stopped (loud and safe), whereas defaulting to true on a Teknic-like drive could provoke unexpected motion when halt drops mid-handshake.

Typically not hand-set: the drive’s extended-info default is seeded into the axis’s options in project.json (overridable there) and baked into the generated drive handle by codegen, the same path as invert_direction.

§operation_timeout_secs: f64

Timeout for general operations (enable, disable, halt, fault recovery) in seconds. Default: 7s.

§homing_timeout_secs: f64

Timeout for homing operations in seconds. Default: 30s.

§enable_max_position_limit: bool

Enable the maximum (positive) software position limit.

§enable_min_position_limit: bool

Enable the minimum (negative) software position limit.

§max_position_limit: f64

Maximum position limit in user units.

§min_position_limit: f64

Minimum position limit in user units.

Implementations§

Source§

impl AxisConfig

Source

pub fn new(counts_per_rev: u32) -> Self

Create a new configuration from encoder resolution.

Default user units are revolutions (1.0 user unit = 1 revolution). Call with_user_scale to change.

Source

pub fn with_user_scale(self, user_per_rev: f64) -> Self

Set user-units-per-revolution.

  • Degrees: .with_user_scale(360.0)
  • mm on 5 mm/rev ballscrew: .with_user_scale(5.0)
Source

pub fn to_counts(&self, user_units: f64) -> f64

Convert user units to encoder counts (f64).

to_counts(45.0) on a 12800 cpr / 360° config → 1600.0

Source

pub fn to_user(&self, counts: f64) -> f64

Convert encoder counts to user units (f64).

to_user(1600.0) on a 12800 cpr / 360° config → 45.0

Source

pub fn counts_per_user(&self) -> f64

Encoder counts per user unit (scale factor).

For 12800 cpr / 360°: counts_per_user() ≈ 35.556

Trait Implementations§

Source§

impl Clone for AxisConfig

Source§

fn clone(&self) -> AxisConfig

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for AxisConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V