用S7-200编写的二个小程序及解析之二
这里展示二个小程序都是解答网友的求助帖编写的,并对编程构思及编程技巧作以分析,望能对初学者有所帮助,如有不对之处请给予指正,谢谢!
一、原帖:s7-200 点动加自锁控制电路 如何为最简程序:按SB1,KM吸合且自锁。按SB2,KM断开。按SB3,KM吸合,松开SB3,KM断开。要PLC最简程序,不是继电器电路。
回复: 按楼主要求,编出2个程序,见下图:
第1种编法
第2种编法
解析:
第一种编程:按下I0.0,由于此时I0.1与I0.2都处于断开状态,使Q0.0与M0.0输出为1,M0.1=1起自保作用,故抬起I0.0,其Q0.0仍输出为1。如此时按下I0.1,使Q0.0与M0.0皆=0,且自保作用消失。
I0.2直接输出给Q0.0,且串接I0.2的常闭触点输出给M0.0。故I0.2起点动控制作用,不管Q0.0输出是0 还是1,按下I0.2,都会使Q0.0输出=1,且使M0.0=0,即M0.0不起自保作用,故当抬起I0.2都会使Q0.0=0.
第二种编程:利用SR触发器编程,使用沿触发,I0.2=1的前沿使 SR触发器置1(即Q0.0=1),其后沿使SR触发器置0(Q0.0=0),从而达到点动的控制作用。
二、求助帖:用S7200224CPU,用本体上的10个输出点作一定时间的循环输出,Q0.0-Q0.1-Q0.2-Q0.3-Q0.4-Q0.5-Q0.6-Q0.7-Q1.0-Q1.1-Q0.0……,要求用移位指令。
回复:我给你编个程序,上机运行正确,不是用时间中断产生2S脉冲,而是用秒脉冲计数分频(M10.0)产生的 2S 振荡脉冲。当右移到M3.2(即Q1.2)时,应立刻使MW2=16#100,才会使Q1.1输出后Q0.0输出,见下图:
网友又问:同样的命题:启动时Q0.0~Q1.1间隔可调的时间,保持输出。即Q0.0——Q0.0,Q0.1……Q0.0~Q1.1再有脉冲也就保持;停止时,按相反顺序,相同的间隔时间停止,即Q1.1——Q1.0……Q0.1——Q0.0,要求用循环程序指令编写,请大侠编一个程序,谢谢!
回复:根据你的要求,我用定时器构成的2秒振荡器编程(经上机运行),供你参考:
这个程序稍加改动,也可实现你原来要求:(都经上机运行):
楼主最近还看过
对1楼与2楼的回复:看到你们的回帖,知道你们是初学者,看不懂没关系,只要能提出问题,想学就行,我不知你们就那点看不懂,现将第二个程序的有关部分原理讲一讲,供你们参考,如还有什么不明白的请提出,我会给与解答的。
二、求助帖:用S7200224CPU,用本体上的10个输出点作一定时间的循环输出,Q0.0-Q0.1-Q0.2-Q0.3-Q0.4-Q0.5-Q0.6-Q0.7-Q1.0-Q1.1-Q0.0……,要求用移位指令。
1、 原求助者要求每2秒循环移动一次,从Q0.0开始,即启动后Q0.0=1,隔2秒,Q0.0=0,而Q0.1=1,再隔2秒,Q0.1=0,而Q0.2=1......,即循环输出时,Q0.0~Q1.1 共10位输出点,只有一位输出=1,其它皆为输出=0,而且输出=1的点由 Q0.0开始每2秒移动到下一位。这里第一个要解决的是如何获得2秒为周期的脉冲,产生2秒脉冲的方法很多,如可用时间中断,中断间隔时间可设定为1秒,中断服务程序写为:MB4加1(即:LD SM0.0 INC MB4),这样MB4的最低位M4.0将输出正负脉宽都=1秒的方波脉冲,其周期=2秒,这样用M4.0的前沿(或后沿)进行移位控制就可实现每2秒进行一次移位的控制作用。本文的第二例的第一个程序用的是SM0.1 时钟脉冲,这是S7-200本身具有的周期=1秒的时钟脉冲,用它的前沿进行对MB10加1计数(见网络3:LD SM0.5 EU INCB MB10),使其M10.0输出正负脉宽都=1的2秒脉冲,这与用时间中断的MB4加1的作用是一样的。本文的第二例的第二个程序的2秒脉冲使用二个定时器构成的振荡器实现的:T101与T102二个定时器延时时间都设为1秒,有它们构成的振荡器输出的脉冲也是正负脉宽都=1秒,其周期=2秒,用他的前沿做移位控制的。 待续,如有不清楚的地方可提出来。
回4楼:用外部的2秒周期脉冲输入给PLC的输入点(如I1.0)也行,这样编程就可省掉编写2秒脉冲的程序,直接用I1.0的前沿(或后沿)做移位控制。
下面接着3楼说:
2、必须用2秒脉冲的前沿或后沿进行移位控制,只有用沿传递,才可确保每次移位只移移位。如不用沿传递移位,则移位的位数无法控制,如:M10.0的前沿使MW2循环左移一位,只有在M10.0=1的前沿恶这一个扫描周期,使MW2循环左移一位,在M10.0=1的其它各个扫描周期,都不再进行移位动作,如果不用沿传递控制,而用M10.0=1进行移位,由于在M10.0=1时间内,将出现几十个甚至上百个扫描周期,每一个扫描周期都要移位一次,故不能控制移位指令只移位一次的控制要求。
3、为什么启动时将MW2置数为16#100:MW2包括2个字节,即高字节MB2,低字节MB3,置数16#100,MW2的数值为:0000_0001__0000_0000,实际上是使MB2=1,即M2.0=1,由网络6知:MW2传送给QW0,即:按下启动按钮(I0.0=1),使Q0.0 立刻输出为1.
4、为什么MW2=4时,将16#100 传送给MW2:MW2=4,即:0000_0000__0000_0100,即M3.2=1也就是Q1.2=1,即从Q0.0开始连续左移11位,此时将16#100 传送给MW2,使MW2=16#100,也就是使Q0.0=1。从而实现当Q1.1=1后,延时2秒,循环左移使Q0.0=1的作用。
第二例第一个程序的讲解就将这些,有什么问题可以提出。