THIS 指针

概述

对于每个功能块,具有名称 THIS 的指针自动可供使用。它指向其自己的功能块实例。

这为以下问题提供了有效解决方案:

o如果方法中本地声明的变量隐藏了功能块变量。

o如果您希望将指针引用至其自己的功能块实例以在功能中使用。

THIS 仅可在方法/属性/操作/转移中以及相关的功能块实现中使用。

THIS 必须以大写字母写入。不接受其他拼写形式。

由于 THIS 是功能块的指针,您必须取消引用它方可访问功能块的元素:THIS^.METHDoIt

采用不同实现语言的 THIS 调用

实现语言

示例

ST

THIS^.METH_DoIt();

FBD/CFC/LD

G-SE-0027196.1.gif-high.gif

 

 

注意: THIS 的功能尚未对指令列表实现。

示例 1

本地变量 iVarB 遮蔽功能块变量 iVarB

FUNCTION_BLOCK fbA
VAR_INPUT
    iVarA: INT;
END_VAR
iVarA := 1;

FUNCTION_BLOCK fbB EXTENDS fbA
VAR_INPUT
    iVarB: INT := 0;
END_VAR
iVarA := 11;
iVarB := 2;

    METHOD DoIt : BOOL
    VAR_INPUT
    END_VAR
    VAR
        iVarB: INT;
    END_VAR
    iVarB := 22; // Here the local iVarB is set.
    THIS^.iVarB := 222; // Here the function block variable iVarB is set, although iVarB is overloaded.

PROGRAM PLC_PRG
VAR
    MyfbB: fbB;
END_VAR

MyfbB(iVarA:=0 , iVarB:= 0);
MyfbB.DoIt();

示例 2

需要对于其自己实例的引用的功能调用。

FUNCTION funA
VAR_INPUT
    pFB: fbA;
END_VAR
...;

FUNCTION_BLOCK fbA
VAR_INPUT
    iVarA: INT;
END_VAR
...;

FUNCTION_BLOCK fbB EXTENDS fbA
VAR_INPUT
    iVarB: INT := 0;
END_VAR
iVarA := 11;
iVarB := 2;

    METHOD DoIt : BOOL
    VAR_INPUT
    END_VAR
    VAR
        iVarB: INT;
    END_VAR
    iVarB := 22;    //Here the local iVarB is set.
    funA(pFB := THIS^);    //Here funA is called with THIS^.

PROGRAM PLC_PRG
VAR
    MyfbB: fbB;
END_VAR
MyfbB(iVarA:=0 , iVarB:= 0);
MyfbB.DoIt();