ST语言FOR循环退出但一直累加原因

有小伙伴问在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

结果如下图所示:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Only1oveYou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值