支持面向对象的编程方式一个 ⇘ 功能块可以被另一个功能块派生,这意味着一个功能块可以扩展另一个,可以自动获得基础功能块的基本属性。
扩展是通过功能块定义中 的关键字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;