diff --git a/.ccsproject b/.ccsproject
index e963963..e8b6b16 100644
--- a/.ccsproject
+++ b/.ccsproject
@@ -9,6 +9,6 @@
-
+
diff --git a/.cproject b/.cproject
index 7b141b6..c9fa7f1 100644
--- a/.cproject
+++ b/.cproject
@@ -29,18 +29,18 @@
-
+
-
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
diff --git a/.project b/.project
index fab4582..15b1aeb 100644
--- a/.project
+++ b/.project
@@ -1,6 +1,6 @@
- DVR500Framework
+ DVR1kFramework
@@ -138,7 +138,7 @@
ORIGINAL_PROJECT_ROOT
- file:/C:/CCSWorkSpaces/Framework_500_Hz/sys/build/framework
+ file:/C:/CCSWorkSpaces/Framework_1000_Hz/sys/build/framework
SRC_ROOT
diff --git a/FRAM/FRAMConfigurationParameters.cpp b/FRAM/FRAMConfigurationParameters.cpp
index b375d3b..f4369da 100644
--- a/FRAM/FRAMConfigurationParameters.cpp
+++ b/FRAM/FRAMConfigurationParameters.cpp
@@ -53,9 +53,9 @@ void FRAMDATABASE::register_configuration_parameters(SYSCTRL::SystemControlConfi
//
// Scale Analog Signals
//
- add_float( 0, &sys_config->scale_voltage_input_a, 0.166324854);//0.0227386411//0.0233486816;
- add_float( 0, &sys_config->scale_voltage_input_b, 0.166955084);//0.0227597337//0.0234651081;
- add_float( 0, &sys_config->scale_voltage_input_c, 0.170290515);//0.02278281//0.0236082859;
+ add_float( 0, &sys_config->scale_voltage_input_a, 0.171899959);// 0.166324854);//0.0227386411//0.0233486816;
+ add_float( 0, &sys_config->scale_voltage_input_b, 0.171521276);//0.166955084);//0.0227597337//0.0234651081;
+ add_float( 0, &sys_config->scale_voltage_input_c, 0.17439343);//0.170290515);//0.02278281//0.0236082859;
//
add_float( 0, &sys_config->scale_current_input_a, 0.0057266783);
add_float( 0, &sys_config->scale_current_input_b, 0.00571648451);
@@ -65,9 +65,9 @@ void FRAMDATABASE::register_configuration_parameters(SYSCTRL::SystemControlConfi
add_float( 0, &sys_config->scale_current_cell_b, 0.00967073813);//0.00667640707;
add_float( 0, &sys_config->scale_current_cell_c, 0.00962774921);//0.00666095456;
//
- add_float( 0, &sys_config->scale_voltage_load_a, 0.168764219);//0.0227408651//0.0232194811;
- add_float( 0, &sys_config->scale_voltage_load_b, 0.167528242);//0.0227707103//0.0233941432;
- add_float( 0, &sys_config->scale_voltage_load_c, 0.171417475);//0.0229060184//0.0234934501;
+ add_float( 0, &sys_config->scale_voltage_load_a, 0.174201488);//0.168764219);//0.0227408651//0.0232194811;
+ add_float( 0, &sys_config->scale_voltage_load_b, 0.172130167);//0.167528242);//0.0227707103//0.0233941432;
+ add_float( 0, &sys_config->scale_voltage_load_c, 0.175496697);//0.171417475);//0.0229060184//0.0234934501;
//
add_float( 0, &sys_config->scale_current_load_a, 0.00949461199);//0.00668919506;
add_float( 0, &sys_config->scale_current_load_b, 0.00953965727);//0.00669770781;
@@ -359,20 +359,26 @@ void FRAMDATABASE::register_configuration_parameters(SYSCTRL::SystemControlConfi
#if TYPECONTROL == SCALARCONTROL
-
+#if SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_ABC
#if TYPEVOLTAGEDECOMPOSE == TYPEVOLTAGEDECOMPOSE_DIFFICULT
add_float( 0, &sys_config->regulator_voltage_load_active_reactive.gain, 0.04);
add_float( 0, &sys_config->regulator_voltage_load_active_reactive.time, 10.0e-3);
- add_float( 0, &sys_config->regulator_voltage_load_active_reactive.high_saturation, 1800.0);
- add_float( 0, &sys_config->regulator_voltage_load_active_reactive.low_saturation, -1800.0);
+ add_float( 0, &sys_config->regulator_voltage_load_active_reactive.high_saturation, REGULATOR_VOLTAGE_ABC_SATURATION);
+ add_float( 0, &sys_config->regulator_voltage_load_active_reactive.low_saturation, -REGULATOR_VOLTAGE_ABC_SATURATION);
#endif
#if TYPEVOLTAGEDECOMPOSE == TYPEVOLTAGEDECOMPOSE_SIMPLE
add_float( 0, &sys_config->regulator_voltage_load_active_reactive.gain, 1/5.0);
add_float( 0, &sys_config->regulator_voltage_load_active_reactive.time, REGULATORVOLTAGETIME);
- add_float( 0, &sys_config->regulator_voltage_load_active_reactive.high_saturation, 1800.0); // for debug!!!
- add_float( 0, &sys_config->regulator_voltage_load_active_reactive.low_saturation, -1800.0); // for debug!!!
+ add_float( 0, &sys_config->regulator_voltage_load_active_reactive.high_saturation, REGULATOR_VOLTAGE_ABC_SATURATION); // for debug!!!
+ add_float( 0, &sys_config->regulator_voltage_load_active_reactive.low_saturation, -REGULATOR_VOLTAGE_ABC_SATURATION); // for debug!!!
+#endif
+#endif
+#if SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_RMS
+ add_float( 0, &sys_config->reference_voltage_load_rms_intensity.time, REFERENCE_INTENSITY_VOLTAGE_RMS_TIME);
+ add_float( 0, &sys_config->regulator_voltage_load_rms.time, REGULATOR_VOLTAGE_RMS_TIME);
+ add_float( 0, &sys_config->regulator_voltage_load_rms.high_saturation, REGULATOR_VOLTAGE_RMS_SATURATION);
+ add_float( 0, &sys_config->regulator_voltage_load_rms.low_saturation, FP_ZERO);
#endif
-
//
add_float( 0, &sys_config->regulator_current_limit.gain, 1.0);
add_float( 0, &sys_config->regulator_current_limit.time, 5.0);
@@ -384,25 +390,25 @@ void FRAMDATABASE::register_configuration_parameters(SYSCTRL::SystemControlConfi
add_float( 0, &sys_config->regulator_current_pfc.high_saturation, GRID_VOLTAGE_REFERENCE * 0.57735);
add_float( 0, &sys_config->regulator_current_pfc.low_saturation, -GRID_VOLTAGE_REFERENCE * 0.57735);
//
- add_float( 0, &sys_config->current_regulator_active.gain, 0.34); // 0.34 for single winding 0.17 for double winding
- add_float( 0, &sys_config->current_regulator_active.time, 0.04);
+ add_float( 0, &sys_config->current_regulator_active.gain, 0.17); // 0.34 for single winding 0.17 for double winding
+ add_float( 0, &sys_config->current_regulator_active.time, 0.08);
add_float( 0, &sys_config->current_regulator_active.high_saturation, 500.0);
add_float( 0, &sys_config->current_regulator_active.low_saturation, -500.0);
//
- add_float( 0, &sys_config->current_regulator_reactive.gain, 0.34); // 0.34 for single winding 0.17 for double winding
- add_float( 0, &sys_config->current_regulator_reactive.time, 0.04);
+ add_float( 0, &sys_config->current_regulator_reactive.gain, 0.17); // 0.34 for single winding 0.17 for double winding
+ add_float( 0, &sys_config->current_regulator_reactive.time, 0.08);
add_float( 0, &sys_config->current_regulator_reactive.high_saturation, 500.0);
add_float( 0, &sys_config->current_regulator_reactive.low_saturation, -500.0);
//
add_float( 0, &sys_config->current_referencer.gain, 1.0);
add_float( 0, &sys_config->current_referencer.time, 0.160);
- add_float( 0, &sys_config->current_referencer.high_saturation, 20.0);
- add_float( 0, &sys_config->current_referencer.low_saturation, -20.0);
+ add_float( 0, &sys_config->current_referencer.high_saturation, 57.8);
+ add_float( 0, &sys_config->current_referencer.low_saturation, -57.8);
//
- add_float( 0, &sys_config->regulator_dc_voltage.gain, 0.05);
- add_float( 0, &sys_config->regulator_dc_voltage.time, 800.0e-3);
- add_float( 0, &sys_config->regulator_dc_voltage.high_saturation, FP_ZERO);
- add_float( 0, &sys_config->regulator_dc_voltage.low_saturation, -GRID_VOLTAGE_REFERENCE * 0.57735);
+ //add_float( 0, &sys_config->regulator_dc_voltage.gain, 0.05);
+ //add_float( 0, &sys_config->regulator_dc_voltage.time, 800.0e-3);
+ //add_float( 0, &sys_config->regulator_dc_voltage.high_saturation, FP_ZERO);
+ //add_float( 0, &sys_config->regulator_dc_voltage.low_saturation, -GRID_VOLTAGE_REFERENCE * 0.57735);
#endif
//<>
diff --git a/Framework/Framework_Lib.lib b/Framework/Framework_Lib.lib
index 7e79b63..cc105ce 100644
Binary files a/Framework/Framework_Lib.lib and b/Framework/Framework_Lib.lib differ
diff --git a/SYSCTRL/AlgorithmContext.cpp b/SYSCTRL/AlgorithmContext.cpp
index 476b173..63b4ff1 100644
--- a/SYSCTRL/AlgorithmContext.cpp
+++ b/SYSCTRL/AlgorithmContext.cpp
@@ -467,9 +467,9 @@ void AlgorithmContext::_set_work_exe()
#if TYPECONTROL == SCALARCONTROL
//
- m_env.regulator_dc_a.reset();
- m_env.regulator_dc_b.reset();
- m_env.regulator_dc_c.reset();
+ //m_env.regulator_dc_a.reset();
+ //m_env.regulator_dc_b.reset();
+ //m_env.regulator_dc_c.reset();
//
m_env.regulator_current_limit_a.set_to_high_saturation();
m_env.regulator_current_pfc_a.reset();
@@ -480,6 +480,8 @@ void AlgorithmContext::_set_work_exe()
m_env.regulator_current_limit_c.set_to_high_saturation();
m_env.regulator_current_pfc_c.reset();
+
+#if SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_ABC
m_env.regulator_voltage_load_a_active.reset();
m_env.regulator_voltage_load_a_reactive.reset();
@@ -488,6 +490,11 @@ void AlgorithmContext::_set_work_exe()
m_env.regulator_voltage_load_c_active.reset();
m_env.regulator_voltage_load_c_reactive.reset();
+#endif
+#if SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_RMS
+ m_env.reference_voltage_load_rms_intensity.set_output(m_env.rms_voltage_load_module);
+ m_env.regulator_voltage_load_rms.reset();
+#endif
//
#endif
diff --git a/SYSCTRL/AlgorithmStart.cpp b/SYSCTRL/AlgorithmStart.cpp
index 1305334..759bdff 100644
--- a/SYSCTRL/AlgorithmStart.cpp
+++ b/SYSCTRL/AlgorithmStart.cpp
@@ -12,6 +12,9 @@ namespace SYSCTRL
//CONSTRUCTOR
AlgorithmStart::AlgorithmStart(SYSCTRL::SystemEnvironment& env):
SYSCTRL::AlgorithmBase(),
+#if TYPECONTROL == SCALARCONTROL
+ m_orts(),
+#endif
m_env(env),
#if TYPECONTROL == VECTORCONTROL
m_reference_zero(FP_ZERO),
@@ -147,13 +150,35 @@ void AlgorithmStart::_execute_run()
m_env.start_control.phase_a.feedback.current_cell_reactive = m_env.projection_current_cell_a.reactive;
//
//-control
+#if TYPE_ORTS == TYPE_ORTS_NORMAL
+ m_orts = m_env.main_abc_orts.phase_a;
+ _execute_single_phase(m_env.start_control.phase_a,
+ m_env.cell_dc_voltage_a_reciprocal,
+ m_env.current_referencer_a_active,
+ m_env.current_referencer_a_reactive,
+ m_env.current_regulator_a_active,
+ m_env.current_regulator_a_reactive);
+#endif
+#if TYPE_ORTS == TYPE_ORTS_BACK
+ m_orts.active = m_env.main_abc_orts.phase_c.reactive;
+ m_orts.reactive = -m_env.main_abc_orts.phase_c.active;
+ _execute_single_phase(m_env.start_control.phase_a,
+ m_env.cell_dc_voltage_a_reciprocal,
+ m_env.current_referencer_a_active,
+ m_env.current_referencer_a_reactive,
+ m_env.current_regulator_a_active,
+ m_env.current_regulator_a_reactive);
+#endif
+#if TYPE_ORTS == TYPE_ORTS_FORWARD
+ m_orts.active = -m_env.main_abc_orts.phase_b.reactive;
+ m_orts.reactive = m_env.main_abc_orts.phase_b.active;
_execute_single_phase(m_env.start_control.phase_a,
- m_env.main_abc_orts.phase_a,
m_env.cell_dc_voltage_a_reciprocal,
m_env.current_referencer_a_active,
m_env.current_referencer_a_reactive,
m_env.current_regulator_a_active,
m_env.current_regulator_a_reactive);
+#endif
//<>
//**** Phase B ***
@@ -174,13 +199,36 @@ void AlgorithmStart::_execute_run()
m_env.start_control.phase_b.feedback.current_cell_reactive = m_env.projection_current_cell_b.reactive;
//
//-control
+#if TYPE_ORTS == TYPE_ORTS_NORMAL
+ m_orts = m_env.main_abc_orts.phase_b;
+ _execute_single_phase(m_env.start_control.phase_b,
+ m_env.cell_dc_voltage_b_reciprocal,
+ m_env.current_referencer_b_active,
+ m_env.current_referencer_b_reactive,
+ m_env.current_regulator_b_active,
+ m_env.current_regulator_b_reactive);
+#endif
+#if TYPE_ORTS == TYPE_ORTS_BACK
+ m_orts.active = m_env.main_abc_orts.phase_a.reactive;
+ m_orts.reactive = -m_env.main_abc_orts.phase_a.active;
_execute_single_phase(m_env.start_control.phase_b,
- m_env.main_abc_orts.phase_b,
m_env.cell_dc_voltage_b_reciprocal,
m_env.current_referencer_b_active,
m_env.current_referencer_b_reactive,
m_env.current_regulator_b_active,
m_env.current_regulator_b_reactive);
+#endif
+#if TYPE_ORTS == TYPE_ORTS_FORWARD
+ m_orts.active = -m_env.main_abc_orts.phase_c.reactive;
+ m_orts.reactive = m_env.main_abc_orts.phase_c.active;
+ _execute_single_phase(m_env.start_control.phase_b,
+ m_env.cell_dc_voltage_b_reciprocal,
+ m_env.current_referencer_b_active,
+ m_env.current_referencer_b_reactive,
+ m_env.current_regulator_b_active,
+ m_env.current_regulator_b_reactive);
+#endif
+
//<>
@@ -202,13 +250,35 @@ void AlgorithmStart::_execute_run()
m_env.start_control.phase_c.feedback.current_cell_reactive = m_env.projection_current_cell_c.reactive;
//
//-control
+#if TYPE_ORTS == TYPE_ORTS_NORMAL
+ m_orts = m_env.main_abc_orts.phase_c;
+ _execute_single_phase(m_env.start_control.phase_c,
+ m_env.cell_dc_voltage_c_reciprocal,
+ m_env.current_referencer_c_active,
+ m_env.current_referencer_c_reactive,
+ m_env.current_regulator_c_active,
+ m_env.current_regulator_c_reactive);
+#endif
+#if TYPE_ORTS == TYPE_ORTS_BACK
+ m_orts.active = m_env.main_abc_orts.phase_b.reactive;
+ m_orts.reactive = -m_env.main_abc_orts.phase_b.active;
+ _execute_single_phase(m_env.start_control.phase_c,
+ m_env.cell_dc_voltage_c_reciprocal,
+ m_env.current_referencer_c_active,
+ m_env.current_referencer_c_reactive,
+ m_env.current_regulator_c_active,
+ m_env.current_regulator_c_reactive);
+#endif
+#if TYPE_ORTS == TYPE_ORTS_FORWARD
+ m_orts.active = -m_env.main_abc_orts.phase_a.reactive;
+ m_orts.reactive = m_env.main_abc_orts.phase_a.active;
_execute_single_phase(m_env.start_control.phase_c,
- m_env.main_abc_orts.phase_c,
m_env.cell_dc_voltage_c_reciprocal,
m_env.current_referencer_c_active,
m_env.current_referencer_c_reactive,
m_env.current_regulator_c_active,
m_env.current_regulator_c_reactive);
+#endif
//<>
m_voltage_a = m_env.start_control.phase_a.reference.voltage_cell_relative;
@@ -221,7 +291,6 @@ void AlgorithmStart::_execute_run()
#if TYPECONTROL == SCALARCONTROL
#pragma CODE_SECTION("ramfuncs");
inline void AlgorithmStart::_execute_single_phase(SYSCTRL::AlgorithmStartSinglePhaseControl& phase,
- SYSCTRL::VectorOrthogonalProjection& orts,
float dc_voltage_reciprocal,
FLTSYSLIB::PIController& referencer_active,
FLTSYSLIB::PIController& referencer_reactive,
@@ -238,8 +307,8 @@ inline void AlgorithmStart::_execute_single_phase(SYSCTRL::AlgorithmStartSingleP
//phase.reference.voltage_cell_ampl_active = regulator_active.execute(phase.feedback.current_cell_active, phase.test_ref.active);
//phase.reference.voltage_cell_ampl_reactive = regulator_reactive.execute(phase.feedback.current_cell_reactive, phase.test_ref.reactive);
//
- phase.reference.voltage_cell_active = phase.reference.voltage_cell_ampl_active * orts.active;
- phase.reference.voltage_cell_reactive = phase.reference.voltage_cell_ampl_reactive * orts.reactive;
+ phase.reference.voltage_cell_active = phase.reference.voltage_cell_ampl_active * m_orts.active;
+ phase.reference.voltage_cell_reactive = phase.reference.voltage_cell_ampl_reactive * m_orts.reactive;
//
phase.reference.voltage_cell = phase.reference.voltage_cell_active - phase.reference.voltage_cell_reactive;
phase.reference.voltage_cell_relative = phase.reference.voltage_cell * dc_voltage_reciprocal;
diff --git a/SYSCTRL/AlgorithmStart.h b/SYSCTRL/AlgorithmStart.h
index 0363e2a..947038d 100644
--- a/SYSCTRL/AlgorithmStart.h
+++ b/SYSCTRL/AlgorithmStart.h
@@ -22,6 +22,9 @@ namespace SYSCTRL
class AlgorithmStart: public SYSCTRL::AlgorithmBase
{
private:
+#if TYPECONTROL == SCALARCONTROL
+ SYSCTRL::VectorOrthogonalProjection m_orts;
+#endif
SYSCTRL::SystemEnvironment& m_env;
#if TYPECONTROL == VECTORCONTROL
private:
@@ -51,7 +54,6 @@ private:
private:
inline void _execute_single_phase(SYSCTRL::AlgorithmStartSinglePhaseControl& phase,
- SYSCTRL::VectorOrthogonalProjection& orts,
float dc_voltage_reciprocal,
FLTSYSLIB::PIController& referencer_active,
FLTSYSLIB::PIController& referencer_reactive,
diff --git a/SYSCTRL/AlgorithmStop.cpp b/SYSCTRL/AlgorithmStop.cpp
index 7f76cfd..55b9e51 100644
--- a/SYSCTRL/AlgorithmStop.cpp
+++ b/SYSCTRL/AlgorithmStop.cpp
@@ -12,6 +12,9 @@ namespace SYSCTRL
//CONSTRUCTOR
AlgorithmStop::AlgorithmStop(SYSCTRL::SystemEnvironment& env):
SYSCTRL::AlgorithmBase(),
+#if ((TYPECONTROL == SCALARCONTROL)&&(SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_ABC))
+ m_orts(),
+#endif
m_env(env),
_execute(&SYSCTRL::AlgorithmStop::_execute_undef)
//
@@ -99,7 +102,7 @@ void AlgorithmStop::_execute_run()
}//
#endif
//
-#if TYPECONTROL == SCALARCONTROL
+#if ((TYPECONTROL == SCALARCONTROL)&&(SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_ABC))
#pragma CODE_SECTION("ramfuncs");
void AlgorithmStop::_execute_run()
{
@@ -137,21 +140,63 @@ void AlgorithmStop::_execute_run()
//
//control execute
+#if TYPE_ORTS == TYPE_ORTS_NORMAL
+ m_orts = m_env.main_abc_orts.phase_a;
+ _execute_single_phase(m_env.phase_control.phase_a,
+ m_env.regulator_voltage_load_a_active,
+ m_env.regulator_voltage_load_a_reactive);
+ //
+ m_orts = m_env.main_abc_orts.phase_b;
+ _execute_single_phase(m_env.phase_control.phase_b,
+ m_env.regulator_voltage_load_b_active,
+ m_env.regulator_voltage_load_b_reactive);
+ //
+ m_orts = m_env.main_abc_orts.phase_c;
+ _execute_single_phase(m_env.phase_control.phase_c,
+ m_env.regulator_voltage_load_c_active,
+ m_env.regulator_voltage_load_c_reactive);
+ //
+#endif
+#if TYPE_ORTS == TYPE_ORTS_BACK
+ m_orts.active = m_env.main_abc_orts.phase_c.reactive;
+ m_orts.reactive = -m_env.main_abc_orts.phase_c.active;
_execute_single_phase(m_env.phase_control.phase_a,
- m_env.main_abc_orts.phase_a,
m_env.regulator_voltage_load_a_active,
m_env.regulator_voltage_load_a_reactive);
//
+ m_orts.active = m_env.main_abc_orts.phase_a.reactive;
+ m_orts.reactive = -m_env.main_abc_orts.phase_a.active;
_execute_single_phase(m_env.phase_control.phase_b,
- m_env.main_abc_orts.phase_b,
m_env.regulator_voltage_load_b_active,
m_env.regulator_voltage_load_b_reactive);
//
+ m_orts.active = m_env.main_abc_orts.phase_b.reactive;
+ m_orts.reactive = -m_env.main_abc_orts.phase_b.active;
_execute_single_phase(m_env.phase_control.phase_c,
- m_env.main_abc_orts.phase_c,
m_env.regulator_voltage_load_c_active,
m_env.regulator_voltage_load_c_reactive);
//
+#endif
+#if TYPE_ORTS == TYPE_ORTS_FORWARD
+ m_orts.active = -m_env.main_abc_orts.phase_b.reactive;
+ m_orts.reactive = m_env.main_abc_orts.phase_b.active;
+ _execute_single_phase(m_env.phase_control.phase_a,
+ m_env.regulator_voltage_load_a_active,
+ m_env.regulator_voltage_load_a_reactive);
+ //
+ m_orts.active = -m_env.main_abc_orts.phase_c.reactive;
+ m_orts.reactive = m_env.main_abc_orts.phase_c.active;
+ _execute_single_phase(m_env.phase_control.phase_b,
+ m_env.regulator_voltage_load_b_active,
+ m_env.regulator_voltage_load_b_reactive);
+ //
+ m_orts.active = -m_env.main_abc_orts.phase_a.reactive;
+ m_orts.reactive = m_env.main_abc_orts.phase_a.active;
+ _execute_single_phase(m_env.phase_control.phase_c,
+ m_env.regulator_voltage_load_c_active,
+ m_env.regulator_voltage_load_c_reactive);
+ //
+#endif
if(m_env.timer_stop.is_finished()){
@@ -167,19 +212,63 @@ void AlgorithmStop::_execute_run()
}//
#endif
//
+#if ((TYPECONTROL == SCALARCONTROL)&&(SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_RMS))
+#pragma CODE_SECTION("ramfuncs");
+void AlgorithmStop::_execute_run()
+{
+ m_env.hardware.ref_control_order = ORDER_START;
+ //
+ m_env.timer_stop.execute();
+ //
+ m_env.phase_control.phase_a.reference.voltage_ampl_real = m_env.reference_voltage_load_rms_intensity.execute(m_env.rms_voltage_load_module);
+ m_env.phase_control.phase_a.reference.voltage_cell_real = m_env.regulator_voltage_load_rms.execute(m_env.phase_control.phase_a.reference.voltage_ampl_real, m_env.rms_voltage_load_module);
+ //
+#if TYPE_ORTS == TYPE_ORTS_NORMAL
+ m_env.phase_control.phase_a.reference.voltage_cell = m_env.phase_control.phase_a.reference.voltage_cell_real * m_env.main_abc_orts.phase_a.active;
+ m_env.phase_control.phase_b.reference.voltage_cell = m_env.phase_control.phase_a.reference.voltage_cell_real * m_env.main_abc_orts.phase_b.active;
+ m_env.phase_control.phase_c.reference.voltage_cell = m_env.phase_control.phase_a.reference.voltage_cell_real * m_env.main_abc_orts.phase_c.active;
+#endif
+#if TYPE_ORTS == TYPE_ORTS_BACK
+ m_env.phase_control.phase_a.reference.voltage_cell = m_env.phase_control.phase_a.reference.voltage_cell_real * m_env.main_abc_orts.phase_c.reactive;
+ m_env.phase_control.phase_b.reference.voltage_cell = m_env.phase_control.phase_a.reference.voltage_cell_real * m_env.main_abc_orts.phase_a.reactive;
+ m_env.phase_control.phase_c.reference.voltage_cell = m_env.phase_control.phase_a.reference.voltage_cell_real * m_env.main_abc_orts.phase_b.reactive;
+#endif
+#if TYPE_ORTS == TYPE_ORTS_FORWARD
+ m_env.phase_control.phase_a.reference.voltage_cell = m_env.phase_control.phase_a.reference.voltage_cell_real * (-m_env.main_abc_orts.phase_b.reactive);
+ m_env.phase_control.phase_b.reference.voltage_cell = m_env.phase_control.phase_a.reference.voltage_cell_real * (-m_env.main_abc_orts.phase_c.reactive);
+ m_env.phase_control.phase_c.reference.voltage_cell = m_env.phase_control.phase_a.reference.voltage_cell_real * (-m_env.main_abc_orts.phase_a.reactive);
+#endif
+ //
+ m_env.phase_control.phase_a.reference.voltage_cell_relative = m_env.phase_control.phase_a.reference.voltage_cell * m_env.cell_dc_voltage_a_reciprocal;
+ m_env.phase_control.phase_b.reference.voltage_cell_relative = m_env.phase_control.phase_b.reference.voltage_cell * m_env.cell_dc_voltage_b_reciprocal;
+ m_env.phase_control.phase_c.reference.voltage_cell_relative = m_env.phase_control.phase_c.reference.voltage_cell * m_env.cell_dc_voltage_c_reciprocal;
+ //
+ if(m_env.timer_stop.is_finished()){
+ m_voltage_a = FP_ZERO;
+ m_voltage_b = FP_ZERO;
+ m_voltage_c = FP_ZERO;
+ }else{
+ m_voltage_a = m_env.phase_control.phase_a.reference.voltage_cell_relative;
+ m_voltage_b = m_env.phase_control.phase_b.reference.voltage_cell_relative;
+ m_voltage_c = m_env.phase_control.phase_c.reference.voltage_cell_relative;
+ }
+ //
+}//
+#endif
+//
+
//
-#if TYPECONTROL == SCALARCONTROL
+#if ((TYPECONTROL == SCALARCONTROL)&&(SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_ABC))
#pragma CODE_SECTION("ramfuncs");
inline void AlgorithmStop::_execute_single_phase(SYSCTRL::AlgorithmSinglePhaseControl& phase,
- SYSCTRL::VectorOrthogonalProjection& orts,
FLTSYSLIB::PIController& regulator_active,
FLTSYSLIB::PIController& regulator_reactive)
{
phase.reference.voltage_cell_ampl_real = regulator_active.execute(phase.reference.voltage_ampl_real, phase.feedback.voltage_ampl_real);
phase.reference.voltage_cell_ampl_jm = regulator_reactive.execute(phase.reference.voltage_ampl_jm, phase.feedback.voltage_ampl_jm);
//
- phase.reference.voltage_cell_real = phase.reference.voltage_cell_ampl_real * orts.active;
- phase.reference.voltage_cell_jm = phase.reference.voltage_cell_ampl_jm * orts.reactive;
+ phase.reference.voltage_cell_real = phase.reference.voltage_cell_ampl_real * m_orts.active;
+ phase.reference.voltage_cell_jm = phase.reference.voltage_cell_ampl_jm * m_orts.reactive;
phase.reference.voltage_cell = phase.reference.voltage_cell_real - phase.reference.voltage_cell_jm;
//
phase.reference.voltage_cell_relative = phase.reference.voltage_cell * phase.feedback.voltage_cell_dc_reciprocal;
diff --git a/SYSCTRL/AlgorithmStop.h b/SYSCTRL/AlgorithmStop.h
index 6fa43e2..0db3718 100644
--- a/SYSCTRL/AlgorithmStop.h
+++ b/SYSCTRL/AlgorithmStop.h
@@ -21,6 +21,9 @@ namespace SYSCTRL
class AlgorithmStop: public SYSCTRL::AlgorithmBase
{
private:
+#if ((TYPECONTROL == SCALARCONTROL)&&(SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_ABC))
+ SYSCTRL::VectorOrthogonalProjection m_orts;
+#endif
SYSCTRL::SystemEnvironment& m_env;
public:
AlgorithmStop(SYSCTRL::SystemEnvironment& env);
@@ -33,10 +36,9 @@ public:
private:
void (AlgorithmStop::*_execute)();
void _execute_run();
-#if TYPECONTROL == SCALARCONTROL
+#if ((TYPECONTROL == SCALARCONTROL)&&(SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_ABC))
private:
inline void _execute_single_phase(SYSCTRL::AlgorithmSinglePhaseControl& phase,
- SYSCTRL::VectorOrthogonalProjection& orts,
FLTSYSLIB::PIController& regulator_active,
FLTSYSLIB::PIController& regulator_reactive);
#endif
diff --git a/SYSCTRL/AlgorithmWork.cpp b/SYSCTRL/AlgorithmWork.cpp
index f40d26c..99e1d53 100644
--- a/SYSCTRL/AlgorithmWork.cpp
+++ b/SYSCTRL/AlgorithmWork.cpp
@@ -14,6 +14,9 @@ AlgorithmWork::AlgorithmWork(SYSCTRL::SystemEnvironment& env):
AlgorithmBase(),
m_env(env),
m_reference_switcher(false),
+#if ((TYPECONTROL == SCALARCONTROL)&&(SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_ABC))
+ m_orts(),
+#endif
_execute(&SYSCTRL::AlgorithmWork::_execute_undef)
//
{}//CONSTRUCTOR
@@ -52,6 +55,7 @@ void AlgorithmWork::reset()
m_env.regulator_current_limit_c.set_to_high_saturation();
m_env.regulator_current_pfc_c.reset();
+#if SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_ABC
m_env.regulator_voltage_load_a_active.reset();
m_env.regulator_voltage_load_a_reactive.reset();
@@ -60,6 +64,10 @@ void AlgorithmWork::reset()
m_env.regulator_voltage_load_c_active.reset();
m_env.regulator_voltage_load_c_reactive.reset();
+#endif
+#if SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_RMS
+ m_env.regulator_voltage_load_rms.reset();
+#endif
//
#endif
@@ -175,7 +183,7 @@ void AlgorithmWork::_execute_run()
-#if TYPECONTROL == SCALARCONTROL
+#if ((TYPECONTROL == SCALARCONTROL)&&(SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_ABC))
#pragma CODE_SECTION("ramfuncs");
void AlgorithmWork::_execute_run()
{
@@ -193,38 +201,101 @@ void AlgorithmWork::_execute_run()
m_env.phase_control.phase_a.reference.current_ampl_pfc_const = m_env.phase_control.common_ref.current_pfc_rms;
m_env.phase_control.phase_b.reference.current_ampl_pfc_const = m_env.phase_control.common_ref.current_pfc_rms;
m_env.phase_control.phase_c.reference.current_ampl_pfc_const = m_env.phase_control.common_ref.current_pfc_rms;
+ //
+#if TYPE_ORTS == TYPE_ORTS_NORMAL
+ m_orts = m_env.main_abc_orts.phase_a;
_execute_single_phase(m_env.phase_control.phase_a,
m_env.projection_voltage_input_a,
- m_env.main_abc_orts.phase_a,
m_env.regulator_current_limit_a,
m_env.regulator_current_pfc_a,
- m_env.regulator_dc_a,
m_env.cell_dc_voltage_a,
m_env.regulator_voltage_load_a_active,
m_env.regulator_voltage_load_a_reactive);
-
+ //
+ m_orts = m_env.main_abc_orts.phase_b;
_execute_single_phase(m_env.phase_control.phase_b,
m_env.projection_voltage_input_b,
- m_env.main_abc_orts.phase_b,
m_env.regulator_current_limit_b,
m_env.regulator_current_pfc_b,
- m_env.regulator_dc_b,
m_env.cell_dc_voltage_b,
m_env.regulator_voltage_load_b_active,
m_env.regulator_voltage_load_b_reactive);
-
+ //
+ m_orts = m_env.main_abc_orts.phase_c;
+ _execute_single_phase(m_env.phase_control.phase_c,
+ m_env.projection_voltage_input_c,
+ m_env.regulator_current_limit_c,
+ m_env.regulator_current_pfc_c,
+ m_env.cell_dc_voltage_c,
+ m_env.regulator_voltage_load_c_active,
+ m_env.regulator_voltage_load_c_reactive);
+#endif
+#if TYPE_ORTS == TYPE_ORTS_BACK
+ m_orts.active = m_env.main_abc_orts.phase_c.reactive;
+ m_orts.reactive = -m_env.main_abc_orts.phase_c.active;
+ _execute_single_phase(m_env.phase_control.phase_a,
+ m_env.projection_voltage_input_a,
+ m_env.regulator_current_limit_a,
+ m_env.regulator_current_pfc_a,
+ m_env.cell_dc_voltage_a,
+ m_env.regulator_voltage_load_a_active,
+ m_env.regulator_voltage_load_a_reactive);
+ //
+ m_orts.active = m_env.main_abc_orts.phase_a.reactive;
+ m_orts.reactive = -m_env.main_abc_orts.phase_a.active;
+ _execute_single_phase(m_env.phase_control.phase_b,
+ m_env.projection_voltage_input_b,
+ m_env.regulator_current_limit_b,
+ m_env.regulator_current_pfc_b,
+ m_env.cell_dc_voltage_b,
+ m_env.regulator_voltage_load_b_active,
+ m_env.regulator_voltage_load_b_reactive);
+ //
+ m_orts.active = m_env.main_abc_orts.phase_b.reactive;
+ m_orts.reactive = -m_env.main_abc_orts.phase_b.active;
+ _execute_single_phase(m_env.phase_control.phase_c,
+ m_env.projection_voltage_input_c,
+ m_env.regulator_current_limit_c,
+ m_env.regulator_current_pfc_c,
+ m_env.cell_dc_voltage_c,
+ m_env.regulator_voltage_load_c_active,
+ m_env.regulator_voltage_load_c_reactive);
+#endif
+#if TYPE_ORTS == TYPE_ORTS_FORWARD
+ m_orts.active = -m_env.main_abc_orts.phase_b.reactive;
+ m_orts.reactive = m_env.main_abc_orts.phase_b.active;
+ _execute_single_phase(m_env.phase_control.phase_a,
+ m_env.projection_voltage_input_a,
+ m_env.regulator_current_limit_a,
+ m_env.regulator_current_pfc_a,
+ m_env.cell_dc_voltage_a,
+ m_env.regulator_voltage_load_a_active,
+ m_env.regulator_voltage_load_a_reactive);
+ //
+ m_orts.active = -m_env.main_abc_orts.phase_c.reactive;
+ m_orts.reactive = m_env.main_abc_orts.phase_c.active;
+ _execute_single_phase(m_env.phase_control.phase_b,
+ m_env.projection_voltage_input_b,
+ m_env.regulator_current_limit_b,
+ m_env.regulator_current_pfc_b,
+ m_env.cell_dc_voltage_b,
+ m_env.regulator_voltage_load_b_active,
+ m_env.regulator_voltage_load_b_reactive);
+ //
+ m_orts.active = -m_env.main_abc_orts.phase_a.reactive;
+ m_orts.reactive = m_env.main_abc_orts.phase_a.active;
_execute_single_phase(m_env.phase_control.phase_c,
m_env.projection_voltage_input_c,
- m_env.main_abc_orts.phase_c,
m_env.regulator_current_limit_c,
m_env.regulator_current_pfc_c,
- m_env.regulator_dc_c,
m_env.cell_dc_voltage_c,
m_env.regulator_voltage_load_c_active,
m_env.regulator_voltage_load_c_reactive);
+#endif
+
m_voltage_a = m_env.phase_control.phase_a.reference.voltage_cell_relative;
m_voltage_b = m_env.phase_control.phase_b.reference.voltage_cell_relative;
@@ -233,14 +304,13 @@ void AlgorithmWork::_execute_run()
}//
#endif
//
-#if TYPECONTROL == SCALARCONTROL
+#if ((TYPECONTROL == SCALARCONTROL)&&(SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_ABC))
#pragma CODE_SECTION("ramfuncs");
void AlgorithmWork::_execute_single_phase(SYSCTRL::AlgorithmSinglePhaseControl& phase,
SYSCTRL::ProjectionAnalogSignalStructure& projection,
- SYSCTRL::VectorOrthogonalProjection& orts,
FLTSYSLIB::PIController& regulator_limit,
FLTSYSLIB::PIController& regulator_pfc,
- FLTSYSLIB::PIController& regulator_dc,
+ //FLTSYSLIB::PIController& regulator_dc,
float& dc_volatage,
FLTSYSLIB::PIController& regulator_active,
FLTSYSLIB::PIController& regulator_reactive)
@@ -255,8 +325,8 @@ void AlgorithmWork::_execute_single_phase(SYSCTRL::AlgorithmSinglePhaseControl&
if(phase.control_bit.signal.enable_pfc)
{
- phase.reference.voltage_pfc = regulator_pfc.execute(phase.reference.current_ampl_pfc_const, phase.feedback.current_ampl_jm) +
- regulator_dc.execute(phase.reference.voltage_dc, dc_volatage);
+ phase.reference.voltage_pfc = regulator_pfc.execute(phase.reference.current_ampl_pfc_const, phase.feedback.current_ampl_jm);
+ //+ regulator_dc.execute(phase.reference.voltage_dc, dc_volatage);
}
else
{
@@ -304,8 +374,8 @@ void AlgorithmWork::_execute_single_phase(SYSCTRL::AlgorithmSinglePhaseControl&
//
}//if
//
- phase.reference.voltage_cell_real = phase.reference.voltage_cell_ampl_real * orts.active;
- phase.reference.voltage_cell_jm = phase.reference.voltage_cell_ampl_jm * orts.reactive;
+ phase.reference.voltage_cell_real = phase.reference.voltage_cell_ampl_real * m_orts.active;
+ phase.reference.voltage_cell_jm = phase.reference.voltage_cell_ampl_jm * m_orts.reactive;
phase.reference.voltage_cell = phase.reference.voltage_cell_real - phase.reference.voltage_cell_jm;
//
phase.reference.voltage_cell_relative = phase.reference.voltage_cell * phase.feedback.voltage_cell_dc_reciprocal;
@@ -405,6 +475,42 @@ void AlgorithmWork::_execute_run()
}//
#endif
+#if ((TYPECONTROL == SCALARCONTROL)&&(SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_RMS))
+#pragma CODE_SECTION("ramfuncs");
+void AlgorithmWork::_execute_run()
+{
+ m_env.hardware.ref_control_order = ORDER_START;
+ //
+ m_env.phase_control.phase_a.reference.voltage_ampl_real = m_env.reference_voltage_load_rms_intensity.execute((0.5774)*m_env.phase_control.common_ref.voltage_module_rms);
+ m_env.phase_control.phase_a.reference.voltage_cell_real = m_env.regulator_voltage_load_rms.execute(m_env.phase_control.phase_a.reference.voltage_ampl_real, m_env.rms_voltage_load_module);
+ //
+#if TYPE_ORTS == TYPE_ORTS_NORMAL
+ m_env.phase_control.phase_a.reference.voltage_cell = m_env.phase_control.phase_a.reference.voltage_cell_real * m_env.main_abc_orts.phase_a.active;
+ m_env.phase_control.phase_b.reference.voltage_cell = m_env.phase_control.phase_a.reference.voltage_cell_real * m_env.main_abc_orts.phase_b.active;
+ m_env.phase_control.phase_c.reference.voltage_cell = m_env.phase_control.phase_a.reference.voltage_cell_real * m_env.main_abc_orts.phase_c.active;
+#endif
+#if TYPE_ORTS == TYPE_ORTS_BACK
+ m_env.phase_control.phase_a.reference.voltage_cell = m_env.phase_control.phase_a.reference.voltage_cell_real * m_env.main_abc_orts.phase_c.reactive;
+ m_env.phase_control.phase_b.reference.voltage_cell = m_env.phase_control.phase_a.reference.voltage_cell_real * m_env.main_abc_orts.phase_a.reactive;
+ m_env.phase_control.phase_c.reference.voltage_cell = m_env.phase_control.phase_a.reference.voltage_cell_real * m_env.main_abc_orts.phase_b.reactive;
+#endif
+#if TYPE_ORTS == TYPE_ORTS_FORWARD
+ m_env.phase_control.phase_a.reference.voltage_cell = m_env.phase_control.phase_a.reference.voltage_cell_real * (-m_env.main_abc_orts.phase_b.reactive);
+ m_env.phase_control.phase_b.reference.voltage_cell = m_env.phase_control.phase_a.reference.voltage_cell_real * (-m_env.main_abc_orts.phase_c.reactive);
+ m_env.phase_control.phase_c.reference.voltage_cell = m_env.phase_control.phase_a.reference.voltage_cell_real * (-m_env.main_abc_orts.phase_a.reactive);
+#endif
+ //
+ m_env.phase_control.phase_a.reference.voltage_cell_relative = m_env.phase_control.phase_a.reference.voltage_cell * m_env.cell_dc_voltage_a_reciprocal;
+ m_env.phase_control.phase_b.reference.voltage_cell_relative = m_env.phase_control.phase_b.reference.voltage_cell * m_env.cell_dc_voltage_b_reciprocal;
+ m_env.phase_control.phase_c.reference.voltage_cell_relative = m_env.phase_control.phase_c.reference.voltage_cell * m_env.cell_dc_voltage_c_reciprocal;
+ //
+ m_voltage_a = m_env.phase_control.phase_a.reference.voltage_cell_relative;
+ m_voltage_b = m_env.phase_control.phase_b.reference.voltage_cell_relative;
+ m_voltage_c = m_env.phase_control.phase_c.reference.voltage_cell_relative;
+ //
+}//
+#endif
+
//
} /* namespace SYSCTRL */
diff --git a/SYSCTRL/AlgorithmWork.h b/SYSCTRL/AlgorithmWork.h
index 3e0e9df..531275b 100644
--- a/SYSCTRL/AlgorithmWork.h
+++ b/SYSCTRL/AlgorithmWork.h
@@ -21,7 +21,9 @@ class AlgorithmWork: public SYSCTRL::AlgorithmBase
{
private:
bool m_reference_switcher;
-
+#if ((TYPECONTROL == SCALARCONTROL)&&(SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_ABC))
+ SYSCTRL::VectorOrthogonalProjection m_orts;
+#endif
private:
SYSCTRL::SystemEnvironment& m_env;
public:
@@ -36,14 +38,13 @@ public:
private:
void (AlgorithmWork::*_execute)();
void _execute_run();
-#if TYPECONTROL == SCALARCONTROL
+#if ((TYPECONTROL == SCALARCONTROL)&&(SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_ABC))
private:
void _execute_single_phase(SYSCTRL::AlgorithmSinglePhaseControl& phase,
SYSCTRL::ProjectionAnalogSignalStructure& projection,
- SYSCTRL::VectorOrthogonalProjection& orts,
FLTSYSLIB::PIController& regulator_limit,
FLTSYSLIB::PIController& regulator_pfc,
- FLTSYSLIB::PIController& regulator_dc,
+ //FLTSYSLIB::PIController& regulator_dc,
float& dc_volatage,
FLTSYSLIB::PIController& regulator_active,
FLTSYSLIB::PIController& regulator_reactive);
diff --git a/SYSCTRL/ExtremumDetection.cpp b/SYSCTRL/ExtremumDetection.cpp
new file mode 100644
index 0000000..8deed86
--- /dev/null
+++ b/SYSCTRL/ExtremumDetection.cpp
@@ -0,0 +1,32 @@
+/*
+ * ExtremumDetection.cpp
+ *
+ * Author: Aleksey Gerasimenko
+ * gerasimenko.aleksey.n@gmail.com
+ */
+
+#include "SYSCTRL/ExtremumDetection.h"
+
+namespace SYSCTRL
+{
+//CONSTRUCTOR
+ExtremumDetection::ExtremumDetection():
+ m_max_value(FP_ZERO),
+ m_min_value(FP_ZERO)
+{}//CONSTRUCTOR
+
+#pragma CODE_SECTION("ramfuncs");
+void ExtremumDetection::execute(float ia, float ib, float ic)
+{
+ m_max_value = fmaxf(m_max_value, ia);
+ m_max_value = fmaxf(m_max_value, ib);
+ m_max_value = fmaxf(m_max_value, ic);
+ //
+ m_min_value = fminf(m_min_value, ia);
+ m_min_value = fminf(m_min_value, ib);
+ m_min_value = fminf(m_min_value, ic);
+ //
+} // execute
+
+
+} /* namespace SYSCTRL */
diff --git a/SYSCTRL/ExtremumDetection.h b/SYSCTRL/ExtremumDetection.h
new file mode 100644
index 0000000..aecc6c7
--- /dev/null
+++ b/SYSCTRL/ExtremumDetection.h
@@ -0,0 +1,29 @@
+/*
+ * ExtremumDetection.h
+ *
+ * Author: Aleksey Gerasimenko
+ * gerasimenko.aleksey.n@gmail.com
+ */
+
+#include
+#include
+
+#ifndef SYSCTRL_EXTREMUMDETECTION_H_
+#define SYSCTRL_EXTREMUMDETECTION_H_
+
+namespace SYSCTRL
+{
+
+class ExtremumDetection
+{
+private:
+ float m_max_value;
+ float m_min_value;
+public:
+ ExtremumDetection();
+ void execute(float ia, float ib, float ic);
+};
+
+} /* namespace SYSCTRL */
+
+#endif /* SYSCTRL_EXTREMUMDETECTION_H_ */
diff --git a/SYSCTRL/Hardcode.cpp b/SYSCTRL/Hardcode.cpp
index c973d42..865f49e 100644
--- a/SYSCTRL/Hardcode.cpp
+++ b/SYSCTRL/Hardcode.cpp
@@ -309,10 +309,17 @@ void SystemControl::get_hard_code_configuration()
#if TYPECONTROL == SCALARCONTROL
//
+#if SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_ABC
m_system_configuration.regulator_voltage_load_active_reactive.gain = 0.25;
m_system_configuration.regulator_voltage_load_active_reactive.time = 40.0e-3;
m_system_configuration.regulator_voltage_load_active_reactive.high_saturation = 950.0;
m_system_configuration.regulator_voltage_load_active_reactive.low_saturation = -950.0;
+#endif
+#if SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_RMS
+ m_system_configuration.regulator_voltage_load_rms.time = 20.0e-3;
+ m_system_configuration.regulator_voltage_load_rms.low_saturation = 0.0;
+ m_system_configuration.regulator_voltage_load_rms.time = 500.0;
+#endif
//
m_system_configuration.regulator_current_limit.gain = 1.0;
m_system_configuration.regulator_current_limit.time = 1.0;
diff --git a/SYSCTRL/MaxDetection.cpp b/SYSCTRL/MaxDetection.cpp
deleted file mode 100644
index 3efecad..0000000
--- a/SYSCTRL/MaxDetection.cpp
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * MaxDetection.cpp
- *
- * Created on: 23 февр. 2023 г.
- * Author: Oleg
- */
-
-#include
-
-namespace SYSCTRL
-{
-
-MaxDetection::MaxDetection():
- max_value(FP_ZERO)
-{
- // TODO Auto-generated constructor stub
-}
-
-void MaxDetection::execute(float ia, float ib, float ic)
-{
- if(ia > max_value)
- {max_value = ia;}
-
- if(ib > max_value)
- {max_value = ib;}
-
- if(ic > max_value)
- {max_value = ic;}
-} // execute
-
-
-} /* namespace SYSCTRL */
diff --git a/SYSCTRL/MaxDetection.h b/SYSCTRL/MaxDetection.h
deleted file mode 100644
index 93635a2..0000000
--- a/SYSCTRL/MaxDetection.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * MaxDetection.h
- *
- * Created on: 23 февр. 2023 г.
- * Author: Oleg
- */
-
-#include
-#include
-
-#ifndef SYSCTRL_MAXDETECTION_H_
-#define SYSCTRL_MAXDETECTION_H_
-
-namespace SYSCTRL
-{
-
-class MaxDetection
-{
-public:
- MaxDetection();
- void execute(float ia, float ib, float ic);
-private:
- float max_value;
-};
-
-} /* namespace SYSCTRL */
-
-#endif /* SYSCTRL_MAXDETECTION_H_ */
diff --git a/SYSCTRL/SystemConfigurator.h b/SYSCTRL/SystemConfigurator.h
index 902ae56..073701e 100644
--- a/SYSCTRL/SystemConfigurator.h
+++ b/SYSCTRL/SystemConfigurator.h
@@ -40,13 +40,21 @@ namespace SYSCTRL
#if TYPECONTROL == SCALARCONTROL
-
+#if SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_ABC
#if TYPEVOLTAGEDECOMPOSE == TYPEVOLTAGEDECOMPOSE_DIFFICULT
#define HEADER_CLASS_ID ((int16_t)(0x0001))
#define HEADER_PART_ID ((int16_t)(0x0010))
#define HEADER_SOFTWARE_VERSION ((int16_t)(0x0796))
#define FOOTER_FOOT ((int16_t)(0x05A5))
#endif
+#endif
+#if SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_RMS
+#define HEADER_CLASS_ID ((int16_t)(0x0001))
+#define HEADER_PART_ID ((int16_t)(0x0001))
+#define HEADER_SOFTWARE_VERSION ((int16_t)(0x0001))
+#define FOOTER_FOOT ((int16_t)(0x0001))
+#endif
+
#if TYPEVOLTAGEDECOMPOSE == TYPEVOLTAGEDECOMPOSE_SIMPLE
#define HEADER_CLASS_ID ((int16_t)(0x4005))
@@ -66,10 +74,10 @@ namespace SYSCTRL
#if TYPECONTROL == DIRECTREVERSECONTROL
-#define HEADER_CLASS_ID ((int16_t)(0x0000))
-#define HEADER_PART_ID ((int16_t)(0x0000))
-#define HEADER_SOFTWARE_VERSION ((int16_t)(0x0000))
-#define FOOTER_FOOT ((int16_t)(0x0000))
+#define HEADER_CLASS_ID ((int16_t)(0x1F01))
+#define HEADER_PART_ID ((int16_t)(0x1F10))
+#define HEADER_SOFTWARE_VERSION ((int16_t)(0x1F11))
+#define FOOTER_FOOT ((int16_t)(0x141A))
#endif
@@ -284,13 +292,19 @@ struct SystemControlConfiguration
#if TYPECONTROL == SCALARCONTROL
+#if SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_ABC
FLTSYSLIB::PIControllerConfiguration regulator_voltage_load_active_reactive;
+#endif
+#if SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_RMS
+ FLTSYSLIB::FilterConfiguration reference_voltage_load_rms_intensity;
+ FLTSYSLIB::IControllerConfiguration regulator_voltage_load_rms;
+#endif
FLTSYSLIB::PIControllerConfiguration regulator_current_limit;
FLTSYSLIB::PIControllerConfiguration regulator_current_pfc;
FLTSYSLIB::PIControllerConfiguration current_regulator_active;
FLTSYSLIB::PIControllerConfiguration current_regulator_reactive;
FLTSYSLIB::PIControllerConfiguration current_referencer;
- FLTSYSLIB::PIControllerConfiguration regulator_dc_voltage;
+ //FLTSYSLIB::PIControllerConfiguration regulator_dc_voltage;
#endif
@@ -393,13 +407,19 @@ struct SystemControlConfiguration
#endif
#if TYPECONTROL == SCALARCONTROL
+#if SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_ABC
regulator_voltage_load_active_reactive(),
+#endif
+#if SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_RMS
+ reference_voltage_load_rms_intensity(),
+ regulator_voltage_load_rms(),
+#endif
regulator_current_limit(),
regulator_current_pfc(),
current_regulator_active(),
current_regulator_reactive(),
current_referencer(),
- regulator_dc_voltage(),
+ //regulator_dc_voltage(),
#endif
#if TYPECONTROL == DIRECTREVERSECONTROL
@@ -442,7 +462,7 @@ struct SystemControlConfiguration
regulator_current_limit.low_saturation = FP_ZERO;
regulator_current_pfc.high_saturation = reference_voltage_rms * 0.57735;
regulator_current_pfc.low_saturation = -reference_voltage_rms * 0.57735;
- regulator_dc_voltage.low_saturation = -reference_voltage_rms * 0.57735;
+ //regulator_dc_voltage.low_saturation = -reference_voltage_rms * 0.57735;
#endif
diff --git a/SYSCTRL/SystemControl.cpp b/SYSCTRL/SystemControl.cpp
index ed4ca6c..5e88770 100644
--- a/SYSCTRL/SystemControl.cpp
+++ b/SYSCTRL/SystemControl.cpp
@@ -479,6 +479,8 @@ void SystemControl::setup()
#endif
#if TYPECONTROL == SCALARCONTROL
+
+#if SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_ABC
m_environment.regulator_voltage_load_a_active.setup(m_environment.time_sample_control);
m_environment.regulator_voltage_load_a_reactive.setup(m_environment.time_sample_control);
_status &= m_environment.regulator_voltage_load_a_active.compare(FLTSYSLIB::PIController::CONFIGURATE);
@@ -493,6 +495,13 @@ void SystemControl::setup()
m_environment.regulator_voltage_load_c_reactive.setup(m_environment.time_sample_control);
_status &= m_environment.regulator_voltage_load_c_active.compare(FLTSYSLIB::PIController::CONFIGURATE);
_status &= m_environment.regulator_voltage_load_c_reactive.compare(FLTSYSLIB::PIController::CONFIGURATE);
+#endif
+#if SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_RMS
+ m_environment.reference_voltage_load_rms_intensity.setup(m_environment.time_sample_control);
+ m_environment.regulator_voltage_load_rms.setup(m_environment.time_sample_control);
+ _status &= m_environment.reference_voltage_load_rms_intensity.compare(FLTSYSLIB::Filter::CONFIGURATE);
+ _status &= m_environment.regulator_voltage_load_rms.compare(FLTSYSLIB::IController::CONFIGURATE);
+#endif
//
m_environment.regulator_current_limit_a.setup(m_environment.time_sample_control);
m_environment.regulator_current_pfc_a.setup(m_environment.time_sample_control);
@@ -539,12 +548,12 @@ void SystemControl::setup()
_status &= m_environment.current_referencer_c_active.compare(FLTSYSLIB::PIController::CONFIGURATE);
_status &= m_environment.current_referencer_c_reactive.compare(FLTSYSLIB::PIController::CONFIGURATE);
//
- m_environment.regulator_dc_a.setup(m_environment.time_sample_control);
- m_environment.regulator_dc_b.setup(m_environment.time_sample_control);
- m_environment.regulator_dc_c.setup(m_environment.time_sample_control);
- _status &= m_environment.regulator_dc_a.compare(FLTSYSLIB::PIController::CONFIGURATE);
- _status &= m_environment.regulator_dc_b.compare(FLTSYSLIB::PIController::CONFIGURATE);
- _status &= m_environment.regulator_dc_c.compare(FLTSYSLIB::PIController::CONFIGURATE);
+ //m_environment.regulator_dc_a.setup(m_environment.time_sample_control);
+ //m_environment.regulator_dc_b.setup(m_environment.time_sample_control);
+ //m_environment.regulator_dc_c.setup(m_environment.time_sample_control);
+ //_status &= m_environment.regulator_dc_a.compare(FLTSYSLIB::PIController::CONFIGURATE);
+ //_status &= m_environment.regulator_dc_b.compare(FLTSYSLIB::PIController::CONFIGURATE);
+ //_status &= m_environment.regulator_dc_c.compare(FLTSYSLIB::PIController::CONFIGURATE);
#endif
//
//<>
@@ -1088,6 +1097,7 @@ void SystemControl::configure()
#endif
#if TYPECONTROL == SCALARCONTROL
+#if SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_ABC
m_environment.regulator_voltage_load_a_reactive.configure(m_system_configuration.regulator_voltage_load_active_reactive);
_status &= m_environment.regulator_voltage_load_a_reactive.compare(FLTSYSLIB::PIController::OPERATIONAL);
m_environment.regulator_voltage_load_b_reactive.configure(m_system_configuration.regulator_voltage_load_active_reactive);
@@ -1102,8 +1112,13 @@ void SystemControl::configure()
_status &= m_environment.regulator_voltage_load_b_active.compare(FLTSYSLIB::PIController::OPERATIONAL);
m_environment.regulator_voltage_load_c_active.configure(m_system_configuration.regulator_voltage_load_active_reactive);
_status &= m_environment.regulator_voltage_load_c_active.compare(FLTSYSLIB::PIController::OPERATIONAL);
-
-
+#endif
+#if SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_RMS
+ m_environment.reference_voltage_load_rms_intensity.configure(m_system_configuration.reference_voltage_load_rms_intensity);
+ m_environment.regulator_voltage_load_rms.configure(m_system_configuration.regulator_voltage_load_rms);
+ _status &= m_environment.reference_voltage_load_rms_intensity.compare(FLTSYSLIB::Filter::OPERATIONAL);
+ _status &= m_environment.regulator_voltage_load_rms.compare(FLTSYSLIB::IController::OPERATIONAL);
+#endif
//
//m_system_configuration.regulator_current_limit.high_saturation = m_system_configuration.reference_voltage_rms;
//m_system_configuration.regulator_current_limit.low_saturation = FP_ZERO;
@@ -1156,12 +1171,12 @@ void SystemControl::configure()
_status &= m_environment.current_referencer_c_reactive.compare(FLTSYSLIB::PIController::OPERATIONAL);
//
//m_system_configuration.regulator_dc_voltage.low_saturation = - m_environment.phase_control.common_ref.voltage_module_rms;
- m_environment.regulator_dc_a.configure(m_system_configuration.regulator_dc_voltage);
- m_environment.regulator_dc_b.configure(m_system_configuration.regulator_dc_voltage);
- m_environment.regulator_dc_c.configure(m_system_configuration.regulator_dc_voltage);
- _status &= m_environment.regulator_dc_a.compare(FLTSYSLIB::PIController::OPERATIONAL);
- _status &= m_environment.regulator_dc_b.compare(FLTSYSLIB::PIController::OPERATIONAL);
- _status &= m_environment.regulator_dc_c.compare(FLTSYSLIB::PIController::OPERATIONAL);
+ //m_environment.regulator_dc_a.configure(m_system_configuration.regulator_dc_voltage);
+ //m_environment.regulator_dc_b.configure(m_system_configuration.regulator_dc_voltage);
+ //m_environment.regulator_dc_c.configure(m_system_configuration.regulator_dc_voltage);
+ //_status &= m_environment.regulator_dc_a.compare(FLTSYSLIB::PIController::OPERATIONAL);
+ //_status &= m_environment.regulator_dc_b.compare(FLTSYSLIB::PIController::OPERATIONAL);
+ //_status &= m_environment.regulator_dc_c.compare(FLTSYSLIB::PIController::OPERATIONAL);
#endif
//<>
diff --git a/SYSCTRL/SystemControl.h b/SYSCTRL/SystemControl.h
index 138f373..112f586 100644
--- a/SYSCTRL/SystemControl.h
+++ b/SYSCTRL/SystemControl.h
@@ -10,6 +10,7 @@
#include
#include
+#include // for debug!!!
#include "framework.h"
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
@@ -23,7 +24,6 @@
#include "SYSCTRL/VectorSpinner.h"
#include "SYSCTRL/TypeControl.h"
-#include "SYSCTRL/MaxDetection.h" // for debug!!!
#ifndef TRAPSWRST
@@ -49,10 +49,10 @@ private:
SYSCTRL::AlgorithmContext::algorithm_t m_algorithm_executed;
bool turnQ1On;
private:
- // for debug!!!
- MaxDetection IcellMax;
- MaxDetection IloadMax;
- MaxDetection IinputMax;
+ // for debug!!! (
+ ExtremumDetection m_icell_extremum;
+ ExtremumDetection m_iload_extremum;
+ ExtremumDetection m_iinput_extremum;
//Decompose Signals
SYSCTRL::SignalDecomposeFIV m_decompose_voltage_input_a;
SYSCTRL::SignalDecomposeFIV m_decompose_voltage_input_b;
diff --git a/SYSCTRL/SystemControlExecute.cpp b/SYSCTRL/SystemControlExecute.cpp
index 98c1e40..cee2b8f 100644
--- a/SYSCTRL/SystemControlExecute.cpp
+++ b/SYSCTRL/SystemControlExecute.cpp
@@ -56,16 +56,18 @@ void SystemControl::_additional_operational()
m_environment.rms_voltage_load_ca = m_rms_filter_voltage_load_c.execute(m_environment.voltage_load_c - m_environment.voltage_load_a);
//<>
- IcellMax.execute(m_environment.current_cell_a, m_environment.current_cell_b, m_environment.current_cell_c); // for debug!!!
- IinputMax.execute(m_environment.current_input_a, m_environment.current_input_b, m_environment.current_input_c); // for debug!!!
- IloadMax.execute(m_environment.current_load_a, m_environment.current_load_b, m_environment.current_load_c); // for debug!!!
+ m_icell_extremum.execute(m_environment.current_cell_a, m_environment.current_cell_b, m_environment.current_cell_c); // for debug!!!
+ m_iinput_extremum.execute(m_environment.current_input_a, m_environment.current_input_b, m_environment.current_input_c); // for debug!!!
+ m_iload_extremum.execute(m_environment.current_load_a, m_environment.current_load_b, m_environment.current_load_c); // for debug!!!
//
// RMS Module
//
// xrms = sqrt((xa*xa + xb*xb + xc*xc)/3)
SYSCTRL::SystemControl::_rms_module_calculator(m_environment.voltage_grid_a, m_environment.voltage_grid_b, m_environment.voltage_grid_c, m_environment.rms_voltage_input_module);
+#if ((TYPECONTROL == SCALARCONTROL)&&(SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_ABC)) || (TYPECONTROL == VECTORCONTROL) || (TYPECONTROL == DIRECTREVERSECONTROL)
SYSCTRL::SystemControl::_rms_module_calculator(m_environment.voltage_load_a, m_environment.voltage_load_b, m_environment.voltage_load_c, m_environment.rms_voltage_load_module);
+#endif
SYSCTRL::SystemControl::_rms_module_calculator(m_environment.current_input_a, m_environment.current_input_b, m_environment.current_input_c, m_environment.rms_current_input_module);
SYSCTRL::SystemControl::_rms_module_calculator(m_environment.current_load_a, m_environment.current_load_b, m_environment.current_load_c, m_environment.rms_current_load_module);
SYSCTRL::SystemControl::_rms_module_calculator(m_environment.current_bypass_a, m_environment.current_bypass_b, m_environment.current_bypass_c, m_environment.rms_current_bypass_module);
@@ -497,14 +499,12 @@ void SystemControl::_execute_operational()
!m_environment.system_fault.boolbit.b0 &
m_environment.input_discrete.signal.hw_dvr_ready &
m_environment.input_discrete.signal.bypass_ready &
- //(bool)m_environment.external_q1_on.signal.is_on);
- turnQ1On);
+ (bool)m_environment.external_km1_on.signal.is_on);
SYSCTRL::TriggerRegister::setReset(m_km1_external_command_trigger,
(m_environment.system_fault.boolbit.b0 & m_environment.auxiliary_km2.state.signal.is_on) |
!m_environment.input_discrete.signal.hw_dvr_ready |
!m_environment.input_discrete.signal.bypass_ready |
- //(bool)m_environment.external_q1_off.signal.is_on);
- !turnQ1On);
+ (bool)m_environment.external_km1_off.signal.is_on);
SYSCTRL::TriggerRegister::execute_reset_priority(m_km1_external_command_trigger);
//<>
//
@@ -527,12 +527,14 @@ void SystemControl::_execute_operational()
!m_environment.system_fault.boolbit.b0 &
m_environment.input_discrete.signal.hw_dvr_ready &
m_environment.input_discrete.signal.bypass_ready &
- (bool)m_environment.external_q1_on.signal.is_on);
+ //(bool)m_environment.external_q1_on.signal.is_on);
+ turnQ1On);
SYSCTRL::TriggerRegister::setReset(m_q1_external_command_trigger,
(m_environment.system_fault.boolbit.b0 & m_environment.auxiliary_km2.state.signal.is_on) |
!m_environment.input_discrete.signal.hw_dvr_ready |
!m_environment.input_discrete.signal.bypass_ready |
- (bool)m_environment.external_q1_off.signal.is_on);
+ //(bool)m_environment.external_q1_off.signal.is_on);
+ !turnQ1On);
SYSCTRL::TriggerRegister::execute_reset_priority(m_q1_external_command_trigger);
//<>
@@ -626,6 +628,16 @@ void SystemControl::_execute_operational()
SYSCTRL::TriggerRegister::execute_set_priority(m_system_fault_trigger);
m_environment.system_fault.boolbit.b0 = (bool)m_system_fault_trigger.signal.is_on;
+ if (m_environment.system_fault.boolbit.b0 && m_environment.trig) // for debug!!!
+ {
+ m_environment.trig = false;
+ m_environment.fault_trig = m_environment.system_faults_register;
+ m_environment.fault_trig.phase_a.all |= m_phase_alert_monitor.status.phase_a.fault.all;
+ m_environment.fault_trig.phase_b.all |= m_phase_alert_monitor.status.phase_b.fault.all;
+ m_environment.fault_trig.phase_c.all |= m_phase_alert_monitor.status.phase_c.fault.all;
+
+ } // for debug!!!
+
//
@@ -923,8 +935,8 @@ void SystemControl::_execute_operational()
m_environment.twisted_abc_orts.phase_b.reactive,
m_environment.twisted_abc_orts.phase_c.reactive);
//
- //m_environment.main_abc_orts = m_environment.pll_abc_orts;
- m_environment.main_abc_orts = m_environment.twisted_abc_orts;
+ m_environment.main_abc_orts = m_environment.pll_abc_orts;
+ //m_environment.main_abc_orts = m_environment.twisted_abc_orts;
//
FLTSYSLIB::Transformation::clarke_forward(m_environment.main_abc_orts.phase_a.active,
m_environment.main_abc_orts.phase_b.active,
@@ -1137,6 +1149,16 @@ void SystemControl::_execute_operational()
+
+#if ((TYPECONTROL == SCALARCONTROL)&&(SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_RMS))
+ //
+ // RMS Module
+ //
+ // xrms = sqrt((xa*xa + xb*xb + xc*xc)/3)
+ SYSCTRL::SystemControl::_rms_module_calculator(m_environment.voltage_load_a, m_environment.voltage_load_b, m_environment.voltage_load_c, m_environment.rms_voltage_load_module);
+#endif
+
+
/*
harmonica_multiplyer(m_environment.main_ab_orts.active, m_environment.main_ab_orts.reactive,
m_environment.main_ab_orts.active, m_environment.main_ab_orts.reactive,
@@ -1324,7 +1346,7 @@ void SystemControl::_execute_operational()
//
// Scale Compute
//
- /*
+
if(m_environment.scale_compute_voltage_command.bit.start == 1)
{
m_environment.scale_compute_voltage_command.bit.start = 0;
@@ -1332,7 +1354,7 @@ void SystemControl::_execute_operational()
m_environment.scale_compute_voltage_load.fix();
//
}//if
- */
+
//
/*
if(m_environment.scale_compute_current_command.bit.start == 1)
diff --git a/SYSCTRL/SystemControlMODBUSRTU.cpp b/SYSCTRL/SystemControlMODBUSRTU.cpp
index 5ec4786..113050d 100644
--- a/SYSCTRL/SystemControlMODBUSRTU.cpp
+++ b/SYSCTRL/SystemControlMODBUSRTU.cpp
@@ -1392,10 +1392,18 @@ void SystemControl::_modbusrtu_rubus_configurate()
#if TYPECONTROL == SCALARCONTROL
//
+#if SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_ABC
m_rubus_data.add_register_float(375, 0, &m_system_configuration.regulator_voltage_load_active_reactive.gain);
m_rubus_data.add_register_float(376, 0, &m_system_configuration.regulator_voltage_load_active_reactive.time);
m_rubus_data.add_register_float(377, 0, &m_system_configuration.regulator_voltage_load_active_reactive.high_saturation);
m_rubus_data.add_register_float(378, 0, &m_system_configuration.regulator_voltage_load_active_reactive.low_saturation);
+#endif
+#if SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_RMS
+ m_rubus_data.add_register_float(375, 0, &m_system_configuration.reference_voltage_load_rms_intensity.time);
+ m_rubus_data.add_register_float(376, 0, &m_system_configuration.regulator_voltage_load_rms.time);
+ m_rubus_data.add_register_float(377, 0, &m_system_configuration.regulator_voltage_load_rms.high_saturation);
+ m_rubus_data.add_register_float(378, 0, &m_system_configuration.regulator_voltage_load_rms.low_saturation);
+#endif
//
m_rubus_data.add_register_float(379, 0, &m_system_configuration.regulator_current_limit.gain);
m_rubus_data.add_register_float(380, 0, &m_system_configuration.regulator_current_limit.time);
diff --git a/SYSCTRL/SystemControlMethods.cpp b/SYSCTRL/SystemControlMethods.cpp
index 1e23876..9c2090d 100644
--- a/SYSCTRL/SystemControlMethods.cpp
+++ b/SYSCTRL/SystemControlMethods.cpp
@@ -291,9 +291,17 @@ void SystemControl::get_hvcell_dc_voltage()
//m_environment.cell_dc_voltage_b_reciprocal = hvcell_dc_voltage_reciprocal(m_environment.cell_dc_voltage_b_average);
//m_environment.cell_dc_voltage_c_reciprocal = hvcell_dc_voltage_reciprocal(m_environment.cell_dc_voltage_c_average);
- m_environment.cell_dc_voltage_a_reciprocal = 1.0/5.0/900.0;
- m_environment.cell_dc_voltage_b_reciprocal = 1.0/5.0/900.0;
- m_environment.cell_dc_voltage_c_reciprocal = 1.0/5.0/900.0;
+#if (TYPECONTROL == SCALARCONTROL) && (SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_ABC)
+ m_environment.cell_dc_voltage_a_reciprocal = 1.0/REGULATOR_VOLTAGE_ABC_SATURATION;
+ m_environment.cell_dc_voltage_b_reciprocal = 1.0/REGULATOR_VOLTAGE_ABC_SATURATION;
+ m_environment.cell_dc_voltage_c_reciprocal = 1.0/REGULATOR_VOLTAGE_ABC_SATURATION;
+#endif
+
+#if (TYPECONTROL == SCALARCONTROL) && (SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_RMS)
+ m_environment.cell_dc_voltage_a_reciprocal = 1.0/REGULATOR_VOLTAGE_RMS_SATURATION;
+ m_environment.cell_dc_voltage_b_reciprocal = 1.0/REGULATOR_VOLTAGE_RMS_SATURATION;
+ m_environment.cell_dc_voltage_c_reciprocal = 1.0/REGULATOR_VOLTAGE_RMS_SATURATION;
+#endif
#if TYPECONTROL == SCALARCONTROL
m_environment.phase_control.phase_a.feedback.voltage_cell_dc_reciprocal = m_environment.cell_dc_voltage_a_reciprocal;
diff --git a/SYSCTRL/SystemDefinitions.h b/SYSCTRL/SystemDefinitions.h
index 62d2ffa..2609fc4 100644
--- a/SYSCTRL/SystemDefinitions.h
+++ b/SYSCTRL/SystemDefinitions.h
@@ -159,16 +159,41 @@ union BoolRegister
#define REGULATORVOLTAGETIME DECOMPOSEVOLTAGETIME_5HZ
#endif
+#ifndef REGULATOR_VOLTAGE_RMS_TIME
+//#define REGULATOR_VOLTAGE_RMS_TIME (float)(1.0/2.0/FP_PI/50.0)
+//#define REGULATOR_VOLTAGE_RMS_TIME (float)(1.0/2.0/FP_PI/40.0)
+//#define REGULATOR_VOLTAGE_RMS_TIME (float)(1.0/2.0/FP_PI/30.0)
+//#define REGULATOR_VOLTAGE_RMS_TIME (float)(1.0/2.0/FP_PI/25.0)
+//#define REGULATOR_VOLTAGE_RMS_TIME (float)(1.0/2.0/FP_PI/20.0)
+//#define REGULATOR_VOLTAGE_RMS_TIME (float)(1.0/2.0/FP_PI/10.0)
+//#define REGULATOR_VOLTAGE_RMS_TIME (float)(1.0/2.0/FP_PI/5.0)
+#define REGULATOR_VOLTAGE_RMS_TIME (float)(1.0/2.0/FP_PI/1.0)
+#endif
+#ifndef REFERENCE_INTENSITY_VOLTAGE_RMS_TIME
+//#define REFERENCE_INTENSITY_VOLTAGE_RMS_TIME (float)(1.0/2.0/FP_PI/30.0)
+//#define REFERENCE_INTENSITY_VOLTAGE_RMS_TIME (float)(1.0/2.0/FP_PI/20.0)
+//#define REFERENCE_INTENSITY_VOLTAGE_RMS_TIME (float)(1.0/2.0/FP_PI/10.0)
+#define REFERENCE_INTENSITY_VOLTAGE_RMS_TIME (float)(1.0/2.0/FP_PI/5.0)
+#endif
+#ifndef REGULATOR_VOLTAGE_ABC_SATURATION
+#define REGULATOR_VOLTAGE_ABC_SATURATION (float)(1800.0)
+//#define REGULATOR_VOLTAGE_ABC_SATURATION (float)(4500.0)
+#endif
+
+#ifndef REGULATOR_VOLTAGE_RMS_SATURATION
+//#define REGULATOR_VOLTAGE_RMS_SATURATION (float)(1800.0)
+#define REGULATOR_VOLTAGE_RMS_SATURATION (float)(4500.0)
+#endif
#define CURRENT_LIMIT_RMS (float)(100.0)
#define CURRENT_PFC_RMS (float)(0.0)
-#define GRID_VOLTAGE_REFERENCE (float)(6050.0) //6000
+#define GRID_VOLTAGE_REFERENCE (float)(6100.0) //6000
#define GRID_VOLTAGE_HIGH_LIMIT (float)(6600.0)
#define CELL_DC_VOLTAGE_REFERENCE (float)(5.0*950.0)
diff --git a/SYSCTRL/SystemEnvironment.cpp b/SYSCTRL/SystemEnvironment.cpp
index 4e249fa..73765b6 100644
--- a/SYSCTRL/SystemEnvironment.cpp
+++ b/SYSCTRL/SystemEnvironment.cpp
@@ -423,6 +423,8 @@ SystemEnvironment::SystemEnvironment():
enable_work_is_off(),
enable_work_reset(),
system_faults_register(),
+ fault_trig(),
+ trig(true),
external_command_word(),
external_start(),
@@ -547,12 +549,18 @@ SystemEnvironment::SystemEnvironment():
//
//
#if TYPECONTROL == SCALARCONTROL
+#if SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_ABC
regulator_voltage_load_a_active(),
regulator_voltage_load_a_reactive(),
regulator_voltage_load_b_active(),
regulator_voltage_load_b_reactive(),
regulator_voltage_load_c_active(),
regulator_voltage_load_c_reactive(),
+#endif
+#if SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_RMS
+ reference_voltage_load_rms_intensity(),
+ regulator_voltage_load_rms(),
+#endif
//
regulator_current_limit_a(),
regulator_current_pfc_a(),
@@ -574,9 +582,9 @@ SystemEnvironment::SystemEnvironment():
current_referencer_c_active(),
current_referencer_c_reactive(),
//
- regulator_dc_a(),
- regulator_dc_b(),
- regulator_dc_c(),
+ //regulator_dc_a(),
+ //regulator_dc_b(),
+ //regulator_dc_c(),
#endif
#if TYPECONTROL == DIRECTREVERSECONTROL
diff --git a/SYSCTRL/SystemEnvironment.h b/SYSCTRL/SystemEnvironment.h
index 5de2888..e0dde9f 100644
--- a/SYSCTRL/SystemEnvironment.h
+++ b/SYSCTRL/SystemEnvironment.h
@@ -915,6 +915,8 @@ public:
SYSCTRL::BoolRegister enable_work_is_off;
SYSCTRL::BoolRegister enable_work_reset;
SYSCTRL::SystemFaultsRegister system_faults_register;
+ SYSCTRL::SystemFaultsRegister fault_trig; // for debug!!!
+ bool trig; // for debug!!!
//External Command
@@ -1082,6 +1084,7 @@ public:
#if TYPECONTROL == SCALARCONTROL
//
+#if SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_ABC
FLTSYSLIB::PIController regulator_voltage_load_a_active;
FLTSYSLIB::PIController regulator_voltage_load_a_reactive;
//
@@ -1090,6 +1093,11 @@ public:
//
FLTSYSLIB::PIController regulator_voltage_load_c_active;
FLTSYSLIB::PIController regulator_voltage_load_c_reactive;
+#endif
+#if SCALARCONTROL_VOLTAGEREGULATOR == SCALARCONTROL_VOLTAGEREGULATOR_RMS
+ FLTSYSLIB::Filter reference_voltage_load_rms_intensity;
+ FLTSYSLIB::IController regulator_voltage_load_rms;
+#endif
//
//Load Current Regulators
FLTSYSLIB::PIController regulator_current_limit_a;
@@ -1122,9 +1130,9 @@ public:
FLTSYSLIB::PIController current_referencer_c_reactive;
//
//POWER CELL DC Voltage Regulator
- FLTSYSLIB::PIController regulator_dc_a;
- FLTSYSLIB::PIController regulator_dc_b;
- FLTSYSLIB::PIController regulator_dc_c;
+ //FLTSYSLIB::PIController regulator_dc_a;
+ //FLTSYSLIB::PIController regulator_dc_b;
+ //FLTSYSLIB::PIController regulator_dc_c;
//
#endif
diff --git a/SYSCTRL/TypeControl.h b/SYSCTRL/TypeControl.h
index 34b1270..764bf80 100644
--- a/SYSCTRL/TypeControl.h
+++ b/SYSCTRL/TypeControl.h
@@ -23,8 +23,8 @@
#ifndef TYPECONTROL
//#define TYPECONTROL VECTORCONTROL
-//#define TYPECONTROL SCALARCONTROL
-#define TYPECONTROL DIRECTREVERSECONTROL
+#define TYPECONTROL SCALARCONTROL
+//#define TYPECONTROL DIRECTREVERSECONTROL
#endif
@@ -61,5 +61,36 @@
+// SCALAR CONTROL
+#ifndef SCALARCONTROL_VOLTAGEREGULATOR_ABC
+#define SCALARCONTROL_VOLTAGEREGULATOR_ABC 7
+#endif
+
+#ifndef SCALARCONTROL_VOLTAGEREGULATOR_RMS
+#define SCALARCONTROL_VOLTAGEREGULATOR_RMS 8
+#endif
+
+#ifndef SCALARCONTROL_VOLTAGEREGULATOR
+//#define SCALARCONTROL_VOLTAGEREGULATOR SCALARCONTROL_VOLTAGEREGULATOR_ABC
+#define SCALARCONTROL_VOLTAGEREGULATOR SCALARCONTROL_VOLTAGEREGULATOR_RMS
+#endif
+
+
+
+#ifndef TYPE_ORTS_NORMAL
+#define TYPE_ORTS_NORMAL 10
+#endif
+#ifndef TYPE_ORTS_BACK
+#define TYPE_ORTS_BACK 11
+#endif
+#ifndef TYPE_ORTS_FORWARD
+#define TYPE_ORTS_FORWARD 12
+#endif
+
+#ifndef TYPE_ORTS
+#define TYPE_ORTS TYPE_ORTS_NORMAL
+//#define TYPE_ORTS TYPE_ORTS_BACK
+//#define TYPE_ORTS TYPE_ORTS_FORWARD
+#endif
#endif /* SYSCTRL_TYPECONTROL_H_ */