按二个求助帖的求助要求编写的程序展示及对程序思路的解析
一、求助帖: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的输出变为定宽度的单脉冲,直接实现定宽度输出,从而简化程序语句,使程序更加剪短精炼。
就写到这里,如有不清楚或不妥之处,请给予指出,本人深表感谢!
回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”指令。
回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.