发表于:2010/12/16 4:27:31
#0楼
许多教科书上都有抢答器的例子,但不少抢答器是不公平的,也就是说,如果两个人在同一plc扫描周期内按下抢答按钮,抢答程序只接受程序位置上排在前面的抢答者的按钮信号。下面是一个有三个抢答者的抢答器,变量分配如下:
i0.0 -- 主持人按钮
i0.1,i0.2,i0.3 -- 分别为三个抢答者按钮;
q0.0,q0.1,q0.2 -- 分别为对应于抢答者的警报器输出;
下图是两个按钮(i0.1,i0.2)同时按下后的情况,图中得电的接口和线圈呈红色。图中可见,同i0.1对应的输出q0.0也呈红色,表示q0.0=1,然而,第二个输出q0.1却是是黑色,即q0.1=0,原因是前面的q0.0=1阻断了q0.1的通路,请注意图中非q0.0呈黑色。
这就造成了抢答的不公平性。为了解决这个问题,可以考虑先用中间变量保存抢答输出。在进行中间变量计算时,只用到上一次的输出,等到所有计算完成,再把所有中间变量输出。下图是新的梯形图以及在两个按钮同时按下后的情形:
图中可见,当两个按钮i0.0和i0.1同时按下时,两个输出q0.0和q0.1同时为红色。不过,这个程序依旧有问题,在下一周期时,所有的输出又都变成了黑色:
出现这种情况的原因是,每个输出分别阻止了下一个输出继续保持为1。为了解决这个问题,下面我们再把程序做一个改动:
它完全达到了公平抢答器的要求。
----------------------------------------------
此篇文章从博客转发
原文地址: Http://blog.gkong.com/more.asp?id=130938&Name=lingcore