Skip to main content

EpidFastPvt

Struct EpidFastPvt 

Source
pub struct EpidFastPvt {
Show 24 fields pub kp: f64, pub ki: f64, pub kd: f64, pub drvh: f64, pub drvl: f64, pub val: f64, pub fbon: bool, pub cval: f64, pub oval: f64, pub err: f64, pub p: f64, pub i: f64, pub d: f64, pub dt: f64, pub ct: Instant, pub fbop: bool, pub callback_interval: f64, pub time_per_point_requested: f64, pub time_per_point_actual: f64, pub num_average: u32, pub accumulated: f64, pub count: u32, pub output_writer: Option<Arc<Mutex<dyn FnMut(f64) + Send>>>, pub output_reader: Option<Arc<Mutex<dyn FnMut() -> Option<f64> + Send>>>,
}
Expand description

Private state for the fast PID loop, shared between the record process thread and the interrupt callback task.

Fields§

§kp: f64§ki: f64§kd: f64§drvh: f64§drvl: f64§val: f64§fbon: bool§cval: f64§oval: f64§err: f64§p: f64§i: f64§d: f64§dt: f64§ct: Instant§fbop: bool§callback_interval: f64

Interval (seconds) between successive driver data callbacks. C callbackInterval, set by intervalCallback from the driver and also used directly as dt in do_PID (devEpidFast.c:430).

§time_per_point_requested: f64

Requested time-per-point (C timePerPointRequested), copied from the record’s DT field by update_params (devEpidFast.c:320).

§time_per_point_actual: f64

Actual time-per-point achieved (C timePerPointActual) — num_average * callback_interval.

§num_average: u32§accumulated: f64§count: u32§output_writer: Option<Arc<Mutex<dyn FnMut(f64) + Send>>>§output_reader: Option<Arc<Mutex<dyn FnMut() -> Option<f64> + Send>>>

Output port reader — C devEpidFast.c:446-448 reads the actual current value of the output (DAC) on the feedback OFF->ON edge via pPvt->pfloat64Output->read(...) so the integral term is seeded bumplessly from the hardware’s real output, not the last value the loop happened to command. When None (no output-port reader wired), the bumpless edge falls back to the last commanded oval — see do_pid.

Implementations§

Source§

impl EpidFastPvt

Source

pub fn compute_num_average(&mut self)

Recompute the number of points to average and the resulting actual time-per-point. C devEpidFast.c::computeNumAverage (devEpidFast.c:356-362): numAverage = 0.5 + timePerPointRequested/callbackInterval, clamped to >= 1, then timePerPointActual = numAverage * callbackInterval.

Source

pub fn interval_callback(&mut self, seconds: f64)

Callback from the driver when the data-callback interval changes. C devEpidFast.c::intervalCallback (devEpidFast.c:367-375): updates callbackInterval then recomputes numAverage.

Source

pub fn do_pid(&mut self, new_cval: f64)

Execute one PID cycle on new data. Called from the interrupt callback task. After computing the output, writes to the output port if configured.

Mirrors C devEpidFast.c::dataCallback (averaging) + do_PID (devEpidFast.c:379-482).

Trait Implementations§

Source§

impl Default for EpidFastPvt

Source§

fn default() -> Self

Returns the “default value” for a type. 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<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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, 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<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more