在结构化文本中获取Ouput变量的语法

时间:2018-11-01 15:12:23

标签: plc st

我正在尝试通过以下接口使用库定义的函数(用于交叉控制产品的CCaux):

FUNCTION Lightsensor_GetIlluminance : eErr (* return error status. 0 ERR_SUCCESS, otherwise error code.*)
VAR_OUTPUT
    value: UINT;(*Illuminace value (Lux)*)
END_VAR

我似乎找不到从输出变量中获取“值”的正确语法。这是我程序中的内容:

VAR
    illumen : UINT;
END_VAR

在我想将illumen设置为Lightsensor_GetIlluminace的输出变量的位置。以下内容无效,因为它将变量设置为eErr

illumen := CCAux.Lightsensor_GetIlluminance();

并且:

illumen := CCAux.Lightsensor_GetIlluminance.value;

不起作用,因为出现错误'value' is no input of 'Lightsensor_GetIlluminance'

并且:

illumen := CCAux.Lightsensor_GetIlluminance(value := illumen);

失败,因为Lightsensor_GetIlluminance take exactly '0' inputs

我将CoDeSys用于上下文。

2 个答案:

答案 0 :(得分:2)

这是带有附加输出的函数的语法:

<function> (<function output variable1> => <output variable 1>, <function output variable n> => <output variable n>)

以下代码应返回“照度值”:

 CCAux.Lightsensor_GetIlluminance(value => illumen);

答案 1 :(得分:0)

如果您有这样的输出变量

 public void enableTextChangedListener(boolean enableFormatting){
        if (enableFormatting) {
            if (!"1".equals(mAmountEditText.getTag())) {
                mAmountEditText.addTextChangedListener(new StringUtils.NumberTextWatcherForThousand(mAmountEditText));
                mAmountEditText.setTag("1");

  }
        }
        else {
            mAmountEditText.removeTextChangedListener(new StringUtils.NumberTextWatcherForThousand(mAmountEditText));
        }
    }

然后在代码中,您可以像这样使用其他变量。

FUNCTION Lightsensor_GetIlluminance : eErr 
VAR_OUTPUT
    value: UINT;
END_VAR

或者,如果您创建eErr := Lightsensor_GetIlluminance(value => illumen); ,则除了上面的方法外,您还可以使用类似的方法。

FUNCTION_BLOCK

在代码中

FUNCTION_BLOCK Lightsensor_GetIlluminance 
VAR_OUTPUT
    value: UINT;
    error : eErr;
END_VAR

因此您可以通过Lightsensor_GetIlluminance(); IF NOT Lightsensor_GetIlluminance.error THEN illumen := Lightsensor_GetIlluminance.value; END_IF; 访问变量,但必须提前致电FB。