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.
181 lines
11 KiB
C++
181 lines
11 KiB
C++
/*
|
|
* SymmetricalComponents.cpp
|
|
*
|
|
* Author: Aleksey Gerasimenko
|
|
* gerasimenko.aleksey.n@gmail.com
|
|
*/
|
|
|
|
#include "SYSCTRL/SymmetricalComponents.h"
|
|
|
|
namespace SYSCTRL
|
|
{
|
|
//CONSTRUCTOR
|
|
SymmetricalComponents::SymmetricalComponents()
|
|
{}//CONSTRUCTOR
|
|
//
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void SymmetricalComponents::compute_symmetrical_components_axis_common(const SYSCTRL::ProjectionAnalogSignalStructure in_ph_a,
|
|
const SYSCTRL::ProjectionAnalogSignalStructure in_ph_b,
|
|
const SYSCTRL::ProjectionAnalogSignalStructure in_ph_c,
|
|
SYSCTRL::SymmetricalComponentsStructure& out)
|
|
{
|
|
SYSCTRL::SymmetricalComponents::compute_direct_symmetrical_components_axis_common(in_ph_a, in_ph_b, in_ph_c, out.direct);
|
|
SYSCTRL::SymmetricalComponents::compute_inverse_symmetrical_components_axis_common(in_ph_a, in_ph_b, in_ph_c, out.inverse);
|
|
SYSCTRL::SymmetricalComponents::compute_zero_symmetrical_components_axis_common(in_ph_a, in_ph_b, in_ph_c, out.zero);
|
|
//
|
|
}//
|
|
//
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void SymmetricalComponents::compute_direct_symmetrical_components_axis_common(const SYSCTRL::ProjectionAnalogSignalStructure in_ph_a,
|
|
const SYSCTRL::ProjectionAnalogSignalStructure in_ph_b,
|
|
const SYSCTRL::ProjectionAnalogSignalStructure in_ph_c,
|
|
SYSCTRL::SymmetricalComponentsPhase& out)
|
|
{
|
|
SYSCTRL::SymmetricalComponents::_direct_common_inverse_own(in_ph_a, in_ph_b, in_ph_c, out);
|
|
|
|
out.b.active = -m_coefficient_a * out.a.active + m_coefficient_b * out.a.reactive;
|
|
out.b.reactive = -m_coefficient_b * out.a.active - m_coefficient_a * out.a.reactive;
|
|
|
|
out.c.active = -m_coefficient_a * out.a.active - m_coefficient_b * out.a.reactive;
|
|
out.c.reactive = m_coefficient_b * out.a.active - m_coefficient_a * out.a.reactive;
|
|
//
|
|
}//
|
|
//
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void SymmetricalComponents::compute_inverse_symmetrical_components_axis_common(const SYSCTRL::ProjectionAnalogSignalStructure in_ph_a,
|
|
const SYSCTRL::ProjectionAnalogSignalStructure in_ph_b,
|
|
const SYSCTRL::ProjectionAnalogSignalStructure in_ph_c,
|
|
SYSCTRL::SymmetricalComponentsPhase& out)
|
|
{
|
|
SYSCTRL::SymmetricalComponents::_inverse_common_zero_own(in_ph_a, in_ph_b, in_ph_c, out);
|
|
|
|
out.b.active = -m_coefficient_a * out.a.active - m_coefficient_b * out.a.reactive;
|
|
out.b.reactive = m_coefficient_b * out.a.active - m_coefficient_a * out.a.reactive;
|
|
|
|
out.c.active = -m_coefficient_a * out.a.active + m_coefficient_b * out.a.reactive;
|
|
out.c.reactive = -m_coefficient_b * out.a.active - m_coefficient_a * out.a.reactive;
|
|
//
|
|
}//
|
|
//
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void SymmetricalComponents::compute_zero_symmetrical_components_axis_common(const SYSCTRL::ProjectionAnalogSignalStructure in_ph_a,
|
|
const SYSCTRL::ProjectionAnalogSignalStructure in_ph_b,
|
|
const SYSCTRL::ProjectionAnalogSignalStructure in_ph_c,
|
|
SYSCTRL::SymmetricalComponentsPhase& out)
|
|
{
|
|
SYSCTRL::SymmetricalComponents::_zero_common_direct_own(in_ph_a, in_ph_b, in_ph_c, out);
|
|
|
|
out.b.active = out.a.active;
|
|
out.b.reactive = out.a.reactive;
|
|
|
|
out.c.active = out.a.active;
|
|
out.c.reactive = out.a.reactive;
|
|
//
|
|
}//
|
|
//
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void SymmetricalComponents::compute_symmetrical_components_axis_own(const SYSCTRL::ProjectionAnalogSignalStructure in_ph_a,
|
|
const SYSCTRL::ProjectionAnalogSignalStructure in_ph_b,
|
|
const SYSCTRL::ProjectionAnalogSignalStructure in_ph_c,
|
|
SYSCTRL::SymmetricalComponentsStructure& out)
|
|
{
|
|
SYSCTRL::SymmetricalComponents::compute_direct_symmetrical_components_axis_own(in_ph_a, in_ph_b, in_ph_c, out.direct);
|
|
SYSCTRL::SymmetricalComponents::compute_inverse_symmetrical_components_axis_own(in_ph_a, in_ph_b, in_ph_c, out.inverse);
|
|
SYSCTRL::SymmetricalComponents::compute_zero_symmetrical_components_axis_own(in_ph_a, in_ph_b, in_ph_c, out.zero);
|
|
//
|
|
}//
|
|
//
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void SymmetricalComponents::compute_direct_symmetrical_components_axis_own(const SYSCTRL::ProjectionAnalogSignalStructure in_ph_a,
|
|
const SYSCTRL::ProjectionAnalogSignalStructure in_ph_b,
|
|
const SYSCTRL::ProjectionAnalogSignalStructure in_ph_c,
|
|
SYSCTRL::SymmetricalComponentsPhase& out)
|
|
{
|
|
SYSCTRL::SymmetricalComponents::_zero_common_direct_own(in_ph_a, in_ph_b, in_ph_c, out);
|
|
|
|
//out.b.active = -m_coefficient_a * out.a.active + m_coefficient_b * out.a.reactive;
|
|
//out.b.reactive = -m_coefficient_b * out.a.active - m_coefficient_a * out.a.reactive;
|
|
out.b.active = 0.8660254 * (out.a.reactive - 0.577350269 * out.a.active);
|
|
out.b.reactive = -0.8660254 * (out.a.active + 0.577350269 * out.a.reactive);
|
|
|
|
//out.c.active = -m_coefficient_a * out.a.active - m_coefficient_b * out.a.reactive;
|
|
//out.c.reactive = m_coefficient_b * out.a.active - m_coefficient_a * out.a.reactive;
|
|
out.c.active = -0.8660254 * (0.577350269 * out.a.active + out.a.reactive);
|
|
out.c.reactive = 0.8660254 * (out.a.active - 0.577350269 * out.a.reactive);
|
|
//
|
|
}//
|
|
//
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void SymmetricalComponents::compute_inverse_symmetrical_components_axis_own(const SYSCTRL::ProjectionAnalogSignalStructure in_ph_a,
|
|
const SYSCTRL::ProjectionAnalogSignalStructure in_ph_b,
|
|
const SYSCTRL::ProjectionAnalogSignalStructure in_ph_c,
|
|
SYSCTRL::SymmetricalComponentsPhase& out)
|
|
{
|
|
SYSCTRL::SymmetricalComponents::_direct_common_inverse_own(in_ph_a, in_ph_b, in_ph_c, out);
|
|
|
|
//out.b.active = -m_coefficient_a * out.a.active - m_coefficient_b * out.a.reactive;
|
|
//out.b.reactive = m_coefficient_b * out.a.active - m_coefficient_a * out.a.reactive;
|
|
out.b.active = -0.8660254 * (0.577350269 * out.a.active + out.a.reactive);
|
|
out.b.reactive = 0.8660254 * (out.a.active - 0.577350269 * out.a.reactive);
|
|
|
|
//out.c.active = -m_coefficient_a * out.a.active + m_coefficient_b * out.a.reactive;
|
|
//out.c.reactive = -m_coefficient_b * out.a.active - m_coefficient_a * out.a.reactive;
|
|
out.c.active = 0.8660254 * (out.a.reactive - 0.577350269 * out.a.active);
|
|
out.c.reactive = -0.8660254 * (out.a.active + 0.577350269 * out.a.reactive);
|
|
//
|
|
}//
|
|
//
|
|
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
void SymmetricalComponents::compute_zero_symmetrical_components_axis_own(const SYSCTRL::ProjectionAnalogSignalStructure in_ph_a,
|
|
const SYSCTRL::ProjectionAnalogSignalStructure in_ph_b,
|
|
const SYSCTRL::ProjectionAnalogSignalStructure in_ph_c,
|
|
SYSCTRL::SymmetricalComponentsPhase& out)
|
|
{
|
|
SYSCTRL::SymmetricalComponents::_inverse_common_zero_own(in_ph_a, in_ph_b, in_ph_c, out);
|
|
|
|
out.b.active = out.a.active;
|
|
out.b.reactive = out.a.reactive;
|
|
|
|
out.c.active = out.a.active;
|
|
out.c.reactive = out.a.reactive;
|
|
//
|
|
}//
|
|
//
|
|
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
inline void SymmetricalComponents::_direct_common_inverse_own(const SYSCTRL::ProjectionAnalogSignalStructure in_ph_a,
|
|
const SYSCTRL::ProjectionAnalogSignalStructure in_ph_b,
|
|
const SYSCTRL::ProjectionAnalogSignalStructure in_ph_c,
|
|
SYSCTRL::SymmetricalComponentsPhase& out)
|
|
{
|
|
out.a.active = m_three_recipcoral * (in_ph_a.active - m_coefficient_a * (in_ph_b.active + in_ph_c.active) - m_coefficient_b * (in_ph_b.reactive - in_ph_c.reactive));
|
|
out.a.reactive = m_three_recipcoral * (in_ph_a.reactive - m_coefficient_a * (in_ph_b.reactive + in_ph_c.reactive) + m_coefficient_b * (in_ph_b.active - in_ph_c.active));
|
|
//
|
|
}//
|
|
//
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
inline void SymmetricalComponents::_inverse_common_zero_own(const SYSCTRL::ProjectionAnalogSignalStructure in_ph_a,
|
|
const SYSCTRL::ProjectionAnalogSignalStructure in_ph_b,
|
|
const SYSCTRL::ProjectionAnalogSignalStructure in_ph_c,
|
|
SYSCTRL::SymmetricalComponentsPhase& out)
|
|
{
|
|
out.a.active = m_three_recipcoral * (in_ph_a.active - m_coefficient_a * (in_ph_b.active + in_ph_c.active) + m_coefficient_b * (in_ph_b.reactive - in_ph_c.reactive));
|
|
out.a.reactive = m_three_recipcoral * (in_ph_a.reactive - m_coefficient_a * (in_ph_b.reactive + in_ph_c.reactive) - m_coefficient_b * (in_ph_b.active - in_ph_c.active));
|
|
//
|
|
}//
|
|
//
|
|
#pragma CODE_SECTION("ramfuncs");
|
|
inline void SymmetricalComponents::_zero_common_direct_own(const SYSCTRL::ProjectionAnalogSignalStructure in_ph_a,
|
|
const SYSCTRL::ProjectionAnalogSignalStructure in_ph_b,
|
|
const SYSCTRL::ProjectionAnalogSignalStructure in_ph_c,
|
|
SYSCTRL::SymmetricalComponentsPhase& out)
|
|
{
|
|
out.a.active = m_three_recipcoral * (in_ph_a.active + in_ph_b.active + in_ph_c.active);
|
|
out.a.reactive = m_three_recipcoral * (in_ph_a.reactive + in_ph_b.reactive + in_ph_c.reactive);
|
|
//
|
|
}//
|
|
//
|
|
//
|
|
} /* namespace SYSCTRL */
|