rsiot_plc/
config.rs

1use std::time::Duration;
2
3use serde::Serialize;
4
5use rsiot_messages_core::{Message, MsgDataBound};
6
7use crate::plc::function_block_base::{FunctionBlockBase, IFunctionBlock};
8
9/// Конфигурация компонента ПЛК
10///
11/// # Шаблон функционального блока
12///
13#[doc = include_str!("./template.rs")]
14///
15#[derive(Clone)]
16pub struct Config<TMessage, I, Q, S>
17where
18    TMessage: MsgDataBound,
19    I: Clone + Default + Serialize,
20    Q: Clone + Default + Serialize,
21    S: Clone + Default + Serialize,
22    FunctionBlockBase<I, Q, S>: IFunctionBlock<I, Q, S>,
23{
24    /// Функция преобразования входящих сообщений во входную структуру ПЛК.
25    ///
26    /// # Примеры
27    ///
28    /// ```rust
29    /// fn_input: |input: &mut fb_main::I, msg: &TMessage| match msg {}
30    /// ```
31    pub fn_input: fn(&mut I, &Message<TMessage>) -> (),
32
33    /// Функция преобразования выходной структуры ПЛК в исходящие сообщения.
34    ///
35    /// # Примеры
36    ///
37    /// ```rust
38    /// fn_output: |output: &fb_main::Q| vec![]
39    /// ```
40    pub fn_output: fn(&Q) -> Vec<Message<TMessage>>,
41
42    /// Главный функциональный блок ПЛК
43    ///
44    /// # Примеры
45    ///
46    /// ```rust
47    /// fb_main: fb_main::FB::new()
48    /// ```
49    pub fb_main: FunctionBlockBase<I, Q, S>,
50
51    /// Периодичность выполнения логики ПЛК
52    ///
53    /// # Примеры
54    ///
55    /// ```rust
56    /// period: Duration::from_millis(100)
57    /// ```
58    pub period: Duration,
59}