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: f64Interval (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: f64Requested time-per-point (C timePerPointRequested), copied from
the record’s DT field by update_params (devEpidFast.c:320).
time_per_point_actual: f64Actual 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
impl EpidFastPvt
Sourcepub fn compute_num_average(&mut self)
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.
Sourcepub fn interval_callback(&mut self, seconds: f64)
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.