简单的程序不简单

已锁定

感悟生活

  • 帖子

    368
  • 精华

    4
  • 被关注

    25

论坛等级:侠士

注册时间:2010-06-02

普通 普通 如何晋级?

简单的程序不简单

1387

10

2011-10-28 19:42:52

今天在看生产线上的程序的时候发现了一个程序的漏洞,拿来和大学分享一下。 (本来想插入梯形图的,但是我发不了图,只能STL了)
A(
A I0.0
L S5T#200MS
SD T 0
NOP 0
NOP 0
NOP 0
A T 0
)
L S5T#200MS
SS T 1
NOP 0
NOP 0
NOP 0
A T 1
= M 100.0
上面这点程序本来是想用来滤波的,I0.0是热金属检测器的数字量输入信号,串了一个通电延时和断电延时,两个时间继电器的延时时间都是200MS,M100.0是滤波后的信号,本来想法是即使当输入有瞬间信号丢失时M100.0也是不会跟着输入丢失的。但其实这个程序并不能真正实现滤波,当I0.0瞬间丢失信号(假如小于200MS),M100.0也是会跟着丢失的,并不能达到滤波的效果,原因是通电延时放在前面,当丢失信号再次为1的时候,还要200MS才能使断电延时的输入端得电,但在这之前其实M100.0已为0,M100.0也相当于没有滤去I0.0瞬间的信号丢失。

想达到滤波的方法有两种方法:一是,把断电延时的时间改得比通电延时的时间长;二是把断电延时放在通电延时前面,这样即使两个时间继电器的时间一样,也会有滤波的作用。程序如下
A(
A i0.0
L S5T#200MS
SS T 1
NOP 0
NOP 0
NOP 0
A T 1
)
L S5T#200MS
SD T 0
NOP 0
NOP 0
NOP 0
A T 0
= M 100.0


这个生产线的程序还是做过很多生产线的老师写的,可见一不注意还是很容易出现漏洞。这也让我们在写程序时必须进行调试,有时候理论上看起来行得通,但实际上却不行。
简单的程序不简单 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54616条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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