在调用函数块的方法时,是否可以使某些输入变量可选?如果我在没有为所有输入变量赋值的情况下调用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
希望这能帮助