有小伙伴问在codesys平台上用for循环,循环停止但会出现累加的现象, 代码如下:
PROGRAM PLC_PRG
VAR
i: INT;
val : INT := 0;
END_VAR
FOR i:=0 TO 10 DO
val := val + 1; // for循环结束, val的值也会出现累加的情况
END_FOR
如图所示
val的值之所以出现累加的情况:
1. 主要原因是因为程序执行到END_FOR语句时, 这时候PROGRAM PLC_PRG程序不会退出, 会继续从头开始执行。
2. 继续执行FOR循环语言, 而此时,由于val的值未被清零,会在之前的循环结果上继续累加。这样就造成了这段代码中val的值出现一直累加的现象。
这和PLC的运行机制有关: 循环扫描运行,高级语言运行方式是: 顺序运行
了解原理后, 则解决方式就简单了,示例代码如下:
PROGRAM PLC_PRG
VAR
i: int;
val : INT := 0;
END_VAR
val := 0; // 在下次扫描周期运行时, 清除之前运行的val的结果。
FOR i:=0 TO 10 DO
val := val + 1;
END_FOR
结果如下图所示: