/* * PhaseAlertMonitor.cpp * * Author: Aleksey Gerasimenko * gerasimenko.aleksey.n@gmail.com */ #include "SYSCTRL/PhaseAlertMonitor.h" namespace SYSCTRL { //CONSTRUCTOR PhaseAlertMonitor::PhaseAlertMonitor(): m_time_sample(-1.0), m_fault(false), m_warning(false), m_monitor(), status(), fault(false), warning(false), m_voltage_ab_exceed_level_1(), m_voltage_bc_exceed_level_1(), m_voltage_ca_exceed_level_1(), m_voltage_ab_exceed_level_2(), m_voltage_bc_exceed_level_2(), m_voltage_ca_exceed_level_2(), m_voltage_ab_exceed_level_3(), m_voltage_bc_exceed_level_3(), m_voltage_ca_exceed_level_3(), m_voltage_ab_exceed_level_4(), m_voltage_bc_exceed_level_4(), m_voltage_ca_exceed_level_4(), m_voltage_ab_decrease_level_1(), m_voltage_bc_decrease_level_1(), m_voltage_ca_decrease_level_1(), m_voltage_ab_decrease_level_2(), m_voltage_bc_decrease_level_2(), m_voltage_ca_decrease_level_2(), m_voltage_ab_decrease_level_3(), m_voltage_bc_decrease_level_3(), m_voltage_ca_decrease_level_3(), m_current_a_overload_level_1(), m_current_b_overload_level_1(), m_current_c_overload_level_1(), m_current_a_overload_level_2(), m_current_b_overload_level_2(), m_current_c_overload_level_2(), m_current_a_overload_level_3(), m_current_b_overload_level_3(), m_current_c_overload_level_3(), // m_current_invertor_a_overload_level_1(), m_current_invertor_b_overload_level_1(), m_current_invertor_c_overload_level_1(), m_current_invertor_a_overload_level_2(), m_current_invertor_b_overload_level_2(), m_current_invertor_c_overload_level_2(), m_current_invertor_a_overload_level_3(), m_current_invertor_b_overload_level_3(), m_current_invertor_c_overload_level_3(), // m_current_input_a_overload_level_1(), m_current_input_b_overload_level_1(), m_current_input_c_overload_level_1(), m_current_input_a_overload_level_2(), m_current_input_b_overload_level_2(), m_current_input_c_overload_level_2(), m_current_input_a_overload_level_3(), m_current_input_b_overload_level_3(), m_current_input_c_overload_level_3(), // _execute(&SYSCTRL::PhaseAlertMonitor::_execute_undef) // {}//CONSTRUCTOR void PhaseAlertMonitor::setup(float time_sample) { m_time_sample = time_sample; m_voltage_ab_exceed_level_1.setup(m_time_sample); m_voltage_bc_exceed_level_1.setup(m_time_sample); m_voltage_ca_exceed_level_1.setup(m_time_sample); m_voltage_ab_exceed_level_2.setup(m_time_sample); m_voltage_bc_exceed_level_2.setup(m_time_sample); m_voltage_ca_exceed_level_2.setup(m_time_sample); m_voltage_ab_exceed_level_3.setup(m_time_sample); m_voltage_bc_exceed_level_3.setup(m_time_sample); m_voltage_ca_exceed_level_3.setup(m_time_sample); m_voltage_ab_exceed_level_4.setup(m_time_sample); m_voltage_bc_exceed_level_4.setup(m_time_sample); m_voltage_ca_exceed_level_4.setup(m_time_sample); m_voltage_ab_decrease_level_1.setup(m_time_sample); m_voltage_bc_decrease_level_1.setup(m_time_sample); m_voltage_ca_decrease_level_1.setup(m_time_sample); m_voltage_ab_decrease_level_2.setup(m_time_sample); m_voltage_bc_decrease_level_2.setup(m_time_sample); m_voltage_ca_decrease_level_2.setup(m_time_sample); m_voltage_ab_decrease_level_3.setup(m_time_sample); m_voltage_bc_decrease_level_3.setup(m_time_sample); m_voltage_ca_decrease_level_3.setup(m_time_sample); m_current_a_overload_level_1.setup(m_time_sample); m_current_b_overload_level_1.setup(m_time_sample); m_current_c_overload_level_1.setup(m_time_sample); m_current_a_overload_level_2.setup(m_time_sample); m_current_b_overload_level_2.setup(m_time_sample); m_current_c_overload_level_2.setup(m_time_sample); m_current_a_overload_level_3.setup(m_time_sample); m_current_b_overload_level_3.setup(m_time_sample); m_current_c_overload_level_3.setup(m_time_sample); m_current_invertor_a_overload_level_1.setup(m_time_sample); m_current_invertor_b_overload_level_1.setup(m_time_sample); m_current_invertor_c_overload_level_1.setup(m_time_sample); m_current_invertor_a_overload_level_2.setup(m_time_sample); m_current_invertor_b_overload_level_2.setup(m_time_sample); m_current_invertor_c_overload_level_2.setup(m_time_sample); m_current_invertor_a_overload_level_3.setup(m_time_sample); m_current_invertor_b_overload_level_3.setup(m_time_sample); m_current_invertor_c_overload_level_3.setup(m_time_sample); m_current_input_a_overload_level_1.setup(m_time_sample); m_current_input_b_overload_level_1.setup(m_time_sample); m_current_input_c_overload_level_1.setup(m_time_sample); m_current_input_a_overload_level_2.setup(m_time_sample); m_current_input_b_overload_level_2.setup(m_time_sample); m_current_input_c_overload_level_2.setup(m_time_sample); m_current_input_a_overload_level_3.setup(m_time_sample); m_current_input_b_overload_level_3.setup(m_time_sample); m_current_input_c_overload_level_3.setup(m_time_sample); // }//setup() // void PhaseAlertMonitor::configure(const PhaseAlertConfiguration& config) { m_voltage_ab_exceed_level_1.configure(config.voltage_exceed_level_1); m_voltage_bc_exceed_level_1.configure(config.voltage_exceed_level_1); m_voltage_ca_exceed_level_1.configure(config.voltage_exceed_level_1); m_voltage_ab_exceed_level_2.configure(config.voltage_exceed_level_2); m_voltage_bc_exceed_level_2.configure(config.voltage_exceed_level_2); m_voltage_ca_exceed_level_2.configure(config.voltage_exceed_level_2); m_voltage_ab_exceed_level_3.configure(config.voltage_exceed_level_3); m_voltage_bc_exceed_level_3.configure(config.voltage_exceed_level_3); m_voltage_ca_exceed_level_3.configure(config.voltage_exceed_level_3); m_voltage_ab_exceed_level_4.configure(config.voltage_exceed_level_4); m_voltage_bc_exceed_level_4.configure(config.voltage_exceed_level_4); m_voltage_ca_exceed_level_4.configure(config.voltage_exceed_level_4); m_voltage_ab_decrease_level_1.configure(config.voltage_decrease_level_1); m_voltage_bc_decrease_level_1.configure(config.voltage_decrease_level_1); m_voltage_ca_decrease_level_1.configure(config.voltage_decrease_level_1); m_voltage_ab_decrease_level_2.configure(config.voltage_decrease_level_2); m_voltage_bc_decrease_level_2.configure(config.voltage_decrease_level_2); m_voltage_ca_decrease_level_2.configure(config.voltage_decrease_level_2); m_voltage_ab_decrease_level_3.configure(config.voltage_decrease_level_3); m_voltage_bc_decrease_level_3.configure(config.voltage_decrease_level_3); m_voltage_ca_decrease_level_3.configure(config.voltage_decrease_level_3); m_current_a_overload_level_1.configure(config.current_overload_level_1); m_current_b_overload_level_1.configure(config.current_overload_level_1); m_current_c_overload_level_1.configure(config.current_overload_level_1); m_current_a_overload_level_2.configure(config.current_overload_level_2); m_current_b_overload_level_2.configure(config.current_overload_level_2); m_current_c_overload_level_2.configure(config.current_overload_level_2); m_current_a_overload_level_3.configure(config.current_overload_level_3); m_current_b_overload_level_3.configure(config.current_overload_level_3); m_current_c_overload_level_3.configure(config.current_overload_level_3); // m_current_invertor_a_overload_level_1.configure(config.current_invertor_overload_level_1); m_current_invertor_b_overload_level_1.configure(config.current_invertor_overload_level_1); m_current_invertor_c_overload_level_1.configure(config.current_invertor_overload_level_1); m_current_invertor_a_overload_level_2.configure(config.current_invertor_overload_level_2); m_current_invertor_b_overload_level_2.configure(config.current_invertor_overload_level_2); m_current_invertor_c_overload_level_2.configure(config.current_invertor_overload_level_2); m_current_invertor_a_overload_level_3.configure(config.current_invertor_overload_level_3); m_current_invertor_b_overload_level_3.configure(config.current_invertor_overload_level_3); m_current_invertor_c_overload_level_3.configure(config.current_invertor_overload_level_3); // m_current_input_a_overload_level_1.configure(config.current_input_overload_level_1); m_current_input_b_overload_level_1.configure(config.current_input_overload_level_1); m_current_input_c_overload_level_1.configure(config.current_input_overload_level_1); m_current_input_a_overload_level_2.configure(config.current_input_overload_level_2); m_current_input_b_overload_level_2.configure(config.current_input_overload_level_2); m_current_input_c_overload_level_2.configure(config.current_input_overload_level_2); m_current_input_a_overload_level_3.configure(config.current_input_overload_level_3); m_current_input_b_overload_level_3.configure(config.current_input_overload_level_3); m_current_input_c_overload_level_3.configure(config.current_input_overload_level_3); if((m_time_sample > FP_ZERO)) { _execute = &SYSCTRL::PhaseAlertMonitor::_execute_operational; // }//if // }//configure() // #pragma CODE_SECTION("ramfuncs"); void PhaseAlertMonitor::get_faults(PhaseFaultRegister& ph_a, PhaseFaultRegister& ph_b, PhaseFaultRegister& ph_c) { ph_a.all = m_monitor.phase_a.fault.all; ph_b.all = m_monitor.phase_b.fault.all; ph_c.all = m_monitor.phase_c.fault.all; // }// // // #pragma CODE_SECTION("ramfuncs"); void PhaseAlertMonitor::reset() { m_monitor.phase_a.warning.all = (uint16_t)0; m_monitor.phase_a.fault.all = (uint16_t)0; m_monitor.phase_b.warning.all = (uint16_t)0; m_monitor.phase_b.fault.all = (uint16_t)0; m_monitor.phase_c.warning.all = (uint16_t)0; m_monitor.phase_c.fault.all = (uint16_t)0; // m_monitor.phase_a.warning.all = (uint16_t)0; m_monitor.phase_a.fault.all = (uint16_t)0; m_monitor.phase_b.warning.all = (uint16_t)0; m_monitor.phase_b.fault.all = (uint16_t)0; m_monitor.phase_c.warning.all = (uint16_t)0; m_monitor.phase_c.fault.all = (uint16_t)0; // m_voltage_ab_exceed_level_1.reset(); m_voltage_bc_exceed_level_1.reset(); m_voltage_ca_exceed_level_1.reset(); m_voltage_ab_exceed_level_2.reset(); m_voltage_bc_exceed_level_2.reset(); m_voltage_ca_exceed_level_2.reset(); m_voltage_ab_exceed_level_3.reset(); m_voltage_bc_exceed_level_3.reset(); m_voltage_ca_exceed_level_3.reset(); m_voltage_ab_exceed_level_4.reset(); m_voltage_bc_exceed_level_4.reset(); m_voltage_ca_exceed_level_4.reset(); m_voltage_ab_decrease_level_1.reset(); m_voltage_bc_decrease_level_1.reset(); m_voltage_ca_decrease_level_1.reset(); m_voltage_ab_decrease_level_2.reset(); m_voltage_bc_decrease_level_2.reset(); m_voltage_ca_decrease_level_2.reset(); m_voltage_ab_decrease_level_3.reset(); m_voltage_bc_decrease_level_3.reset(); m_voltage_ca_decrease_level_3.reset(); m_current_a_overload_level_1.reset(); m_current_b_overload_level_1.reset(); m_current_c_overload_level_1.reset(); m_current_a_overload_level_2.reset(); m_current_b_overload_level_2.reset(); m_current_c_overload_level_2.reset(); m_current_a_overload_level_3.reset(); m_current_b_overload_level_3.reset(); m_current_c_overload_level_3.reset(); m_current_invertor_a_overload_level_1.reset(); m_current_invertor_b_overload_level_1.reset(); m_current_invertor_c_overload_level_1.reset(); m_current_invertor_a_overload_level_2.reset(); m_current_invertor_b_overload_level_2.reset(); m_current_invertor_c_overload_level_2.reset(); m_current_invertor_a_overload_level_3.reset(); m_current_invertor_b_overload_level_3.reset(); m_current_invertor_c_overload_level_3.reset(); // m_fault = false; m_warning = false; warning = m_warning; fault = m_fault; status = m_monitor; // }//reset() // #pragma CODE_SECTION("ramfuncs"); void PhaseAlertMonitor::execute(float urmsa, float urmsb, float urmsc, float irmsa, float irmsb, float irmsc, float invrmsa, float invrmsb, float invrmsc, float inprmsa, float inprmsb, float inprmsc) { (this->*_execute)(urmsa, urmsb, urmsc, irmsa, irmsb, irmsc, invrmsa, invrmsb, invrmsc, inprmsa, inprmsb, inprmsc); // }//execute() // #pragma CODE_SECTION("ramfuncs"); void PhaseAlertMonitor::_execute_undef(float urmsa, float urmsb, float urmsc, float irmsa, float irmsb, float irmsc, float invrmsa, float invrmsb, float invrmsc, float inprmsa, float inprmsb, float inprmsc) { // }//_execute_undef() // #pragma CODE_SECTION("ramfuncs"); void PhaseAlertMonitor::_execute_operational(float urmsa, float urmsb, float urmsc, float irmsa, float irmsb, float irmsc, float invrmsa, float invrmsb, float invrmsc, float inprmsa, float inprmsb, float inprmsc) { static bool _warning = false; _warning = false; m_monitor.phase_a.warning.all = (uint16_t)0; m_monitor.phase_a.fault.all = (uint16_t)0; m_monitor.phase_b.warning.all = (uint16_t)0; m_monitor.phase_b.fault.all = (uint16_t)0; m_monitor.phase_c.warning.all = (uint16_t)0; m_monitor.phase_c.fault.all = (uint16_t)0; // m_voltage_ab_exceed_level_1.execute(urmsa); m_voltage_bc_exceed_level_1.execute(urmsb); m_voltage_ca_exceed_level_1.execute(urmsc); m_voltage_ab_exceed_level_2.execute(urmsa); m_voltage_bc_exceed_level_2.execute(urmsb); m_voltage_ca_exceed_level_2.execute(urmsc); m_voltage_ab_exceed_level_3.execute(urmsa); m_voltage_bc_exceed_level_3.execute(urmsb); m_voltage_ca_exceed_level_3.execute(urmsc); m_voltage_ab_exceed_level_4.execute(urmsa); m_voltage_bc_exceed_level_4.execute(urmsb); m_voltage_ca_exceed_level_4.execute(urmsc); /* m_voltage_a_decrease_level_1.execute(urmsa); m_voltage_b_decrease_level_1.execute(urmsb); m_voltage_c_decrease_level_1.execute(urmsc); m_voltage_a_decrease_level_2.execute(urmsa); m_voltage_b_decrease_level_2.execute(urmsb); m_voltage_c_decrease_level_2.execute(urmsc); m_voltage_a_decrease_level_3.execute(urmsa); m_voltage_b_decrease_level_3.execute(urmsb); m_voltage_c_decrease_level_3.execute(urmsc); */ m_current_a_overload_level_1.execute(irmsa); m_current_b_overload_level_1.execute(irmsb); m_current_c_overload_level_1.execute(irmsc); m_current_a_overload_level_2.execute(irmsa); m_current_b_overload_level_2.execute(irmsb); m_current_c_overload_level_2.execute(irmsc); m_current_a_overload_level_3.execute(irmsa); m_current_b_overload_level_3.execute(irmsb); m_current_c_overload_level_3.execute(irmsc); m_current_invertor_a_overload_level_1.execute(invrmsa); m_current_invertor_b_overload_level_1.execute(invrmsb); m_current_invertor_c_overload_level_1.execute(invrmsc); m_current_invertor_a_overload_level_2.execute(invrmsa); m_current_invertor_b_overload_level_2.execute(invrmsb); m_current_invertor_c_overload_level_2.execute(invrmsc); m_current_invertor_a_overload_level_3.execute(invrmsa); m_current_invertor_b_overload_level_3.execute(invrmsb); m_current_invertor_c_overload_level_3.execute(invrmsc); // m_current_input_a_overload_level_1.execute(inprmsa); m_current_input_b_overload_level_1.execute(inprmsb); m_current_input_c_overload_level_1.execute(inprmsc); m_current_input_a_overload_level_2.execute(inprmsa); m_current_input_b_overload_level_2.execute(inprmsb); m_current_input_c_overload_level_2.execute(inprmsc); m_current_input_a_overload_level_3.execute(inprmsa); m_current_input_b_overload_level_3.execute(inprmsb); m_current_input_c_overload_level_3.execute(inprmsc); // // set flags m_monitor.phase_a.warning.bit.exceed_voltage_level_1 = m_voltage_ab_exceed_level_1.warning; m_monitor.phase_a.warning.bit.exceed_voltage_level_2 = m_voltage_ab_exceed_level_2.warning; m_monitor.phase_a.fault.bit.exceed_voltage_level_3 = m_voltage_ab_exceed_level_3.fault; m_monitor.phase_a.fault.bit.exceed_voltage_level_4 = m_voltage_ab_exceed_level_4.fault; m_monitor.phase_a.warning.bit.decrease_voltage_level_1 = m_voltage_ab_decrease_level_1.warning; m_monitor.phase_a.warning.bit.decrease_voltage_level_2 = m_voltage_ab_decrease_level_2.warning; m_monitor.phase_a.fault.bit.decrease_voltage_level_3 = m_voltage_ab_decrease_level_3.fault; m_monitor.phase_a.fault.bit.overload_current_level_1 = m_current_a_overload_level_1.fault; m_monitor.phase_a.fault.bit.overload_current_level_2 = m_current_a_overload_level_2.fault; m_monitor.phase_a.fault.bit.overload_current_level_3 = m_current_a_overload_level_3.fault; m_monitor.phase_a.fault.bit.overload_invertor_current_level_1 = m_current_invertor_a_overload_level_1.fault; m_monitor.phase_a.fault.bit.overload_invertor_current_level_2 = m_current_invertor_a_overload_level_2.fault; m_monitor.phase_a.fault.bit.overload_invertor_current_level_3 = m_current_invertor_a_overload_level_3.fault; m_monitor.phase_a.fault.bit.overload_input_current_level_1 = m_current_input_a_overload_level_1.fault; m_monitor.phase_a.fault.bit.overload_input_current_level_2 = m_current_input_a_overload_level_2.fault; m_monitor.phase_a.fault.bit.overload_input_current_level_3 = m_current_input_a_overload_level_3.fault; // m_monitor.phase_b.warning.bit.exceed_voltage_level_1 = m_voltage_bc_exceed_level_1.warning; m_monitor.phase_b.warning.bit.exceed_voltage_level_2 = m_voltage_bc_exceed_level_2.warning; m_monitor.phase_b.fault.bit.exceed_voltage_level_3 = m_voltage_bc_exceed_level_3.fault; m_monitor.phase_b.fault.bit.exceed_voltage_level_4 = m_voltage_bc_exceed_level_4.fault; m_monitor.phase_b.warning.bit.decrease_voltage_level_1 = m_voltage_bc_decrease_level_1.warning; m_monitor.phase_b.warning.bit.decrease_voltage_level_2 = m_voltage_bc_decrease_level_2.warning; m_monitor.phase_b.fault.bit.decrease_voltage_level_3 = m_voltage_bc_decrease_level_3.fault; m_monitor.phase_b.fault.bit.overload_current_level_1 = m_current_b_overload_level_1.fault; m_monitor.phase_b.fault.bit.overload_current_level_2 = m_current_b_overload_level_2.fault; m_monitor.phase_b.fault.bit.overload_current_level_3 = m_current_b_overload_level_3.fault; m_monitor.phase_b.fault.bit.overload_invertor_current_level_1 = m_current_invertor_b_overload_level_1.fault; m_monitor.phase_b.fault.bit.overload_invertor_current_level_2 = m_current_invertor_b_overload_level_2.fault; m_monitor.phase_b.fault.bit.overload_invertor_current_level_3 = m_current_invertor_b_overload_level_3.fault; m_monitor.phase_b.fault.bit.overload_input_current_level_1 = m_current_input_b_overload_level_1.fault; m_monitor.phase_b.fault.bit.overload_input_current_level_2 = m_current_input_b_overload_level_2.fault; m_monitor.phase_b.fault.bit.overload_input_current_level_3 = m_current_input_b_overload_level_3.fault; // m_monitor.phase_c.warning.bit.exceed_voltage_level_1 = m_voltage_ca_exceed_level_1.warning; m_monitor.phase_c.warning.bit.exceed_voltage_level_2 = m_voltage_ca_exceed_level_2.warning; m_monitor.phase_c.fault.bit.exceed_voltage_level_3 = m_voltage_ca_exceed_level_3.fault; m_monitor.phase_c.fault.bit.exceed_voltage_level_4 = m_voltage_ca_exceed_level_4.fault; m_monitor.phase_c.warning.bit.decrease_voltage_level_1 = m_voltage_ca_decrease_level_1.warning; m_monitor.phase_c.warning.bit.decrease_voltage_level_2 = m_voltage_ca_decrease_level_2.warning; m_monitor.phase_c.fault.bit.decrease_voltage_level_3 = m_voltage_ca_decrease_level_3.fault; m_monitor.phase_c.fault.bit.overload_current_level_1 = m_current_c_overload_level_1.fault; m_monitor.phase_c.fault.bit.overload_current_level_2 = m_current_c_overload_level_2.fault; m_monitor.phase_c.fault.bit.overload_current_level_3 = m_current_c_overload_level_3.fault; m_monitor.phase_c.fault.bit.overload_invertor_current_level_1 = m_current_invertor_c_overload_level_1.fault; m_monitor.phase_c.fault.bit.overload_invertor_current_level_2 = m_current_invertor_c_overload_level_2.fault; m_monitor.phase_c.fault.bit.overload_invertor_current_level_3 = m_current_invertor_c_overload_level_3.fault; m_monitor.phase_c.fault.bit.overload_input_current_level_1 = m_current_input_c_overload_level_1.fault; m_monitor.phase_c.fault.bit.overload_input_current_level_2 = m_current_input_c_overload_level_2.fault; m_monitor.phase_c.fault.bit.overload_input_current_level_3 = m_current_input_c_overload_level_3.fault; // status = m_monitor; // if(m_monitor.phase_a.fault.all != (uint16_t)0){ m_fault = true;} if(m_monitor.phase_b.fault.all != (uint16_t)0){ m_fault = true;} if(m_monitor.phase_c.fault.all != (uint16_t)0){ m_fault = true;} // if(m_monitor.phase_a.warning.all != (uint16_t)0){ _warning = true;} if(m_monitor.phase_b.warning.all != (uint16_t)0){ _warning = true;} if(m_monitor.phase_c.warning.all != (uint16_t)0){ _warning = true;} m_warning = _warning; warning = m_warning; fault = m_fault; // }//_execute_operational() } /* namespace SYSCTRL */