关于边沿检测的使用

已锁定

eaglesky

  • 帖子

    660
  • 精华

    22
  • 被关注

    16

论坛等级:侠圣

注册时间:2005-12-05

普通 普通 如何晋级?

关于边沿检测的使用

1596

4

2010-06-10 00:14:42

写程序时,根据自己要达到的目的,顺手写了如下的两句程序(适当做了简化):
Network 6
A DB8.DBX 166.0
A I 18.6
= L 20.0
A L 20.0
BLD 102
S DB8.DBX 166.1
A L 20.0
JNB _001
L DW#16#FF010080
L DB8.DBD 164
AD
T DB8.DBD 164
_001: NOP 0

Network 7
A DB8.DBX 166.1
FN M 24.2
O DB8.DBX 167.7
= DB8.DBX 167.7
转换成LAD看起来更直接些,简单的描述一下就是:在DB8.DBX166.0、 I18.6两个点都为1时,先置位DB8.DBX166.1,然后通过逻辑与指令又将包括DB8.DBX166.1在内的一些位置零(复位),之后在Network 7检测DB8.DBX166.1的下降沿做另外一个位的输出。
从逻辑上上,这个程序应该没什么问题。但是在复核程序的时候,感觉这个地方似乎不妥,于是在模拟器中做了测试,结果果然有问题:DB8.DBX167.7这个位得不到输出。
对Network 6做了如下修改:
A DB8.DBX 166.0
A I 18.6
= L 20.0
A L 20.0
BLD 102
S DB8.DBX 166.1
A L 20.0
A M 1000.3
JNB _002
L DW#16#FF010080
L DB8.DBD 164
AD
T DB8.DBD 164
_002: NOP 0
A(
A L 20.0
A M 1000.2
L S5T#1S
SD T 10
NOP 0
NOP 0
NOP 0
A T 10
)
JNB _003
L DW#16#FF010080
L DB8.DBD 164
AD
T DB8.DBD 164
_003: NOP 0
为了便于测试,M1000.3和M1000.2是为了以2种方式执行逻辑与操作,且便于直接观察对比。有了定时器之后,DB8.DBX167.7按照预想的效果获得了输出。
当然,实际程序的修正有别的方法,不需要增加定时器。就这个现象本身而言,增加定时器的结果应该是导致NW6的输出与NW7输出之间存在了超过一个扫描周期的时间差。如果这个分析是正确的话,那就是说,边沿检测功能检测的是扫描周期开始时所读取到的值的边沿!而不是本周期内随时变化产生的边沿。
关于边沿检测的使用 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54616条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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