如何使功能块方法的输入成为可选?

问题描述 投票:0回答:3

调用功能块的方法时,是否可以将某些输入变量设为可选?如果我在没有对所有输入变量进行赋值的情况下调用 fbA.methA(),TwinCAT 会抛出错误:“函数 methA 需要精确的 'x' 个输入。”有时某些输入是不必要或不相关的,但到目前为止,我必须为这些输入分配虚拟值才能编译代码。

twincat
3个回答
6
投票

我认为这是不可能的。您可以创建所有调用基本方法的额外方法。

例如:

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
投票

您还可以在传入参数时对其进行筛选(仍然需要参数,但它们没有任何意义,即始终传递“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

希望这有帮助


0
投票

调用功能块时,始终可以在 TwinCAT 中使用可选输入。当您将函数编程为功能块中的方法时,您可以为输入变量提供默认值。这些输入是可选的。

© www.soinside.com 2019 - 2024. All rights reserved.