OptStartHeat
OptStartHeat (FB)
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
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
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
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
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: \
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:\
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 ).\
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.\
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.\
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
gc_Parameters.rTOMinThis 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
gc_Parameters.rTOMaxThis 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
gc_Parameters.rTIMinThis 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
gc_Parameters.rTIMaxThis 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
gc_Parameters.rDiffSetTempThis 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
gc_Parameters.rDTDiffTempThis 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
gc_Parameters.uiPHMaxTimeThis global variable is used to define the maximum duration of the preheating process. It is used for internal calculations. \
Global variable gc_Parameters.rLimitResultWell
gc_Parameters.rLimitResultWellThis global variable is used to define the limit value ‘Good preheating process’ for the quality display bResult. \
Global variable gc_Parameters.rLimitResultNormal
gc_Parameters.rLimitResultNormalThis 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:
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

