我来分析一下7楼那个程序,看看分析得对不对.
第一行与第二行的作用很明显,是让M0获得一个脉冲的上升沿.
第三行:
M0每吸合一次.指令SFTL就让X000往上数起的第一个,即就是X000本身(因为后面用了K1)的状态(0或1)移到自Y000到Y007里(因为后面用了K7,即是自Y000往上数的七个).
因为被移位的状态(即X000)只有一个,所以M0吸合一次就只移一位,又因为是用了SFTL指令而不是SFTR指令,所以这里是从Y0至Y7往上移.
M0吸合瞬间,X000是什么状态(0或者是1),就将这个状态移到那时须移到的Y继电器里.因为在这里X000总是吸合的,所以M0每吸一次,Y继电器就加亮一个.
第四行:
分两个功能,
1;复位,当断开X000,此时自X010往上数的8个输入继电器(K2X010,2表示两组,一组有四位,即是指8个了.X是表示输入继电器,010就是从010开始数起).
将这8个输入继电器的状态用MOV指令传到K2Y00所示的8个输出继电器.
如果此时X010至X017都没有接通(0状态)的话,那么Y0至Y7也跟着变成0了,构成复位.
2;手动功能,当X000没有被接通.此时X010至X017的状态就是Y000至Y007的状.也就是说,当X010接通,Y000就有输出,X011接通,Y001就有输出......一个对应一个的.形成手动功能.
最后分析一下这个程序的BUG.
如果先接通X011,再接通X000,那么Y1的接通状态就会被指令SFTL"推着走"
因为一开始Y1后面有一个Y0是未被接通(即是0状态),此时M0每接通一次,Y0的状态移到Y1,因为Y0是0,所以所以变成了0,而Y1的1状态被移到了Y2,变成Y2是接通.如此一步一步下去,总有一个输出抢先一步接通后,再关闭,然后再接通.
评价:
如果要改进此程序的BUG,还想不到什么更好的办法,就只能在X输入继电器上互锁了,但如此一来,就违背了此程序精巧的原则了.希望高手给出更好的方案.
对不起了,文笔太差,但愿各位能看懂.更希望高手指点当中的错误,不胜感激!
最后修改:2006-9-7 10:45:31