回复:能不能在块里面用延时啊?就是用S_ODT ,怎么用法?

sqzth

  • 帖子

    1045
  • 精华

    5
  • 被关注

    14

论坛等级:侠圣

注册时间:2006-10-29

普通 普通 如何晋级?

发布于 2009-06-05 11:38:38

0楼

不是不能在块里面用延时,
而是在块里面用延时存在隐患;
举例:
FC13
Network 1:
A M 0.1
= Q 0.0
Network 2:

A M 2.0
L S5T#10S
SD T 0
A T 0
= M 2.1
OB1 :
Network 1:
A M0.0
CALL FC13

程序原理的目的:
在OB1中当M0.0为1 的时候,调用FC13,为0时,不调用FC13
FC13 中使用了 定时器;
故障现象:
假设某个时刻,M0.0 M0.1 M2.0都为1,并且维持数值1的时间超过了10秒,那么Q0.1,M2.1也都会为1.
假设此时M0.0变为0, FC13不再被调用,
则:FC13中的 Q M,会保持原来状态,T,C 会继续工作,
继续假设这个时候M0.0 再次变为1 ,并且 此时M2.0也为1,由于定时器保持着 计时到达的状态,M2.1会立刻变为1!
这就出问题了,本来我们以为 M2.1会延时10秒的,结果没有,而是立刻变为1!
这种情况可能会导致某些在 FC被调用后必须延时执行的逻辑立刻执行。


对于上述现象,如果编程人员能够确保上述现象不构成对人身及财产的伤害,则可以使用,不采取任何措施,否则应当加入限制程序,比如OB1 在调用 FC13时:

OB1应该如下

A M 0.0
= L 20.0
A L 20.0
JNB _001
CALL FC 13
_001: NOP 0
A L 20.0
NOT
R Q 0.0
R T 0
NOP 0
就是在 M0.0为0 时候,复位 定时器


以上摘自《STEP7编程常见错误》

知其道 用其妙
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54660条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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