/* * PhaseAlertMonitor.h * * Author: Aleksey Gerasimenko * gerasimenko.aleksey.n@gmail.com */ #include #include #include "SYSCTRL/ALERTHeaders.h" #ifndef SYSCTRL_PHASEALERTMONITOR_H_ #define SYSCTRL_PHASEALERTMONITOR_H_ namespace SYSCTRL { struct PhaseAlertConfiguration { ALERT::AlertBaseConfiguration voltage_exceed_level_1; ALERT::AlertBaseConfiguration voltage_exceed_level_2; ALERT::AlertBaseConfiguration voltage_exceed_level_3; ALERT::AlertBaseConfiguration voltage_exceed_level_4; ALERT::AlertBaseConfiguration voltage_decrease_level_1; ALERT::AlertBaseConfiguration voltage_decrease_level_2; ALERT::AlertBaseConfiguration voltage_decrease_level_3; ALERT::AlertBaseConfiguration current_overload_level_1; ALERT::AlertBaseConfiguration current_overload_level_2; ALERT::AlertBaseConfiguration current_overload_level_3; ALERT::AlertBaseConfiguration current_invertor_overload_level_1; ALERT::AlertBaseConfiguration current_invertor_overload_level_2; ALERT::AlertBaseConfiguration current_invertor_overload_level_3; ALERT::AlertBaseConfiguration current_input_overload_level_1; ALERT::AlertBaseConfiguration current_input_overload_level_2; ALERT::AlertBaseConfiguration current_input_overload_level_3; PhaseAlertConfiguration(): voltage_exceed_level_1(), voltage_exceed_level_2(), voltage_exceed_level_3(), voltage_exceed_level_4(), voltage_decrease_level_1(), voltage_decrease_level_2(), voltage_decrease_level_3(), current_overload_level_1(), current_overload_level_2(), current_overload_level_3(), current_invertor_overload_level_1(), current_invertor_overload_level_2(), current_invertor_overload_level_3(), current_input_overload_level_1(), current_input_overload_level_2(), current_input_overload_level_3() {} // };//SystemAlertConfiguration struct PhaseWarningBit { uint16_t exceed_voltage_level_1 :1; uint16_t exceed_voltage_level_2 :1; uint16_t decrease_voltage_level_1 :1; uint16_t decrease_voltage_level_2 :1; // };//PhaseWarningBit struct PhaseFaultBit { uint16_t exceed_voltage_level_3 :1; // 0 uint16_t exceed_voltage_level_4 :1; // 1 uint16_t decrease_voltage_level_3 :1; // 2 uint16_t phase_lost :1; // 3 // uint16_t short_circuit :1; // 4 uint16_t high_current :1; // 5 uint16_t overload_current_level_1 :1; // 6 uint16_t overload_current_level_2 :1; // 7 // uint16_t overload_current_level_3 :1; // 8 uint16_t overload_invertor_current_level_1 :1; // 9 uint16_t overload_invertor_current_level_2 :1; // 10 uint16_t overload_invertor_current_level_3 :1; // 11 // uint16_t overload_input_current_level_1 :1; // 12 uint16_t overload_input_current_level_2 :1; // 13 uint16_t overload_input_current_level_3 :1; // 14 uint16_t reserved_15 :1; // 15 };//PhaseFaultBit union PhaseWarningRegister { uint16_t all; struct PhaseWarningBit bit; PhaseWarningRegister(): all(uint16_t(0)) {} // };//PhaseWarningRegister union PhaseFaultRegister { uint16_t all; struct PhaseFaultBit bit; PhaseFaultRegister(): all(uint16_t(0)) {} };//PhaseFaultRegister struct PhaseAlertStatusRegister { union PhaseWarningRegister warning; union PhaseFaultRegister fault; PhaseAlertStatusRegister(): warning(), fault() {} };//PhaseAlertStatusRegister struct PhaseAlertRegister { struct PhaseAlertStatusRegister phase_a; struct PhaseAlertStatusRegister phase_b; struct PhaseAlertStatusRegister phase_c; PhaseAlertRegister(): phase_a(), phase_b(), phase_c() {} // };//PhaseAlertRegister class PhaseAlertMonitor { private: float m_time_sample; bool m_fault; bool m_warning; private: PhaseAlertRegister m_monitor; public: PhaseAlertRegister status; bool fault; bool warning; private: ALERT::WarningExceed m_voltage_ab_exceed_level_1; ALERT::WarningExceed m_voltage_bc_exceed_level_1; ALERT::WarningExceed m_voltage_ca_exceed_level_1; // ALERT::WarningExceed m_voltage_ab_exceed_level_2; ALERT::WarningExceed m_voltage_bc_exceed_level_2; ALERT::WarningExceed m_voltage_ca_exceed_level_2; // ALERT::FaultExceed m_voltage_ab_exceed_level_3; ALERT::FaultExceed m_voltage_bc_exceed_level_3; ALERT::FaultExceed m_voltage_ca_exceed_level_3; // ALERT::FaultExceed m_voltage_ab_exceed_level_4; ALERT::FaultExceed m_voltage_bc_exceed_level_4; ALERT::FaultExceed m_voltage_ca_exceed_level_4; // ALERT::WarningDecrease m_voltage_ab_decrease_level_1; ALERT::WarningDecrease m_voltage_bc_decrease_level_1; ALERT::WarningDecrease m_voltage_ca_decrease_level_1; // ALERT::WarningDecrease m_voltage_ab_decrease_level_2; ALERT::WarningDecrease m_voltage_bc_decrease_level_2; ALERT::WarningDecrease m_voltage_ca_decrease_level_2; // ALERT::FaultDecrease m_voltage_ab_decrease_level_3; ALERT::FaultDecrease m_voltage_bc_decrease_level_3; ALERT::FaultDecrease m_voltage_ca_decrease_level_3; // ALERT::FaultExceed m_current_a_overload_level_1; ALERT::FaultExceed m_current_b_overload_level_1; ALERT::FaultExceed m_current_c_overload_level_1; // ALERT::FaultExceed m_current_a_overload_level_2; ALERT::FaultExceed m_current_b_overload_level_2; ALERT::FaultExceed m_current_c_overload_level_2; // ALERT::FaultExceed m_current_a_overload_level_3; ALERT::FaultExceed m_current_b_overload_level_3; ALERT::FaultExceed m_current_c_overload_level_3; // ALERT::FaultExceed m_current_invertor_a_overload_level_1; ALERT::FaultExceed m_current_invertor_b_overload_level_1; ALERT::FaultExceed m_current_invertor_c_overload_level_1; // ALERT::FaultExceed m_current_invertor_a_overload_level_2; ALERT::FaultExceed m_current_invertor_b_overload_level_2; ALERT::FaultExceed m_current_invertor_c_overload_level_2; // ALERT::FaultExceed m_current_invertor_a_overload_level_3; ALERT::FaultExceed m_current_invertor_b_overload_level_3; ALERT::FaultExceed m_current_invertor_c_overload_level_3; ALERT::FaultExceed m_current_input_a_overload_level_1; ALERT::FaultExceed m_current_input_b_overload_level_1; ALERT::FaultExceed m_current_input_c_overload_level_1; // ALERT::FaultExceed m_current_input_a_overload_level_2; ALERT::FaultExceed m_current_input_b_overload_level_2; ALERT::FaultExceed m_current_input_c_overload_level_2; // ALERT::FaultExceed m_current_input_a_overload_level_3; ALERT::FaultExceed m_current_input_b_overload_level_3; ALERT::FaultExceed m_current_input_c_overload_level_3; public: PhaseAlertMonitor(); void setup(float time_sample); void configure(const PhaseAlertConfiguration& config); public: void get_faults(PhaseFaultRegister& ph_a, PhaseFaultRegister& ph_b, PhaseFaultRegister& ph_c); void reset(); public: void execute(float urmsa, float urmsb, float urmsc, float irmsa, float irmsb, float irmsc, float invrmsa, float invrmsb, float invrmsc, float inprmsa, float inmrmsb, float inmrmsc); private: void (PhaseAlertMonitor::*_execute)(float urmsa, float urmsb, float urmsc, float irmsa, float irmsb, float irmsc, float invrmsa, float invrmsb, float invrmsc, float inprmsa, float inmrmsb, float inmrmsc); void _execute_undef(float urmsa, float urmsb, float urmsc, float irmsa, float irmsb, float irmsc, float invrmsa, float invrmsb, float invrmsc, float inprmsa, float inmrmsb, float inmrmsc); void _execute_operational(float urmsa, float urmsb, float urmsc, float irmsa, float irmsb, float irmsc, float invrmsa, float invrmsb, float invrmsc, float inprmsa, float inmrmsb, float inmrmsc); // };//PhaseAlertMonitor } /* namespace SYSCTRL */ #endif /* SYSCTRL_PHASEALERTMONITOR_H_ */