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.

244 lines
5.8 KiB
C++

/*
* CELL.cpp
*
* Author: Aleksey Gerasimenko
* gerasimenko.aleksey.n@gmail.com
*/
#include "SYSCTRL/HVCELL.h"
namespace SYSCTRL
{
HVCELL::HVCELL():
m_mode(SYSCTRL::HVCELL::UNDEFINED),
m_control_order(ORDER_STOP),
//m_switching_freq(SWITCHING_FREQ_2500),
m_cell_level(0),
m_cell_error(0),
m_pwm_version(),
m_cell_state(),
m_cell_dc_voltage(),
m_cell_version(),
m_cpu_cpld_version(0),
m_data_u(FP_ZERO),
m_data_v(FP_ZERO),
m_data_w(FP_ZERO),
//
m_dc_voltage_a(FP_ZERO),
m_dc_voltage_b(FP_ZERO),
m_dc_voltage_c(FP_ZERO),
//
m_fault_cell(false),
m_cell_error_fault(0),
m_cell_state_fault(),
//
p_send_syn_signal(&SYSCTRL::HVCELL::_empty),
p_send_control_order(&SYSCTRL::HVCELL::_empty),
p_set_cell_level(&SYSCTRL::HVCELL::_empty),
p_get_pwm_version(&SYSCTRL::HVCELL::_empty),
p_get_cell_state(&SYSCTRL::HVCELL::_empty),
p_get_cell_dc_voltage(&SYSCTRL::HVCELL::_empty),
p_get_cell_version(&SYSCTRL::HVCELL::_empty),
p_send_modulate_data(&SYSCTRL::HVCELL::_empty),
p_get_cpu_cpld_version(&SYSCTRL::HVCELL::_empty)
{}
#pragma CODE_SECTION("ramfuncs");
void HVCELL::configure(HVCELLConfiguration& config)
{
static bool status = true;
if(m_mode == SYSCTRL::HVCELL::UNDEFINED)
{
m_cell_level = config.cell_level;
//m_switching_freq = config.switching_freq;
status &= (m_cell_level >= 1)&&(m_cell_level <= 8) ? true : false;
if(status)
{
m_mode = SYSCTRL::HVCELL::OPERATIONAL;
//
p_send_syn_signal = &SYSCTRL::HVCELL::_send_syn_signal;
p_send_control_order = &SYSCTRL::HVCELL::_send_control_order;
p_set_cell_level = &SYSCTRL::HVCELL::_set_cell_level;
p_get_pwm_version = &SYSCTRL::HVCELL::_get_pwm_version;
p_get_cell_state = &SYSCTRL::HVCELL::_get_cell_state;
p_get_cell_dc_voltage = &SYSCTRL::HVCELL::_get_cell_dc_voltage;
p_get_cell_version = &SYSCTRL::HVCELL::_get_cell_version;
p_send_modulate_data = &SYSCTRL::HVCELL::_send_modulate_data;
p_get_cpu_cpld_version = &SYSCTRL::HVCELL::_get_cpu_cpld_version;
//
}//if
//
}//if
//
}//configure()
//
#pragma CODE_SECTION("ramfuncs");
SYSCTRL::HVCELL::mode_t HVCELL::get_mode()
{
return m_mode;
//
}//get_mode()
//
#pragma CODE_SECTION("ramfuncs");
bool HVCELL::compare(SYSCTRL::HVCELL::mode_t mode)
{
return m_mode == mode;
//
}//compare()
//
#pragma CODE_SECTION("ramfuncs");
void HVCELL::send_syn_signal()
{
(this->*p_send_syn_signal)();
//
}//send_syn_signal()
#pragma CODE_SECTION("ramfuncs");
void HVCELL::_send_syn_signal()
{
sendSynSignal();
//
}//_send_syn_signal()
//
#pragma CODE_SECTION("ramfuncs");
void HVCELL::send_control_order()
{
(this->*p_send_control_order)();
//
}//send_control_order_start()
//
#pragma CODE_SECTION("ramfuncs");
void HVCELL::_send_control_order()
{
sendControlOrder(m_control_order);
//
}//_send_control_order()
//
#pragma CODE_SECTION("ramfuncs");
void HVCELL::set_cell_level()
{
(this->*p_set_cell_level)();
//
}//set_cell_level()
//
#pragma CODE_SECTION("ramfuncs");
void HVCELL::_set_cell_level()
{
//m_cell_error = setCellLevel(m_cell_level, m_switching_freq);
m_cell_error = setCellLevel(m_cell_level);
//
}//_set_cell_level()
//
#pragma CODE_SECTION("ramfuncs");
void HVCELL::get_pwm_version()
{
(this->*p_get_pwm_version)();
//
}//get_pwm_version()
//
#pragma CODE_SECTION("ramfuncs");
void HVCELL::_get_pwm_version()
{
getPwmVersion(m_pwm_version);
//
}//_get_pwm_version()
//
#pragma CODE_SECTION("ramfuncs");
void HVCELL::get_cell_state()
{
(this->*p_get_cell_state)();
//
}//get_cell_state()
//
#pragma CODE_SECTION("ramfuncs");
void HVCELL::_get_cell_state()
{
getCellState(m_cell_level, m_cell_state);
//
}//_get_cell_state()
//
#pragma CODE_SECTION("ramfuncs");
void HVCELL::get_cell_dc_voltage()
{
(this->*p_get_cell_dc_voltage)();
//
}//get_cell_dc_voltage()
//
#pragma CODE_SECTION("ramfuncs");
void HVCELL::_get_cell_dc_voltage()
{
static float aux_a, aux_b, aux_c;
getCellDCVoltage(m_cell_level, m_cell_dc_voltage);
aux_a = FP_ZERO;
aux_b = FP_ZERO;
aux_c = FP_ZERO;
//
for(Uint16 cellnum = 0; cellnum < m_cell_level; cellnum++)
{
aux_a += m_cell_dc_voltage[0][cellnum];
aux_b += m_cell_dc_voltage[1][cellnum];
aux_c += m_cell_dc_voltage[2][cellnum];
//
}//for
//
m_dc_voltage_a = aux_a;
m_dc_voltage_b = aux_b;
m_dc_voltage_c = aux_c;
//
}//_get_cell_dc_voltage()
//
#pragma CODE_SECTION("ramfuncs");
void HVCELL::get_cell_version()
{
(this->*p_get_cell_version)();
//
}//get_cell_version()
//
#pragma CODE_SECTION("ramfuncs");
void HVCELL::_get_cell_version()
{
getCellVersion(m_cell_level, m_cell_version);
//
}//get_cell_version()
//
#pragma CODE_SECTION("ramfuncs");
void HVCELL::send_modulate_data()
{
(this->*p_send_modulate_data)();
//
}//send_modulate_data()
//
#pragma CODE_SECTION("ramfuncs");
void HVCELL::_send_modulate_data()
{
//sendModulateData(m_data_u, m_data_v, m_data_w, m_switching_freq);
sendModulateData(m_data_u, m_data_v, m_data_w);
//
}//_send_modulate_data()
//
#pragma CODE_SECTION("ramfuncs");
void HVCELL::get_cpu_cpld_version()
{
(this->*p_get_cpu_cpld_version)();
//
}//get_cpu_cpld_version()
//
#pragma CODE_SECTION("ramfuncs");
void HVCELL::_get_cpu_cpld_version()
{
m_cpu_cpld_version = getCpuCpldVersion();
//
}//_get_cpu_cpld_version()
//
#pragma CODE_SECTION("ramfuncs");
void HVCELL::_empty()
{}//_empty()
//
} /* namespace SYSCTRL */