OptStartHeat32_V2

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

Name
Data type
Value range
Initial value
Function

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

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 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

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)

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

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: \

  1. 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:\

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 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

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

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