quote:以下是引用芳季在2012-04-13 12:36:51的发言:
楼上,你看我2楼的简短的程序。你说Q0.0要不要在每个扫描开始进行清零?
清不清零都不影响运行结果。因为在运行过程中已经给了个唯一的值,尽管被双线圈多次赋值。但是每一次都有唯一的值。这就叫先赋值再使用。
又看下面的程序。
LD I0.0
A Q0.0 // O Q0.0 ?
AN I0.1
= Q0.0
这是一个简单的按钮自锁程序。
我们观察Q0.0的执行顺序。
扫描一开始就先出现“A Q0.0”。这就是使用了他的常开触点。接下来扫描= Q0.0指令这个时候才给Q0.0赋上一个值。在此显然就违反了先赋值再使用。如果把Q换成L,将从此得不到正确的值。
机械地执行“变量先赋值再使用”,也是害死很多人。
一段程序,是整个程序的一部分,全局变量的使用范围跨整个程序,甚至也受上位机的影响,赋值的机会是非常多的,并不一定在可见范围内显式赋值。比如我们经常用到断电保持,对于被保持的变量,此次上电,里面存的是个什么值,一般是很难确定的,只知道是上次断电前留下来的。
一个变量的值,还和程序运行的前世今生有关。就象上面这段程序,程序执行前,Q0.0是多少?无需确定。这段程序的结果,I0.0和I0.1未置1(闭合)时,不改变Q0.0的状态,原来该是多少还是多少。