pub struct DeviceBase<TMsg, TFieldbusRequest, TFieldbusResponse, TBuffer>where
TFieldbusRequest: RequestResponseBound,{
pub fn_init_requests: fn(&TBuffer) -> Vec<TFieldbusRequest>,
pub periodic_requests: Vec<ConfigPeriodicRequest<TFieldbusRequest, TBuffer>>,
pub fn_msgs_to_buffer: fn(&TMsg, &mut TBuffer),
pub buffer_to_request_period: Duration,
pub fn_buffer_to_request: fn(&TBuffer) -> Result<Vec<TFieldbusRequest>>,
pub fn_response_to_buffer: fn(TFieldbusResponse, &mut TBuffer) -> Result<bool>,
pub fn_buffer_to_msgs: fn(&mut TBuffer) -> Vec<TMsg>,
pub buffer_default: TBuffer,
}Expand description
Базовое устройство для опроса по шине.
Fields§
§fn_init_requests: fn(&TBuffer) -> Vec<TFieldbusRequest>Запросы при инициализации устройства
periodic_requests: Vec<ConfigPeriodicRequest<TFieldbusRequest, TBuffer>>Периодические запросы
fn_msgs_to_buffer: fn(&TMsg, &mut TBuffer)Обновление буфера на основе входящих сообщений
Обычно соответствует параметру fn_input конфигурации устройства
§Пример
let msgs = [Custom::AllInputs(buffer.all_inputs)];
let msgs = msgs.iter().map(|m| Message::new_custom(*m)).collect();
msgsbuffer_to_request_period: DurationПериодическое формирование запросов на основе fn_buffer_to_request
fn_buffer_to_request: fn(&TBuffer) -> Result<Vec<TFieldbusRequest>>Преобразование данных из буфера в массив запросов на шине
Вызывается несколькими способами:
-
при обновлении буфера на основе входящих сообщений функцией fn_msgs_to_buffer
-
при расшифровке ответа от устройства, при возвращении true из функции fn_response_to_buffer
-
периодически с периодом buffer_to_request_period
fn_response_to_buffer: fn(TFieldbusResponse, &mut TBuffer) -> Result<bool>Обновление буфера на основе данных, полученных с устройства
fn_buffer_to_msgs: fn(&mut TBuffer) -> Vec<TMsg>Функция создания сообщений на основе буфера
Обычно соответствует параметру fn_output кофигурации устройства
Пример:
|buffer| {vec![]}buffer_default: TBufferЗначения в буфере при инициализации