程序请教

NET 1

 I      I0.0        Q0.0                               Q0.0
 I----I     I------I       I---------I  P  I-------(  R  )
 I                                                               0
 NET 2

 I      I0.0        Q0.0                               Q0.0
 I----I     I------I   /   I---------I  P  I-------(  S  )
 I                                                               0
 I
 设I0.0接通时间大于3个PLC扫描周期。
 I0.0接通后的第一个扫描周期:NET 1 不执行;NET 2执行 Q0.0=1。
 I0.0接通后的第二个扫描周期:NET 1执行Q0.0=0;NET 2 不执行。
 问题是,在I0.0接通后的第二个扫描周期的执行过程中,NET 2 之所以不执行,原因是什么?
 1.由于NET 1执行Q0.0=0,在NET 2的
    I0.0    Q0.0
 I----I     I------I   /   I---------接通,但是不能造成上升沿脉冲-----I  P  I----的触发,所以NET 2不执行。
 2.还是其它什么原因?

最佳答案

原因是你对过程映像不理解。
  应该说第一个扫描周期I0.0接通,Net1和Net2都不接通(但都有执行),I0.0接通信号被推入PII输入过程映像中,但不影响本周期的程序,第二个扫描周期,因为在PII中I0.0为1,而过程输出映像PIQ对应的Q0.0为0,所以Net1仍不接通,而Net2网路接通,Q0.0置1,并推入PIQ中,第三个扫描周期,PII中I0.0仍为1,PIQ中的Q0.0也为1,所以Net1网路接通,Q0.0复位为0,注意,此周期内PIQ中的Q0.0仍为1,只有当此周期结束时Q0.0复位后的0才会被推入到PIQ中,此时NET2中Q0.0的RLO值仍为1,所以Net2不接接通。
  问题的关键是影响网路能否接通的是RLO,而影响RLO的是过程映像。过程映像在程序当前扫描周期结束时更新,数据用于下一扫描周期。而不是你想象的Net1将Q0.0复位后,立即影响Net2.
  这就是你要找的原因。
 上升沿触发─|P|─触点的功能是:允许一次扫描中每次执行"关闭至打开"转换时电源流动。因为程序中你将此触发点放置在Q0.0之后,所以在某一个周期内,无论I0.0还是Q0.0的0到1变化都将会让该触点动作,所以就出现了人面桃花所模拟的结果一样,Q0.0只接通一下,就一直断开,而不是Ruixm所说的单按钮启停,单按钮启停程序应将上升沿触发─|P|─触点放置在I0.0之后,Q0.0之前。

提问者对于答案的评价:
ok

专家置评

这个问题的关键是对过程映像区的理解和上升沿触发指令的理解。从木头牛的回答中可以看出,你对过程映像区还是有一定认识的。但是你有一个关键点的描述是错误的:“第三个扫描周期,PII中I0.0仍为1,PIQ中的Q0.0也为1,所以Net1网路接通,Q0.0复位为0,注意,此周期内PIQ中的Q0.0仍为1,只有当此周期结束时Q0.0复位后的0才会被推入到PIQ中,此时NET2中Q0.0的RLO值仍为1,所以Net2不接接通。”此周期内PIQ中的Q0.0并不是一直为1。Net2会被接通。过程映像区是CPU与外部地址读写的缓存区。如果这个地方是输入缓存Ix.x,没有问题,它的状态会保持到下一次更新映像区。但是对于Qx.x,只要置位为1,后边指令如果有读该位的指令时,状态都会为1。
 也许你会说,只有当此周期结束时Q0.0复位后的0才会被推入到PIQ中。
 这个说法没问题,但是输出映象区是否被更新,影响的是外部实际的输出通道是否变化,CPU本身并不去读输出映像区的值,它只读输入映像区的值。大家可以看一下 shine 的论述,从他所列的 N-1 到 N+2 周期的逻辑关系,就可以清楚的知道各周期的真实状态。
 所以,shine 的论述更准确。

 

原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc355794.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2021年7月5日
下一篇 2021年7月5日

相关推荐

发表回复

登录后才能评论