调用功能块的方法时,是否可以将某些输入变量设为可选?如果我在没有对所有输入变量进行赋值的情况下调用 fbA.methA(),TwinCAT 会抛出错误:“函数 methA 需要精确的 'x' 个输入。”有时某些输入是不必要或不相关的,但到目前为止,我必须为这些输入分配虚拟值才能编译代码。
我认为这是不可能的。您可以创建所有调用基本方法的额外方法。
例如:
FUNCTION_BLOCK Multiplier
METHOD Multiply : REAL
VAR_INPUT
number1 : REAL;
number2 : REAL;
END_VAR
METHOD MultiplyByTwo : REAL
VAR_INPUT
number : REAL;
END_VAR
MultiplyByTwo := Multiply(2, number);
这样您还可以减少方法的输入数量,从而使其更易于测试和使用。
您还可以在传入参数时对其进行筛选(仍然需要参数,但它们没有任何意义,即始终传递“0”)。
FUNCTION_BLOCK CAT
METHOD DECIBELS: REAL
VAR_INPUT
MEOW, PURR: BOOL;
END_VAR
// body
DECIBELS := 0.0;
IF MEOW <> 0
DECIBELS := DECIBELS + 10.0;
END_IF;
IF PURR <> 0
DECIBELS := DECIBELS + 5.0;
END_IF;
END_METHOD
END_FUNCTION_BLOCK
你可以这样调用:
PROGRAM MAIN
VAR
C: CAT;
RESULT: ARRAY [1..4] OF REAL;
END_VAR
// body
RESULT[1] := C.DECIBELS(TRUE, TRUE); // will return 15.0
RESULT[2] := C.DECIBELS(TRUE, 0); // will return 10.0
RESULT[3] := C.DECIBELS(0, TRUE); // will return 5.0
RESULT[4] := C.DECIBELS(0, 0); // will return 0.0
END_PROGRAM
希望这有帮助
调用功能块时,始终可以在 TwinCAT 中使用可选输入。当您将函数编程为功能块中的方法时,您可以为输入变量提供默认值。这些输入是可选的。