[Dhw22] Domestic hot water, storage tank charge, external heat exchanger
Plant example Dhw22 is a plant for domestic hot water handling.
Functions
- Storage tank charge
- Legionella prevention
Plant diagram

Components
- Hot water storage tank with external heat exchanger and two temperature sensors
- Storage tank charging circuit with a primary pump and mixing valve and a secondary pump and temperature sensor
- Circulating pump
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 |
| Hot water demand Reports hot water demand to heat generation and distribution. | [BCalcVal] Hot water demand |
| Storage tank setpoint Storage tank temperature setpoint for operating mode: On | [ACnfVal] Tank temperature setpoint |
| Circulating pump Switches on/off the pump as needed. |
|
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. | ||
| Hot water storage tank Measures the storage tank temperature. | [AI] Tank temperature, top [AI] Tank temperature, bottom |
Storage tank charge Switches on/off storage tank charging as needed. | [ACnfVal] Tank 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 | |
| Flow temperature sensor secondary Measures the flow temperature in the secondary circuit for the storage charge. | [AI] Flow temperature |
Flow temperature setpoint secondary | [ACalcVal] Present flow temperature setpoint secondary | |
Secondary pump The pump is switched on with delay (e.g. by 1 minute) to the primary pump in order to purge the heat exchanger by the primary pump. |
| |
Command Switches on/off the secondary charging pump. | > [BO] Command | |
Fault. Switches the plant to: Off | > [BI] Fault | |
| Pump primary |
|
Command Switches on/off the primary charging pump. | > [BO] Command | |
Fault. Switches the plant to: Off | > [BI] Fault | |
| Primary mixing valve Mixes the required amount of water from return to flow to achieve the desired flow temperature. |
|
Temperature controller Controls the flow temperature for the storage charge. | > [Controller] Temperature controller | |
Positioning 0% = Bypass … 100% = Through-port | > [AO] Position |
Storage tank charge
Two sensors are planned: One sensor in the top and one in the low area of the storage tank. The two temperatures determine the state of charging.

Key
|
SpTTank | Tank temperature setpoint |
TTnk | Tank temperature |
TTnkTop | Tank temperature, top |
TTnkBtm | Tank temperature, bottom |
Charging required:
The storage tank is discharged and charging is required if the high temperature sensor is below the setpoint minus a switching differential, e.g. 1K.
Charged:
The storage tank is charged if both temperature sensors are above the setpoint.
The storage tank is charged with the storage tank charging circuit.
Name | Description | Object type | Default value |
|---|---|---|---|
Vlv(Prim)'TCtr | Temperature controller Controls the secondary flow temperature for the storage charge. | Controller | N/A |
The temperature controller acts as a PI controller (PID with derivative action time Tv=0) and compares the present flow temperature setpoint [PrSpTFl] against the flow temperature [TFl] and calculates the valve position [Pos] on the output. The following controller variables are preset: | |||
Special case:
The switching differential is automatically increased (e.g. 5 K) in the event the top sensor fails or only one sensor exists (in the middle of the storage tank and connected as TTnkBtm).


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.

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 mode
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 |
TTnkTop | Tank temperature top | AI | LG-Ni1000 | N/A | 0...100 [°C] |
TTnkBtm | Tank temperature bottom | AI | LG-Ni1000 | N/A | 0...100 [°C] |
TFlsec | Secondary flow temperature | AI | LG-Ni1000 | N/A | 0...100 [°C] |
Pu(Sec)'Cmd | Pump (secondary) command | BO | NO contact | Off | On | N/A |
Pu(Sec)'Flt | Pump (secondary) fault Alarm function: Extended (Notification class 7) Reference value: Tripped Time deviation: 0 [s] | BI | NO contact | Normal | Tripped | N/A |
Pu(Prim)'Cmd | Pump (primary) command | BO | NO contact | Off | On | N/A |
Pu(Prim)'Flt | Pump (primary) fault Alarm function: Extended (Notification class 7) Reference value: Tripped Time deviation: 0 [s] | BI | NO contact | Normal | Tripped | N/A |
Vlv(Prim)'Pos | Valve (primary) position | AO | 0...10V | N/A | 0...100 [%] |



Circulating pump (



