Retain variables are declared by the keyword RETAIN is added in programming objects in the scope VAR, VAR_INPUT, VAR_OUTPUT, VAR_IN_OUT, VAR_STAT, or VAR_GLOBAL.
Syntax for the declaration
<scope> RETAIN <identifier>: <data type> ( := <initialization> )? // ( ... )? : Optional END_VAR <scope> : VAR | VAR_INPUT | VAR_OUTPUT | VAR_IN_OUT | VAR_STAT | VAR_GLOBAL
An assignment of inputs, outputs, or memory addresses with the AT keyword is not permitted.
Example
In a POU:
VAR RETAIN iVarRetain: INT; END_VAR
In a GVL:
VAR_GLOBAL RETAIN g_iVarRetain: INT; END_VAR
Possible declaration locations
|
Locally in a program |
Only the variable is located in the retain memory area. Info: When using redundancy, the entire program with all of its data is located in the retain memory area. |
|
Globally in a global variable list |
Only the variable is located in the retain memory area. Info: When using redundancy, the entire global variable list with all of its data is located in the retain memory area. |
|
Locally in a function block |
The entire instance of the function block with all of its data is located in the retain memory area. Only the declared retain variable is protected. |
|
Locally in a function |
The variable is not located in the retain memory area. This declaration does not have any effect. |
|
Locally and persistently in a function |
The variable is not located in the retain memory area. This declaration does not have any effect. |
Whenever possible, avoid using RETAIN to mark the variables of a function block.