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