编程技巧展示:为一求助帖用S7-200编写一段程序及程序解析 点击:7453 | 回复:62



wyb2866255---王者之师

    
  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2013-03-05 13:53:10
楼主

        编程技巧展示:为一求助帖用S7-200编写一段程序及程序解析

    求助帖:四个阀门的开关由四个接近开关信号控制,要求是1、同一时刻只能一个阀门开;2、当有两个以上到位信号出现时按优先顺序打开阀门;3、每个阀门只要开通就有一定的工作时间,时间未到不开通其他阀门;4、当有两个以上到位信号在等待上一阀门工作完毕的情况下要求按“先到先开”原则对阀门排序工作。采用的是西门子的S7-200PLC进行控制。胶状物体通过管路输送,末端分别由四个气动阀控制胶体进入四台双缸装药机,当其中一个缸正对阀门出口时,触发近位开关表示到位

  这一求助帖有一定难度,为此花费一定时间,编出如下程序,供大家分析。除此法编程外,还可用填表与FIFO指令,按此编程思路编程,有兴趣的网友可以试试。

       一、梯形图:

  注:(本程序经上机运行,动作正确,网络17为实验程序而编写的程序,其4个定时器的延时时间皆设定=2秒)

二、程序解析:

14个电磁阀对应PLC的输出口为Q0.0Q0.1Q0.2Q0.3,工作时间分别由定时器T101~T104控制,这4个定时器的定时时间可由触摸屏或上位机设置改变。 4个定时器的时间设置区为:VW10VW12VW14VW16。控制电磁阀打开的到位接近开关的输入地址为I0.0I0,1I0.2I0.3

2、按题意要求 规定

1)、如同时有2个以上接近开关同时到位闭合时,只容许一个电磁阀打开,对应定时器延时时间到,该阀门关闭,而另一阀门打开……阀门打开的先后次序是Q0.0优先,Q0.1次之,Q0.2再次之,Q0.3为最后。

2、)当有两个以上接近开关先后到位时,其IB0变化的输入状态按先后次序依次存入MB13MB12MB11MB10里。动作执行是先从第一次到位的接近开关的(MB13)开始判断,使其对应阀门打开,在阀门打开且尚未结束时,其他到位的阀门则等待。当工作的阀门工作完毕后,等待的阀门应按“先到先开”的次序进行工作(即先为MB12,再为MB11,最后为MB10)。

根据上述二点要求,在程序上进行如下处理:

1、网络2~网络54个接近开关到位时令MB0的对应位置1,这里采用置位指令的作用是防止各接近开关动作时产生抖动而引起采集输入状态(MB0、MB3等)的错误。

2、  网络6的解析:MB0时时随IB0变化,MB1MB0为发生变化前的状态值,当IB0

无输入变化时,其MB0=MB1,网络6不执行其动作。只有当有一个或几个接近开关到位时,其对应输入点=1,都会使MB0>MB1,则网络6立即执行:将MB0MB1进行异或运算,其运算结果送入对应存储区:如MB3=0(即第一次动作,或前次动作的阀门工作已全部结束),异或结果送入MB13。如MB3=1,即前一次动作阀门尚未结束,将异或结果送入MB12。如MB3=2,即前二次动作阀门尚未结束,将异或结果送入MB11……

异或结果送完后,将MB0->MB1,且进行MB31运算,又使M0.7=1。当下一个扫描周期到来时,MB0=MB1,不执行网络6,故使M0.7=0,即M0.7输出为单扫描周期脉冲。

如前次动作阀门尚未结束又有接近开关到位,使MB0>MB1,立即又执行MB0MB1的异或运算,此时MB3=1,故异或结果->MB12……

MB0MB1的异或运算是本程序的技巧编程之一:它能将IB0的最新到位的接近开关状态剪接出来,如变化前 IB0=0000_0010MB0=MB1=0000_0010,如此时第一与第三接近开关同时到位(即I0.0I0.2=1,其IB0=0000_0111),则使MB0立刻=0000_0111,而MB1=0000_0010MB0MB1的异或运算的结果=0000_0101,此值恰是最新到位的2个接近开关=1 的状态值,将这运算的结果送入MB12,以备当前一次动作阀门工作结束后,再按本次(MB12)输入状态进行正确操作。  

3、  网络7的解析: 定时器T101~T104的延时时间为4个阀门 的工作时间,在每个阀

门打开的同时,其对应的定时器得电开始延时,当延时时间到,对应定时器输出由01,其前沿使该阀门关闭(即QB0=0)。再判断及操作:

1)、如此时MB13=0,说明前一次动作的一个或几个阀门已全部工作结束,将MD10右移8位(即将MB12->MB13MB11->MB12 MB10->MB110->MB10,且使MB31M2.0=0,接着再判断移位后的MB13,如MB130,说明仍有等待阀门需要打开,故发出触发脉冲M2.6=1的单周期脉冲,去触发等待的阀门开门。

2)、如此时MB130,说明本次动作的几个阀门没有全部工作结束,发出触发脉冲M2.1=1的单周期脉冲,去触发等待的阀门开门。

4、  网络8~网络11的解析:为触发Q0.0~Q0.3四个阀门开门的程序。使阀门打开有3

种触发脉冲:(1M2.0=1的前沿。即:在有接近开关到位使IB0状态发生变化时,产生M2.7=1的单脉冲,如此时刻M2.0=0,则使M2.001,产生前沿脉冲。(2)、M2.1=1单脉冲。即:在由2个以上接近开关同时到位,当工作阀门关闭时还有等待阀门没有打开时,产生的单周期触发脉冲。(3)、M2.6=1单脉冲。即:当本次的所有工作阀门动作已结束,但还有尚未执行的等待阀门(即MD10移位前,其MB120)时产生的单周期触发脉冲。

3个脉冲出现,都会使对应阀门打开:此时的QB0=0,程序是从先判断M13.0开始的,如M13.0=1,使Q0.0=1、使标记M13.0=0,同时使T101得电开始延时。由于Q0.0=1使QB00,故不会使后面的Q0.1~Q0.3同时刻再置1,只有T101延时时间到,使Q0.010,后,当再次产生触发脉冲时,判断还是先从M13.0开始,由于此时QB0=0、而MB13=0,不会再次使Q0.01,接着判断M13.1M13.2M13.3各位,那位=1就将QB0的对应输出置1……

此段程序也体现出技巧编程:这样处理既解决了同时间开关到位闭合时,阀门打开是按优先循序依次工作,又解决了两个以上接近开关先后到位,其等待的阀门按“先到先开”的次序进行工作的控制作用。

    本程序解析到此结束,如有不妥之处,请给予指正,谢谢!




wyb2866255---王者之师

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2013-03-07 09:09:00
21楼

     18l楼:谢谢你的参与,你能用填表与FIFO指令编程很好!你的前段编程思路是不错的,即分别且依次用I0.0~I0.3的前沿将“1、2、4、8”这4个标志数写入表中,这样简化了判断的难度。但在用VB126作计数器C19的复位信号就不对了,因为VB126始终=0,使计数器不计数,故程序是不运行的(我以下载运行过)。

    现按你的程序进行该动,编出如下程序(运行正确)供你及大家参考:

      本程序未加分析说明,请大家分析、讨论动作原理,共同提高编程能力。谢谢!

wyb2866255---王者之师

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2013-03-07 09:19:08
22楼

回21楼:

    1、网络1使MD0=0,即为MB3=0。

    2、网络6:每发生一次接近开关到位(即MB0<>MB1)就执行一次动作,且使MB3加1,如动作4次,其MB3值就由0依次加1,其值为:0、1、2、3

Lgj3388

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 236回
  • 年度积分:0
  • 历史总积分:925
  • 注册:2003年8月13日
发表于:2013-03-07 09:27:40
23楼

楼主你好!该程序是经过验证的,无须改动。但可以增加消抖电路。

VB126作计数器C17的复位信号是没问题的。若不运行请检查运转开关I0.4是否接通?

sfx8723

  • 精华:0帖
  • 求助:8帖
  • 帖子:91帖 | 455回
  • 年度积分:0
  • 历史总积分:6079
  • 注册:2012年2月16日
发表于:2013-03-07 09:34:34
24楼
昨天转发到微博上,网友反映很好哦,

wyb2866255---王者之师

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2013-03-07 09:53:37
25楼
24楼:没有看清楚,原误以为I0.4为点动开关,经你提示,知它是程序启动用的自锁开关,这就对了,抱歉!

Lgj3388

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 236回
  • 年度积分:0
  • 历史总积分:925
  • 注册:2003年8月13日
发表于:2013-03-07 10:08:59
26楼

回复内容:
对:wyb2866255---王者之师关于24楼:没有看清楚,原误以为I0.4为点动开关,经你提示,知它是程序启动用的自锁开关,这就对了,抱歉! 内容的回复:



是我没讲清楚且未加注解。对不起!

I0.4和VB126作计数器C17的复位信号的作用是即使停机也要等最后一个灌装动作完成程序才停止。下一次开机灌装机也记着本次结束的情况。

qinghang

  • 精华:0帖
  • 求助:3帖
  • 帖子:20帖 | 1090回
  • 年度积分:5
  • 历史总积分:3153
  • 注册:2010年8月04日
发表于:2013-03-07 14:13:24
27楼

楼主辛苦了,回答的很认真,很仔细

隨風--王者之师

  • 精华:2帖
  • 求助:11帖
  • 帖子:146帖 | 5530回
  • 年度积分:1307
  • 历史总积分:29997
  • 注册:2008年4月27日
发表于:2013-03-07 15:40:01
28楼
楼主辛苦了,试着学习下,非常感谢!

flylovemore--王者之师

  • 精华:0帖
  • 求助:4帖
  • 帖子:11帖 | 329回
  • 年度积分:5
  • 历史总积分:1026
  • 注册:2011年2月23日
发表于:2013-03-07 21:27:48
29楼
very good!

zzl--骑士军团

  • 精华:0帖
  • 求助:13帖
  • 帖子:37帖 | 1242回
  • 年度积分:0
  • 历史总积分:6032
  • 注册:2009年4月06日
发表于:2013-03-08 09:50:22
30楼
引用 qinghang 的回复内容: 楼主辛苦了,回答的很认真,很仔细



bydq

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 35回
  • 年度积分:0
  • 历史总积分:184
  • 注册:2005年9月16日
发表于:2013-03-08 16:53:48
31楼
  Lgj3388 的 很棒,想请教,假如I0.0和I0.1在同一个扫描周期内都为1(可能性小,但也存在),会不会在填表的时候漏掉一个呢

彩云之滇东北

  • 精华:21帖
  • 求助:5帖
  • 帖子:108帖 | 2725回
  • 年度积分:0
  • 历史总积分:21121
  • 注册:2005年6月14日
发表于:2013-03-08 17:40:30
32楼

顶一个,收藏了                               

w243818310

  • 精华:0帖
  • 求助:4帖
  • 帖子:4帖 | 41回
  • 年度积分:0
  • 历史总积分:75
  • 注册:2012年4月02日
发表于:2013-03-08 20:36:01
33楼

楼主幸苦了 学习一下

王者之师—广州@阿君

  • [版主]
  • 精华:25帖
  • 求助:18帖
  • 帖子:503帖 | 6997回
  • 年度积分:0
  • 历史总积分:66772
  • 注册:2010年6月26日
发表于:2013-03-08 20:39:57
34楼
王工的精神值得学习。。。

zhxl198808——工控人生

  • 精华:5帖
  • 求助:10帖
  • 帖子:46帖 | 3915回
  • 年度积分:0
  • 历史总积分:22216
  • 注册:2008年9月06日
发表于:2013-03-09 08:35:10
35楼

1)、如同时有2个以上接近开关同时到位闭合时,只容许一个电磁阀打开,对应定时器延时时间到,该阀门关闭,而另一阀门打开……阀门打开的先后次序是Q0.0优先,Q0.1次之,Q0.2再次之,Q0.3为最后。

楼主这个解释和题意有出入哦,阀门打开的次序是先到先开。

wyb2866255---王者之师

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2013-03-09 10:29:33
36楼

36楼:请你仔细看原求助帖:

     1、要求是1、同一时刻只能一个阀门开;2、当有两个以上到位信号出现时按优先顺序打开阀门;3、每个阀门只要开通就有一定的工作时间,时间未到不开通其他阀门;这种情况是2个以上同时到位,应按优先顺序打开。

   2、4、当有两个以上到位信号在等待上一阀门工作完毕的情况下要求按“先到先开”原则对阀门排序工作。这种情况是指2个以上不是同时到位且都处于等待阀门,当工作阀门结束,等待的各阀门是按先到先开原则进行。

   我在程序解析里已有详细说明,你再仔细看看。

Lgj3388

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 236回
  • 年度积分:0
  • 历史总积分:925
  • 注册:2003年8月13日
发表于:2013-03-09 10:53:07
37楼
回复内容:
对:bydq关于   Lgj3388 的 很棒,想请教,假如I0.0和I0.1在同一个扫描周期内都为1(可能性小,但也存在),会不会在填表的时候漏掉一个呢 内容的回复:

  即使4个接近开关信号在同一时刻到来也不会有漏掉一个的情况发生。

但由于接近开关或药缸的机械抖动有可能造成对同一个接近开关信号重复填表排队的错误发生。

下面的程序有效的解决了这个问题。

其原理是当有一个接近开关信号到来时先检查队列表中有无相同位置的阀门驱动信号在等待,若有就将本次信号拍死掉不让其进入队列,反之放行。

主程序:

王者之师——益家电气

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 39回
  • 年度积分:0
  • 历史总积分:94
  • 注册:2012年11月26日
发表于:2013-03-09 16:58:52
38楼

感谢楼主,感谢LGI3388,很高兴遇到师傅们!

王者之师——益家电气

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 39回
  • 年度积分:0
  • 历史总积分:94
  • 注册:2012年11月26日
发表于:2013-03-09 20:38:30
39楼
楼主师傅,那个解析里面有个M0.7,应该是M2.7吧。

王者之师——益家电气

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 39回
  • 年度积分:0
  • 历史总积分:94
  • 注册:2012年11月26日
发表于:2013-03-10 19:45:26
40楼
回复内容:
对:Lgj3388关于回复内容:对:bydq关于   Lgj3388 的 很棒,想请教,假如I0.0和I0.1在同一个扫描周期内都为1(可能性小,但也存在),会不会在填表的时候漏掉一个呢 内容的回复:  即使4个接近开关信号在同一时刻到来也不会有漏掉一个的情况发生。但由于接近开关或药缸的机械抖动有可能造成对同一个接近开关信号重复填表排队的错误发生。下面的程序有效的解决了这个问题。其原理是当有一个接近开关信号到来时先检查队列表中有无相同位置的阀门驱动信号在等待,若有就将本次信号拍死掉不让其进入队列,反之放行。主程序:子程序:内容的回复:

师傅你好,网络4中的第二个“VW132不等于0“,这个好像多余?请赐教,谢谢。

热门招聘
相关主题

官方公众号

智造工程师