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

1use serde::{Deserialize, Serialize};
2
3use super::super::select_mode;
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    /// Команда на открытие в автоматическом режиме
22    pub auto_open: bool,
23    /// Команда на закрытие в автоматическом режиме
24    pub auto_close: bool,
25
26    /// Команда с hmi
27    pub hmi_command: IHmiCommand,
28}
29
30/// Команда с hmi
31#[allow(non_camel_case_types)]
32#[derive(Clone, Copy, Debug, Default, Deserialize, PartialEq, Serialize)]
33pub enum IHmiCommand {
34    /// Нет команды - по-умолчанию
35    #[default]
36    no_command,
37
38    /// Переключение в режим man из hmi
39    mode_man,
40    /// Переключение в режим auto из hmi
41    mode_auto,
42    /// Переключение в режим local из hmi
43    mode_local,
44    /// Переключение в режим oos из hmi
45    mode_oos,
46
47    /// Открыть в ручном режиме из hmi
48    man_open,
49    /// Закрыть в ручном режиме из hmi
50    man_close,
51}
52
53impl From<IHmiCommand> for select_mode::IHmiCommand {
54    fn from(value: IHmiCommand) -> Self {
55        match value {
56            IHmiCommand::no_command => select_mode::IHmiCommand::no_command,
57
58            IHmiCommand::mode_man => select_mode::IHmiCommand::mode_man,
59            IHmiCommand::mode_auto => select_mode::IHmiCommand::mode_auto,
60            IHmiCommand::mode_local => select_mode::IHmiCommand::mode_local,
61            IHmiCommand::mode_oos => select_mode::IHmiCommand::mode_oos,
62
63            _ => select_mode::IHmiCommand::no_command,
64        }
65    }
66}