编程技巧展示之二:用S7-200编写一段程序及程序解析
有这样一个编程命题:用一个按钮可随意控制N个(N=10)灯泡,使其亮或灭,应如何编程。
本文用S7-200按上述命题:“用一个按钮可随意控制N个(N=10)灯泡,使其亮或灭。”编写了如下梯形图,现展示出来,供大家分析参考:
一、梯形图:
二、编程构思与安排:
1、 I/O的确定:用I0.0作控制按钮的输入点,用Q0.0~Q0.7及Q1.0、Q1.1分别作灯
泡1至灯泡10的输出点,即Q0.0为1号灯、Q0.1为2号灯……Q1.1为10号灯。
2、 操作方法思路:
采用连续按钮的操作方式,其连续按钮的间隔应控制为0.5~1.0秒(即正常连续按钮间隔),其输入点I0.0接一断电延时定时器T102(见网络1),延时时间定为1.5秒。当连续按N下按钮时,其I0.0输入端必然会产生N个正脉冲(即形成一组脉冲串)。其第一个脉冲的前沿使T102由0↑1(即T102=1),由于在连续按钮过程中,各个脉冲相互间隔皆<1.5秒,故使T102始终保持=1,当最后一个脉冲结束后,再延时1.5秒,T102才由1↓0。
T102=1的前沿使计数器MB10清0,在T02=1的过程中,用各输入脉冲的后沿对MB10进行加1计数,当T102由1↓0时MB10计数已提前结束。此时计数器的计数值=按钮连续按下的次数。在此时可用该计数值与数 1、2、3……10进行比较判断,计数值=几,即选中第几号灯泡,再执行改变选中灯泡的输出状态,使其亮或灭。
比如:想改变第3个灯的状态,可连续按3下按钮,按钮结束后,其计数值=3,当T102由1↓0时通过比较判断,选中第3号灯,如此时第3灯是亮的,则命其熄灭,如此时第3灯是灭的,则命其亮。
3、 消除按钮抖动措置:上述用连续按钮的次数去控制对应的灯泡亮或灭的方法是可行的,但必须确保计数器计的按钮按下的次数是准确的,否则会因计数不对造成比较判断错误。
一般用手动点击按钮时 常常会因按钮抖动引起打连发现象,即按一下按钮,其输出却形成多个干扰脉冲,如用它对计数器计数,必然使计数值不准,即会造成使输出显示错误。为此程序又增加一断电延时定时器T101,与T102并接(见网络1)作为防按钮抖动用。其T101定时时间为400mS,这是因为由抖动形成的干扰脉冲的间隔均在300mS以下。比如连续按5下按钮,在连续按钮过程中,T101在每次按钮按下时T101都由0↑1,当按钮抬起后延0.4秒时间内如出现I0.0=1(即出现抖动脉冲),其T101=1不变,如没有出现抖动脉冲而此时的按钮处于未按下状态,由于T101的延时时间到,则使T101由 1↓0,故确保连续按5下按钮,使T101产生5个正脉冲,用T101的后沿对MB10进行加1运算,使MB10的计数值=5。即确保计数器值的准确。
4、当T102=1的后沿出现时已是最后一次按钮的抬起后又延时1.5秒,此时MB10值=按钮连续按下的次数。用MB10与1~10比较,MB10 =几,就选中第几号灯。
5、决定被选灯是亮还是灭,编程选用SR触发器指令,组成双稳态触发电路:用输出点Q0.n 的常闭、常开触点分别串入S、 R 触发支路,构成双稳态电路。这种双稳态电路可确保每触发一次该电路,其输出状态就翻转一次:如原输出状态亮,触发后变灭;如原输出状态为灭,触发后变亮。
三、编程技巧解析:
1、 编程技巧一:巧妙利用二个断电延时定时器解决抖动干扰确保准确计数及判断时刻
选择的问题。下举一例说明之:
如连续按5下按钮,由于连续按钮按下的间隔为0.5~1.0秒之间,其间隔时间大于T101的延时时间,而小于T102的延时时间,故在此连续按钮过程中,T101在每次按钮按下时T101由0↑1,当按钮抬起后延0.4秒时间内如出现I0.0=1(即出现抖动脉冲),其T101=1不变,如没有出现抖动脉冲而此时的按钮处于未按下状态,由于T101的延时时间到,则使T101由 1↓0,故确保连续按5下按钮,使T101产生5个正脉冲。
而T102的延时时间=1.5秒,大于连续按钮的间隔时间,故T102从第一下按下时起,T102由0↑1,T102=1一直保持到最后一次按钮抬起后,再延时1.5秒T102才由 1↓0,即产生T102=1的后沿脉冲。其时序图如下:
图中T102的前沿脉冲使计数器MB10复位清0,T102后沿脉冲作为输出触发脉冲。T101的后沿脉冲为MB10的计数脉冲,从图中可见:T101后沿脉冲出现在T102的前沿与后沿脉冲之间,故当T102的后沿脉冲出现时,其MB10已计完5个数,此时刻用T102的后沿触发各双稳态,只有计数值(MB10)=5的双稳态Q0.4状态反转(见网络9)。
2、编程技巧二:本程序的10路输出皆选用同样的控制电路,即:用SR触发器指令组成的双稳态触发电路,再在其S、R触发支路各串接一个比较指令,其比较指令分别为MB10与数1、2……10比较,该10路双稳态均由T102的后沿脉冲同时触发。这样处理使10路双稳态电路变为有条件触发,即每次触发时,10路只会有一路被触发,使其双稳态输出翻转。而其余9路保持原状态不变。见网络5~14: 比如当连续按3下按钮,使MB10=3,当T102的后沿出现去触发10路双稳态电路时,只有第3路的比较指令(MB10与3比较)相等容许其通过去触发S、R触发端,使该路双稳态Q0.2输出翻转。而其余各路皆因MB10≠其比较数,而不容许T102后沿脉冲通过,使其对应双稳态输出不变。
本程序解析到此结束,如有不妥之处,请给予指正,谢谢!