EcoStruxure Machine Expert version 1.1 does not support the M258, LMC058 and LMC078 controllers.

Extension of a Function Block

Overview

Supporting object-orientated programming, a function block can be derived from another function block. This means a function block can extend another, thus automatically getting the methods/properties/actions/transitions and variables of the basing function block in addition to its own.

The extension is performed by using the keyword EXTENDS in the declaration of a function block. You can choose the EXTENDS option already during adding a function block to the project via the Add Object dialog box.

For further information, refer to the sections describing how to add a method, a property, an action, or a transition.

Syntax

FUNCTION_BLOCK <function block name> EXTENDS <function block name>

This is followed by the declaration of the variables.

Example

Definition of function block fbA

FUNCTION_BLOCK fbA
VAR_INPUT
    x:int;
END_VAR
...

Definition of function block fbB

FUNCTION_BLOCK fbB EXTENDS fbA
VAR_INPUT
    ivar: INT := 0;
END_VAR
...

Extension by EXTENDS

Extension by EXTENDS means:

ofbB contains all data and methods which are defined by fbA. An instance of fbB can now be used in any context where a function block of type fbA is expected.

ofbB is allowed to override the methods/properties/actions/transitions defined in fbA. This means: fbB can declare a method with the same name and the same inputs and output as declared by A.

ofbB is not allowed to declare function block variables with the same name as used in fbA. In this case, the compiler will generate an error message.

ofbA variables and methods can be accessed directly within an fbB scope by using the SUPER pointer (SUPER^.<method>).

NOTE: A function block can implement multiple interfaces, but it can only extend a single function block.

Example

FUNCTION_BLOCK FB_Base
VAR_INPUT
END_VAR
VAR_OUTPUT
    iCnt : INT;
END_VAR
VAR
END_VAR
THIS^.METH_DoIt();
THIS^.METH_DoAlso();
    
    METHOD METH_DoIt : BOOL
    VAR
    END_VAR
    iCnt := -1;
    METH_DoIt := TRUE;
    
    METHOD METH_DoAlso : BOOL
    VAR
    END_VAR
    METH_DoAlso := TRUE;

FUNCTION_BLOCK FB_1 EXTENDS FB_Base
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
END_VAR
// Calls the method defined under FB_1
THIS^.METH_DoIt();
THIS^.METH_DoAlso();
// Calls the method defined under FB_Base
SUPER^.METH_DoIt();
SUPER^.METH_DoAlso();
    METHOD METH_DoIt : BOOL
    VAR
    END_VAR
    iCnt := 1111;
    METH_DoIt := TRUE;
PROGRAM PLC_PRG
VAR
    Myfb_1: FB_1;
    iFB: INT;
    iBase: INT;
END_VAR
Myfb_1();
iBase := Myfb_1.iCnt_Base;
iFB := Myfb_1.iCnt_THIS;