OptStartHeat

OptStartHeat (FB)

FUNCTION_BLOCK OptStartHeat

Short description

Start-optimization for heating operation with an internal weekly timer (principle: variable preheat time) Objective: Room temperature = setpoint temperature at the start of daytime operation Typical application: zone control loop with heating valve

Representation

Interfaces

Inputs

Name
Data type
Value range
Initial value
Function

xEn

BOOL

FALSE

General enable of the switch-on optimization

xEnAdapt

BOOL

TRUE

Enable for storing data in the historical memory

xResAdapt

BOOL

TRUE

Reset of the historical memory

rTo

REAL

Current outdoor temperature

rTi

REAL

Current room temperature

rSetTemp

REAL

Current room setpoint temperature in comfort/daytime operation

Outputs

Name
Data type
Value range
Initial value
Function

xDaytime

BOOL

FALSE

Enable for comfort/daytime operation (Off = FALSE, On = TRUE)

xProcess

BOOL

FALSE

Enable - preheating process (Off = FALSE, On = TRUE)

bState

BYTE

0

Phase of the preheating process (0=Off/Deactivated, 1 = Check time, 2 = Dead time, 3 = Heating time, 4 = End of heating time)

wError

WORD

0

Error status of the last preheating process

bResult

BYTE

0

Quality of the last preheating process (0 = invalid, 1 = good, 2 = normal, 3 = poor)

xActive

BOOL

FALSE

State of the timer channel of the weekly clock (Off = FALSE, On = TRUE)

uiDeadTime

UINT

0

Display of the current dead time duration (min)

uiHeatTime

UINT

0

Display of the current heating time duration (min)

uiNumber

UINT

0

Display of the total number of successful preheating processes

rAverageDiff

REAL

0.0

Average absolute room temperature deviation of the last 10 successful preheating processes

Setpoints / parameters

Name
Data type
Value range
Initial value
Function

uiHGMin

UINT

30

Minimum value - heating gradient (min/K)

uiHGMax

UINT

240

Maximum value - heating gradient (min/K)

uiDTMin

UINT

10

Minimum value - dead time (min)

uiDTMax

UINT

180

Maximum value - dead time (min)

uiHTMin

UINT

15

Minimum value - heating time (min)

uiHTMax

UINT

600

Maximum value - heating time (min)

todMonFrom

TOD

TOD#07:00

Switch-on time - Monday

todMonTo

TOD

TOD#12:00

Switch-off time - Monday

xMonMode

BOOL

TRUE

Mode - switching period - Monday

todTueFrom

TOD

TOD#07:00

Switch-on time - Tuesday

todTueTo

TOD

TOD#12:00

Switch-off time - Tuesday

xTueMode

BOOL

TRUE

Mode - switching period - Tuesday

todWedFrom

TOD

TOD#07:00

Switch-on time - Wednesday

todWedTo

TOD

TOD#12:00

Switch-off time - Wednesday

xWedMode

BOOL

TRUE

Mode - switching period - Wednesday

todThuFrom

TOD

TOD#07:00

Switch-on time - Thursday

todThuTo

TOD

TOD#12:00

Switch-off time - Thursday

xThuMode

BOOL

TRUE

Mode - switching period - Thursday

todFriFrom

TOD

TOD#07:00

Switch-on time - Friday

todFriTo

TOD

TOD#12:00

Switch-off time - Friday

xFriMode

BOOL

TRUE

Mode - switching period - Friday

todSatFrom

TOD

TOD#07:00

Switch-on time - Saturday

todSatTo

TOD

TOD#12:00

Switch-off time - Saturday

xSatMode

BOOL

TRUE

Mode - switching period - Saturday

todSunFrom

TOD

TOD#07:00

Switch-on time - Sunday

todSunTo

TOD

TOD#12:00

Switch-off time - Sunday

xSunMode

BOOL

TRUE

Mode - switching period - Sunday

sNotice

STRING

'Own note - click to change.'

Label - timer

Global variables

Name
Data type
Value range
Initial value
Function

gc_Parameters.rTOMin

REAL

-25

Minimum value - outdoor temperature (°C)

gc_Parameters.rTOMax

REAL

25

Maximum value - outdoor temperature (°C)

gc_Parameters.rTIMin

REAL

15

Minimum value - room temperature (°C)

gc_Parameters.rTIMax

REAL

30

Maximum value - room temperature (°C)

gc_Parameters.rDiffSetTemp

REAL

0

Deviation from the room setpoint temperature at the end of the preheating process (K)

gc_Parameters.rDTDiffTemp

REAL

0.2

Increase of room temperature to detect the end of the dead time (K)

gc_Parameters.uiPHMaxTime

UINT

720

Maximum duration of the preheating process

gc_Parameters.rLimitResultWell

REAL

0.5

Result display: room temperature deviation - limit value for a good preheating process

gc_Parameters.rLimitResultNormal

REAL

1

Result display: room temperature deviation - limit value for a normal preheating process

Function description

The output *xDaytime* is, when start-optimization is generally enabled (*xEn* = TRUE), activated before the planned start of comfort/daytime operation depending on historical data, the current outside temperature, the current room temperature and the current setpoint temperature for the day/comfort operation. This preheating ensures that the room temperature already matches the desired setpoint at the start of daytime operation. The required preheat time is recalculated individually for each preheating process, and the actual preheat time is additionally incorporated into the historical data. Preheating processes spanning multiple days are possible. The start-optimization serves energy savings and increased user comfort. The components relevant for start-optimization are processed every 60 s. The preheating process is divided into four time segments. They are passed through sequentially during each successful preheating process. The preheating process can end before, exactly at, or after the switch-on point (= transition to comfort/daytime operation). \

Check time (bState = 1)

The check time is used for cyclic checking (every 60s) whether the conditions for enabling preheating are met. It begins if the following conditions are met simultaneously: \

  1. The preheating process is not active ( xProcess = FALSE )\

2) The weekly clock is not active (*xActive* = FALSE) 3) There exists a valid next switch-on point It ends normally if the conditions for releasing the preheating are met (= start of dead time). It ends in any case if the next valid switch-on point equals the current time.\

Dead time (bState = 2)

The dead time is used for preconditioning the heating. It begins with the proper end of the check time. It ends properly if the current room temperature rTi exceeds the room temperature at the start of the dead time by the adjustable difference gc_Parameters.rDTDiffTemp permanently for a duration of at least 120s (= start of heating time). It ends in any case if the next valid switch-on point is equal to the current time. \

Heating time (bState = 3)

The heating time is used to preheat the zone. It begins with the proper end of the dead time. It ends properly if the current room temperature rTI the current room setpoint temperature in comfort/daytime operation rSetTemp permanently for a duration of at least 120s approaches to within a difference smaller than the global variable gc_Parameters.rDiffSetTemp approaches. It ends if a falling signal edge occurs on the state of the timer channel of the weekly clock xActive It ends if the current heating time duration exceeds the adjustable maximum value uiHTMax \

End of heating time (bState = 4)

The end of heating time serves to complete the successful preheating process. The historical data is updated, provided no limit values are violated, if the enable for storing data in the historical memory ( xEnAdapt ) is active. It begins with the proper end of the heating time. \

Enable xEn

This input serves for the general enable of the switch-on optimization ( xEn = TRUE). In the locked state ( xEn = FALSE) the outputs are defined as follows:\

Output
State/Value
Notes

xDaytime

FALSE

xProcess

FALSE

bState

0

wError

0

bResult

0

uiDeadTime

0

uiHeatTime

0

uiNumber

0

rAverageDiff

0

The historical data is retained even in the locked state. This input can also be used to activate sensor faults (fault - room temperature sensor, fault outdoor temperature sensor) or for operating the zone in extended occupancy time. \

Enable xEnAdapt

This input serves to enable storing data in the historical memory ( xEnAdapt = TRUE, prerequisite: xEn = TRUE). After each successful preheating process, the relevant parameters are stored and are thus available again for the next preheating process. In the locked state ( xEnAdapt = FALSE) no data is stored. \

Enable xResAdapt

This input serves to initialize the historical memory on each rising signal edge (prerequisite: xEn = TRUE ).\

Memory
State/Value
Notes

Heating gradients

uiHGMax

Dead times

uiDTMax

Number of preheating processes

0

In addition, the buffer for the average absolute room temperature deviation of the last 10 successful preheating processes and the data store for the current data are reset. \

Meaningful use of the input xResAdapt

This input can be used in combination with the output rAverageDiff (Average absolute room temperature deviation of the last 10 successful preheating processes) to trigger re-initialization of the historical and current data in the event of larger deviations.\

Input rTo

This input is used to acquire the current outdoor temperature. For switch-on optimization it is additionally time-filtered and limited (Minimum value = gc_Parameters.rTOMin, Maximum value = gc_Parameters.rTOMax ). \

Input rTi

This input is used to acquire the current room temperature. For switch-on optimization it is additionally time-filtered and limited (Minimum value = gc_Parameters.rTIMin, Maximum value = gc_Parameters.rTIMax ). \

Input rSetTemp

This input is used to acquire the current room setpoint temperature for comfort/daytime operation. Every change of the setpoint temperature triggers a reset to the base state (see Enable xEn - locked state). \

Output xDaytime

This output is used to enable comfort/daytime operation (Off = FALSE, On = TRUE) by the switch-on optimization. It is activated when transitioning from the check time to the dead time. It is deactivated when the next valid switch-on point is reached. \

Output xProcess

This output is used to indicate the active preheating process (Off = FALSE, On = TRUE). It is active if the preheating process is in phases 1 - 4 and/or the output xDaytime is active. \

Output bState

This output is used to indicate the active phase of the preheating process.\

Value
Phase

0

Off / Deactivated

1

Check time active

2

Dead time active

3

Heating time active

4

End of heating time active

Output wError

This output is used to indicate warnings/errors during the last preheating process. Each message is assigned a bit (Bit = 0 = no error, Bit = 1 = warning/error active). This output is updated continuously. On each change, the date/current time is also recorded. This output is always initialized to 0 (= no error) at the start of the check time. Whenever an error occurs, the preheating process is stopped and the ‘Off / Deactivated’ phase is initiated. Whenever a warning occurs, the output wError is updated.\

Bit
Cause
Error type
Notes

1

Exceeding the maximum heating time

Error

4

Limit violation heating gradient

Warning

5

Limit violation dead time

Warning

6

Falling below the minimum heating time

Warning

Output bResult

This output is used to indicate the quality of the last successful preheating process. The output is updated at the switch-on point (= transition to comfort/daytime operation) if necessary. The absolute value from the calculation of rSetTemp - gc_Parameters.rDiffSetTemp - rTi is used for the evaluation. This output is always initialized to 0 (= no result) at the start of the check time.\

Result

Limit value

bResult

Notes

less than

gc_Parameters.rLimitResultWell

1

Good preheating process

less than

gc_Parameters.rLimitResultNormal

2

Normal preheating process

greater than or equal

gc_Parameters.rLimitResultNormal

3

Poor preheating process

Output xActive

This output is used to display the state of the timer channel of the weekly clock (Off = FALSE, On = TRUE). The weekly clock is continuously updated regardless of the state of xEn (= general release of the start-optimization). When the settings of the weekly clock are changed, a reset to the default state occurs (see release xEn - locked state). \

Output uiDeadTime

This output is used to indicate the current dead time duration (min). This output is always initialized to 0 min at the start of the check time. \

Output uiHeatTime

This output is used to indicate the current heating time duration (min). This output is always initialized to 0 min at the start of the check time. \

Output uiNumber

This output is used to indicate the total number of successful preheating processes. \

Output rAverageDiff

This output is used to indicate the average absolute room temperature deviation of the last 10 successful preheating processes. This output is always updated after the output bResult is updated. This output is initialized to 0 K at each rising signal edge at the input xResAdapt . \

Meaningful use of the output rAverageDiff

This output can be used in combination with the input xResAdapt (Reset of the historical memory) to trigger re-initialization of the historical and current data in the event of larger deviations.\

1st preheating process

After the software download or after each rising signal edge at the input xResAdapt the historical data is re-initialized. The dead times are then written with the parameter uiDTMax, the heating gradients with the parameter uiHGMax and the number of successful preheating processes with the value 0. \

Parameter uiHGMin

This parameter is used to define the minimum permissible heating gradient (min/K). It is used to check for limit violations. In the event of a limit violation, the historical data is not updated. \

Parameter uiHGMax

This parameter is used to define the maximum permissible heating gradient (min/K). It is used to check for limit violations. In the event of a limit violation, the historical data is not updated. \

Parameter uiDTMin

This parameter is used to define the minimum permissible dead time (min). It is used to check for limit violations. In the event of a limit violation, the historical data is not updated. \

Parameter uiDTMax

This parameter is used to define the maximum permissible dead time (min). It is used to check for limit violations. In the event of a limit violation, the historical data is not updated. \

Parameter uiHTMin

This parameter is used to define the minimum permissible heating time (min). It is used to check for limit violations. \

Parameter uiHTMax

This parameter is used to define the maximum permissible heating time (min). It is used to check for limit violations. Whenever a limit violation occurs, the preheating process is stopped and the ‘Off / Deactivated’ phase is initiated. \

Parameter todMonFrom - sNotice

This parameter is used to configure the weekly clock. The general operation is described in detail in the documentation of the function block 'Clock7d1Ch'. \

Clock7d1Ch

Global variable gc_Parameters.rTOMin

This global variable is used to define the minimum permissible outdoor temperature (°C). It is used for checking and correcting limit violations. \

Global variable gc_Parameters.rTOMax

This global variable is used to define the maximum permissible outdoor temperature (°C). It is used for checking and correcting limit violations. \

Global variable gc_Parameters.rTIMin

This global variable is used to define the minimum permissible room temperature (°C). It is used for checking and correcting limit violations. \

Global variable gc_Parameters.rTIMax

This global variable is used to define the maximum permissible room temperature (°C). It is used for checking and correcting limit violations. \

Global variable gc_Parameters.rDiffSetTemp

This global variable is used to define the deviation from the room setpoint temperature at the end of the preheating process (K). It specifies how close the room temperature must approach the setpoint temperature in daytime/comfort operation to end the active preheating process. \

Global variable gc_Parameters.rDTDiffTemp

This global variable is used to define the increase in room temperature to detect the end of the dead time (K). It specifies how much the room temperature must increase permanently during the dead time to initiate the heating time. \

Global variable gc_Parameters.uiPHMaxTime

This global variable is used to define the maximum duration of the preheating process. It is used for internal calculations. \

Global variable gc_Parameters.rLimitResultWell

This global variable is used to define the limit value ‘Good preheating process’ for the quality display bResult. \

Global variable gc_Parameters.rLimitResultNormal

This global variable is used to define the limit value ‘Normal preheating process’ for the quality display bResult. \

Typical application

This function block can be applied as follows:

CODESYS

InOut:

Scope
Name
Type
Initial

Input

xEn

BOOL

FALSE

Input

xEnAdapt

BOOL

TRUE

Input

xResAdapt

BOOL

FALSE

Input

rTo

REAL

Input

rTi

REAL

Input

rSetTemp

REAL

Output

xDaytime

BOOL

FALSE

Output

xProcess

BOOL

FALSE

Output

bState

BYTE

0

Output

wError

WORD

0

Output

bResult

BYTE

0

Output

xActive

BOOL

FALSE

Output

uiDeadTime

UINT

0

Output

uiHeatTime

UINT

0

Output

uiNumber

UINT

0

Output

rAverageDiff

REAL

0.0

Input Const

uiHGMin

UINT

30

Input Const

uiHGMax

UINT

240

Input Const

uiDTMin

UINT

10

Input Const

uiDTMax

UINT

180

Input Const

uiHTMin

UINT

15

Input Const

uiHTMax

UINT

600

Input Const

todMonFrom

TOD

TIME_OF_DAY#7:0

Input Const

todMonTo

TOD

TIME_OF_DAY#18:0

Input Const

xMonMode

BOOL

TRUE

Input Const

todTueFrom

TOD

TIME_OF_DAY#7:0

Input Const

todTueTo

TOD

TIME_OF_DAY#18:0

Input Const

xTueMode

BOOL

TRUE

Input Const

todWedFrom

TOD

TIME_OF_DAY#7:0

Input Const

todWedTo

TOD

TIME_OF_DAY#18:0

Input Const

xWedMode

BOOL

TRUE

Input Const

todThuFrom

TOD

TIME_OF_DAY#7:0

Input Const

todThuTo

TOD

TIME_OF_DAY#18:0

Input Const

xThuMode

BOOL

TRUE

Input Const

todFriFrom

TOD

TIME_OF_DAY#7:0

Input Const

todFriTo

TOD

TIME_OF_DAY#18:0

Input Const

xFriMode

BOOL

TRUE

Input Const

todSatFrom

TOD

TIME_OF_DAY#7:0

Input Const

todSatTo

TOD

TIME_OF_DAY#18:0

Input Const

xSatMode

BOOL

TRUE

Input Const

todSunFrom

TOD

TIME_OF_DAY#7:0

Input Const

todSunTo

TOD

TIME_OF_DAY#18:0

Input Const

xSunMode

BOOL

TRUE

Input Const

sNotice

STRING

‘Notice’

Last updated