首页 上一页 1 2 3 下一页 尾页

用S7-200对较难命题编程的几个实例与解析 点击:6498 | 回复:60



wyb2866255

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

              S7-200对较难命题编程的几个实例与解析

        网上有很多求助PLC编程的帖子,很有探讨价值,我经常帮助他们去编程,这不仅是帮助他们解决问题,而且对己也是一种锻炼与提高。现选出几个求助帖,都是具有一定难度的编程命题,它可以使我们增强思维,提高编程的技巧和能力。现将这几个帖子并同我为之编写的程序一起贴出,愿与大家共享与探讨,如有不对之处,请给于指正,本人深表感谢。

一帖:“我想做一个小程序,每半个小时循环一次,每次循环内部又要执行20次几乎相同的操作(第一个90秒之内Q0.0  输出5秒,Q0.0输出延时2Q0.1 输出0.5秒。第二个90秒,输出点变为Q0.2Q0.3,以此类推)。我想用一个子程序,不想书写20次子程序调用,只书写一次子程序调用,利用循环可以实现不,任何实现?请高手给我指点指点。期待您的指点。”

我的思路:按着楼主要求用S7-200编写了一个子程序(SBR_1),该子程序运行时间为半小时,在此时间内重复执行20次类似的控制动作,不同点就是输出口依次下移:第一次输出口为Q0.0Q0.1,第二次输出为Q0.2Q0.3,第三次输出为Q0.4Q0.5……。在主程序中,设定I0.1为启动命令按钮,设I0.2为停止运行按钮。只要按一下I0.1启动,程序将自动执行每半小时调一次SBR_1子程序,重复调用,直到按下I0.2停止按钮,程序才终止运行。

该子程序共占据输出口40个,整整是5个输出通道(  QB0QB1、…QB5)如按正常编程,这20个类似动作由于输出口不同,需一一调用,这样编出的程序太长。经过反复思考,我是这样编程的:

1、               我利用指针指令,首址指向QB0,每执行完一个通道动作后,令指针地址加1,这样循环5次,其输出即可由QB0依次移到QB5

2、               对一个输出通道内的传送地址,是采用“与”、“或”指令进行的,比如第一次输出,先将QB00,将MB2=1MB3=2。当运行80秒时将QB0MB2相或运算,其结果:Q0.0=1,延时82秒将QB0MB3相或运算,其结果:Q0.0=1Q0.1=1。当运行85秒时将MB2求反送入MB4,此时MB4=16#FE,再用QB0MB4相与运算,其结果:Q0.0=0Q0.1=1,当运行87秒时将MB3求反送入MB5,此时MB5=16#FB,再用QB0MB5相与运算,其结果:Q0.0=0Q0.1=0,从而达到在第一个90秒内使Q0.0输出为1且保持5秒后复位,使Q0.1滞后Q0.1两秒输出为1且保持5秒复位的控制要求。第二次动作时,先将MW2左移2位,即使MB2=04MB3=8再重复上述动作,其结果:Q0.2=1,延时5秒复位,Q0.3滞后二秒输出为1,保持5秒复位,从而达到第二次动作时其输出下移到Q0.2Q0.3。具体动作控制,请见下面梯形图:

   主程序:

子程序:SBR_1

      该程序经上机运行(为缩短运行时间按图中注解的试验时改动数据运行),动作正确,符合命题要求。

   二帖:“有5个执行动作我转换为操作数,姑且定为D10D20D30D40D50,它们每一个都可能写入从0 5的数值。最后执行是从15 依次执行输出,是0的不执行跳过,不知如何编,请高手指点,谢谢了!”又“……如这一次是按1/2/3/4/5依次动作,下一次也许设置为按5/3/2/动作,再下一次就1/5/2/3/。。。。。两次执行的间隔时间可设定,暂定3秒看设备运转情况而定”

     我的编程构思:

一、PLC的硬件设置及有关事项说明:选用S7-200PLC编程。

1、其输入口:

I1.0 为启动按钮,

I1.1 为停止动作按钮。

   *** 以下的I0.0 ~ I0.5 六个输入点是为手动设置参数的按钮地址。是为在没有上位机或触摸屏与PLC通讯的条件下,可用这6个按钮,对5路执行机构的动作顺序号及动作间隔时间进行手动设置。其各输入点定义如下:

I0.0 为设置第1路执行机构执行动作的顺序号按钮

I0.1 为设置第2 ~ 5路执行机构执行动作的顺序号按钮,设置值:0~5

I0.2 为设置第2 ~ 5路执行机构执行动作的顺序号左移8位按钮

I0.3 为复位按钮,即将第1~ 5 路机构的顺序号清0,其作用是为更改5个机构动作的顺序号值做清0准备。

I0.4 为相邻二个机构动作时间间隔值的个位数设置按钮,设置值:0~F16进制数)

I0.5 将时间设定值左移4位按钮

 

2、其输出口:

    Q0.0 为第1路执行机构输出

    Q0.1 为第2路执行机构输出

    Q0.2 为第3路执行机构输出

    Q0.3 为第4路执行机构输出

    Q0.4 为第5路执行机构输出

3VB10VB11VB12VB13VB14分别为第1~5执行机构动作顺序号设置区

    为节省设置按钮,将VB11VB12VB13VB14合并为一个双字存储器VD11

4VW30 为相邻二个机构动作时间间隔设置区。可用按钮对其设置时间。VW30也是第一个执行机构的动作时间,2倍的VW30(即VW32)是第二个执行机构的动作时间,3倍的VW30(即VW34)是第三个执行机构的动作时间,4倍的VW30(即VW36)是第四个执行机构的动作时间,5倍的VW30(即VW38)是第五个执行机构的动作时间。

5、从按下启动命令开始,先将计时器(MW2)清0,再用秒脉冲对MW2进行加1计数,当MW2=VW30, 第一个执行机构动作,当MW2=VW32, 第二个执行机构动作……直到MW2=VW38, 第五个执行机构动作为止。那路执行机构是第一个、第二个动作…取决它设定的顺序号。

6、设MB0为第几个机构动作标记区,按启动按钮时,将其清0,每当计时VW30MB01,故MB0等于几就应为第几个执行机构执行动作,(如:第一次机构动作时,MB0=1……第五次机构动作时,MB0=5)。在执行动作前,先用MB0VB10~VB14比较,那路执行机构的顺序号=MB0,那路执行机构就动作,这样就可确保动作执行的的正确性。

 

详细动作控制请见以下梯形图:

 

 二、S7-200编程的梯形图:

该程序是经过上机运行及调试,证明程序是正确的、好用的。

VB10VD11VW30可由上位机或触摸屏设置,如没有上位机或触摸屏,可用几个按钮与PLC输入口I0.0~I0.5相连,用按钮可对其参数进行设置,以下就是用按钮直接在PLC上设定参数的程序。这种用PLC输入口设置内部参数的方法对初学者也是有帮助的。

        本文先发二贴,待续。



楼主最近还看过



大器晚成

  • 精华:0帖
  • 求助:5帖
  • 帖子:90帖 | 435回
  • 年度积分:0
  • 历史总积分:1636
  • 注册:2002年9月19日
发表于:2012-01-04 13:34:18
1楼
网络13中如何保证VD11中的值为5啊?

cqu_rockwell

  • 精华:20帖
  • 求助:1帖
  • 帖子:878帖 | 8694回
  • 年度积分:0
  • 历史总积分:57902
  • 注册:2010年6月30日
发表于:2012-01-04 13:35:43
2楼

好贴,俺去受精!!!          

大器晚成

  • 精华:0帖
  • 求助:5帖
  • 帖子:90帖 | 435回
  • 年度积分:0
  • 历史总积分:1636
  • 注册:2002年9月19日
发表于:2012-01-04 13:37:25
3楼

很少见的好贴,下贴期待中。

zhxl198808

  • 精华:7帖
  • 求助:14帖
  • 帖子:79帖 | 3915回
  • 年度积分:0
  • 历史总积分:22219
  • 注册:2008年9月06日
发表于:2012-01-04 13:50:34
4楼

我要实战演示看看,结果如何

harm123

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 7回
  • 年度积分:0
  • 历史总积分:42
  • 注册:2011年11月22日
发表于:2012-01-04 16:23:22
5楼

2楼的,你受精了吗?呵呵,你真有意思

顺便给大家推荐http://www.sinometer.com.cn 传感器专家

焦荔

  • 精华:1帖
  • 求助:12帖
  • 帖子:35帖 | 611回
  • 年度积分:0
  • 历史总积分:3321
  • 注册:2006年11月26日
发表于:2012-01-05 09:51:25
6楼
程序编制要得好好看看的,具体情况要演示看的

焦荔

  • 精华:1帖
  • 求助:12帖
  • 帖子:35帖 | 611回
  • 年度积分:0
  • 历史总积分:3321
  • 注册:2006年11月26日
发表于:2012-01-05 09:57:24
7楼
程序编制要得好好看看的,具体情况要演示看的

mayou888

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 3回
  • 年度积分:0
  • 历史总积分:22
  • 注册:2011年7月27日
发表于:2012-01-05 10:19:12
8楼

学习了,难得的学习机会

pub3team1

  • 精华:0帖
  • 求助:2帖
  • 帖子:2帖 | 5回
  • 年度积分:0
  • 历史总积分:32
  • 注册:2011年3月02日
发表于:2012-01-06 10:13:21
9楼
东西很好,值得我学习

pub3team1

  • 精华:0帖
  • 求助:2帖
  • 帖子:2帖 | 5回
  • 年度积分:0
  • 历史总积分:32
  • 注册:2011年3月02日
发表于:2012-01-06 10:16:10
10楼

请教高手:

 

当定时中断内使用 movb 1,*ac1 时,调试时出错不知道为什么?其中ac1之前已经定义为vb0到vb200的地址指针

青岛黄工

  • [版主]
  • 精华:5帖
  • 求助:89帖
  • 帖子:171帖 | 4776回
  • 年度积分:0
  • 历史总积分:24301
  • 注册:2007年4月02日
发表于:2012-01-07 08:37:20
11楼

顶,期盼更多的楼主作这样的帖子。

wyb2866255

  • 精华:73帖
  • 求助:0帖
  • 帖子:218帖 | 2872回
  • 年度积分:0
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2012-01-07 14:15:45
12楼
10楼:我看了你的帖子,有人说你重复用了二次一样的指令有问题,我认为重复的目的是为了在I0.0=0或I0.1=0时,连续传二次2,不算错误, 你不用时间中断,用定时器构成振荡器编程看看,是不是时间中断方式不容许用指针指令?仅供参考。

thatis19

  • 精华:4帖
  • 求助:1帖
  • 帖子:111帖 | 213回
  • 年度积分:0
  • 历史总积分:1758
  • 注册:2008年11月02日
发表于:2012-01-08 09:29:12
13楼
顶,期盼楼主更多这样的帖子。加精

大器晚成

  • 精华:0帖
  • 求助:5帖
  • 帖子:90帖 | 435回
  • 年度积分:0
  • 历史总积分:1636
  • 注册:2002年9月19日
发表于:2012-01-10 12:46:56
14楼

楼主好像是单片机的高手,对PLC的研究也很深入!

大器晚成

  • 精华:0帖
  • 求助:5帖
  • 帖子:90帖 | 435回
  • 年度积分:0
  • 历史总积分:1636
  • 注册:2002年9月19日
发表于:2012-01-10 12:50:01
15楼
希望楼主贴一个求异或的程序,用S7200编程

chenshiji2006

  • [版主]
  • 精华:25帖
  • 求助:20帖
  • 帖子:532帖 | 7001回
  • 年度积分:16
  • 历史总积分:66978
  • 注册:2010年6月26日
发表于:2012-01-14 10:53:25
16楼
哈哈···我承认我一直在看这个贴···

zhouzhangxunqq

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1回
  • 年度积分:0
  • 历史总积分:11
  • 注册:2010年11月26日
发表于:2012-01-16 11:10:17
17楼

确实不错 ,我上面的一个感觉是不是能用循环做;

下面一个确实也是个好的题目,这样可以让我们设计的程序更加灵活。

隐龙

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 17回
  • 年度积分:0
  • 历史总积分:313
  • 注册:2007年9月01日
发表于:2012-01-18 12:39:17
18楼
好帖啊   好好学习啊 ~~~~

ken456

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 49回
  • 年度积分:0
  • 历史总积分:139
  • 注册:2012年1月21日
发表于:2012-01-25 19:57:57
19楼
引用 mayou888 的回复内容:学习了,难得的学习机会


谢谢了师傅

xclcb

  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 79回
  • 年度积分:0
  • 历史总积分:656
  • 注册:2012年1月07日
发表于:2012-01-26 00:58:13
20楼
东西很好,值得我学习 ,顶起来

热门招聘
相关主题

官方公众号

智造工程师
    首页 上一页 1 2 3 下一页 尾页