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}