编程技巧展示之三:使用逻辑运算指令简化程序的尝试
有这样一个编程命题:用一个按钮可随意控制N个(N=10)灯泡,使其亮或灭,应如何编程。
我在“编程技巧展示之二:用S7-200编写一段程序及程序解析”一文,用S7-200对此命题作了编程与解析,其梯形图如下:
这个梯形图的编程思路与技巧解析,在“编程技巧展示之二”一文已有详细介绍,本文不再讲解,本文要讲述的就是能否对这个程序再进一步进行简化,使编出的程序更加简短精炼,使之适用于不同数量的输出灯泡的控制,都不需改动程序呢?这个问题是我贴出“编程技巧展示之二”之后一直在琢磨着,经过反复思考,终于想出一种方案,使整个程序由原15个网络编程缩减为只用5个网络编程,即比原程序的长度减少三分之二,而且在控制的灯泡数为16之内的任意数时,该程序都适用而不需改动,先将此程序展示出来,供大家分析讨论:1、解析此程序的编程构思;2、看有无再精炼简短的编程思路。其目的就是共同来开阔我们的编程思维及提高我们的编程技巧。请见梯形图:
改编后的梯形图:
本程序的技巧:
1、 巧妙利用二个断电延时定时器解决按钮抖动干扰,确保准确定位及判断时刻选择的
问题。
2、循环左移指令的使用及左移字存储器的置数考量。
3、合理的使用“与”“或”“反相”等逻辑指令和比较指令,用一个网络编程解决了原程序需用N(10)个网络的编程功能。
即:本程序的网络4的功能可代替原程序的网络5~网络14这10个网络的输出功能:即实现同用T102的后沿(即用一个按钮)实现可随意控制N个(原程序N=10)灯泡,使其亮或灭的。
本程序的优点是:当被控灯泡数量改变时,只要灯泡总数在16个以内,程序都适用,不需任何改动,而原程序不行,只适用10个之内灯的控制。比如要控制12个灯泡时,本程序不需改动就可使用,而原程序必须在其网络14后再增添2个双稳态电路去分别控制灯11与灯12后,才可用12个灯泡的控制。
本程序延伸:如果灯泡个数超过16个以上时,该程序应如何改动?
综上各个问题,现暂不作详细解读,下周我会对本程序的编程思路及技巧作以解答,先请大家分析讨论,目的就是使之成为学习讨论如何编好程序的平台,望大家能给与支持与合作。谢谢!