Function blocks define both the algorithm and the data declaration of a part of the user logic. Due to this definition the logic can be considered a class. Not the function block itself is invoked but several instances of this function block can be created, which then can be used separately. Each instance possesses its private copy of the data declaration memory, which provide the necessary data information for executing the function block’s functionality.
The private data declaration memory of a function block instance persists from one invocation of this instance to the next one. This internal memory allows for the implementation of incremental functionality by using Function Blocks.
As a consequence, several invocations of one function block Instance with the same input variables do not necessarily yield the same results.
In contrast to functions, function blocks permit defining not only one but a set of output variables representing the function block results.
Instances of function blocks can be declared locally for use within one POU. Declaring the instance of a function block within a POU defines the scope of this instance at the same time.