rsiot/components_config/modbus_client/
fieldbus_response.rs

1use std::time::Instant;
2
3use crate::components_config::master_device::RequestResponseBound;
4
5/// Структура отдельного ответа при коммуникации по шине SPI
6#[derive(Clone, Debug)]
7pub struct FieldbusResponse {
8    /// Время создания запроса.
9    ///
10    /// Можно контролировать время выполнения запросов
11    pub request_creation_time: Instant,
12
13    /// Вид запроса.
14    ///
15    /// Необходим для правильной расшифровки ответа
16    pub request_kind: u8,
17
18    /// Данные, содержащие ответы
19    pub response_content: ResponseContent,
20}
21
22impl RequestResponseBound for FieldbusResponse {}
23
24impl FieldbusResponse {
25    /// Создать ответ из запроса
26    pub fn from_request(
27        request: super::FieldbusRequest,
28        response_content: ResponseContent,
29    ) -> Self {
30        Self {
31            request_creation_time: request.request_creation_time,
32            request_kind: request.request_kind,
33            response_content,
34        }
35    }
36}
37
38/// Ответ от устройства
39#[derive(Clone, Debug)]
40pub enum ResponseContent {
41    /// Массив слов
42    WordVector(Vec<u16>),
43
44    /// Массив бит
45    BitVector(Vec<bool>),
46
47    /// Без ответа
48    Unit,
49}