编程时新手容易犯错的一点

已锁定

ransad

  • 帖子

    166
  • 精华

    0
  • 被关注

    22

论坛等级:侠客

注册时间:2011-04-06

普通 普通 如何晋级?

编程时新手容易犯错的一点

1905

27

2016-09-29 15:18:13

前几天看到一个提问是这样的

问为什么C0不计数?而把网络1和网络2交换就可以了?


这个问题对于新手来说是一个很容易犯的错误,我自己也犯过同样的错误。那是因为手册中有段话把我误导了,也是自己对它理解不够。


就是这个程序,我的想法是I0.0是按钮,按下Q0.0接通,在按下Q0.0断开,可实际Q0.0根本不会接通。

那么问题来了,手册中这样说的


我的程序应该I0.0上升沿时Q0.0置位,但要等到扫描完时才会输出Q0.0,那么网络2的I0.0上升沿后面Q0.0就应该为OFF,那么就不会复位,下次按下I0.0时Q0.0复位。应该没问题啊。


而第一个程序是这样的,说明书上说

10ms定时器在扫描开始时刷新,那么当T98 ON的那一个扫描周期计数器就应该计数啊。难道说明书有问题?


后来自己仔细研究才明白,CPU执行程序时用的是过程映像寄存器中的值,Q0.0那个程序就好理解了,置位Q0.0后,寄存器中Q0.0已经ON了,扫描网络2的时候读取寄存器中Q0.0 ——>ON,所以I0.0上升沿——>ON,Q0.0——>0N,所以Q0.0被复位,Q0.0输出OFF。


那定时器这个呢?我在想cpu读取的应该也是寄存器中的值而不是定时器的实际地址,所以

实际就是扫描开始
读取T98实际地址传送给T98寄存器——>T98寄存器ON
网络1  扫描到T98时——>T98寄存器off
网络2  T98寄存器OFF,
所以网络2的T98永远接不通。

这只是我的个人理解,实际是不是这样运算的也没找到资料,想到了电脑CPU的缓存,是不是PLC的过程映像寄存器是一个道理。





编程时新手容易犯错的一点 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200

共有33779条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。