rsiot/components/cmp_plc/plc/library/drives/valve_analog/
i.rs

1use serde::{Deserialize, Serialize};
2
3use crate::components::cmp_plc::plc::library::drives::{select_mode, select_sp};
4
5/// Входная структура
6#[derive(Clone, Debug, Default, Deserialize, PartialEq, Serialize)]
7pub struct I {
8    /// Источник выбора режима:
9    /// - false => из hmi,
10    /// - true => из plc
11    pub mode_source: bool,
12    /// Переключение в режим auto из контроллера
13    pub mode_auto: bool,
14    /// Переключение в режим manual из контроллера
15    pub mode_man: bool,
16    /// Переключение в режим local из контроллера
17    pub mode_local: bool,
18    /// Переключение в режим oos из контроллера
19    pub mode_oos: bool,
20
21    /// Выбор источника команд выбора (`sp_hmi_en`, `sp_plc_en`):
22    /// false => из hmi
23    /// true => из plc
24    pub mv_en_source: bool,
25    /// Активировать задание из hmi
26    pub mv_hmi_en: bool,
27    /// Активировать задание из plc
28    pub mv_plc_en: bool,
29    /// Задание из plc
30    pub mv_plc: f64,
31
32    /// Фактическое открытие
33    pub rbk: f64,
34
35    /// Команда с hmi
36    pub hmi_command: IHmiCommand,
37}
38
39/// Команда с hmi
40#[allow(non_camel_case_types)]
41#[derive(Clone, Copy, Debug, Default, Deserialize, PartialEq, Serialize)]
42pub enum IHmiCommand {
43    /// Нет команды - по-умолчанию
44    #[default]
45    no_command,
46
47    /// Переключение в режим man из hmi
48    mode_man,
49    /// Переключение в режим auto из hmi
50    mode_auto,
51    /// Переключение в режим local из hmi
52    mode_local,
53    /// Переключение в режим oos из hmi
54    mode_oos,
55
56    /// Активировать задание из hmi
57    mv_hmi_en,
58    /// Активировать задание из plc
59    mv_plc_en,
60    /// Задание из hmi
61    mv_hmi(f64),
62}
63
64impl From<IHmiCommand> for select_sp::IHmiCommand {
65    fn from(value: IHmiCommand) -> Self {
66        match value {
67            IHmiCommand::mv_hmi_en => select_sp::IHmiCommand::sp_hmi_en,
68            IHmiCommand::mv_plc_en => select_sp::IHmiCommand::sp_plc_en,
69            IHmiCommand::mv_hmi(mv) => select_sp::IHmiCommand::sp_hmi(mv),
70            _ => select_sp::IHmiCommand::no_command,
71        }
72    }
73}
74
75impl From<IHmiCommand> for select_mode::IHmiCommand {
76    fn from(value: IHmiCommand) -> Self {
77        match value {
78            IHmiCommand::mode_man => select_mode::IHmiCommand::mode_man,
79            IHmiCommand::mode_auto => select_mode::IHmiCommand::mode_auto,
80            IHmiCommand::mode_local => select_mode::IHmiCommand::mode_local,
81            IHmiCommand::mode_oos => select_mode::IHmiCommand::mode_oos,
82            _ => select_mode::IHmiCommand::no_command,
83        }
84    }
85}