支持面向对象的编程方式一个 ⇘ 功能块可以被另一个功能块派生,这意味着一个功能块可以扩展另一个,可以自动获得基础功能块的基本属性。
扩展是通过功能块定义中 的关键字EXTENDS实现的。在添加功能块时可以通过 ⇘ '添加对象'对话框中选择择EXTENDS操作,实现功能块的扩展。
语法:
FUNCTION_BLOCK <function block name> EXTENDS <function block name>
规则按照变量声明的规则。
Example
定义功能块 fbA:
FUNCTION_BLOCK fbA
VAR_INPUT
VAR_INPUT
x:int;
END_VAR
...
定义功能块 fbB:
FUNCTION_BLOCK fbB EXTENDS fbA
VAR_INPUT
ivar: INT := 0;
END_VAR
...
用过 EXTENDS 方式进行扩展表示:
|
小心! 多重继承是不允许的。 |
示例
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;