s7-200单位时间内计算次数的问题 点击:3406 | 回复:55



一品黄山

    
  • 精华:11帖
  • 求助:0帖
  • 帖子:754帖 | 9779回
  • 年度积分:0
  • 历史总积分:48262
  • 注册:2004年3月31日
发表于:2011-08-10 08:24:46
楼主

题目这样:

输入点4个:I0.0、I0.1、I0.2、I0.3;

输出点2个:Q0.0、Q0.1。

要求:若1分钟内4个输入点只要累计有9次输入脉冲信号,则输出Q0.0。

             若1分钟内4个输入点累计有15次输入脉冲信号,则输出Q0.1。
     程序越简洁越好。




去留无意

  • 精华:0帖
  • 求助:1帖
  • 帖子:2帖 | 138回
  • 年度积分:0
  • 历史总积分:660
  • 注册:2010年4月15日
发表于:2011-08-12 09:52:22
21楼

翻看了一下18楼提到的帖子,收获很大,同时也想解释一下我的具体想法,用D0-D59分别存放一分钟内每一秒的上升沿次数,建立一个指针,使其能在0-59之间连续变化,用于不断循环访问D0-D59(每秒钟访问一次,下一秒访问下一个)具体做法如下:

1,开机时,清空D0-D59,让指针为0,

2,每隔一秒统计过去一秒的上升沿次数,将其放置在指针指向的存储区,(覆盖掉最先一秒内的数据)

3,同时统计D0-D59的和,也就是最近一分钟内的脉冲次数,根据题目要求,做出判断输出

4,同时指针+1,如果指针大于等于60,强制指针=0

 

以秒为单位,不断重复2-4步骤即可

 

robotH

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 688回
  • 年度积分:0
  • 历史总积分:2433
  • 注册:2004年10月14日
发表于:2011-08-12 10:33:03
22楼

引用song1km 的回复内容:

引用robotH 的回复内容:这个题目作为14楼说的实际应用,其实很简单,以1分钟为时间段,判断信号是否到达设定数量即可。因为实际应用中不需要以任意时间段作为判断条件。如果作为趣味题目研究,可参考18楼说的帖子。

 


 


如果“以1分钟为时间段,判断信号是否到达设定数量即可”那么每1分钟都需要做个判断,这样会有浪费资源,相反,只有累积到达9次,或者12次才做一次时间判断,这样会节省很多资源,因为毕竟正常运行的时候,出现错误的几率是少的。

因此:19楼的方法值得借鉴。


 


 

不浪费资源。请参考以下程序:



一品黄山

  • 精华:11帖
  • 求助:0帖
  • 帖子:754帖 | 9779回
  • 年度积分:0
  • 历史总积分:48262
  • 注册:2004年3月31日
发表于:2011-08-12 10:34:59
23楼

看了一下18楼的帖子,又看了几个链接,很有收获。

这个要求是原来的工艺流程,这么写的。应该是以1分钟为单位进行判断。

winter938

  • 精华:1帖
  • 求助:0帖
  • 帖子:55帖 | 945回
  • 年度积分:0
  • 历史总积分:3418
  • 注册:2005年6月12日
发表于:2011-08-12 11:05:15
24楼
有个问题:I0.0-I0.3如果同时产生上沿,程序结构恐怕得再考虑一下了

robotH

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 688回
  • 年度积分:0
  • 历史总积分:2433
  • 注册:2004年10月14日
发表于:2011-08-12 11:20:34
25楼
引用winter938 的回复内容:有个问题:I0.0-I0.3如果同时产生上沿,程序结构恐怕得再考虑一下了


概率极小。如果非要避免,可以I0.0-0.3分别对应VB0-VB3,再将VB0-VB3加起来计数即可。

一品黄山

  • 精华:11帖
  • 求助:0帖
  • 帖子:754帖 | 9779回
  • 年度积分:0
  • 历史总积分:48262
  • 注册:2004年3月31日
发表于:2011-08-12 11:49:54
26楼
引用winter938 的回复内容:有个问题:I0.0-I0.3如果同时产生上沿,程序结构恐怕得再考虑一下了



刚才问了一下现场的人员,这种情况可能会有,但确实是小概率事件。楼上的做法应该行得通。我下午测试一下。

去留无意

  • 精华:0帖
  • 求助:1帖
  • 帖子:2帖 | 138回
  • 年度积分:0
  • 历史总积分:660
  • 注册:2010年4月15日
发表于:2011-08-12 11:53:53
27楼
引用一品黄山 的回复内容:是随意的1分钟,只要在一分钟内发生9次或15次都会有输出。



原来随意的一分钟指人为时间间隔的一分钟,而不是向后滑动的一分钟,晕了!

winter938

  • 精华:1帖
  • 求助:0帖
  • 帖子:55帖 | 945回
  • 年度积分:0
  • 历史总积分:3418
  • 注册:2005年6月12日
发表于:2011-08-12 13:00:37
28楼
19楼的程序可否这样修改:I0.0-I0.3的每个上沿都把VB0,VB1的自增1,在把Vw2存入*VD80,84时原程序不变.小概率事件程序应该考虑。

wyb2866255

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2011-08-14 11:12:29
29楼

      考虑4个脉冲的重叠,是比较复杂的问题,不是简单的把“I0.0-I0.3的每个上沿都把VB0,VB1的自增1”就可实现的。下面的程序就是考虑了4个脉冲的重叠出现的问题,望大家分析讨论,有不对之处请与指正,共同把这个题目做好。

          该程序是这样判断的:每出现一个输入脉冲,立即判断该脉冲与其连续出现的前9个(或前5个)脉冲的间隔时间,如小于或等于1分钟,使Q0.0=1(或Q0.1=1),否则使Q0.0=0(或Q0.10)。

winter938

  • 精华:1帖
  • 求助:0帖
  • 帖子:55帖 | 945回
  • 年度积分:0
  • 历史总积分:3418
  • 注册:2005年6月12日
发表于:2011-08-16 01:00:50
30楼
我也做了一下,未测试,请指正.

winter938

  • 精华:1帖
  • 求助:0帖
  • 帖子:55帖 | 945回
  • 年度积分:0
  • 历史总积分:3418
  • 注册:2005年6月12日
发表于:2011-08-16 22:22:01
31楼

如果要检测时间T内的N次上沿并报警则my_timer子程序中网络2的8改为2*N,网络3之FOR指令的FINAL设置为N-1,网络7中的60改为T

如果要检测多于4个I输入的上沿,则主程序网络5之后再仿网络5增加一个网络,I0.3改成对应的输入,再增加时就类似再增加网络.

这体现了西门子结构化编程的一斑

shuilian

  • 精华:8帖
  • 求助:0帖
  • 帖子:238帖 | 1929回
  • 年度积分:0
  • 历史总积分:15326
  • 注册:2008年4月24日
发表于:2011-08-17 09:26:44
32楼
在测试wyb2866255的程序时PLC输出后一直不复位。而且并不是到一分钟才输出,只要够9次就输出的。这点我还没太明白。

一品黄山

  • 精华:11帖
  • 求助:0帖
  • 帖子:754帖 | 9779回
  • 年度积分:0
  • 历史总积分:48262
  • 注册:2004年3月31日
发表于:2011-08-17 09:51:00
33楼

若是几次过后有输出容易,困难的是这个时间段的程序不好编。

Piston

  • 精华:0帖
  • 求助:1帖
  • 帖子:23帖 | 13107回
  • 年度积分:18
  • 历史总积分:40065
  • 注册:2009年5月22日
发表于:2011-08-17 10:08:51
34楼
引用芳季 的回复内容:也曾看过一个帖。那个帖是说指定时间内是否发生3个脉冲。说得很详细的了。可,找不到……

我帮你找到那个帖子 http://www.gongkong.com/webpage/forum/201008/2010083022225200001-1.shtml#replyea

ruge1981

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 18回
  • 年度积分:0
  • 历史总积分:82
  • 注册:2011年1月12日
发表于:2011-08-17 10:54:26
35楼
看了后表示有点头疼!!

一品黄山

  • 精华:11帖
  • 求助:0帖
  • 帖子:754帖 | 9779回
  • 年度积分:0
  • 历史总积分:48262
  • 注册:2004年3月31日
发表于:2011-08-17 11:16:59
36楼
上面的帖子我看了,但是把3改成9为什么就不行呢?

一品黄山

  • 精华:11帖
  • 求助:0帖
  • 帖子:754帖 | 9779回
  • 年度积分:0
  • 历史总积分:48262
  • 注册:2004年3月31日
发表于:2011-08-17 14:21:29
37楼
如果不考虑信号重叠的话,robotH 的程序是比较简洁地,但这里没有复位,程序不能连续的运行。


再加几句复位程序,也能实现我的要求。当时也没想到程序会这么复杂的。

 

Q0.0的复位方式与!Q0.1相同。我测试了一下可以用。

 

wyb2866255 的程序考虑的比较周全,但是我测试时没有输出,不知道哪里出了问题。

winter938 的程序我一会试下。

非常感谢大家的热情帮助。

winter938
积分:2090
帖子:48
注册:05-06-12
  [个人博客]     [个人播客]
  [加为好友]     [发送消息]

 

wyb2866255
积分:8662
帖子:65
注册:10-07-01
  [个人博客]     [个人播客]
  [加为好友]     [发送消息]

robotH

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 688回
  • 年度积分:0
  • 历史总积分:2433
  • 注册:2004年10月14日
发表于:2011-08-17 15:47:43
38楼
复位应该采用按钮复位。因为既然故障报警了,就需要人为检查一下,确认后再复位。

一品黄山

  • 精华:11帖
  • 求助:0帖
  • 帖子:754帖 | 9779回
  • 年度积分:0
  • 历史总积分:48262
  • 注册:2004年3月31日
发表于:2011-08-17 15:54:10
39楼
不过现场似乎没有这个钮,只是输出一个接点信号给中控室,中控室确定是否停机。我暂时也是按照现有的流程编一下。

一品黄山

  • 精华:11帖
  • 求助:0帖
  • 帖子:754帖 | 9779回
  • 年度积分:0
  • 历史总积分:48262
  • 注册:2004年3月31日
发表于:2011-08-17 15:57:53
40楼
还有个问题啊,这个悬赏分数如何给出呢?

热门招聘
相关主题

官方公众号

智造工程师