| Name | Description | 
|---|---|
| Block to compute the supply and return set point of heating systems | |
| Occupancy schedule with look-ahead | |
| Model for a set point that is interpolated based on a user-specified table | |
| Collection of models that illustrate model use and test models | 
Buildings.Controls.SetPoints.HotWaterTemperatureReset
The parameter dTOutHeaBal can be used to shift the heating curve to account
for the fact that solar heat gains and heat gains from equipment and people 
make up for some of the transmission losses. 
For example, in energy efficient houses, the heating may not be switched on above 
12 degree Celsius, even if a room temperature of 20 degree is required.
In such a situation, set dTOutHeaBal=20-12=8 Kelvin to 
shift the heating curve.
Extends from Modelica.Blocks.Interfaces.BlockIcon (Basic graphical layout of input/output block).
| Type | Name | Default | Description | 
|---|---|---|---|
| Real | m | 1.3 | Exponent for heat transfer | 
| Boolean | use_TRoo_in | false | Get the room temperature set point from the input connector | 
| Temperature | TRoo | 293.15 | Fixed value of room air temperature set point [K] | 
| TemperatureDifference | dTOutHeaBal | 8 | Offset for heating curve [K] | 
| Nominal conditions | |||
| Temperature | TSup_nominal | Supply temperature [K] | |
| Temperature | TRet_nominal | Return temperature [K] | |
| Temperature | TRoo_nominal | 293.15 | Room temperature [K] | 
| Temperature | TOut_nominal | Outside temperature [K] | |
| Type | Name | Description | 
|---|---|---|
| input RealInput | TRoo_in | Room air temperature set point [K] | 
| input RealInput | TOut | Outside temperature [K] | 
| output RealOutput | TSup | Setpoint for supply temperature [K] | 
| output RealOutput | TRet | Setpoint for return temperature [K] | 
block HotWaterTemperatureReset 
  "Block to compute the supply and return set point of heating systems"
  extends Modelica.Blocks.Interfaces.BlockIcon;
  parameter Real m = 1.3 "Exponent for heat transfer";
  parameter Modelica.SIunits.Temperature TSup_nominal "Supply temperature";
  parameter Modelica.SIunits.Temperature TRet_nominal "Return temperature";
  parameter Modelica.SIunits.Temperature TRoo_nominal = 293.15 
    "Room temperature";
  parameter Modelica.SIunits.Temperature TOut_nominal "Outside temperature";
  parameter Boolean use_TRoo_in = false 
    "Get the room temperature set point from the input connector";
  parameter Modelica.SIunits.Temperature TRoo = 293.15 
    "Fixed value of room air temperature set point";
  parameter Modelica.SIunits.TemperatureDifference dTOutHeaBal = 8 
    "Offset for heating curve";
  Modelica.Blocks.Interfaces.RealInput TRoo_in(final quantity="Temperature",
                                               final unit = "K", displayUnit = "degC", min=0) if 
          use_TRoo_in "Room air temperature set point"; 
  Modelica.Blocks.Interfaces.RealInput TOut(final quantity="Temperature",
                                            final unit = "K", displayUnit = "degC", min=0) 
    "Outside temperature";
  Modelica.Blocks.Interfaces.RealOutput TSup(final quantity="Temperature",
                                            final unit = "K", displayUnit = "degC", min=0) 
    "Setpoint for supply temperature";
  Modelica.Blocks.Interfaces.RealOutput TRet(final quantity="Temperature",
                                            final unit = "K", displayUnit = "degC", min=0) 
    "Setpoint for return temperature"; 
protected 
  Modelica.Blocks.Interfaces.RealInput TRoo_in_internal(final quantity="Temperature",
                                                        final unit = "K", displayUnit = "degC", min=0) 
    "Needed to connect to conditional connector";
  Real qRel "Relative heat load = Q_flow/Q_flow_nominal";
  Modelica.SIunits.Temperature TOutOffSet 
    "Effective outside temperature for heat transfer (takes into account room heat gains)";
  parameter Modelica.SIunits.Temperature TOutOffSet_nominal =  TOut_nominal + dTOutHeaBal 
    "Effective outside temperature for heat transfer at nominal conditions (takes into account room heat gains)";
equation 
  connect(TRoo_in, TRoo_in_internal);
  if not use_TRoo_in then
    TRoo_in_internal = TRoo;
  end if;
 TOutOffSet = TOut + dTOutHeaBal;
 // Relative heating load, compared to nominal conditions
 qRel = max(0, (TRoo_in_internal-TOutOffSet)/(TRoo_nominal-TOutOffSet_nominal));
 TSup = TRoo_in_internal
          + ((TSup_nominal+TRet_nominal)/2-TRoo_in_internal) * qRel^(1/m)
          + (TSup_nominal-TRet_nominal)/2 * qRel;
 TRet = TSup - qRel * (TSup_nominal-TRet_nominal);
end HotWaterTemperatureReset;
 
Buildings.Controls.SetPoints.OccupancySchedule
This model outputs whether the building is currently occupied, and how long it will take until the next time when the building will be occupied or non-occupied. The latter may be used, for example, to start a ventilation system half an hour before occupancy starts in order to ventilate the room.
The occupancy is defined by a time schedule of the form
  occupancy = 3600*{7, 12, 14, 19}
This indicates that the occupancy is from 7:00 until 12:00
and from 14:00 to 19:00. This will be repeated periodically.
The parameters startTime and endTime define the periodicity.
Extends from Modelica.Blocks.Interfaces.BlockIcon (Basic graphical layout of input/output block).
Parameters
Type Name Default Description  
Real occupancy[:] 3600*{7,19} Occupancy table, each entry switching occupancy on or off  
Boolean firstEntryOccupied true Set to true if first entry in occupancy denotes a changed from unoccupied to occupied  
Time startTime 0 Start time of periodicity [s]  
Time endTime 86400 End time of periodicity [s]  
Connectors
Type Name Description  
output RealOutput tNexNonOcc Time until next non-occupancy  
output RealOutput tNexOcc Time until next occupancy  
output BooleanOutput occupied Outputs true if occupied at current time  
Modelica definition
block OccupancySchedule "Occupancy schedule with look-ahead"
  extends Modelica.Blocks.Interfaces.BlockIcon;
  parameter Real occupancy[:]=3600*{7, 19} 
    "Occupancy table, each entry switching occupancy on or off";
  parameter Boolean firstEntryOccupied = true 
    "Set to true if first entry in occupancy denotes a changed from unoccupied to occupied";
  parameter Modelica.SIunits.Time startTime = 0 "Start time of periodicity";
  parameter Modelica.SIunits.Time endTime =   86400 "End time of periodicity";
  Modelica.Blocks.Interfaces.RealOutput tNexNonOcc 
    "Time until next non-occupancy";
  Modelica.Blocks.Interfaces.RealOutput tNexOcc "Time until next occupancy";
  Modelica.Blocks.Interfaces.BooleanOutput occupied 
    "Outputs true if occupied at current time"; 
protected 
  final parameter Modelica.SIunits.Time period = endTime-startTime;
  final parameter Integer nRow = size(occupancy,1);
  output Integer nexStaInd "Next index when occupancy starts";
  output Integer nexStoInd "Next index when occupancy stops";
  output Integer iPerSta 
    "Counter for the period in which the next occupancy starts";
  output Integer iPerSto 
    "Counter for the period in which the next occupancy stops";
  output Modelica.SIunits.Time schTim 
    "Time in schedule (not exceeding max. schedule time)";
  output Modelica.SIunits.Time tMax "Maximum time in schedule";
  output Modelica.SIunits.Time tOcc "Time when next occupancy starts";
  output Modelica.SIunits.Time tNonOcc "Time when next non-occupancy starts";
initial algorithm 
  // Check parameters for correctness
 assert(mod(nRow, 2) < 0.1,
   "The parameter \"occupancy\" must have an even number of elements.\n");
 assert(startTime < occupancy[1],
   "The parameter \"startTime\" must be smaller than the first element of \"occupancy\"."
   + "\n   Received startTime    = " + realString(startTime)
   + "\n            occupancy[1] = " + realString(occupancy[1]));
 assert(endTime > occupancy[nRow],
   "The parameter \"endTime\" must be greater than the last element of \"occupancy\"."
   + "\n   Received endTime      = " + realString(endTime)
   + "\n            occupancy[" + integerString(nRow) +
     "] = " + realString(occupancy[nRow]));
  for i in 1:nRow-1 loop
    assert(occupancy[i] < occupancy[i+1],
      "The elements of the parameter \"occupancy\" must be strictly increasing.");
  end for;
 // Initialize variables
 // if the firstEntryOccupied == false, then set the current time to the
 // the time when occupancy starts.
 tOcc    :=if firstEntryOccupied then occupancy[1] else time;
 tNonOcc :=if firstEntryOccupied then time else occupancy[1];
 iPerSta   := 0;
 iPerSto   := 0;
 nexStaInd := if firstEntryOccupied then 1 else 2;
 nexStoInd := if firstEntryOccupied then 2 else 1;
 occupied := not firstEntryOccupied;
 tOcc    := occupancy[nexStaInd];
 tNonOcc := occupancy[nexStoInd];
algorithm 
  assert(startTime < endTime, "Wrong parameter values.");
  tMax :=endTime;
  schTim :=startTime + mod(time-startTime, period);
  // Changed the index that computes the time until the next occupancy
  when time >= pre(occupancy[nexStaInd])+ iPerSta*period then
    nexStaInd :=nexStaInd + 2;
    occupied := not occupied;
    // Wrap index around
    if nexStaInd > nRow then
       nexStaInd := if firstEntryOccupied then 1 else 2;
       iPerSta := iPerSta + 1;
    end if;
    tOcc := occupancy[nexStaInd] + iPerSta*(period);
  end when;
  // Changed the index that computes the time until the next non-occupancy
  when time >= pre(occupancy[nexStoInd])+ iPerSto*period then
    nexStoInd :=nexStoInd + 2;
    occupied := not occupied;
    // Wrap index around
    if nexStoInd > nRow then
       nexStoInd := if firstEntryOccupied then 2 else 1;
       iPerSto := iPerSto + 1;
    end if;
    tNonOcc := occupancy[nexStoInd] + iPerSto*(period);
  end when;
 tNexOcc    := tOcc-time;
 tNexNonOcc := tNonOcc-time;
end OccupancySchedule;
 
Buildings.Controls.SetPoints.Table
Model for a set point that is interpolated based on a user-specified table
Information
This block can be used to schedule a set-point by using piecewise linear functions.
For example, the instances
Buildings.Controls.SetPoints.Table tabLinExt(constantExtrapolation=false, 
                                             table=[20, 0.0; 
                                                    22, 0.5; 
                                                    25, 0.5; 
                                                    26, 1.0]);
Buildings.Controls.SetPoints.Table tabConExt(constantExtrapolation=true, 
                                             table=[20, 0.0; 
                                                    22, 0.5; 
                                                    25, 0.5; 
                                                    26, 1.0]);
will cause the following output:
For the default setting constantExtrapolation=true, the
block outputs 
y=y1+offset for u ≤ u1, and 
y=yMax+offset for u ≥ uMax.
Otherwise, the table is linearly extrapolated with a constant derivative.
Note that the first column must be strictly increasing.
Extends from Modelica.Blocks.Interfaces.SISO (Single Input Single Output continuous control block).
Parameters
Type Name Default Description  
Real table[:, 2] fill(0.0, 0, 2) Table matrix ( e.g., table=[u1, y1; u2, y2; u3, y3])  
Real offset 0 Offset of output signal  
Boolean constantExtrapolation true If true, then y=y1 for u<u1, and y=yMax for u>uMax  
Connectors
Type Name Description  
input RealInput u Connector of Real input signal  
output RealOutput y Connector of Real output signal  
Modelica definition
model Table 
  "Model for a set point that is interpolated based on a user-specified table"
  extends Modelica.Blocks.Interfaces.SISO;
  parameter Real table[:,2]=fill(
      0.0,
      0,
      2) "Table matrix ( e.g., table=[u1, y1; u2, y2; u3, y3])";
  parameter Real offset=0 "Offset of output signal";
  parameter Boolean constantExtrapolation = true 
    "If true, then y=y1 for u<u1, and y=yMax for u>uMax";
protected 
  final parameter Integer nCol = if constantExtrapolation then 
                        size(table,1)+2 else 
                        size(table,1) "Number of columns";
  final parameter Real[nCol,2] offsetVector = [zeros(nCol), offset*ones(nCol)] 
    "Vector to take offset of output signal into account";
  Modelica.Blocks.Tables.CombiTable1D tab(
    tableOnFile=false,
    final table= (if constantExtrapolation then 
                    cat(1, [table[1,1]-1, table[1,2]],
                           table,
                           [table[end,1]+1, table[end,2]]) else 
                    table)
                  +offsetVector) "Table used for interpolation"; 
equation 
  connect(u, tab.u[1]); 
  connect(tab.y[1], y); 
end Table;
 
HTML-documentation generated by Dymola Thu Mar 17 10:14:51 2011.