今天编程碰到一个怪现象:我的本意是smart上电之后(已经在编程软件上设置成了上电就进入RUN模式,并成功下载),第一个扫描周期接通,使得M6.0置位。下载之后第一次断电然后上电,M6.0成功置位;但是再将smart置于Stop模式,然后开启RUN模式,M6.0就始终是0。。。自己排查了一下,发现并没有存储区重叠使用这样的问题呀。。。
1.有没有前辈有相关的解释?感觉应该是自己编程的问题,但是什么原因会导致这样的问题呢?
2.前辈们是怎样避免自己重叠使用了存储区间的?有时候程序写多了可能会搞混淆,我的办法比较笨,就是自己去查找相同的名称,以此来检查自己是否不小心重叠使用了,但是效率好像比较低。。。
问题补充:
恩,结合大家的说法,我自己又去查了一下资料,关于这个语句的问题,系统手册上面给出了解释:因为正跳变和负跳变指令需要断开到接通或接通到断开转换,所以无法在首次扫描时检测
上升沿或下降沿跳变。 首次扫描期间,CPU 会将初始输入状态保存在存储器位中。 在后
续扫描中,这些指令会将当前状态与存储器位的状态进行比较以检测是否发生转换。
这里是涉及到PLC扫描周期的相关问题。之前一直以为自己看懂了,后来编程的时候遇到各种问题,才发现自己并没有真正的理解这个过程。
图片里面的程序是没有经过测试的,但我是觉得会有问题,这样子电机是不会动。下面几种情况:
1.将goto的启动条件里面M6.0换成m6.1,电机可以正常运动;
2.将goto的启动条件里面M6.0换成m6.1,并且程序段2,3互换一下顺序,这个时候电机还是不会动;
不知道理解的对不对,只是一个模糊的感觉。有理解的比较透彻的前辈能不能说说?
图片说明:
最佳答案
特殊标志位SM0.1是指plc上电(通电)的第一个周期有效一个周期,你加与不加沿的结果均一样。
所以应该修改程序为:
LD SM0.1
S M6.0,1
不置位的原因:
该程序段是否在主程序段一直调用,或子程序中被无条件调用;M6.0在后面的程序段中没有被重新赋值;是否存在地址重置。
补充问题回复:
实际上你的问题接收对SM0.0/SM0.1等特殊标志位;沿脉冲在子程序上的应用的理解及plc程序扫描机制的理解。
SM0.1上面已有解释,SM0.0是每一个扫描周期均刷新一次。这些特殊标志位可以通过F1的帮助得到理解。
关于沿脉冲无论是上升沿还是下降沿,当沿的前面运算结果有0至1或者由1至0的变换,则沿脉冲指令有一个周期的有效。
提问者对于答案的评价:
恩,谢谢,这个还是需要自己在编程过程中多思考。
专家置评
sm0.1使用时不能使用上升沿
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc143086.html