回复内容:
对: phoenixyqc 因为T1 on以后,下面每次一扫描周期都先执行了LD ... 内容的回复!
-------------------------
我昨晚的想法跟你一样,但是我自己也碰到了一个有关扫描机理的问题,假如你的理论是正确的话,你试下来解答下我发的一个帖子的问题,你会发觉放到我的问题上,又行不通的。
我帖子的链接是:
c1为什么不计数,y000不翻转-专业自动化论坛-中国工控网论坛 http://bbs.gongkong.com/D/201910/811614_1.shtml#replyDi
本人QQ 2576224822 ,欢迎来Q,一起探讨PLC这似是而非,貌似简单,实则捉摸不透的扫描机理。我觉得这是PLC最基本的东西,如果这都弄不清楚,写到大程序时,出问题那是根本没法找原因。
回复内容:
对:GONGKONG0769 其实,上面的解答,都没真正解释:Y000都等于0了,而受Y000常开触点控制的Y001,居然还为1。 这核心问题被众人成功地绕开了同一程序里,既有 SET Y000,又有RST Y000,在这个程序里,运行稳定以后,是会出现SET Y000和RST Y000,都满足,而RST在后,所以,在程序运行稳定后,Y000是一直为0。(仿真也说明确实如此) 但上面只是说明Y000为啥是0而已,100%的Y000=0,这就另人更纳闷了,y000确实为0了,那依赖Y000而生存的y001为何能续命? 期待真正的答案,而非王顾左右而言他。 内容的回复:会解决根本问题(原理性)的还是少,大多数都是只会用😂(我连用都还不会)
多谢楼上各位大佬的热情回复,通篇看下来,比较认同phoenix和幽木的观点。
这个现象,应该是PLC扫描过程中寄存器对输入信号采样处理的机制造成的,以下是从书中摘抄的,应该可以解释这个问题:
“PLC采用了与普通计算机工作方式差别较大的'循环扫描'工作方式。所谓扫描,就是CPU从第一条指令开始执行程序,直到最后一条(END指令)。扫描过程分为三个阶段,即输入采样和处理、用户程序执行、输出数据和处理三个阶段,这三个阶段称为一个扫描周期。”
“1.输入采样和处理阶段
在第n个扫描周期,首先进行的是读入现场信号即输入采样阶段,PLC依次读入所有输入状态和数据,并将它们存入输入映像寄存器区(存储器输入暂存区)中相应的单元内。输入采样结束后,如果输入状态和数据发生变化,PLC不再响应,输入映像寄存器区中相应单元的状态和数据保持不变,要等到第(n+1)个扫描周期才能读入,这一阶段称为输入采样和处理阶段,通常简称为输入刷新阶段。”
个人认为,红字部分是导致这个现象的原因,即,在程序开始,由于X0是有效的,所以Y0已经被置为了1,这个1被寄存器采样并保存了下来,所以后面即使Y0发生了变化被置为了0,寄存器并不采样这个值,还是按照1来处理,因此Y1仍然保持1
回复内容:
对: zhoujy@smeecomcn 多谢楼上各位大佬的热情回复,通篇看下来,比较认同pho... 内容的回复!
-------------------------
由于PLC每个周期开始时进行采样、更新,之后执行程序,程序从第一条到最后一条依次执行。
注意,程序执行过程中,对I/O是不会刷新的,刷新只是在每个周期开始时。
该程序执行完成后Y0为0,Y1为1,也就是说刷新时,Y0为0,Y1为1,当执行下一个周期时,第7步时Y0又被置1(由于此时I/O是不会刷新,Y0输出还是0),运行到18步时Y0是1,所以Y1还是1(由于程序是从上到下顺序执行,Y1没有变0的过程),22步时Y0又被置0,执行完成后Y0还是0,Y1还是1。每当进行刷新时都是Y0为0,Y1为1。