用实例讲解编程构思与技巧编程
对于PLC编程的初学者,首先要结合实例深入理解与熟练掌握程序指令的内含与用法,还要多做编程练习,才能不断的提高编程水平与能力。网上好多求助帖都有探讨价值,初学者可把它视为一个编程命题去编程与探讨。编程时要多方位思考,多思路编程,对比分析,从中找出最佳方案。本文先列举3例都是回答网上的求助帖而编写的程序,程序较短,并对程序构思、编程技巧作以说明,望对初学者学习能有所帮助。
例一求助帖:运行台数作为启动信号
现有5台普通制冷机定为M1、M2、M3、M4、M5和2台高级制冷机定为L1、L2,当普通制冷机工作台数小于等于3台时只启动一台高级制冷机,当普通制冷机工作台数大于3台时启动两台高级制冷机。(需要用300或200编程要梯形图)(自己编的时候存在一定问题,使用计数器和整数加1都不是很好用)求大神们帮忙。谢谢。
编程说明:本命题用二种思路编程,
第一种思路就是利用数学的数字组合来考虑:5取3的组合有10种,5取2的组合也有10种,5取1的组合有5种,即普通制冷机工作台数小于等于3台共有25种组合,而5取4的组合有4种,5取5的组合只有1种,故选用判断普通制冷机工作台数大于或等于4台共有5种组合。显然用判断普通制冷机工作台数小于等于3台编写的程序太长,而判断普通制冷机工作台数大于或等于4台的编写程序可使程序大大缩短。
编程的构思是这样:高级制冷机始终有一台处于工作(即Q0.6=1),如5台普通制冷机只有3台或3台以下处于工作,第二台高级制冷机停机,只有4台或4台以上工作时,第二台高级制冷机(即Q0.7=1)立即投入工作,详见梯形图
第二种思路:
将5台普通制冷机输出口设置为Q0.0~Q0.4,2台高级制冷机输出口设为Q0.6、Q0.7。
编程思路:将QB0送入MB0,再将MB0进行左移:每移一位MB0,就检查一次MB0的第6位,即M0.5的状态,如M0.5=1,将MB1加1,共左移5次,此时MB1的数值即为普通制冷机工作的台数。再用MB1与3进行比较,如MB3值 > 3,使Q0.7=1,否则 Q0.7=0,而Q0.6始终为1,从而确保当普通制冷机有3台以上处于运行时2台高级制冷机皆工作,当普通制冷机只有3台或3台以下处于运行时1台高级制冷机工作的控制目的。详见下梯形图:
二种方案比较,显然第一种编程简短精练,除了用PLC内部的SM0.0一个点外,只用了Q0.0~Q0.4、及Q0.6、Q0.7七个输出点,相比之下,第二种编程,动用了M4.0及MB0、MB1、MB3三个字节存储器,而且程序也长一点。但第二种的编程思路还是具有技巧性,仍不失好的编程。特别在命题加深难度时,第二种编程思维就会显示出它的优越性,请见下一命题:
例二、求助帖:编程目的:7个开关量变成3个输出量。
7个开关量任意相加组合,任意组合后有1个开关量闭合时,继电器Q0.5输出。任意组合后有2个开关量闭合后,继电器Q0.4输出。任意组合后有3个开关量闭合后,继电器Q0.5 Q0.4同时输出。任意组合后有4个开关量闭合后,继电器Q0.3输出。任意组合后有5个开关量闭合后,继电器Q0.3 Q0.5同时输出。任意组合后有6个开关量闭合后,继电器Q0.3 Q0.4同时输出。任意组合后有7个开关量闭合后,Q0.3 Q0.4 Q0.5同时输出。
这个命题如采用第一种思路编程,其程序将编写的十分麻烦而且颁出的程序是非常长的,但用第二种编程思路编程,就可以编出简短的程序,请见下梯形图:
例三、程序内容是这样的:
①.当I0.0为自复位按钮输入变量,按一下I0.0,q0.0输出为1,再按一下I0.0,q0.0输出0
②.当I0.1为自复位按钮输入变量,按一下I0.1,q0.1输出为1,再按一下I0.1,q0.1输出0
3③.当双击(1S以内连续按两下按钮算双击)I0.0或I0.1任何一个按钮时,Q0.0,Q0.1都为0,当再次单击I0.0或者I0.1时,Q0.0或者Q0.1仍会延续①与②的逻辑。
解析:这个命题看似简单,编程时会发现还是有点难度,对“按一下I0.0,q0.0输出为1,再按一下I0.0,q0.0输出0”及“按一下I0.1,q0.1输出为1,再按一下I0.1,q0.1输出0”这个控制要求并不难,用二个SR触发器即可组成此控制程序。难在:当双击(1S以内连续按两下按钮算双击)I0.0或I0.1任何一个按钮时,Q0.0,Q0.1都为0。的程序控制。具体讲解如下:
本命题也采用二种不同思路编写二个程序,下面分别解析这二个程序构思与编程技巧。
一、第一种程序的编程构思与程序处理
(一)、编程构思:开机初始化:使MB1=0 MB2=0 MB3=2,其MB1与MB2分别为按钮I0.0与I0.1加1计数器,MB3为I0.0与I0.1的减1计数器,
1、按下I0.0,其前沿将M0.0=1,M0.0接延时1秒的通电延时定时器T101,延时1
秒,T101吸合。使M0.0=0。在M0.0=1的时间里,每按一下I0.0,使MB1加1,同时使使MB3减1。MB1最大计数值=2,2以上不再加计数。
在M0.0=1的时间里,如只按一下按钮I0.0,其MB1=1(即M1.0=
2、同样按下I0.1,其前沿将M0.0=1,M0.0接延时1秒的通电延时定时器T101,延时1秒,T101吸合,使M0.0=0。在M0.0=1的时间里,每按一下I0.1,使MB2加1,使MB3减1,MB2最大计数值=2,2以上不再加计数。
(二)、程序处理:由(一)构思中知,M0.0=1的间隔=1秒,是按钮第一次按下按钮为始点延时的1秒。开机初始化:MB1=0、MB2=0、MB3=2。以I0.0为例:在M0.0=1的时间内,如I0.0只按一下,MB1由0加1=1、MB3由减1=1。当按钮抬起时(M0.0的后沿),会使Q0.0=1,因MB3≠0,故不会使Q0.0及Q0.1同时复位,最后再将MB3=2。在此状态下,如再按一下I0.0,MB1由1加1=2,而MB3由2减1仍=1,此时只会使Q0.0=0,同样不会使Q0.1复位(Q0.1保持原状态)。如不是按一下,而是连按二下I0.0,使MB3由2减2 =0,此时不管Q0.0、Q0.1的状态如何,因MB3=0将强迫使Q0.0与Q0.1都=0,从而实现了当双击(1S以内连续按两下按钮算双击)I0.0或I0.1任何一个按钮时,Q0.0,Q0.1都为0。的程序控制作用,
详见下程序:
该程序经上机运行,动作正确符合题目要求。
二、第二种程序的编程构思与程序处理
(一)、编程构思:
本程序是用SR触发器指令来实现命题的控制要求的,用SR触发器指令会很容易编出“按一下I0.0,q0.0输出为1,再按一下I0.0,q0.0输出
见网络4及网络7~9:网络4中的MB1是加1计数器,它的计数脉冲是I0.0或I0.1的后沿,即每按一下按钮I0.0或I0.1,当按钮抬起瞬间,会使MB1加1,由于比较指令“MB1<=1”的限制,使MB1的值只能有3个:0、1、2,即实现MB1值由0加1计数只确保连续按钮2下以内有效,超过2下MB1不计数,始终保持MB1=2。
网络9为M0.7=1的后沿使MB1清0,其作用确保每次按钮MB1都是由0开始计数的,故确保在1秒内如只按1次按钮,MB1始终=1,不可能=2,即M1.1≠1。只有在在1秒内连续按2次按钮,MB1=2,即M1.1=1。而M1.1=1将使2个SR触发器复位,即同时使M0.1与M0.3清0。
M0.1即为输出Q0.0,M0.3即为输出Q0.1,本程序为什么在网络5、网络6中的M0.1与M0.3不直接用Q0.0、Q0.1代替?网络7与网络8的作用本是将M0.1输送给Q0.0,将M0.3输送给Q0.1。为什么编程不用LD M0.1 = Q0.0,却要这样编写输出?这2个问题暂不解释,留给大家分析,过几天再做解释。请见梯形图: