# FireDamperMot\_OnOff

## `FireDamperMot_OnOff` (FB)

FUNCTION\_BLOCK FireDamperMot\_OnOff

### Short description

> Control of a motorized fire damper with two position feedbacks\
> Additional functions: functional test of the fire damper\
> Typical application: control of a fire damper in an HVAC system

### Representation

<figure><img src="https://2592874069-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FQR4vCFzt6ixgsqlR3pdR%2Fuploads%2Fgit-blob-1a20e1988265eb3fd74aca24731b96c40fa2f099%2FFireDamperMot_OnOff_FB.png?alt=media" alt=""><figcaption></figcaption></figure>

### Function description

#### General

This function block controls a binary motorized fire damper (*xEn* = TRUE = opening), monitors the run times during the opening and closing processes and can perform a full fire damper test.\
The function block can be operated either in normal operation or in test mode ( = fire damper test).\
The test mode has higher priority than normal operation and can be triggered by a rising edge at the input *xTestEx* and/or at the setpoint / parameter **xRunTest** is triggered.

#### Enable opening / closing of the fire damper before manual override *xAB*

The enable for opening / closing of the fire damper before manual override *xAB* is passed unchanged from the request to open / close the fire damper *xEn* if the fire damper test is not active.

#### Release for opening / closing the fire damper after manual override *xHB*

The enable for opening / closing of the fire damper after manual override *xHB* corresponds to the enable for opening / closing of the fire damper before manual override *xAB* additionally extended by a manual override module

| *xAB* | **eManModeB**  | *xHB* | Notes                                          |
| ----- | -------------- | ----- | ---------------------------------------------- |
| FALSE | eMANBIN.Auto   | FALSE | Manual override module in automatic            |
| TRUE  | eMANBIN.Auto   | TRUE  | Manual override module in automatic            |
| X     | eMANBIN.ManOn  | TRUE  | Manual override module in manual operation On  |
| X     | eMANBIN.ManOff | FALSE | Manual override module in manual operation Off |

Legend: X = any

#### Selection of operating mode *wMode*

The selection of the operating mode currently allows two valid variants:

> 1. 'wMode' = 1: The function block behaves like the function block 'FireDamperMot'
>    1. xHB = TRUE: Immediate alarm message if the fire damper is not reported open (fire case)
>    2. FDK test: fixed sequence — closing + opening
> 2. 'wMode' = 2: The function block can be used for applications in Switzerland, where the fire dampers are opened / closed in parallel with the demand of the HVAC system.
>    1. xHB = FALSE: Immediate alarm message if the fire damper is not reported closed after the run time has elapsed
>    2. xHB = TRUE: Immediate alarm message if the fire damper is not reported open after the run time has elapsed (fire case)
>    3. FDK test: xClosed = TRUE: fixed sequence — opening + closing
>    4. FDK test: xOpen = TRUE: fixed sequence — closing + opening

#### Aggregate fault *xAlarm*

'wMode' = 1:\
\
The combined fault *xAlarm* is activated (= TRUE) if at least one of the conditions described below is met:

\
1\) The fault message for the open feedback *xAlarmOpen* is active (= TRUE).\
\
2\) The fault message for the closed feedback xAlarmClosed is active (= TRUE).\
\
3\) The fire damper is not fully open (xOpen = FALSE).\
(Background: Any fire damper that is not fully open represents a faulty condition).\
\
4\) The input \*xAlarmIn\* is active (= TRUE).\
\
In all other cases the combined fault xAlarm is not activated (= FALSE).\
\
'wMode' = 2:\
\
The combined fault xAlarm is activated (= TRUE) if at least one of the conditions described below is given:\
\
1\) The fault message for the open feedback xAlarmOpen is active (= TRUE).\
\
2\) The fault message for the closed feedback xAlarmClosed is active (= TRUE).\
\
3\) xHB = TRUE: The fire damper is not fully open (xOpen = FALSE).\
(Background: Any fire damper that is not fully open represents a faulty condition).\
\
4\) xHB = FALSE: The fire damper is not fully closed (xClosed = FALSE ).\
(Background: Any fire damper that is not fully closed represents a faulty condition).\
\
5\) The input xAlarmIn is active (= TRUE).\
\
In all other cases the combined fault xAlarm is not activated (= FALSE).

#### Enable / disable of the fault message for the opening feedback *xAlarmOpen*

Monitoring of the damper run time during the opening process against an adjustable maximum value (**tOpen**) starts if in normal operation at least one of the conditions described below is met:

1\) A rising edge (FALSE > TRUE) is detected at the output *xHB* detected (= normal case).\
\
2\) The request to open is active (xEn = TRUE) and at the same time a rising edge (FALSE > TRUE) is detected at the input xQuit.\
\
3\) The output xHB is active (= TRUE) and at the same time a falling edge (TRUE > FALSE) is detected at the input xOpen.\
\
The fault message for the open feedback xAlarmOpen is activated (= TRUE) if, after the expiry of the maximum run time tOpen with the output active (xHB = TRUE), at least one of the following conditions is met:\
\
1\) The feedback for full opening is not active (xOpen = FALSE) (= normal case).\
\
2\) The feedbacks xOpen and xClosed have the same state.\
\
The fault message for the open feedback xAlarmOpen is deactivated (= FALSE) if a rising edge (FALSE > TRUE) is detected at the input xQuit.

#### Enable / disable of the fault message for the closing feedback *xAlarmClosed*

Monitoring of the damper run time during the closing process to an adjustable maximum value (**tclose**) starts if in normal operation at least one of the conditions described below is met:

1\) A falling edge (TRUE > FALSE) is detected at the output *xHB* detected (= normal case).\
\
2\) The request to close is active (xEn = FALSE) and at the same time a rising edge (FALSE > TRUE) is detected at the input xQuit.\
\
The fault message for the closed feedback xAlarmClosed is activated (= TRUE) if, after the expiry of the maximum run time tClose with the output not active (xHB = FALSE), at least one of the following conditions is met:\
\
1\) The feedback for full closing is not active (xClosed = FALSE) (= normal case).\
\
2\) The feedbacks xOpen and xClosed have the same state.\
\
The fault message for the closed feedback xAlarmClosed is deactivated (= FALSE) if a rising edge (FALSE > TRUE) is detected at the input xQuit.

#### Enable / disable of the fault message for the enabled but not opened fire damper after the run time has expired (FALSE = disabled, TRUE = enabled) *xAlarmOn\_Closed*

The enable for the fault message is given (precondition: 'wMode' = 2) if, after expiry of any run time monitoring the enabled fire damper ('xHB' = TRUE)\
is not fully open ('xOpen' = FALSE) (= fire case).\
The fault message is deactivated (= FALSE) if at the input *xQuit* a rising edge (FALSE > TRUE) is detected.\
It is also deactivated (= FALSE) in all other modes ('wMode' <> 2).

#### Enable / disable of the fault message for the disabled but not closed fire damper after the run time has expired (FALSE = disabled, TRUE = enabled) *xAlarmOff\_Opened*

The enable for the fault message is given (precondition: 'wMode' = 2) if, after expiry of any run time monitoring the disabled fire damper ('xHB' = FALSE)\
is not fully closed ('xClosed' = FALSE).\
The fault message is deactivated (= FALSE) if at the input *xQuit* a rising edge (FALSE > TRUE) is detected.\
It is also deactivated (= FALSE) in all other modes ('wMode' <> 2).

#### Duration of the last full opening *tLastOpen*

The measurement of the duration begins each time if at least one of the conditions described below is met:

1\) A rising edge (FALSE > TRUE) is detected at the input *xOpen* detected.\
\
2\) A falling edge (TRUE > FALSE) is detected at the input xOpen.\
\
3\) A rising edge (FALSE > TRUE) is detected at the input xClosed.\
\
4\) A falling edge (TRUE > FALSE) is detected at the input xClosed. (Normal case)\
\
5\) A rising edge (FALSE > TRUE) is detected at the output xHB.\
\
6\) A falling edge (TRUE > FALSE) is detected at the output xHB.\
\
At this output, after every rising edge on the full opening feedback xOpen (FALSE > TRUE), the run time is available.

#### Duration of the last full closing *tLastClosed*

The measurement of the duration begins each time if at least one of the conditions described below is met:

1\) A rising edge (FALSE > TRUE) is detected at the input *xOpen* detected.\
\
2\) A falling edge (TRUE > FALSE) is detected at the input xOpen. (Normal case)\
\
3\) A rising edge (FALSE > TRUE) is detected at the input xClosed.\
\
4\) A falling edge (TRUE > FALSE) is detected at the input xClosed.\
\
5\) A rising edge (FALSE > TRUE) is detected at the output xHB.\
\
6\) A falling edge (TRUE > FALSE) is detected at the output xHB.\
\
After each rising edge on the feedback of full closing xClosed (FALSE > TRUE), the run time is available at this output.

#### Duration of the current opening / closing in *tRunTime*

During each run time measurement the current run time is available at this output.

#### Testing the functions of the fire damper (test mode)

Test mode is always generally triggered if at least one of the conditions described below is met:

1\) A rising edge (FALSE > TRUE) is detected at the input *xTestEx* detected.\
\
2\) The active state (= TRUE) is detected on the setpoint / parameter xRunTest. The active state is immediately reset (= FALSE) after detection.\
\
However, the actual test mode only takes place if the feedback of automatic operation eAOO (0 = automatic, >0 = manual) contains the value 0 and at the same time the operating mode of the manual override for the digital output xHB signals automatic operation (eMANBIN = eMANBIN.Auto).\
\
'wMode' = 1:\
In test mode a closing and subsequent opening of the fire damper is performed, each with run time monitoring. At the beginning of the test mode the outputs xAlarmOpen, xAlarmClosed, tTestOpen, tTestClosed and xTestOK are reset (= FALSE).\
\
Now the control command for closing is issued and the run time is monitored for exceeding the maximum value tClosed. If the correct feedback situation (xClosed = TRUE and xOpen = FALSE) is achieved without exceeding the maximum value, the output xAlarmClosed is not activated (= FALSE). In all other situations the output xAlarmClosed is activated (= TRUE).\
\
Now the control command for opening is issued and the run time is monitored for exceeding the maximum value tOpen. If the correct feedback situation (xOpen = TRUE and xClosed = FALSE) is achieved without exceeding the maximum value, the output xAlarmOpen is not activated (= FALSE). In all other situations the output xAlarmOpen is activated (= TRUE).\
\
The result indicator for the fire damper test xTestOK is activated (= test successful) if neither of the two outputs xAlarmOpen or xAlarmClosed is active (= TRUE). The achieved values tLastOpen and tLastClosed are placed on the outputs tTestOpen and tTestClosed respectively and stored until the next fire damper test.\
\
The test mode ends automatically as soon as the test of the fire damper is completed.\
\
'wMode' = 2:\
\
The sequence for the test mode is determined at the time of its initiation:\
\
a) 'xClosed' = TRUE: The sequence 'Opening - Closing' is executed\
b) 'xOpen' = TRUE: The sequence 'Closing - Opening' is executed\
\
Sequence Closing - Opening:\
\
In test mode a closing and subsequent opening of the fire damper is performed, each with run time monitoring. At the beginning of the test mode the outputs xAlarmOpen, xAlarmClosed, tTestOpen, tTestClosed and xTestOK are reset (= FALSE).\
\
Now the control command for closing is issued and the run time is monitored for exceeding the maximum value tClosed. If the correct feedback situation (xClosed = TRUE and xOpen = FALSE) is achieved without exceeding the maximum value, the output xAlarmClosed is not activated (= FALSE). In all other situations the output xAlarmClosed is activated (= TRUE).\
\
Now the control command for opening is issued and the run time is monitored for exceeding the maximum value tOpen. If the correct feedback situation (xOpen = TRUE and xClosed = FALSE) is achieved without exceeding the maximum value, the output xAlarmOpen is not activated (= FALSE). In all other situations the output xAlarmOpen is activated (= TRUE).\
\
The result indicator for the fire damper test xTestOK is activated (= test successful) if neither of the two outputs xAlarmOpen or xAlarmClosed is active (= TRUE). The achieved values tLastOpen and tLastClosed are placed on the outputs tTestOpen and tTestClosed respectively and stored until the next fire damper test.\
\
The test mode ends automatically as soon as the test of the fire damper is completed.\
\
Sequence Opening - Closing:\
\
In test mode an opening and subsequent closing of the fire damper is performed, each with run time monitoring. At the beginning of the test mode the outputs xAlarmOpen, xAlarmClosed, tTestOpen, tTestClosed and xTestOK are reset (= FALSE).\
\
Now the control command for opening is issued and the run time is monitored for exceeding the maximum value tOpen. If the correct feedback situation (xOpen = TRUE and xClosed = FALSE) is achieved without exceeding the maximum value, the output xAlarmOpen is not activated (= FALSE). In all other situations the output xAlarmOpen is activated (= TRUE).\
\
Now the control command for closing is issued and the run time is monitored for exceeding the maximum value tClosed. If the correct feedback situation (xClosed = TRUE and xOpen = FALSE) is achieved without exceeding the maximum value, the output xAlarmClosed is not activated (= FALSE). In all other situations the output xAlarmClosed is activated (= TRUE).\
\
The result indicator for the fire damper test xTestOK is activated (= test successful) if neither of the two outputs xAlarmOpen or xAlarmClosed is active (= TRUE). The achieved values tLastOpen and tLastClosed are placed on the outputs tTestOpen and tTestClosed respectively and stored until the next fire damper test.\
\
The test mode ends automatically as soon as the test of the fire damper is completed.

#### Prerequisites

> **Prerequisite for the use of the function block FireDamperMot\_OnOff**
>
> The use of the TimeRead2 function block is required for correct operation.

### CODESYS

InOut:

| Scope       | Name               | Type     | Initial      |
| ----------- | ------------------ | -------- | ------------ |
| Input       | `xEn`              | `BOOL`   |              |
| Input       | `xAlarmIn`         | `BOOL`   | FALSE        |
| Input       | `eAOO`             | eManBin  | eManBin.Auto |
| Input       | `xOpen`            | `BOOL`   |              |
| Input       | `xClosed`          | `BOOL`   |              |
| Input       | `xQuit`            | `BOOL`   | FALSE        |
| Input       | `xTestEx`          | `BOOL`   | FALSE        |
| Input       | `wMode`            | `WORD`   | 2            |
| Output      | `sLine1`           | `STRING` |              |
| Output      | `sLine2`           | `STRING` |              |
| Output      | `sText`            | `STRING` |              |
| Output      | `xHB`              | `BOOL`   |              |
| Output      | `xAB`              | `BOOL`   |              |
| Output      | `xAlarm`           | `BOOL`   |              |
| Output      | `xAlarmOpen`       | `BOOL`   |              |
| Output      | `xAlarmClosed`     | `BOOL`   |              |
| Output      | `xAlarmOn_Closed`  | `BOOL`   |              |
| Output      | `xAlarmOff_Opened` | `BOOL`   |              |
| Output      | `xTestOK`          | `BOOL`   |              |
| Output      | `tLastOpen`        | `TIME`   |              |
| Output      | `tLastClosed`      | `TIME`   |              |
| Output      | `tTestOpen`        | `TIME`   |              |
| Output      | `tTestClosed`      | `TIME`   |              |
| Output      | `tRunTime`         | `TIME`   |              |
| Output      | `xAuto`            | `BOOL`   |              |
| Input Const | `udiOpen`          | `UDINT`  | 150          |
| Input Const | `udiClose`         | `UDINT`  | 25           |
| Input Const | `eManModeB`        | eMANBIN  | eMANBIN.Auto |
| Input Const | `xRunTest`         | `BOOL`   | FALSE        |
| Input Const | `sEditLine2`       | `STRING` | ‘’           |
| Input Const | `sEditLine1`       | `STRING` | ‘Room’       |
