rsiot-plc 0.0.71

Компонент для исполнения логики наподобие PLC
Documentation
use serde::Serialize;

use rsiot_plc::plc::function_block_base::{FunctionBlockBase, IFunctionBlock};

use super::fb1_example;

#[derive(Clone, Default, Serialize)]
pub struct I {
    pub counter: u32,
}

#[derive(Clone, Default, Serialize)]
pub struct Q {
    pub out_counter: u32,
}

#[derive(Clone, Default, Serialize)]
pub struct S {
    pub internal_counter: u32,
    pub fb1_inst: fb1_example::FB,
}

impl IFunctionBlock<I, Q, S> for FunctionBlockBase<I, Q, S> {
    fn logic(input: &I, stat: &mut S) -> Q {
        println!("in fb2");

        stat.fb1_inst.call(fb1_example::I { counter: 1 });

        Q {
            out_counter: input.counter * 2,
        }
    }
}

pub type _FunctionBlock = FunctionBlockBase<I, Q, S>;