为了实现方法调用,将实际参数(参数)传递给接口变量。或者,可以省略参数名称。
根据声明的访问说明符,只能在自己的命名空间(INTERNAL)中或自己的编程模块及其派生类(PROTECTED)或仅在自己的编程模块(PRIVATE)中调用方法。对于PUBLIC,可以从任何地方调用该方法。
在实现中,方法可以直接通过THIS指针或通过所分配功能块的局部变量来递归调用自己。
由于继承,可能会发生虚拟函数调用。
虚拟函数调用允许在运行时通过同一调用来调用程序源代码中的各种方法。
.在以下情况下,方法调用是动态绑定的:
.重载方法
功能块fub1和fub2扩展了功能块fubbase并实现了接口interface1。存在方法method1和method2
PROGRAM PLC_PRG
VAR_INPUT
b : BOOL;
END_VAR
VAR pInst : POINTER TO fubbase;
instBase : fubbase;
inst1 : fub1;
inst2 : fub2;
instRef : REFERENCE to fubbase;
END_VAR
IF b THEN
instRef REF= inst1; (* reference to fub1 *)
pInst := ADR(instBase);
ELSE
instRef REF= inst2; (* reference to fub2 *)
pInst := ADR(inst1);
END_IF
pInst^.method1(); (* If b is TRUE, fubbase.method1 will be called, otherwise fub1.method1 is called *)
instRef.method1(); (* If b ist TRUE, fub1.method1 will be called, otherwise fub2.method1 is called*)
假设以上示例中的fubbase包含方法method1和method2两个,它将覆盖fub1 method2,但不会覆盖method1。method1的调用如下:
pInst^.method1();
如果b是TRUE,然后CODESYS调用fubbase.method1。如果不是,则调用fub1.method1。
根据IEC 61131-3标准,方法可以声明其他输出,例如正常功能。通过方法调用,可以将变量分配给其他输出。
有关此内容的详细信息,请参见“函数”主题。
.调用语法:
<function block name>.<method name>(<first input name> := <value> (, <further input assignments>)+ , <first output name> => <first output variable name> (,<further output assignments>)+ );
在设备描述中,可以定义某个功能块实例(库功能块的实例)在每个任务周期中始终调用某种方法。如果该方法包含以下示例的输入参数,CODESYS则即使活动的应用程序当前处于STOP状态,也将处理该方法: