pub struct ThrottleRecord {Show 21 fields
pub val: f64,
pub oval: f64,
pub sent: f64,
pub osent: f64,
pub wait: i16,
pub hopr: f64,
pub lopr: f64,
pub drvlh: f64,
pub drvll: f64,
pub drvls: i16,
pub drvlc: i16,
pub ver: String,
pub sts: i16,
pub prec: i16,
pub dprec: i16,
pub dly: f64,
pub out: String,
pub ov: i16,
pub sinp: String,
pub siv: i16,
pub sync: i16,
/* private fields */
}Expand description
Throttle record — rate-limits value changes to prevent device damage.
Ported from EPICS std module throttleRecord.c.
When VAL is written, the record checks drive limits, optionally clips the value, sets WAIT=True, then writes SENT to the OUT link only after the minimum delay (DLY) has elapsed since the last output. If a new value arrives during the delay, it queues the latest value and sends it when the delay expires.
Fields§
§val: f64Set value (VAL)
oval: f64Previous set value (OVAL), read-only
sent: f64Last sent value (SENT), read-only
osent: f64Previous sent value (OSENT), read-only
wait: i16Busy flag (WAIT): 0=False, 1=True, read-only
hopr: f64High operating range (HOPR)
lopr: f64Low operating range (LOPR)
drvlh: f64High drive limit (DRVLH)
drvll: f64Low drive limit (DRVLL)
drvls: i16Limit status: 0=Normal, 1=Low, 2=High (DRVLS), read-only
drvlc: i16Limit clipping: 0=Off, 1=On (DRVLC)
ver: StringCode version string (VER), read-only
sts: i16Record status: 0=Unknown, 1=Error, 2=Success (STS), read-only
prec: i16Display precision (PREC)
dprec: i16Delay display precision (DPREC)
dly: f64Delay between outputs in seconds (DLY)
out: StringOutput link (OUT)
ov: i16Output link valid: 0=ExtNC, 1=Ext, 2=Local, 3=Constant (OV), read-only
sinp: StringSync input link (SINP)
siv: i16Sync input link valid (SIV), read-only
sync: i16Sync trigger: 0=Idle, 1=Process (SYNC)
Trait Implementations§
Source§impl Default for ThrottleRecord
impl Default for ThrottleRecord
Source§impl Record for ThrottleRecord
impl Record for ThrottleRecord
Source§fn should_fire_forward_link(&self) -> bool
fn should_fire_forward_link(&self) -> bool
C throttleRecord.c:308 keeps recGblFwdLink(prec) commented
out in process() — the forward link is fired ONLY from
valuePut’s non-CONSTANT branch (throttleRecord.c:580), i.e.
only on a cycle where a real OUT write actually occurred. The
framework default fires FLNK every process(), which would also
fire it on a queuing-during-delay cycle, a rejected out-of-range
cycle, a drain with nothing queued, and a CONSTANT-OUT cycle —
none of which write OUT in C. process() maintains out_written
(reset to false each cycle, set true only by send_value on a
real OUT write); this hook returns it.
Source§fn record_type(&self) -> &'static str
fn record_type(&self) -> &'static str
Source§fn process(&mut self) -> CaResult<ProcessOutcome>
fn process(&mut self) -> CaResult<ProcessOutcome>
Source§fn can_device_write(&self) -> bool
fn can_device_write(&self) -> bool
aao is included here even though it’s served by the same
concrete struct as waveform/aai/subArray — the
WaveformRecord’s can_device_write override picks the right
answer per [ArrayKind], but this default matters for code that
only has the record-type string.Source§fn special(&mut self, field: &str, after: bool) -> CaResult<()>
fn special(&mut self, field: &str, after: bool) -> CaResult<()>
Source§fn put_field(&mut self, name: &str, value: EpicsValue) -> CaResult<()>
fn put_field(&mut self, name: &str, value: EpicsValue) -> CaResult<()>
Source§fn declared_fields(&self) -> &'static [FieldDesc]
fn declared_fields(&self) -> &'static [FieldDesc]
.dbd set does not
cover — a record type that lives in another crate. Read moreSource§fn init_record(&mut self, pass: u8) -> CaResult<()>
fn init_record(&mut self, pass: u8) -> CaResult<()>
Source§fn set_async_context(&mut self, name: String, db: AsyncDbHandle)
fn set_async_context(&mut self, name: String, db: AsyncDbHandle)
add_record), delivering the record its own canonical name plus a
cycle-free crate::server::database::AsyncDbHandle for driving
async-side updates from OUTSIDE a process() cycle. Read moreSource§fn put_field_internal(&mut self, name: &str, value: EpicsValue) -> CaResult<()>
fn put_field_internal(&mut self, name: &str, value: EpicsValue) -> CaResult<()>
Source§fn took_metadata_change(&mut self) -> bool
fn took_metadata_change(&mut self) -> bool
process() call
mutated a metadata-class field (EGU/PREC/HOPR/LOPR/HLM/LLM/
alarm limits / DRVH/DRVL / state strings). Read moreSource§fn implements_field(&self, name: &str) -> bool
fn implements_field(&self, name: &str) -> bool
name in its own get_field /
put_field, as opposed to leaving it to the framework’s dbCommon
handling? Read moreSource§fn field_no_mod(&self, _field: &str) -> bool
fn field_no_mod(&self, _field: &str) -> bool
SPC_NOMOD that a record’s cvt_dbaddr decides at runtime, from
record state — the dynamic half of the no-modify declaration. Read moreDBF_MENU field served as
DBR_ENUM, keyed by field name (uppercase, as declared). Read moreSource§fn field_metadata_override(&self, _field: &str) -> Option<FieldMetadataOverride>
fn field_metadata_override(&self, _field: &str) -> Option<FieldMetadataOverride>
field. Read moreSource§fn property_support(&self) -> PropertySupport
fn property_support(&self) -> PropertySupport
rset get_* property slots THIS record
type implements — the record’s own #define get_xxx NULL lines. Read moreSource§fn long_string_fields(&self) -> &'static [&'static str]
fn long_string_fields(&self) -> &'static [&'static str]
DBF_CHAR
array field that semantically holds a NUL-terminated string. Read moreSource§fn process_passive_fields(&self) -> &'static [&'static str]
fn process_passive_fields(&self) -> &'static [&'static str]
pp(TRUE) in this record type’s DBD (empty if
none, e.g. event/histogram, or if the type is unmodeled). Read moreSource§fn processes_after_put(&self, field: &str) -> bool
fn processes_after_put(&self, field: &str) -> bool
field should reprocess this Passive record. Read moreSource§fn enum_state_strings(&self) -> Option<Vec<PvString>>
fn enum_state_strings(&self) -> Option<Vec<PvString>>
DBF_ENUM state strings — the C rset slot pair
get_enum_strs / put_enum_str, which in C read the same fields and
are therefore ONE table here. Read moreSource§fn enum_string_form(&self) -> Option<EnumStringForm>
fn enum_string_form(&self) -> Option<EnumStringForm>
get_enum_str rset slot — how a DBR_STRING READ of its
DBF_ENUM VAL renders. A THIRD slot, distinct from the pair above:
C’s get_enum_str (singular) is not get_enum_strs (plural), and
serving the read from the plural table is what made an undefined mbbi
state come out as its index. Read moreSource§fn validate_put(&self, _field: &str, _value: &EpicsValue) -> Result<(), CaError>
fn validate_put(&self, _field: &str, _value: &EpicsValue) -> Result<(), CaError>
Source§fn is_subroutine_name_field(&self, _field: &str) -> bool
fn is_subroutine_name_field(&self, _field: &str) -> bool
field names a subroutine that must resolve in the
function registry — C special(SPC_MOD) → registryFunctionFind
(aSubRecord.c::special, subRecord.c::special). C stores the name in
dbPut, then special(after) looks it up and returns S_db_BadSub
(→ rsrv ECA_PUTFAIL) when the name is non-empty and unregistered, so
the client’s write is REFUSED while the field keeps the value it was
given. An empty name names no routine and is accepted. Read moreSource§fn primary_field(&self) -> &'static str
fn primary_field(&self) -> &'static str
Source§fn is_udf_defining_put(&self, field: &str) -> bool
fn is_udf_defining_put(&self, field: &str) -> bool
field directly defines the record — clears UDF
exactly like a primary-value-field put. C dbAccess.c::dbPut
(:1409-1411) clears udf synchronously only when the put target is
dbIsValueField (i.e. field == primary_field()); this hook is where
a record type says its own special() ALSO clears UDF for a
non-value field, independent of dbIsValueField. Read moreSource§fn val(&self) -> Option<EpicsValue>
fn val(&self) -> Option<EpicsValue>
Source§fn set_val(&mut self, value: EpicsValue) -> Result<(), CaError>
fn set_val(&mut self, value: EpicsValue) -> Result<(), CaError>
Source§fn input_read_by_device_support(&self) -> bool
fn input_read_by_device_support(&self) -> bool
INP is read by DEVICE SUPPORT (a C DSET), as
opposed to by the record body itself. Read moreSource§fn soft_input_dset_init(&mut self, loaded: bool)
fn soft_input_dset_init(&mut self, loaded: bool)
init_record, once the
constant-INP load above has (or has not) landed. Read moreSource§fn raw_soft_input(
&mut self,
entry: RawSoftEntry,
value: EpicsValue,
) -> Option<Result<(), CaError>>
fn raw_soft_input( &mut self, entry: RawSoftEntry, value: EpicsValue, ) -> Option<Result<(), CaError>>
DTYP="Raw Soft Channel" INPUT dset — C’s four devXxxSoftRaw.c
read supports (devAiSoftRaw, devBiSoftRaw, devMbbiSoftRaw,
devMbbiDirectSoftRaw). Read moreSource§fn raw_soft_output_value(&self) -> Option<EpicsValue>
fn raw_soft_output_value(&self) -> Option<EpicsValue>
DTYP="Raw Soft Channel" OUTPUT dset — C’s four devXxxSoftRaw.c
write supports: the value write_xxx() puts to the OUT link. Read moreSource§fn apply_raw_readback(&mut self, _raw: i32) -> bool
fn apply_raw_readback(&mut self, _raw: i32) -> bool
Record::apply_raw_input]. An output record whose
convert() is forward (engineering → raw) must invert it here — store
the raw value into RVAL and compute the engineering VAL — because
the framework’s forward convert would otherwise recompute RVAL from
the stale VAL and discard the readback (C processAo/initAo set
rval/val directly, devAsynInt32.c:955-957/:973-994). Read moreSource§fn apply_float64_readback(&mut self, _raw: f64) -> bool
fn apply_float64_readback(&mut self, _raw: f64) -> bool
asynFloat64 analogue of
Record::apply_raw_readback. A float64 output (ao) whose device
value carries an ASLO/AOFF linear scaling must seed the engineering
VAL here (VAL = value * ASLO + AOFF), because the asyn store path
would otherwise write the raw device value straight into VAL and drop
the scaling. Sets VAL only (a float64 ao carries no RVAL); the
reverse scaling (OVAL - AOFF) / ASLO is applied on the device-write
side. Mirrors C initAo/processAo (devAsynFloat64.c:627-629/:646-649). Read moreSource§fn install_breaktable_registry(&mut self, _registry: Arc<BreakTableRegistry>)
fn install_breaktable_registry(&mut self, _registry: Arc<BreakTableRegistry>)
ai/ao
with LINR >= 3 can resolve and cache the table its LINR selects.
Called once at iocInit, before the first process/convert. The record
resolves the table lazily on the first conversion (and re-resolves when
LINR changes at runtime), mirroring C cvtRawToEngBpt’s
init || *ppbrk == NULL cache. The default is a no-op: only ai/ao
carry LINR.Source§fn apply_invalid_output_value(
&mut self,
ivov: EpicsValue,
) -> Result<(), CaError>
fn apply_invalid_output_value( &mut self, ivov: EpicsValue, ) -> Result<(), CaError>
recXxx.c behaviour: Read moreSource§fn is_put_complete(&self) -> bool
fn is_put_complete(&self) -> bool
Source§fn should_output(&self) -> bool
fn should_output(&self) -> bool
Source§fn on_output_complete(&mut self)
fn on_output_complete(&mut self)
longout.pval) can update for the next cycle’s
Self::should_output check. Default: no-op.Source§fn uses_monitor_deadband(&self) -> bool
fn uses_monitor_deadband(&self) -> bool
Source§fn process_posts_value_monitor(&self) -> bool
fn process_posts_value_monitor(&self) -> bool
VAL)
as a value monitor (DBE_VALUE / DBE_LOG). Read moreSource§fn monitor_value_changed(&self) -> Option<bool>
fn monitor_value_changed(&self) -> Option<bool>
Source§fn monitor_always_post(&self) -> (bool, bool)
fn monitor_always_post(&self) -> (bool, bool)
menuPost “Always” override for the VALUE / LOG monitor masks. Read moreSource§fn monitor_deadband_value(&self) -> Option<EpicsValue>
fn monitor_deadband_value(&self) -> Option<EpicsValue>
Source§fn monitor_deadband_field(&self) -> &'static str
fn monitor_deadband_field(&self) -> &'static str
Self::monitor_deadband_value
reads. A record overriding one must override both consistently. Read moreSource§fn alarm_cycle_monitored_fields(&self) -> &'static [&'static str]
fn alarm_cycle_monitored_fields(&self) -> &'static [&'static str]
monitor() posts on every cycle whose
alarm transition fired, even when their value did not change. Read moreSource§fn force_posted_fields(&self) -> &'static [&'static str]
fn force_posted_fields(&self) -> &'static [&'static str]
monitor() re-posts with DBE_VAL_LOG on
every cycle that recomputed them, even when the value did not
change — the analogue of an unconditional MARK(field) in C. Read moreSource§fn take_cycle_posted_fields(&mut self) -> Vec<(&'static str, CyclePostMask)>
fn take_cycle_posted_fields(&mut self) -> Vec<(&'static str, CyclePostMask)>
monitor() posted UNCONDITIONALLY, chosen per
cycle from record state — the DYNAMIC sibling of
Self::force_posted_fields. Read moreSource§fn fields_posted_only_when_marked(&self) -> &'static [&'static str]
fn fields_posted_only_when_marked(&self) -> &'static [&'static str]
Source§fn log_swept_fields(&self) -> &'static [&'static str]
fn log_swept_fields(&self) -> &'static [&'static str]
monitor() re-posts with DBE_LOG ONLY on
every cycle it names them, regardless of change — the analogue of
an unconditional db_post_events(field, DBE_LOG) sweep. Read moreSource§fn value_only_change_fields(&self) -> &'static [&'static str]
fn value_only_change_fields(&self) -> &'static [&'static str]
DBE_VALUE
only — the LOG bit is stripped — instead of the framework default
DBE_VALUE | DBE_LOG. Read moreSource§fn fields_posted_with_value_mask(
&self,
) -> &'static [(&'static str, ValuePostGate)]
fn fields_posted_with_value_mask( &self, ) -> &'static [(&'static str, ValuePostGate)]
DBE_VALUE | DBE_LOG on every change. Read moreSource§fn fields_posted_with_monitor_mask(&self) -> &'static [&'static str]
fn fields_posted_with_monitor_mask(&self) -> &'static [&'static str]
monitor_mask | DBE_VALUE — VAL’s monitor mask ORed with DBE_VALUE,
and NOT the framework default monitor_mask | DBE_VALUE | DBE_LOG. Read moreSource§fn fields_posted_without_alarm_bits(&self) -> &'static [&'static str]
fn fields_posted_without_alarm_bits(&self) -> &'static [&'static str]
DBE_VALUE | DBE_LOG — this
cycle’s alarm bits DISCARDED. Read moreSource§fn array_monitor_post(&mut self) -> Option<ArrayMonitorPost>
fn array_monitor_post(&mut self) -> Option<ArrayMonitorPost>
monitor(),
waveformRecord.c:291-326). None (the default) means the record has
no MPST/APST/HASH mechanism and the generic MDEL/ADEL deadband
decision applies. Some(_) lets the record replace that with its
“Always vs On Change” rule: it hashes the array content, compares to
the stored HASH, updates it, and reports whether DBE_VALUE /
DBE_LOG should be on the VAL post this cycle and whether the hash
changed (so the owner posts HASH with DBE_VALUE). Called by
check_deadband_ext (the single owner of the VAL-mask decision). Read moreSource§fn process_posted_fields(&self) -> Option<&'static [&'static str]>
fn process_posted_fields(&self) -> Option<&'static [&'static str]>
monitor() posts HASH this way —
db_post_events(prec, &prec->hash, DBE_VALUE) only when the content
hash changed (waveformRecord.c:317-319), never via VAL’s change. Read moreSource§fn event_posted_fields(&self) -> &'static [&'static str]
fn event_posted_fields(&self) -> &'static [&'static str]
monitor() posts HASH this way —
db_post_events(prec, &prec->hash, DBE_VALUE) only when the content
hash changed (waveformRecord.c:317-319), never via VAL’s change. Read moreSource§fn init_record_parks_pact(&self) -> bool
fn init_record_parks_pact(&self) -> bool
init_record leave the record PERMANENTLY ACTIVE — C’s
prec->pact = TRUE inside init_record, which is how a record type
disables itself when it cannot possibly process? Read moreSource§fn post_init_finalize_undef(&mut self, _udf: &mut bool) -> Result<(), CaError>
fn post_init_finalize_undef(&mut self, _udf: &mut bool) -> Result<(), CaError>
init_record
passes complete. Default implementation is a no-op. Read moreSource§fn init_resets_alarms(&self) -> bool
fn init_resets_alarms(&self) -> bool
init_record resets the record to a
defined, no-alarm state — prec->udf = 0; recGblResetAlarms(prec) — so
a freshly loaded, never-processed record reads UDF=0,
STAT=NO_ALARM, SEVR=NO_ALARM instead of the born UDF/INVALID/1. Read moreSource§fn field_native_count(&self, _field: &str) -> Option<u32>
fn field_native_count(&self, _field: &str) -> Option<u32>
field, when it
differs from the count of the field’s current value. Read moreSource§fn seed_deadband_tracking(&mut self)
fn seed_deadband_tracking(&mut self)
init_record passes and post_init_finalize_undef. Read moreSource§fn set_resolved_input_links(&mut self, _resolved: &[&'static str])
fn set_resolved_input_links(&mut self, _resolved: &[&'static str])
Record::multi_input_links fetches, before process(). Read moreSource§fn set_fetch_gate_failed(&mut self, _failed: bool)
fn set_fetch_gate_failed(&mut self, _failed: bool)
fetch_values() outcome: failed == true means C’s
helper would have returned a non-zero status, so the record body — the
calcPerform / do_sel the C process() wraps in
if (fetch_values(prec) == 0) — must NOT run, and VAL/UDF freeze. Read moreSource§fn set_subroutine_status(&mut self, _status: i64)
fn set_subroutine_status(&mut self, _status: i64)
Source§fn watchdog_interval(&self) -> Option<Duration>
fn watchdog_interval(&self) -> Option<Duration>
None when it has
none — C histogramRecord.c::wdogInit (:126-152): Read moreSource§fn watchdog_fire(&mut self) -> &'static [&'static str]
fn watchdog_fire(&mut self) -> &'static [&'static str]
histogramRecord.c::wdogCallback (:102-124): Read moreSource§fn uses_recgbl_simm_helpers(&self) -> bool
fn uses_recgbl_simm_helpers(&self) -> bool
recGbl
simulation helpers (recGblGetSimm/recGblInitSimm, and therefore
recGblSaveSimm/recGblCheckSimm) rather than a bare dbGetLink. Read moreSource§fn aborts_on_failed_siml_read(&self) -> bool
fn aborts_on_failed_siml_read(&self) -> bool
readValue/writeValue ABORTS when the SIML read fails —
it returns before performing any I/O, so the cycle does no device write,
no SIOL redirect, and raises no SIMM_ALARM. Read moreSource§fn set_io_intr_scan(&mut self, _active: bool)
fn set_io_intr_scan(&mut self, _active: bool)
Source§fn take_special_actions(&mut self) -> Vec<ProcessAction>
fn take_special_actions(&mut self) -> Vec<ProcessAction>
Source§fn monitor_side_effect_fields(
&self,
_put_field: &str,
) -> &'static [&'static str]
fn monitor_side_effect_fields( &self, _put_field: &str, ) -> &'static [&'static str]
put_field changed them as a side effect, without driving a full
process cycle. Read moreSource§fn special_commits_alarms(&self, _put_field: &str) -> bool
fn special_commits_alarms(&self, _put_field: &str) -> bool
special() for a put to put_field runs the record’s
own monitor() — whose first act is recGblResetAlarms(prec), which
commits nsta/nsev into stat/sevr and clears the born-UDF alarm. Read moreSource§fn special_checks_alarms(&self, _put_field: &str) -> bool
fn special_checks_alarms(&self, _put_field: &str) -> bool
special() for a put to put_field runs code that
writes stat/sevr DIRECTLY (not nsta/nsev) with NO monitor() /
recGblResetAlarms after it — so the write STICKS and a later caget
observes it, unlike the process path where recGblResetAlarms erases it. Read moreSource§fn as_any_mut(&mut self) -> Option<&mut (dyn Any + 'static)>
fn as_any_mut(&mut self) -> Option<&mut (dyn Any + 'static)>
Source§fn clears_udf(&self) -> bool
fn clears_udf(&self) -> bool
Source§fn clears_udf_unconditionally(&self) -> bool
fn clears_udf_unconditionally(&self) -> bool
process() clears UDF regardless of the read’s
status — i.e. even when readValue failed. Read moreSource§fn declares_inp_link(&self) -> bool
fn declares_inp_link(&self) -> bool
Source§fn read_constant_inp(&mut self, _value: Option<EpicsValue>) -> bool
fn read_constant_inp(&mut self, _value: Option<EpicsValue>) -> bool
Source§fn raises_udf_alarm(&self) -> bool
fn raises_udf_alarm(&self) -> bool
Source§fn udf_alarm_on_exact_one(&self) -> bool
fn udf_alarm_on_exact_one(&self) -> bool
checkAlarms tests the UDF byte with
if (prec->udf == TRUE) (EXACT-ONE) rather than if (prec->udf)
(truthy). See crate::server::recgbl::udf_alarm_active: exact-one
records (boRecord.c:371, stringoutRecord.c:146, biRecord.c:225,
busyRecord.c:337) do NOT raise UDF_ALARM for a udf byte that is
neither 0 nor 1. Read moreSource§fn value_is_undefined(&self) -> bool
fn value_is_undefined(&self) -> bool
VAL is undefined (UDF must
stay set). Read moreSource§fn check_alarms(&mut self, _common: &mut CommonFields)
fn check_alarms(&mut self, _common: &mut CommonFields)
nsta/nsev via recGblSetSevr. Read moreSource§fn multi_input_links(&self) -> &[(&'static str, &'static str)]
fn multi_input_links(&self) -> &[(&'static str, &'static str)]
Source§fn special_reseed_input_links(&self) -> &[(&'static str, &'static str)]
fn special_reseed_input_links(&self) -> &[(&'static str, &'static str)]
(link_field, value_field) pairs whose CONSTANT value this record’s
C special() RE-SEEDS on a runtime put to the link field —
recGblInitConstantLink(plink, DBF_DOUBLE, pvalue) +
db_post_events(prec, pvalue, DBE_VALUE) + INAV = CON
(calcoutRecord.c:367-378, sCalcoutRecord.c:512-517,
aCalcoutRecord.c:534-540). Read moreSource§fn special_reseed_post_mask(&self) -> EventMask
fn special_reseed_post_mask(&self) -> EventMask
db_post_events call in that record’s special()
re-seed arm — the C call sites do not agree: Read moreSource§fn constant_init_links(&self) -> Vec<ConstantInitLink>
fn constant_init_links(&self) -> Vec<ConstantInitLink>
init_record —
the record’s own recGblInitConstantLink / dbLoadLinkArray table,
transcribed from its C. Read moreSource§fn constant_ls_link(&self) -> Option<&'static str>
fn constant_ls_link(&self) -> Option<&'static str>
dbLoadLinkLS — "DOL" for lso (lsoRecord.c:82), "INP" for
lsi (its soft device support, devLsiSoft.c:24). loadLS is a lset
entry of its own, so this is a SEPARATE table from
Self::constant_init_links, not a variant of it; the same init-seed
owner runs both. Read moreSource§fn apply_ls_load(&mut self, _load: LsLoad) -> u32
fn apply_ls_load(&mut self, _load: LsLoad) -> u32
Self::constant_ls_link load, and return the resulting LEN.
The record clamps the text at its own SIZV and runs C’s init tail
(if (prec->len) { strcpy(prec->oval, prec->val); prec->olen = prec->len; },
lsoRecord.c:92-95 / lsiRecord.c:85-88); the owner turns a non-zero LEN
into udf = FALSE.Source§fn constant_inputs_deliver_at_process(&self) -> bool
fn constant_inputs_deliver_at_process(&self) -> bool
Source§fn select_input_links(
&self,
_selector: Option<u16>,
) -> Option<Vec<(&'static str, &'static str)>>
fn select_input_links( &self, _selector: Option<u16>, ) -> Option<Vec<(&'static str, &'static str)>>
Self::multi_input_links the framework should
actually fetch this cycle, given an optional externally-resolved
selector index (sel’s NVL→SELN value, or None when no NVL link
drove it). Default None = fetch every input link. Read moreSource§fn simulation_substitutes_input_stage(&self) -> bool
fn simulation_substitutes_input_stage(&self) -> bool
SIMM != NO cycle substitutes only this record’s INPUT STAGE — the
rest of its process() still runs. Read moreSource§fn land_simulated_value(&mut self, value: EpicsValue) -> Result<(), CaError>
fn land_simulated_value(&mut self, value: EpicsValue) -> Result<(), CaError>
readValue’s assignment plus whatever the
record’s process() body then does with it, under the same
status == 0 gate the framework applies before calling this. Read moreSource§fn rejects_illegal_sim_mode(&self) -> bool
fn rejects_illegal_sim_mode(&self) -> bool
switch (prec->simm) carries a default: arm
that REFUSES a SIMM value outside its own menu: Read moreSource§fn set_simulation_active(&mut self, _active: bool)
fn set_simulation_active(&mut self, _active: bool)
process() — the twin of Self::set_fetch_gate_failed, and only for a
record that declares Self::simulation_substitutes_input_stage. Read moreSource§fn input_fetch_policy(&self) -> InputFetchPolicy
fn input_fetch_policy(&self) -> InputFetchPolicy
fetch_values() for this record type reacts to a link read
that fails. Drives the framework’s Self::multi_input_links fetch
loop; see InputFetchPolicy. Default: InputFetchPolicy::ReadAll. Read moreSource§fn string_input_links(&self) -> &'static [(&'static str, &'static str)]
fn string_input_links(&self) -> &'static [(&'static str, &'static str)]
(link_field, value_field) pairs read as
DBR_STRING, C sCalcoutRecord.c::fetch_values (890-941) — the SECOND
loop of that function, over INAA..INLL → AA..LL: Read moreSource§fn output_time_input_links(&self) -> &'static [(&'static str, &'static str)]
fn output_time_input_links(&self) -> &'static [(&'static str, &'static str)]
(link_name_field, value_field) pairs. The framework
reads each configured link immediately before the OUT write, and ONLY on
a cycle where the output actually fires (Self::should_output and no
IVOA veto), then writes the value into value_field via
Self::put_field; a failed read leaves the field alone. Read moreSource§fn output_link_value(&self) -> Option<EpicsValue>
fn output_link_value(&self) -> Option<EpicsValue>
Source§fn multi_output_links(&self) -> &[(&'static str, &'static str)]
fn multi_output_links(&self) -> &[(&'static str, &'static str)]
Source§fn multi_output_buffer(
&self,
link_field: &str,
staged: EpicsValue,
target: &OutTarget,
) -> EpicsValue
fn multi_output_buffer( &self, link_field: &str, staged: EpicsValue, target: &OutTarget, ) -> EpicsValue
Self::multi_output_links) and the RESOLVED TARGET
metadata, return the buffer C would actually put. Read moreSource§fn typed_output_buffer(
&self,
link_field: &str,
target: &OutTarget,
) -> Option<EpicsValue>
fn typed_output_buffer( &self, link_field: &str, target: &OutTarget, ) -> Option<EpicsValue>
Self::multi_output_buffer. Read moreSource§fn set_resolved_out_target(&mut self, link_field: &str, target: OutTarget)
fn set_resolved_out_target(&mut self, link_field: &str, target: OutTarget)
process()
(ProcessAction::ResolveOutTarget). Read moreSource§fn input_link_read_as(
&self,
link_field: &str,
source: &OutTarget,
) -> Option<LinkReadAs>
fn input_link_read_as( &self, link_field: &str, source: &OutTarget, ) -> Option<LinkReadAs>
dbrType this record’s ProcessAction::ReadDbLink on
link_field asks the SOURCE for — the READ twin of
Self::typed_output_buffer, and C’s dbGetLink second argument. Read moreSource§fn output_event(&self) -> Option<String>
fn output_event(&self) -> Option<String>
OEVT) to post this cycle, or
None. The event-subsystem twin of the OUT write: a downstream
SCAN="Event" / EVNT="<name>" record is woken each time the record
drives output. Mirrors C calcout/sCalcout/aCalcout execOutput,
which calls postEvent(epvt) / post_event(oevt) immediately after
writeValue in every OUT-driving branch. Read moreSource§fn pre_process_actions(&mut self) -> Vec<ProcessAction>
fn pre_process_actions(&mut self) -> Vec<ProcessAction>
Source§fn pre_input_link_actions(&mut self) -> Vec<ProcessAction>
fn pre_input_link_actions(&mut self) -> Vec<ProcessAction>
multi_input_links, INP -> value-field) fetch for this cycle. Read moreSource§fn set_process_context(&mut self, _ctx: &ProcessContext)
fn set_process_context(&mut self, _ctx: &ProcessContext)
process() to push a
read-only snapshot of framework-owned [CommonFields] state
(ProcessContext) that the record’s process() needs to see. Read moreSource§fn init_links(&mut self, _common: &CommonFields)
fn init_links(&mut self, _common: &CommonFields)
INP/OUT/FLNK/…) have been resolved and the
init_record passes have run, with the record’s resolved
CommonFields. Read moreSource§fn set_device_did_compute(&mut self, _did_compute: bool)
fn set_device_did_compute(&mut self, _did_compute: bool)
Source§fn soft_channel_skips_convert(&self) -> bool
fn soft_channel_skips_convert(&self) -> bool
RVAL → VAL)
convert() step that must be skipped on a Soft Channel input. Read moreSource§fn skips_forward_convert_when_undefined(&self) -> bool
fn skips_forward_convert_when_undefined(&self) -> bool
VAL → RVAL convert() must be
SKIPPED on a process cycle where VAL is still undefined (UDF != 0) and
no value source ran. Read moreAuto Trait Implementations§
impl !RefUnwindSafe for ThrottleRecord
impl !UnwindSafe for ThrottleRecord
impl Freeze for ThrottleRecord
impl Send for ThrottleRecord
impl Sync for ThrottleRecord
impl Unpin for ThrottleRecord
impl UnsafeUnpin for ThrottleRecord
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
Source§impl<R> FieldDeclaration for R
impl<R> FieldDeclaration for R
Source§fn field_list(&self) -> &'static [FieldDesc]
fn field_list(&self) -> &'static [FieldDesc]
.dbd declaration order.