首先你的例子很奇怪。ConfitionIF将在每个周期中起作用,尚不清楚条件如何取决于周期。我想你的意思是。
IF toCheck = i THEN
无论如何,在 codesys 中你不能在 PHP 变量中做类似的事情
$a = "hello";
$$a = "world";
echo $helo // output world
或者像这样
$b = 2;
$a1 = 1;
$a2 = 2;
echo ${"a" . $b}; // Output 2
这些都不适用于ST。你使用了不同的方法。如果你在你的问题中告诉你要解决的最终任务,我会建议你最好的,但现在我只会给你一个大概的想法。Codesys 2.3 的所有示例。在 3.5 中,语法略有不同。
- 数组
VAR
aSteps: ARRAY[1..4] OF INT := 1, 2, 3, 4;
END_VAR
toCheck := 3; // INT
result := 0; // INT
FOR i := 1 TO 4 DO
IF toCheck = i THEN
result := aSteps[i];
END_IF
END_FOR
但更简单的是,正如您已经知道 index withtoCheck并且您不需要将其转换为变量名,您可以简单地。
VAR
aSteps: ARRAY[1..4] OF INT := 1, 2, 3, 4;
END_VAR
toCheck := 3; // INT
result := aSteps[toCheck];
- 枚举
首先你定义一个类型。
TYPE enSteps : (
stepIdle, stepStart, stepEnd := 5
);
END_TYPE
现在stepIdle := 0,stepStart := 1并且stepEnd := 5
VAR
result: enSteps;
END_VAR
toCheck := 1;
result := toCheck;
IF result = stepStart THEN
// DO something
END_IF
或者你可以使用CASE
CASE result OF
stepIdle: // do something
stepStart: // do something
stepEnd:
result := stepIdle;
END_CASE
评论
如果你能描述你想要达到的目标,我会给你一个更好的建议。