对于每个功能块,具有名称 THIS 的指针自动可供使用。它指向其自己的功能块实例。
这为以下问题提供了有效解决方案:
o如果方法中本地声明的变量隐藏了功能块变量。
o如果您希望将指针引用至其自己的功能块实例以在功能中使用。
THIS 仅可在方法/属性/操作/转移中以及相关的功能块实现中使用。
THIS 必须以大写字母写入。不接受其他拼写形式。
由于 THIS 是功能块的指针,您必须取消引用它方可访问功能块的元素:THIS^.METHDoIt。
实现语言 |
示例 |
---|---|
ST |
THIS^.METH_DoIt(); |
FBD/CFC/LD |
![]()
|
注意: THIS 的功能尚未对指令列表实现。
本地变量 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();
需要对于其自己实例的引用的功能调用。
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();