You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
243 lines
8.6 KiB
C++
243 lines
8.6 KiB
C++
/*
|
|
* PhaseAlertMonitor.h
|
|
*
|
|
* Author: Aleksey Gerasimenko
|
|
* gerasimenko.aleksey.n@gmail.com
|
|
*/
|
|
|
|
#include <math.h>
|
|
#include <stdint.h>
|
|
|
|
#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_ */
|
|
|