@ -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  *  . active ; 
 
		
	
		
			
				    phase . reference . voltage_cell_jm  =  phase . reference . voltage_cell_ampl_jm  *  . 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 */