按二个求助帖的求助要求编写的程序展示及对程序思路的解析 点击:1380 | 回复:20



wyb2866255---王者之师

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

              按二个求助帖的求助要求编写的程序展示及对程序思路的解析

     一、求助帖:PLC实时数据与10s前的历史数据比较怎么做?请指教

     回复:按你的要求编写如下程序供参考:

 

 

 

 

 

 

       编程思路解析:此程序是按主楼要求编写的,其MW2为实时数据,VW10为当前时刻的前10秒的记录数据。计录数据是每隔1秒一记录,10秒后开始进行实时数据与前10秒数据进行比较判断:

       1、按下启动按钮,先将计数器MB1请0,再使M0.0=1,即记录开始:在头10秒内,用秒脉冲SM0.5的前沿将实时数据MW2依次送入VW10~VW28中,且每记录一次,使MB1加1(见网络2),当MB1=10时,即记录第11次数据,MB1停止计数,且开始进行数据比较:用MW2与VW10(即前10秒的记录数据)比较:如VW10 = MW2,将使M4.0=1(即去执行实时数据与前10秒数据相等的处理程序)。如VW10 > MW2,将使M4.1=1(即去执行实时数据 > 前10秒数据的处理程序)。如VW10 < MW2,将使M4.2=1(即去执行实时数据 < 前10秒数据的处理程序)。

       2、随后将VW10~VW28数据左移16位,使左移后的VW10~VW26内容为原VW12~VW28的数据,再将此时刻的实时数据MW2送入VW28,其目的是确保VW10~VW28中数据始终为当前时刻下的前10秒的数据,即确保VW10的内容始终为当前时刻的前第10秒的数据,为下1秒的数据比较做准备。

       此程序编程的技巧之处就是,用10个存储器作为前10秒的个喵的记录数据存储区,且通过字左移指令,实现这10个存储器的内容始终保持为当前时刻的前10秒的记录数据,确保实时数据与其前10秒的数据比较的正确性。

           二、求助帖:这个程序怎么编写?

       最近看了一个例子,编了几个程序总是感觉不对,主要就是在,启动回程,停止后完成一个周期上弄不清楚,哪位帮我用200,编个程序,谢谢了!!

启动I0.0

停止I0.1

起始位I0.2

1工位I0.3

2工位I0.4

正转Q0.0

反转Q0.1

 

    回复:按求助帖的要求编写如下程序,供你参考:

 

 

 

 

       有一网友提出异议:回复内容:

对: wyb2866255---王者之师按你的要求编写如下程序,供你参考:内容的回复!

 

这个程序写的很不完善。没有关于停止按钮的程序,而且是单循环,每次都得按启动按钮

  程序解析:看来这个网友是没有看懂我编写的程序,现将程序构思讲解一下:

      1、本程序不是单循环,是通过T103的后沿进行下一次循环运行的,(见网络3)。

      2、有停止按钮程序,见网络7和8:网络7的I0.1就是停车按钮,其前沿使M0.3=1,而M0.2=1是小车运行一个完整周期后才由0变1 的,如果按下停车按钮时,其前沿使 M0.3=1,如小车此时运行已超过一个整周期,其M0.2早已=1,故M0.3=1,会使小车立即停车 (见网络8的 QB0=0,小车停车),如果按下停车按钮时(其前沿使 M0.3=1),如小车运行没有超过一个整周期,此时的M0.2=0,故小车不能立即停车 (见网络8不会使 QB0=0),程序仍继续运行,直到小车运行完一个正周期时,使M0.2=1(见网络6)时,小车才能停车。

    3、程序解析:

      网络1为小车启动运行:按下启动按钮,使I0.0=1,其前沿将MB1清0,如此时小车位于原位A处(即I0.2=1),则使M0.0=1,如此时小车不位于原位A处(即I0.2=0),则使M0.1=1,同时使M0.2=0。

如M0.0=1,其前沿触发断电延时定时器T101使其立即由0↑1,由于前沿只存在1个扫描周期,故使T101从下个扫描周期起就开始断电延时,延时10秒,T101由1↓0,在T101=1的10秒间隔为装料时间(见网络2)。

        如M0.1=1,其前沿使Q0.1=1,即小车反向运行(见网络5),当运行到A处,使Q0.1=0(小车停)且使T103=1,延时10秒为装货时间(见网络6)这样处理可实现求助者的启动要求。

        网络3为:T101=1为第一次装货时间,T101=1的后沿使小车正向运行(即Q0.0=1)

        网络4:由于启动时MB1清0,即M1.0=0,故小车运行到1号位使I0.3=1,I0.3=1的前沿使小车停(Q0.0=0),同时使断电延时定时器T102=1,T102=1保持8秒时间为小车卸货时间。

        网络5:T102=1的后沿使小车反向运行(即Q0.1=1)

        网络6:小车后退到A处,I0.2=1,其前沿使MB1加1,小车停(Q0.1=0),且使断电延时定时器T103=1,由于此时MB1=1而≠2,故M0.2仍=0。T103=1的时间=10秒,为装货时间。

        网络7和8为停车程序,由于未按停车按钮,故均不动作,程序转入第二次扫描。

        网络3:T103为第一次后的各次装货的时间,其延时时间到,T103由1↓0,该下跳的后沿将使小车正向启动运行(即Q0.0=1)由于此时MB1=1,即M1.0=1,故小车运行到1号位,虽然I0.3=1。但由于M1.0=1,使小车不停继续前进,小车运行到2号位,当I0.4=1,由于M1.0=1,使小车立即停车(Q0.0=0)。同时使断电延时定时器T102=1,T102=1保持8秒时间为卸货时间。

       网络5:T102=1的后沿使小车反向运行(即Q0.1=1)

       网络6:小车后退到A处,I0.2=1,其前沿使MB1加1,小车停(Q0.1=0),且使断电延时定时器T103=1,由于此时MB1=2 故使M0.2 =1,即表示小车已运行了一个完整周期。T103=1的时间=10秒,为装货时间。

     在下一个扫描周期,T103=1的后沿又使小车正向运行……,只要不按I0.1停止按钮,程序将循环运行下去。

        网络7和8为停车程序,其功能已在前面说明,就不再讲解。

         4、编程技巧:(1)、MB1加1计数器的作用:这里用MB1加1计数并不记录它的计数值,而是利用它的最低位M1.0的状态来决定小车前进时的停车位置:起始时将MB1清0,即使M1.0=0,故小车前进到1号位,使I0.3=1时,由于M1.0=0,故使小车停车,当小车反向运行回到A处,使MB1加1,此时MB1=1,即M1.0=1。当小车再正向前进时,小车前进到1号位,虽使I0.3=1,但由于此时M1.0=1,故使小车不停车,继续前进,小车前进到2号位,使I0.4=1时,由于M1.0=1,故使小车停车。当再返回运行到A处,小车停,又使MB1 加1,此时MB1=2,即说明小车往返2次,即执行了一个工作周期,使M0.2=1作以记忆。此时M1.0=0,故小车再前进运行由于M1.0=0,故使小车又在1号位停车……。

      (2)、断电定时器TF的巧用:本程序使用脉冲的前后沿驱动断电延时定时器的,由于脉冲的前后沿只存在一个扫描周期,故使断电定时器TF的输出变为定宽度的单脉冲,直接实现定宽度输出,从而简化程序语句,使程序更加剪短精炼。

        就写到这里,如有不清楚或不妥之处,请给予指出,本人深表感谢!

 




jiaook

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 15回
  • 年度积分:0
  • 历史总积分:119
  • 注册:2011年12月02日
发表于:2014-05-23 13:21:26
1楼

好帖子,个人觉得这种方法较于顺序控制指令难些

Mr袁--王者之师

  • 精华:0帖
  • 求助:3帖
  • 帖子:32帖 | 1147回
  • 年度积分:0
  • 历史总积分:3881
  • 注册:2011年10月26日
发表于:2014-05-23 14:01:24
2楼

对于以一个问题:我也考虑过,只是当时认为实时数据与10秒前的数据,因为其没有提供实时数据的采样周期,没有采样周期就不知道你的点是多少,,楼主定义的采样周期是一秒,但是一般的实时数据采集周期都很短以100MS为例,那么你10秒采集的数据得多少个?如果时间更短你的数据量就更大,所以对楼主的程序,功能上是都实现了,但是具体应用的时候较少。而且还不知道是否是人家想要的。

对于第二个问题:看了你的程序,网络2,4,6有明显错误,上升沿P后面加定时器你觉得他能定时么????


说的有点多,别往心里去。

总体来说楼主的热心是值得肯定与学习的。

robotH

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 688回
  • 年度积分:0
  • 历史总积分:2433
  • 注册:2004年10月14日
发表于:2014-05-23 14:24:01
3楼

题1网络2用间接寻址程序能简练。

robotH

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 688回
  • 年度积分:0
  • 历史总积分:2433
  • 注册:2004年10月14日
发表于:2014-05-23 16:09:36
4楼

注意看清楚,是TOF延时断开定时器。

robotH

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 688回
  • 年度积分:0
  • 历史总积分:2433
  • 注册:2004年10月14日
发表于:2014-05-23 16:11:46
5楼

感觉楼主还是很严谨的,很少错误,对S7-200指令很熟。

Mr袁--王者之师

  • 精华:0帖
  • 求助:3帖
  • 帖子:32帖 | 1147回
  • 年度积分:0
  • 历史总积分:3881
  • 注册:2011年10月26日
发表于:2014-05-23 16:38:28
6楼

回复内容:

对: robotH 注意看清楚,是TOF延时断开定时器。 内容的回复!


不讨论 不学习就没有成长,又学了一点知识~~~~~~~~~

Mr袁--王者之师

  • 精华:0帖
  • 求助:3帖
  • 帖子:32帖 | 1147回
  • 年度积分:0
  • 历史总积分:3881
  • 注册:2011年10月26日
发表于:2014-05-23 16:55:33
7楼

当转一圈后你的MB1加1

当你第二圈后为2

当你第三圈后????你的MB1如何复位?如何停止 因为你的MB1=3或者更多

Mr袁--王者之师

  • 精华:0帖
  • 求助:3帖
  • 帖子:32帖 | 1147回
  • 年度积分:0
  • 历史总积分:3881
  • 注册:2011年10月26日
发表于:2014-05-23 17:07:32
8楼

再次回复一下,因为看的比较粗糙,之前提出异议的是本人

确实是我没仔细看下的定论。在此发表歉意,对楼主的耐心发表感谢,希望楼主对我上面提出的问题予以解答~~~~~~~~~~



wyb2866255---王者之师

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2014-05-23 17:56:00
9楼

       回9楼:先回答你8楼问题:按下启动按钮,将MB1清0,此时M1.0=0,故小车第一次前进,将在1号位停车,小车返回到A处停车,使MB1加1,此时MB1=1,即M1.0=1,故小车第二次前进,将在2号位停车,小车再返回到A处停车,使MB1加1,此时MB1=2,其M1.0=0。MB1=2 使M0.2=1  此时小车已运行一个工作周期,用M0.2=1作为小车已运行一个工作周期的判断标记。

        此程序是只用M1.0的状态来确定小车前进时的停车位置,M1.0是MB1的最低位,用MB1做加1计时器的目的就是取M1.0的输出状态:M1.0相当一双稳态电路,即MB1每计1个数,其M1.0的状态就要改变一次(0 、1、0、1变换),对MB1的计数值不用考虑。

       关于断电延时定时器的问题:用脉冲的前沿或后沿驱动断电延时定时器TOF,都会使TOF=1,而沿脉冲只保持一个扫描周期,从第二个周期,其TOF便进入断电延时状态,延时时间到TOF由1↓0,即输出一个等于延时时间的单脉冲,这样用是可行的,它相当S7-300的“TE”指令。

penggang2000

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 37回
  • 年度积分:0
  • 历史总积分:41
  • 注册:2009年10月15日
发表于:2014-05-24 11:34:18
10楼

楼主程序值得商榷,,我理解在实际应用中,不论任何时候按下停止按钮后,小车都需完成1号位和2号位卸料的一个工作周期再停止,而你的程序在小车已经完成一个工作周期既MB>2后,按下停止按钮后,小车在移动过程中的任意位置都将停止。我认为,按下停止按钮后I0.2=1,且使用MB1判断小车完成了2号工位卸料两个条件满足后,才对MB0和QBO复位。

一家之言,请楼主分析回复。

wyb2866255---王者之师

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

      回10楼:编程时对求助帖关于停车的理解是,小车必须运行一个正周期后方可立即停车,如果按你理解的“按停止按钮,小车必须在完成当前的一个正周期后方可停车,可以这样编程:其它语句不变,只要将网络6改为下面语句即可。

penggang2000

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 37回
  • 年度积分:0
  • 历史总积分:41
  • 注册:2009年10月15日
发表于:2014-05-24 16:22:45
12楼

楼主这样改依旧存在问题,你当MB1>2后没有判断小车是从1号工位回来还是完成循环从2号工位回来

penggang2000

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 37回
  • 年度积分:0
  • 历史总积分:41
  • 注册:2009年10月15日
发表于:2014-05-24 16:39:11
13楼

引用 penggang2000 的回复内容: 楼主这样改依旧存在问题,你当MB1>2后没有判断小车是...


楼主这个问题你的程序没有问题能实现完成2工位的判断,我刚才没仔细看,请谅解。但有另一问题,当停止按钮对MB0和QB0复位后,MB0.3将为0,而T103为断电延时,当MB0.3复位后,10S后Q0.0将再次导通,所以停止控制需进行考虑。

wyb2866255---王者之师

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

13楼:你这个问题提的好,要解决这个问题在后改的语句里,在T0103前串接M0.3的常闭触点就可解决再启动的问题。

wyb2866255---王者之师

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2014-05-24 17:38:54
15楼

   即改为这样,可解决再启动问题                                                               

penggang2000

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 37回
  • 年度积分:0
  • 历史总积分:41
  • 注册:2009年10月15日
发表于:2014-05-25 08:32:28
16楼

楼主你这样改又出现另外一个问题,按题目要求,小车回到原点后,再向2号工位卸货后,回到原点才算完成一个周期小车停止。但你现在程序,当小车正好在1号工位卸货时按下停止按钮,回到原位后因M0.3=1,T103不会启动,小车在完成1号工位卸货后回到原点就b不会再动作了,请楼主考虑。

wyb2866255---王者之师

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2014-05-25 12:34:17
17楼

回16楼:看了你看的很细,很好,这样改一下,可行否?

       分析:假设在小车1号位卸货后返回中按下停止按钮,使M0.3=1,但此时M1.0=0,故小车到达A处使I0.2=1时,其前沿仍会触发T103,使T103=1(即卸货延时),接着进行MB1加1,使其M1.0=1,此时T103=1 不会使M0.2=1(停车脉冲)。当T103延时时间到,小车正向运行。。。当小车从2号位返回,再到A处使I0.2=1时,此时M0.3=1,而M1.0=1,即切断使T103=1通道,接着MB1加1,由于T103=0,故可发出停车脉冲,使M0.2=1,到网络8,将使QB0与MB0=0.

penggang2000

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 37回
  • 年度积分:0
  • 历史总积分:41
  • 注册:2009年10月15日
发表于:2014-05-25 21:29:24
18楼

楼主我分析了下,M1.0在1号工位卸货过程中按你设计的程序并没有为1,只有在完成1号工位送料,回到原点,使i0.2=1时,M1.0=1,为此你上面改的程序依然出现1号工位卸货后,就停止。按照PLC工作原理,从上到下,和从左到右,扫描顺序,需将T103和MB1加1的指令的上下位置交换,才能实现。

另楼主我对程序提了很多问题,如果楼主不高兴,希望楼主别往心里去,我没一点不是鸡蛋里挑骨头意思,我觉得对楼主程序仔细阅读,首先是对楼主劳动成果的尊重,第二,也只有通过思考才能有收获,其次也希望通过跟楼主的交流,能使程序更加严谨。


wyb2866255---王者之师

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2014-05-26 01:41:00
19楼

      主要是马虎,将M1.0的状态记反了,即M1.0的常开点改为常闭点就对了,17楼程序现已更改。

lixueliang

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 14回
  • 年度积分:0
  • 历史总积分:62
  • 注册:2006年7月20日
发表于:2014-06-29 23:03:11
20楼

学习了,谢谢。

有一点提议:中间变量M0.2,M0.3....等的意义还望在程序中说明一下,

不然根本不知道他们的作用,尤其是M0.2,最后看了楼主下面的解释才明白的。


热门招聘
相关主题

官方公众号

智造工程师