Skip to main content

rsiot/components_config/modbus_client/
config.rs

1use std::{net::IpAddr, time::Duration};
2
3use crate::components_config::master_device::DeviceTrait;
4
5// ANCHOR: Config
6/// Конфигурация cmp_modbus_client
7#[derive(Debug)]
8pub struct Config<TMsg> {
9    /// true - включение опроса
10    pub enabled: bool,
11
12    /// Вектор настроек коммуникации с устройствами
13    ///
14    /// Порядок элементов в этом массиве должен соответствовать порядку устройств в массиве devices
15    pub devices_comm_settings: Vec<ConfigDevicesCommSettings>,
16
17    /// Вектор драйверов опрашиваемых устройств
18    pub devices: Vec<Box<dyn DeviceTrait<TMsg, super::FieldbusRequest, super::FieldbusResponse>>>,
19}
20// ANCHOR: Config
21
22// ANCHOR: ConfigDevicesCommSettings
23/// Настройки коммуникации с устройствами
24#[derive(Clone, Copy, Debug)]
25pub struct ConfigDevicesCommSettings {
26    /// Настройки подключения к опрашиваемому устройтву
27    pub client_type: ClientType,
28
29    /// Unit ID опрашиваемого устройства
30    pub unit_id: u8,
31
32    /// Таймаут ожидания ответа
33    pub timeout: Duration,
34
35    /// Максимальное количество одновременных соединений с данным устройством
36    pub concurrent_connections: u8,
37}
38// ANCHOR: ConfigDevicesCommSettings
39
40// ANCHOR: ClientType
41/// Конфигурация Modbus клиента
42#[derive(Clone, Copy, Debug)]
43pub enum ClientType {
44    /// Вариант для Modbus TCP
45    Tcp {
46        /// IP-адрес устройства
47        host: IpAddr,
48
49        /// Порт устройства (обычно 502)
50        port: u16,
51    },
52    /// Вариант для Modbus RTU
53    Rtu,
54}
55// ANCHOR: ClientType