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.

95 lines
2.1 KiB
C++

/*
* ScaleCompute.cpp
*
* Author: Aleksey Gerasimenko
* gerasimenko.aleksey.n@gmail.com
*/
#include "SYSCTRL/ScaleCompute.h"
namespace SYSCTRL
{
//CONSTRUCTOR
ScaleCompute::ScaleCompute(float& phase_a, float& phase_b, float& phase_c, float& scale_a, float& scale_b, float& scale_c):
m_command(),
m_enable(),
//
m_reference_value(FP_ZERO),
//
m_p_phase_a(phase_a),
m_p_phase_b(phase_b),
m_p_phase_c(phase_c),
//
m_p_scale_a(scale_a),
m_p_scale_b(scale_b),
m_p_scale_c(scale_c),
//
m_value_phase_a(FP_ZERO),
m_value_phase_b(FP_ZERO),
m_value_phase_c(FP_ZERO),
//
m_scale_phase_a(FP_ZERO),
m_scale_phase_b(FP_ZERO),
m_scale_phase_c(FP_ZERO)
{}//CONSTRUCTOR
#pragma CODE_SECTION("ramfuncs");
void ScaleCompute::set_reference(float reference)
{
m_reference_value = reference;
//
}//
#pragma CODE_SECTION("ramfuncs");
void ScaleCompute::set_enable()
{
m_enable.bit.enable = 1;
//
}//
#pragma CODE_SECTION("ramfuncs");
void ScaleCompute::clear_enable()
{
m_enable.bit.enable = 0;
//
}//
#pragma CODE_SECTION("ramfuncs");
void ScaleCompute::fix()
{
if(m_enable.bit.enable == 1)
{
m_value_phase_a = m_p_phase_a;
m_value_phase_b = m_p_phase_b;
m_value_phase_c = m_p_phase_c;
//
m_scale_phase_a = new_scale_compute(m_reference_value, m_value_phase_a, m_p_scale_a);
m_scale_phase_b = new_scale_compute(m_reference_value, m_value_phase_b, m_p_scale_b);
m_scale_phase_c = new_scale_compute(m_reference_value, m_value_phase_c, m_p_scale_c);
//
m_p_scale_a = m_scale_phase_a;
m_p_scale_b = m_scale_phase_b;
m_p_scale_c = m_scale_phase_c;
//
}//if
}//
#pragma CODE_SECTION("ramfuncs");
inline float ScaleCompute::new_scale_compute(float ref, float value, float scale)
{
//
if((value != FP_ZERO) && (ref != FP_ZERO))
{
return ref * scale / value;
//
}
else
{
return scale;
//
}//if else
//
}//
} /* namespace SYSCTRL */