OptStartHeat32

OptStartHeat32 (FB)

FUNCTION_BLOCK OptStartHeat32 EXTENDS Uhr_Base IMPLEMENTS IUhr

Short description

Switch-on optimization for heating operation with a connection to the 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

itfFromClockMaster

IUhrProtocol

Interface for connecting to the FB ‘ClockMaster32’

ClockSlaveParam

stSlvClockData

Connection to some selected parameters of the FB ‘ClockSlave32’

xEn

BOOL

FALSE

General enable of the switch-on optimization

xEnAdapt

BOOL

TRUE

Enable storage of 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 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 in 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 preheating processes across days. 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 the FB ‘ClockMaster32’ is incremented by one by each instance of the FB ‘OptStartHeat32’. \

Function description

The output xDaytime is activated by the switch-on optimization (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 is also included in the historical data. Preheating processes across days are not possible. The switch-on optimization serves to save energy and increase user comfort. The components relevant to the 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 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 sections. 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 releasing preheating are met. It begins if the following conditions are simultaneously met: \

  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 releasing 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 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 equals the current time. \

Heating time (bState = 3)

The heating time is used for preheating 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 approaches permanently for a duration of at least 120s to 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 the heating time serves to complete the successful preheating process. The historical data are updated, provided no limits are violated, if the enabling of data storage in the historical memory ( xEnAdapt ) is active. It begins with the proper end of the heating time. \

Enable xEn

This input serves to generally enable 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 are retained even in the locked state. This input can also be used to switch in sensor faults (fault - room temperature sensor, fault outdoor temperature sensor) or for operating the zone in the extended operating time. \

Enable xEnAdapt

This input is used to enable data storage 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 storage takes place. \

Enable xResAdapt

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

Memory
State/Value
Notes

Heating gradients

uiHGMax

Dead times

uiDTMax

Number of preheating processes

0

Additionally, 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 reinitialization of the historical and current data in case of larger deviations.\

Input rTo

This input is used to capture the current outdoor temperature. For the 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 capture the current room temperature. For the 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 capture the current room setpoint temperature for comfort/daytime operation. Each change in the setpoint triggers a reset to the basic 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 on the transition from check time to 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 permanently updated. On each change, the date/current time is also captured. This output is always initialized to 0 (= no error) at the start of the check time. On each occurrence of an error, the preheating process is stopped and the ‘Off / Deactivated’ phase is initiated. On each occurrence of a warning, 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

Undershooting 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 required. 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 to

gc_Parameters.rLimitResultNormal

3

Poor preheating process

Output xActive

This output is used to indicate the state of the output ‘xClockActive’ of the FB ‘ClockSlave32’ (Off = FALSE, On = TRUE). It is updated permanently 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 reinitialization of the historical and current data in case of larger deviations.\

1st preheating process

After the software download or after each rising signal edge at the input xResAdapt the historical data are reinitialized. The dead times are 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 are 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 are 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 are 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 are 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. On each occurrence of a limit violation, 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 closely the room temperature must approach the setpoint temperature in daytime/comfort operation in order 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 permanently increase during the dead time in order 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 ‘Good preheating process’ for the quality display bResult. \

Global variable gc_Parameters.rLimitResultNormal

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

Typical application

This function block can be used as follows:

CODESYS

InOut:

Scope
Name
Type
Initial
Inherited from

Input

itfFromClockMaster32

IUhrProtocol

Uhr_Base

Input

ClockSlaveParam

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