nikhilgupta10 / GridLAB-D

Other
1 stars 0 forks source link

#930 Controller not working as expected with slider settings, #1654

Open nikhilgupta10 opened 8 years ago

nikhilgupta10 commented 8 years ago

http://gridlabd.me.uvic.ca/wiki/index.php/Transactive_Control#Description_of_Operation

The controller class has the following two parameters

slider_setting_cool
slider_setting_heat

They can be set from 0-1 and they define the slopes and ranges of the temperature vs price curve as shown below.

The red line represents heating, which is defined by the heating low/high ramp and heating low/high ranges e.g.

heating_ramp_low -2;
heating_ramp_high -2;
heating_range_low -3;
heating_range_high 5;

The blue line represents cooling, which is defined by the cooling low/high ramp and cooling low/high ranges e.g.

cooling_ramp_low 2;
cooling_ramp_high 2;
cooling_range_low -3;
cooling_range_high 5;

The slider values from 0 /u2013 1 define the type of owner in the residential unit in terms of their comfort preference.

When slider_setting = 1, Gridlab-D assigns the following values to heating/cooling ( ramp/range low/high )

heating_ramp_low 2;
heating_ramp_high -2;
heating_range_low -5;
heating_range_high 5;

cooling_ramp_low -2;
cooling_ramp_high 2;
cooling_range_low -5;
cooling_range_high 5;

However, the signs of cooling_ramp_low and heating_ramp_low are incorrect. The correct values should be as follows :

heating_ramp_low -2;
cooling_ramp_low 2;

The following code is from the market module in the controller class. The bolded lines are what I think is incorrect.

if(control_mode == CN_DOUBLE_RAMP){
    if (slider_setting_cool == -0.001){
        cool_min = cooling_setpoint0 + cool_range_low;
        cool_max = cooling_setpoint0 + cool_range_high;
    } else if(slider_setting_cool > 0.0){
        cool_min = cooling_setpoint0 + cool_range_low \* slider_setting_cool;
        cool_max = cooling_setpoint0 + cool_range_high \* slider_setting_cool;
        if (cool_range_low != 0.0)
         cool_ramp_low = -2 - (1 - slider_setting_cool); // incorrect  
        else
            cool_ramp_low = 0;
        if (cool_range_high != 0.0)
            cool_ramp_high = 2 + (1 - slider_setting_cool);
        else
            cool_ramp_high = 0;
    } else {
        cool_min = cooling_setpoint0;
        cool_max = cooling_setpoint0;
    }
    if (slider_setting_heat == -0.001){
        heat_min = heating_setpoint0 + heat_range_low;
        heat_max = heating_setpoint0 + heat_range_high;
    } else if (slider_setting_heat > 0.0){
        heat_min = heating_setpoint0 + heat_range_low \* slider_setting_heat;
        heat_max = heating_setpoint0 + heat_range_high \* slider_setting_heat;
        if (heat_range_low != 0.0)
           heat_ramp_low = 2 + (1 - slider_setting_heat); // incorrect 
        else
            heat_ramp_low = 0;
        if (heat_range_high != 0)
            heat_ramp_high = -2 - (1 - slider_setting_heat);
        else
            heat_ramp_high = 0;
    } else {
        heat_min = heating_setpoint0;
        heat_max = heating_setpoint0;
    }
}
,
nikhilgupta10 commented 8 years ago

nikhilgupta10 imported these comments from Sourceforge: The user dchassin does not exist anymore. Therefore assigning this to afisher1.