对于每一个功能块THIS指针是自动获得的变量,指针指到当前功能块接口。
因此对于以下的问题会有有效的解决方法:
所以THIS指针只能在方法和相关的功能块中才能实现。
THIS必须定义为大写字母,其他的拼写方式是不允许的!
因为THIS是指向一个继承功能块的,所以必须首先要获得操作功能块的地址:THIS^.METHDoIt
示例
本地变量 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();