[Dhw23] Domestic hot water, direct domestic hot water treatment
Plant example Dhw23 is a plant for domestic hot water handling.
Functions
- Direct hot water handling
- Legionella prevention
Plant diagram

Components
- Heat exchanger with primary control valve
- Mixing valve for scalding protection
- Circulating pump
- Flow detector (flow switch)
Components and functions of the plant example:
Component | Function | BACnet object |
|---|---|---|
| Scheduler program Switches the plant to operating mode: Off | On | [MSchedule] Scheduler |
| Operating mode switch Switches the plant to: Auto | Off | On | [MI] Operating mode switch |
| Manual operating mode selection Switches the plant to: Auto | Off | On | [MCnfVal] Manual operating mode selection |
| Present operating mode Reports the present operating mode: Off | On | [MCalcVal] Present operating mode |
| Reason for present operating mode Reports the reason for the present operating mode: Exception | Operating mode switch | Manual operating mode selection | Scheduler | [MCalcVal] Reason for present operating mode |
| Flow detector Reports flow: No flow | Flow The control valve is precontrolled, for example, to 25% if flow is reported. | [BI] Flow detector |
| Circulating pump |
|
Command Switches on/off the pump as needed. | > [BO] Command | |
The circulating pump is enabled if the plant is switched on. The plant operates in interval operation, e.g. 10 minutes on, 20 minutes off. | ||
The circulating pump is enabled without interruption if the function for legionella prevention is active. | ||
| Scalding protection Protects the consumer against water that is too hot. |
|
Hot water temperature consumer side Measures the temperature of hot water to the consumer. | [AI] Consumer hot water temperature | |
Temperature controller Limits the hot water temperature to the consumers. | [Controller] Temperature controller | |
Positioning 0% = Bypass … 100% = Through-port | [AO] Position | |
| Hot water temperature sensor Measures the temperature at the heat exchanger outlet. | [AI] Hot water temperature |
Hot water temperature setpoint Setpoint for the desired hot water temperature | [ACnfVal] Hot water temperature setpoint | |
Present hot water temperature setpoint Displays the present setpoint for the hot water temperature. The value is higher compared to the normal hot water temperature setpoint if the function for legionella prevention is active. | [ACalcVal] Present hot water temperature setpoint | |
Legionella prevention Protects hot water against legionella. |
| |
Scheduler program Scheduler for legionella prevention | > [BSchedule] Scheduler | |
Setpoint | [ACnfVal] Setpoint | |
Monitoring time | [CnfVal] Supervision time | |
State Supplies the present state of legionella prevention: Off | In progress | Successful | Not successful | Time slot expired | [MCalcVal] State | |
| Primary return temperature sensor Measures the primary return temperature. | [AI] Primary return temperature |
| Primary flow temperature sensor Measures the primary flow temperature. | [AI] Primary flow temperature |
| Primary valve Throttles the primary water volume to maintain the desired secondary flow temperature. |
> [Controller] Temperature controller |
Primary return temperature maximum limitation Controls the maximum primary return temperature. The setpoint is fixed. It switches to a higher setpoint if the function for legionella prevention is active. Limits the temperature controller for the water temperature to a minimum of e.g. 15%. | > [Controller] Limitation controller, maximum return temperature | |
Limitation active Indicates that the output of the temperature controller for the hot water temperature is limited. | [BCalcVal] Limitation active | |
Positioning | [AO] Position |
Direct hot water handling
The hot water temperature is controlled directly using the primary valve. The controller is always operating when the plant is switched on. It is operated using a wider neutral zone (e.g. 4K) if there is no flow.
Flow detector function
An installed flow detector accelerates the reaction of direct hot water handling.
- The flow detector reports flow: The minimum of the temperature controller output is increased as per a time matching the runtime of the actuator, for example from 0% to 25%. This precontrols the valve.
- The flow detector no longer reports flow: The maximum of the temperature controller output is set for a short period to 0%. This forces the valve to close. In addition, the neutral zone of the temperature controller is increased, e.g. 4K.
Controller and its settings
Name | Description | Object type | Default value |
|---|---|---|---|
Vlv(Prim)'TCtr | Temperature controller Controls the secondary flow temperature. | Controller | N/A |
The temperature controller acts as a PI controller (PID with derivative action time Tv=0) and compares the secondary flow temperature setpoint [PrSpTFlSec] against the secondary flow temperature [TFlSec] and calculates the valve position [Vlv(Prim)'Pos] on the output. The following controller variables are preset: | |||
Vlv(Prim)'TRtCtrMax | Return temperature controller for maximum limitation (option). Controls the maximum primary return temperature. The setpoint is generated in a floating manner based on outside temperature. | Controller | N/A |
The temperature controller acts as a PI controller (PID with derivative action time Tv=0) and compares the floating setpoints based on the outside temperature against the primary return temperature [TRtPrim] and calculates a limitation to the valve position [Vlv(Prim)'Pos] on the output. The following controller variables are preset: | |||
ScaPrt'TCtr | Scalding protection temperature controller Limits the consumer hot water temperature. | Controller | N/A |
The temperature controller acts as a PI controller (PID with derivative action time Tv=0) and compares the setpoint of e.g. 65 [°C] against the hot water temperature for the consumer [ScaPrt'TDhwCns] and calculates the valve position [ScaPrt'Vlv'Pos] on the output. The following controller variables are preset: | |||
Legionella prevention
The function is used in hot water systems to prevent the growth of the legionella bacteria or as a thermal disinfectant to kill legionella.
Legionella are pathogenic bacteria. Legionella grow in warm water at temperatures of approximately 20 °C to 50 °C. Disinfection or killing legionella bacteria depends on temperature and time. They begin to die off at around 55 °C.
As a consequence, the hot water temperature must be increased daily or weekly for a specific time to disinfect. A scheduler exists in the scheduler to send a time pulse to start the function.
The function must be activated via time pulse. Hot water is heated to the legionella disinfection temperature during a defined period. The function succeeds and is canceled if the temperature remains above the disinfection temperature for the required duration. An alarm (LglPrev'Failed) is generated if conditions are not fulfilled during the required duration.
The state of the function is indicated on function block State:
1 - Off
2 - In progress
3 - Successful
4 - Not successful
5 - Time slot expired

Key
|
TTnkTop | Tank temperature, top |
TTnkBtm | Tank temperature, bottom |
Sp | Setpoint |
Dmd | Storage tank charging control |
SupyTI | Supervision time. The temperature must be above the setpoint during this period. Set on TiMon, e.g., 60 minutes. |
ValCirPu | Request to the circulating pump |
LglPrevAct | The function is active, and the conditions are not yet met. |
Timer | Timeframe for maximum duration, e.g., 4 hours |
LglSched/Timer | The time pulse from BSchedule triggers the function. During the timeframe timer, the temperature must be higher than the setpoint for an adjustable time. The function is then fulfilled. |
BACnet objects
Name | Description | Object type | Default value |
|---|---|---|---|
LglPrev'Sched | Scheduler program | BSchedule | N/A |
LglPrev'Sta | State | MCalcVal | N/A |
LglPrev'Failed | Legionella prevention failed | BCalcVal | N/A |
LglPrev'Sp | Setpoint | ACnfVal | 60 [°C] |
LglPrev'TiMon | Monitoring time | CnfVal | 60 min |
During the period, the circulating pump is commanded at priority 4. A parameter determines whether the circulating pump is operating or is blocked.
The circulating pump is on continuously if the function for legionella prevention is active.

Legionella prevention is switched off in plant state 'Off' for domestic hot water handling. LglSched is, however, active. The impulse is saved if a start impulse for the function comes from LglSched and the plant state is 'Off'. The function is performed immediately once the plant state changes to 'On'.
Plant operating modes:
- Off (1)
- On (2)
The operating modes are reported on [MCalcVal] object 'Present operating mode'.
At the same time, the reason for the present operating mode is reported to another [MCalcVal] object:
- Exception (1)
- Operating mode switch (2), resulting from an active (not equal to Auto) operating mode switch
- Manual operating mode selection (3), resulting from an active (not equal to Auto) manual operating mode selection
- Scheduler (4), resulting from an active scheduler
Normal operation
Sources for normal mode:
- [MI] Operating mode switch
- [MCnfVal] Manual operating mode selection
- [MSchedule] Scheduler
In normal mode, components are simultaneously switched on and off as per the operating mode.
Exception mode
Sources for exception mode:
- Fault in the primary pump
- Fault in the secondary pump
In exception mode, all outputs are switched off directly at priority 5 and the present operating mode is set to 'Off'.
Start-up control (nested chart SttUpAlmHdl)
The following functionality is available for an automatic startup of the plant, e.g. after a loss of power and return of power:
- Fixed switch-on delay (can be set on input pin [DlySttUp])
- The plant remains off to ensure communications are reliable and cross-check references are triggered. 'Exception' is reported as the reason for the present operating mode.
- Automatic acknowledge (2x) of possible pending alarms during a fixed switch-on delay.
- Additional adjustable delay for staged plant ramp-up (can be set on input pin [DlyOn])
Alarm handling (nested chart SttUpAlmHdl)
The state of events on the plant is acquired by BACnet object 'Plant state'. The state is mapped on function block CMN_EVT.
[CMN_EVT] Common event
The following functions are available:
- Automatic acknowledge (2x) after startup
- Alarm acknowledgement with a value object
- Alarm indication:
- For pending alarms On
- For unprocessed alarms flashing - Ability to connect the acknowledge button [BI]
- Ability to connect to an alarm indication [BO], e.g. an alarm lamp through an output block [BO]
- Ability to connect to other alarm handling functions on other plants, e.g. acknowledge button and alarm indication for multiple plants in the same control cabinet
Name | Description | Type | Signal/connection | State text | Engineering unit |
|---|---|---|---|---|---|
OpModSwi | Operating mode switch | MI | N/A | Auto | Off | On | N/A |
CirPu'Cmd | Circulating pump command | BO | NO contact | Off | On | N/A |
FlDet | Flow detector | BI | NO contact | No flow | Flow | N/A |
ScaPrt'TDhwCns | Scalding prevention consumer hot water temperature Alarm function: Basic (Notification class 8) Limit high 75 [°C]; limit low 0 [°C] Time deviation: 30 [s] | AI | LG-Ni1000 | N/A | 0...100 [°C] |
ScaPrt'Vlv | Scalding protection valve position | AO | 0...10V | N/A | 0...100 [%] |
TDhw | Domestic hot water temperature. Alarm function: Basic (Notification class 8) Limit high 75 [°C]; limit low 0 [°C] Time deviation: 30 [s] | AI | LG-Ni1000 | N/A | 0...100 [°C] |
TFlPrim | Primary flow temperature | AI | LG-Ni1000 | N/A | 0...100 [°C] |
TRtPrim | Primary return temperature | AI | LG-Ni1000 | N/A | 0...100 [°C] |
Vlv(Prim)'Pos | Valve (primary) position | AO | 0...10V | N/A | 0...100 [%] |




Circulating pump (




