pub struct EpidSoftDeviceSupport;Expand description
Soft Channel device support for the epid record.
Implements the PID and MaxMin feedback algorithms.
Ported from devEpidSoft.c.
PID algorithm:
E(n) = Setpoint - ControlledValue
P(n) = KP * E(n)
I(n) = I(n-1) + KP * KI * E(n) * dT (with anti-windup)
D(n) = KP * KD * (E(n) - E(n-1)) / dT
Output = P + I + DImplementations§
Source§impl EpidSoftDeviceSupport
impl EpidSoftDeviceSupport
pub fn new() -> Self
Sourcepub fn do_pid(epid: &mut EpidRecord)
pub fn do_pid(epid: &mut EpidRecord)
Execute the PID algorithm on the epid record.
This is the core computation, equivalent to do_pid() in devEpidSoft.c.
Trait Implementations§
Source§impl Default for EpidSoftDeviceSupport
impl Default for EpidSoftDeviceSupport
Source§impl DeviceSupport for EpidSoftDeviceSupport
impl DeviceSupport for EpidSoftDeviceSupport
fn dtyp(&self) -> &str
Source§fn read(&mut self, record: &mut dyn Record) -> CaResult<DeviceReadOutcome>
fn read(&mut self, record: &mut dyn Record) -> CaResult<DeviceReadOutcome>
Read from hardware into the record. Read more
fn write(&mut self, _record: &mut dyn Record) -> CaResult<()>
fn init(&mut self, _record: &mut (dyn Record + 'static)) -> Result<(), CaError>
Source§fn last_alarm(&self) -> Option<(u16, u16)>
fn last_alarm(&self) -> Option<(u16, u16)>
Return the last alarm (status, severity) from the driver.
None means the driver does not override alarms.
Source§fn last_timestamp(&self) -> Option<SystemTime>
fn last_timestamp(&self) -> Option<SystemTime>
Return the last timestamp from the driver.
None means the driver does not override timestamps.
Source§fn set_record_info(&mut self, _name: &str, _scan: ScanType)
fn set_record_info(&mut self, _name: &str, _scan: ScanType)
Called after init() with the record name and scan type.
Source§fn io_intr_receiver(&mut self) -> Option<Receiver<()>>
fn io_intr_receiver(&mut self) -> Option<Receiver<()>>
Return a receiver for I/O Intr scan notifications.
Only called for records with SCAN=I/O Intr.
Source§fn write_begin(
&mut self,
_record: &mut (dyn Record + 'static),
) -> Result<Option<Box<dyn WriteCompletion>>, CaError>
fn write_begin( &mut self, _record: &mut (dyn Record + 'static), ) -> Result<Option<Box<dyn WriteCompletion>>, CaError>
Begin an asynchronous write (submit only, no blocking).
Returns
Some(handle) if the write was submitted to a worker queue —
the caller should wait on the handle outside any record lock.
Returns None to fall back to synchronous write().Source§fn handle_command(
&mut self,
_record: &mut (dyn Record + 'static),
_command: &str,
_args: &[EpicsValue],
) -> Result<(), CaError>
fn handle_command( &mut self, _record: &mut (dyn Record + 'static), _command: &str, _args: &[EpicsValue], ) -> Result<(), CaError>
Handle a named command from the record’s process() via
ProcessAction::DeviceCommand. This allows records to request
driver operations (e.g., scaler reset/arm/write_preset) without
holding a direct driver reference. Read moreAuto Trait Implementations§
impl Freeze for EpidSoftDeviceSupport
impl RefUnwindSafe for EpidSoftDeviceSupport
impl Send for EpidSoftDeviceSupport
impl Sync for EpidSoftDeviceSupport
impl Unpin for EpidSoftDeviceSupport
impl UnsafeUnpin for EpidSoftDeviceSupport
impl UnwindSafe for EpidSoftDeviceSupport
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more