-1

我试图找到一种更简洁的方法来将变量与一系列数字进行比较。

目前我这样做: IF int_variable=67 or int_variable=68 or int_variable=69 then...

有没有办法写类似: IF int_variable=67 到 69 then

提前致谢。

4

4 回答 4

1

如果您的意思是如果变量在这些数字的范围内,那么就这么简单。但在更复杂的情况下,您没有捷径,只需使用 Jakobs 方法或类似方法即可。

IF int_variable >= 67 AND int_variable <= 69 THEN
    //It is 67, 68, or 69
END_IF
于 2019-05-20T05:47:34.517 回答
0

例如,您可以使用 for 循环,例如:

FOR nCounter := 67 to 69 by 1 DO
    IF int_variable = nCounter THEN
        ....
        EXIT; // If you want to exit the loop
    END_IF
END_FOR
于 2019-05-17T16:54:52.690 回答
0

如果比较总是整数(或枚举类型),则可以使用 case 语句。

    CASE example_int OF
        1,2: <do whatever you need to do>
        4,5,7,8: <do other stuff>
    ELSE
        <do default case stuff>
    END_CASE

如果您需要更大的范围,您只需要使用 AND 或嵌套 IF(嵌套 IF 如下所示)

   IF example_int >= 2 THEN
       IF example_int < 5 THEN
           //in range 2 - 5
       ELSIF example_int <= 10 THEN
           //in range 6 - 10
       END_IF
   END_IF

记住要注意终点。如果您忘记了上述任一 IF 语句中的“或等于”部分,它会更改范围

于 2019-05-22T21:30:20.017 回答
0

没有其他方法可以像您想要的那样检查条件是否正常。在 ST 中,你可以编写库和函数,如果你有太多的条件,你可以编写一个库来解决你的问题。但这没用,因为 ST 允许订购代码以使其可读。如下所示:

IF (n>=0) AND (n<=20)  OR
   (n>=32) AND (n<=45) THEN
// Do this
ELSE
// Do that
END_IF ;

但是您可以调用函数或库来用 TRUE 或 FALSE 填充布尔变量。您只需要在逻辑循环中测试 var。


//IN_aTestValues & aValueToTest are an Array of values
bVarTest := TestCond( IN_aTestValues := aValueToTest );

If bVarTest THEN
// Do this
ELSE
// Do that
END_IF ;

你也可以这样做:

bVar := bToTest = 67 AND
        bToTest = 84 AND
        bToTest > 47 AND
        NOT (bToTest = 25) ;

IF bVar THEN
// Do this
Else 
// Do That
END_IF ;

于 2019-12-18T13:05:44.760 回答