pub struct AxisConfig {Show 17 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 change_set_immediately_blocks_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: boolWhen 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: f64Jog speed in user units/s.
jog_accel: f64Jog acceleration in user units/s².
jog_decel: f64Jog deceleration in user units/s².
home_position: f64User-unit position assigned at the home reference point.
homing_speed: f64Homing search speed in user units/s.
homing_accel: f64Homing acceleration in user units/s².
homing_decel: f64Homing deceleration in user units/s².
soft_home_method: i8CiA 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: boolDrive 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, socommand_cancel_movemust 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.
change_set_immediately_blocks_ack: boolDrive trait: this drive will NOT assert set-point-acknowledge (status
word bit 12) for a set-point issued with Change-Set-Immediately (control
word bit 5) asserted — so the halt cancel handshake, which normally sets
bit 5, stalls at WaitCancelAck even with halt cleared.
When true, the halt/cancel sequence keeps bit 5 clear, so the
cancel set-point uses the same plain bit-4 handshake as a normal move
(which the drive does acknowledge). The Kollmorgen AKD needs this; the
Teknic ClearPath and Inovance SV660N acknowledge a change-immediately
set-point and rely on bit 5, so they leave it false.
Distinct from halt_blocks_setpoint_ack:
a drive can need one, both, or neither. Default false (preserve bit 5).
operation_timeout_secs: f64Timeout for general operations (enable, disable, halt, fault recovery) in seconds. Default: 7s.
homing_timeout_secs: f64Timeout for homing operations in seconds. Default: 30s.
enable_max_position_limit: boolEnable the maximum (positive) software position limit.
enable_min_position_limit: boolEnable the minimum (negative) software position limit.
max_position_limit: f64Maximum position limit in user units.
min_position_limit: f64Minimum position limit in user units.
Implementations§
Source§impl AxisConfig
impl AxisConfig
Sourcepub fn new(counts_per_rev: u32) -> Self
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.
Sourcepub fn with_user_scale(self, user_per_rev: f64) -> Self
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)
Sourcepub fn to_counts(&self, user_units: f64) -> f64
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
Sourcepub fn to_user(&self, counts: f64) -> f64
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
Sourcepub fn counts_per_user(&self) -> f64
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
impl Clone for AxisConfig
Source§fn clone(&self) -> AxisConfig
fn clone(&self) -> AxisConfig
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more