rsiot/components_config/modbus_client/
config.rs

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