<紧接上一帖>
“科一”老师的第三个程序的缺陷是:在FX系列的某些PLC中,当“输出位”Y0为“1”时断电或PLC进入“STOP”,再次来电或PLC重新进入“RUN”时“输出位”Y0会重复之前的“ON”状态。这时,您若要改变“输出位”Y0的状态就得摁动两次开关才能实现!这就与楼主的[摁一下按钮,“输出位”Y0就改变一次状态]的“目的”发生“差错”了。
我说的这个现象,网友们可以把“科一”老师的第三个程序写入FX1s或FX1n的PLC中去验证一下。
附“科一”老师的第三个程序:
[ ld m8002
set s20
stl s20
pls m0
ld x0
pls m1
ldi m0
and m1
set s21
stl s21
out y0
pls m0
ld x0
pls m1
ldi m0
and m1
set s20
ret
end ]
“科一”老师的第三个程序之所以会在FX系列的某些PLC中发生“差错”是因为:本来在“步进”程序中“状态”S的转移是后一“状态”被“置位”的同时前一“状态”(或称其它“状态”)自动复位,以保证程序中只有一个“状态”S(也称“步”)处于“置位”的情形。而FX系列的某些PLC的“状态元件” S都是“保持型继电器”,在这些PLC中,如果在“状态”S21为“1”(这时Y0=“1”)的情形下发生断电或PLC转入“STOP”,再次来电或PLC重新转入“RUN”,这时“状态”S21仍然为“1”,故PLC的“输出位”Y0会恢复“ON”状态。但这时因“步进”程序之外(之前)有语句[ld m8002 set s20 ],这就使得“步进”程序中发生“状态”S20和“状态”S21同时处于“置位”的情形。这就是“步进”程序所不允许发生的情形!
改掉这一“缺陷”的办法有多种!这里举出一两例谨供网友们参考:
在语句[ld m8002 set s20 ]中插入[ani s21],使之变成[ld m8002 ani s21 set s20]。
或在语句[ld m8002 set s20 ]之后插入[rst s21]使之变成[ld m8002 set s20 rst m21]。
用前一种方法改写后,PLC在“状态”S21保持“置位”状态下重新进入“RUN”时,其“输出位”Y0会恢复“ON”状态;而用后一种方法改写后,PLC在“状态”S21保持“置位”状态下重新进入“RUN”时,其“输出位”Y0不会恢复“ON”状态。这就要视其使用者的“目的”要求来决定怎么改写了。