恭喜,你发布的帖子
发布于 2024-04-08 21:02:16
6楼
这个问题问的非常好。
1 首先楼主定时器是用的多重背景,那么可以推断是FB块
2 既然是FB块,然后还有记忆功能,那么变量肯定存储在static中,那么答案结合一楼来看就显而易见了
3 首先第一个扫描周期定时器是不工作的,这一点毫无疑问。其次也是最关键的部分就是楼主对PLC的输入输出及扫描过程可能稍微不大了解,PLC输入是实时采集,存储到过程映射存储器中,扫描到该点位时读取,关键的来了!!PLC的输出是统一输出(扫描完所有程序统一输出,而不是边扫描边输出)举个大家都知道的例子---双线圈。双线圈就是只会判断最后一次线圈的赋值是0是1然后输出,不会看前面程序段的运算。
4 看完第三条那么楼主这个问题就解决了,楼主确实在第6行进行赋值0,但是你的#start变量一直是TRUE,扫描到后面的case指令就会进行语句第一步(第19行)进行赋值1,所以统一输出后,他的赋值就一直是第19行的1,不会看第6行的赋值0。
那这道看似简单的问题就迎刃而解了。
你说的我是有点懂了,但是我又糊涂了,来看false写在第一行的情况,当第一行是false的时候,假设第一个扫描周期start变为true,那么第十九行又变为1了,定时器开始计时,那第二个扫描周期时,第一行是0,定时器要扫描完才会输出,那第一行是不是也是双线圈的第一个,那为什么放在第一行他不工作呢?
请填写推广理由:
分享
只看
楼主