用S7-200编程的几个实例的编程技巧解析 点击:4773 | 回复:44



wyb2866255

    
  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2010-12-25 01:33:03
楼主
                                用S7-200编程的几个实例的编程技巧解析
        本文用S7-200 编写的几个实例都是在网上发表或在回答网友的求助编写的,程序短小,针对性强,有程序解析,特别适合初学者学习参考。 
        一、 网友求助“西门子PLC用一个按钮控制电机启停,不容许用中继,可用计数器定时器…”
答复:只用PLC一条指令,就可实现电机启停。见下图:


         该梯形图编程技巧是:在SR触发器的输出端接Q0.0的输出线圈,再用Q0.0的常开与常闭点串接在R、S输入端上,这样的编程处理可确保动作的可靠性。该梯形图的工作原理说明,请见“用S7-200编程的三个实例解析”中的第1例。 
       二、 用S7-200编程,可实现用一个按钮可控制电机的正传、反转、停车的梯形图


         该梯形图编程技巧是:用按钮的输入点(I1.0)连接断电延时定时器(T101),及通电延时定时器(T102),T101延时为0.2 S,T102延时为1 S,T101作用是防按钮颤动而形成连发现象,确保按一下按钮只产生一个脉冲(即T101)从而确保对MB5加1运算的正确性,二次连续按钮的时间间隔控制在0.5S以下,T102 延时为 1S,故在连续按钮时,由于间隔时间小于1S,它不断的被切断。只有按下按钮不抬起(保持I1.0=1),当延时大于1S时,T102动作,其前沿将MB5的内容传入MB6,再将MB5清0。
              工作原理及操作说明:
      1) 开机SM0.1将MB5置1、MB6清0,由于M6.0、M6.1皆为0,使Q0.0与Q0.1都=0,故电机停止不动。 
      2) 电机正传运行:点击一下按钮(I1.0),产生一个(T101=1)的正脉冲,其后沿触发MB5计数器,使其+1,再按下按钮不抬起,此时MB5=0000_0010。经1秒延时,T102闭合,其前沿将MB5的内容送入MB6,随之将MB5清0。此时M6.0=0、M6.1=1,故使Q0.0=1,电机正传运行。随后将按钮抬起,T101的后沿使MB5+1,此时MB5=0000_0001。
       3) 电机停转:按下按钮不抬起,此时MB5=0000_0001。延时1秒后T102动作,T102=1的前沿,将MB5送入MB6,之后MB5清0,此时M6.0=1、M6.1=0,故Q0.0、Q0,1皆为0,电机停止转动。当按钮抬起时,T101的后沿触发MB0,使MB5=1。
       4) 电机反转运行:点击二下按钮(I1.0),产生二个(T101=1)的正脉冲,其后沿触发MB5计数器,使其+2,再按下按钮不抬起,此时MB5=0000_0011。经1秒延时,T102闭合,其前沿将MB5的内容送入MB6,随之将MB5清0。此时M6.0=1、M6.1=1,故使Q0.1=1,电机反传运行。随后将按钮抬起,T101的后沿使MB5+1,此时MB5=0000_0001。
        该程序不需任何外围硬件,而且程序简短,经上机运行考验,程序正确,动作可靠。可以实用。 
       三、 网友求助:“s7-300里的定时器t1,怎么循环启动? 现在是,使用完一次,t1就停止了!而我想用T1实现每隔2秒重复一个动作!请大家帮忙,谢谢!”
       又提出:“其实,我就是想用定时器来实现每隔3秒,QB0循环右移一位。 我现在比较菜鸟哈,希望高手们能指点详细点,最好能有梯形图! 嘿嘿,感谢!!”
       回复:“ 楼主:根据你的要求“其实,我就是想用定时器来实现每隔3秒,QB0循环右移一位。”我给你编出用S7-200和用S7-300编出的功能一样的梯形图。从图中可以看出,S7-200由于采用字节循环右移指令,所以编出程序简短易懂。S7-300由于没有字节循环右移指令,就得通过编程来达到同样的功能作用,编出的程序相对长了一些,看懂梯形图也相对难了一点。有什么问题可以提出,我可以答。 ”


解析梯形图: 
          1、图一是用S7200编写的图形图,其编程技巧有二:
     (1)用通电延时定时器T101的常闭点连接T101的线圈构成振荡器,其脉冲的低电平为3秒宽度,高电平为连续二个扫描周期的间隔时间,即只出现一次,故可直接用T101的常开触点去触发QB0的循环右移,而不需选用其前沿触发,就可确保QB0只右移一次。
      (2)、选用字节循环右移指令,在T101=1的这一扫描周期里将此时刻的QB0内容右移一位,同时又自动的将移出的QB0的最高位(Q0.7)送回QB0的最低位(Q0.0)(如不需循环右移,可改用字节右移一位的指令),使编程简短易懂。
        2、图二是用S7300编写的图形图,其编程技巧也是使用T101构成的振荡器,利用该振荡脉冲的正方波在程序扫描中只出现一次的特点,完成将QB0右移一位。由于S7-300没有字节移位指令,编程是这样处理:将QBO送入MW7的低字节MB8中,右移一位MW7,MB8也随之右移一位, MB8的最高位移到MB7的最低位(即M8.0),再把M8.0送入M7.0中,再把MB8送回QB0,从而实现了将QB0内容的循环右移一位的功能,如程序不需要循环右移,可将“M7.0M8.0”这条语句去掉就可以了。 
        四、网友求助:“如何把一个字节的全部位,高位低位反向重排。
                01234567
                76543210 ”
       回复:现用S7-2



JIAHUIXIAOQING

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 70回
  • 年度积分:0
  • 历史总积分:267
  • 注册:2009年2月11日
发表于:2011-03-11 14:47:16
21楼
正在找基础的学习资料,谢谢了!

pantianf

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 14回
  • 年度积分:0
  • 历史总积分:80
  • 注册:2011年2月11日
发表于:2011-03-11 20:07:54
22楼

学习了!非常感谢!!!

山东 小平

  • 精华:2帖
  • 求助:1帖
  • 帖子:47帖 | 6717回
  • 年度积分:0
  • 历史总积分:21131
  • 注册:2006年1月05日
发表于:2011-03-11 21:03:22
23楼

谢谢楼主,这些程序都是基本的,常用的,应该学会!

游刃有余

  • 精华:1帖
  • 求助:3帖
  • 帖子:56帖 | 1331回
  • 年度积分:0
  • 历史总积分:3240
  • 注册:2005年7月31日
发表于:2011-04-07 20:02:09
24楼
很实用的帖子。支持楼主

vk86592149

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 11回
  • 年度积分:0
  • 历史总积分:86
  • 注册:2011年4月06日
发表于:2011-04-07 21:13:06
25楼
顶   好东西要学习。

guanhua58

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 12回
  • 年度积分:0
  • 历史总积分:58
  • 注册:2007年3月25日
发表于:2011-04-08 00:08:23
26楼

顶,不错,支持楼主.

pjf129127

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 2回
  • 年度积分:0
  • 历史总积分:12
  • 注册:2011年3月04日
发表于:2011-04-09 10:47:20
27楼

好 学习了 谢谢 ,,,,,,

chenwuxiong

  • 精华:0帖
  • 求助:1帖
  • 帖子:3帖 | 20回
  • 年度积分:0
  • 历史总积分:106
  • 注册:2011年4月14日
发表于:2011-04-15 16:03:26
28楼
内容很不错,支持

沂蒙人家

  • 精华:0帖
  • 求助:1帖
  • 帖子:9帖 | 107回
  • 年度积分:0
  • 历史总积分:671
  • 注册:2010年10月23日
发表于:2011-04-16 00:16:24
29楼
 支持楼主,请以后不吝赐教。。。。。。。。。。。小弟菜鸟跟你学习了

lilacfox

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1回
  • 年度积分:0
  • 历史总积分:11
  • 注册:2010年10月28日
发表于:2011-04-16 21:44:04
30楼
怎末看不到图呢?想问下CPU222为8输入6输出,使用IB0控制QB0时,Q0.6和Q0.7都会有状态输出,怎么跳过这两个输出点?

wyb2866255

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2011-04-16 22:24:43
31楼
30楼:CPU222为8输入6输出,从硬件上PLC就没有Q0.6  与 Q0.7的输出口,你可不用考虑Q0.6 与 Q0.7的状态输出。也可以这样处理:用WND_B 的字节与指令,先将IB0与16进制的立即数“16#3F”相与,再输出给 QB0 即可。

zhongzhiyong

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 39回
  • 年度积分:0
  • 历史总积分:128
  • 注册:2010年2月28日
发表于:2011-05-08 10:18:06
32楼
不错。贴子我收藏了。。

kuailefeng

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 11回
  • 年度积分:0
  • 历史总积分:198
  • 注册:2011年4月14日
发表于:2011-05-23 07:31:23
33楼
最后输出没有这么麻烦,左移给QB0就可以

ascent522

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 4234回
  • 年度积分:0
  • 历史总积分:10293
  • 注册:2011年2月28日
发表于:2011-05-23 08:14:17
34楼
好东西,感谢分享。。。。

爱你我发狂

  • 精华:0帖
  • 求助:1帖
  • 帖子:11帖 | 681回
  • 年度积分:84
  • 历史总积分:2409
  • 注册:2007年3月19日
发表于:2011-05-28 22:45:50
35楼

怎么下载呀,全部的/?要好好评学习呀,不然太落后了。

ZHANGZHIBIN12

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 6回
  • 年度积分:0
  • 历史总积分:56
  • 注册:2011年5月26日
发表于:2011-05-29 11:27:27
36楼
你太好了,我向你学习。

wyb2866255

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

      33楼:你说“最后输出没有这么麻烦,左移给QB0就可以”怎么个移法?能否把你的思路说出来,贴梯形图最好,让大家学学。

       “左移给QB0”能保证QB0的各个输出位亮3秒、灭5秒的控制吗?我想来半天也没编出,我到编出一个比原梯形图简化的程序。等你贴出后我会把我编的图贴上来,供大家分析学习。看来每个程序,只要细心分析,是会编出更短更精的程序的。

雪与饿狼

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 610回
  • 年度积分:0
  • 历史总积分:718
  • 注册:2006年7月14日
发表于:2011-05-31 11:23:09
38楼
11111111111111111111

jianxingjianyuan

  • 精华:0帖
  • 求助:9帖
  • 帖子:26帖 | 421回
  • 年度积分:0
  • 历史总积分:1801
  • 注册:2011年4月19日
发表于:2011-05-31 17:30:53
39楼
第一个程序有错误啊,第一行好像应该是上升沿

wyb2866255

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2011-06-01 08:25:50
40楼
39楼:第一个程序绝对没错,R、S 端可以同时用前沿触发,也可以同时用后沿触发,但你说的“第一行好像应该是上升沿”,而第二行仍用下降沿,这倒是错的:无论怎样按按钮,输出是不会改变的。你可以试试。

热门招聘