OptStartHeat32_V2
OptStartHeat32_V2 (FB)
OptStartHeat32_V2 (FB)FUNCTION_BLOCK OptStartHeat32_V2
Short description
Switch-on optimization for heating operation with a connection to FB ‘ClockSlave32’ (principle: variable preheating time) Goal: Room temperature = setpoint temperature at the start of daytime operation Typical application: Zone control loop with heating valve\
Representation

Interfaces
Inputs
xClockMaster_Holiday
BOOL
FALSE
Current state of the ‘Holiday’ channel of the instance of the assigned FB ‘ClokcMaster32’ (FALSE = no holiday)
xClockMaster_PublicHoliday
BOOL
FALSE
Current state of the ‘Public holidays’ channel of the instance of the assigned FB ‘ClokcMaster32’ (FALSE = not a public holiday)
xClockMaster_SwitchTimeS
BOOL
FALSE
Current state of the ‘Exception days’ channel of the instance of the assigned FB ‘ClokcMaster32’ (FALSE = no exception day)
xClockMaster_AllOn
BOOL
FALSE
Current state of the forced control-ON of all ‘xClockActice’ outputs of all assigned FB ‘ClockSlave32’ of the instance of the assigned FB ‘ClokcMaster32’ (FALSE = no forced control-ON)
xClockMaster_AllOff
BOOL
FALSE
Current state of the forced control-OFF of all ‘xClockActice’ outputs of all assigned FB ‘ClockSlave32’ of the instance of the assigned FB ‘ClokcMaster32’ (FALSE = no forced control-OFF)
ClockSlave_Param
stSlvClockData
Connection to some selected parameters of FB ‘ClockSlave32’
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 clock channel (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)
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
Restrictions / boundary conditions
1) This FB does not allow cross-day preheating processes. The preheating process can therefore start at the earliest at 00:01 on each weekday. Example: Start - comfort operation: Monday - 05:30 // Calculated preheating time = 7 hours Optimal start time - preheating process: Sunday - 22:30 Actual start time - preheating process: Monday - 00:01 2) Special switching times, if assigned (FB ‘ClockSlave32’: parameter ‘xSwitchTimeS’ = TRUE) and active (FB ‘ClockMaster32’: output ‘xSwitchTimeS’ = TRUE), do not start a preheating process and immediately abort any preheating process that may be active. 3) The value of the output ‘ctClockSlave32’ of FB ‘ClockMaster32’ is increased by one by each instance of FB ‘OptStartHeat32’. \
Function description
The output xDaytime is activated, when switch-on optimization is generally enabled (xEn = TRUE), depending on the historical data, the current outdoor temperature, the current room temperature and the current setpoint temperature for daytime/comfort operation before the planned start of comfort/daytime operation. This preheating ensures that the room temperature already corresponds to the desired setpoint temperature at the start of daytime operation. The preheating time required for this is recalculated individually for each preheating process; the actual preheating time also flows into the historical data. Cross-day preheating processes are not possible. The switch-on optimization serves to save energy and increase user comfort. The components relevant to switch-on optimization are processed every 60s. A new preheating process is not started or an active preheating process is interrupted if at least one of the following conditions described below is met: 1) Holiday channel active (FB ‘ClockMaster32’ - xHoliday = TRUE AND FB ‘ClockSlave32’ - ClockSlaveParam.xHoliday = TRUE) 2) Public holiday channel active (FB ‘ClockMaster32’ - xPublicHoliday = TRUE AND FB ‘ClockSlave32’ - ClockSlaveParam.xPublicHoliday = TRUE) 3) Special switching times channel active (FB ‘ClockMaster32’ - xSwitchTimeS = TRUE AND FB ‘ClockSlave32’ - ClockSlaveParam.xSwitchTimeS = TRUE) 4) Central command ON active (FB ‘ClockMaster32’ - xAllOn = TRUE) 5) Central command OFF active (FB ‘ClockMaster32’ - xAllOff = TRUE) The preheating process is divided into four time periods. They are run through one after the other in every 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 clock channel is not active (xActive = FALSE) 3) A valid next switch-on point exists It ends properly if the conditions for enabling preheating are met (= start of dead time). It ends in any case if the next valid switch-on point is equal to 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
It ends if a falling signal edge is detected on the state of the clock channel 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 indicate the state of the ‘xClockActive’ output of FB ‘ClockSlave32’ (Off = FALSE, On = TRUE). It is updated continuously, independently of the state of xEn (= general enable of the switch-on optimization). \
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. \
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
xClockMaster_Holiday
BOOL
FALSE
Input
xClockMaster_PublicHoliday
BOOL
FALSE
Input
xClockMaster_SwitchTimeS
BOOL
FALSE
Input
xClockMaster_AllOn
BOOL
FALSE
Input
xClockMaster_AllOff
BOOL
FALSE
Input
ClockSlave_Param
stSlvClockData
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
Last updated

