quote:以下是引用IF THEN ELSE在2007-12-29 12:58:25的发言:
我想S和=的区别不用多说,大家都知道
关键是用FP,FN指令时,操作数是什么样的,如果操作数是没有记忆功能,那么将不会产生和FP指令前A操作数同样的时序,也就是说,虽然你的程序里
A M10.2
FP L0.1
但是因为L0.1不存在记忆功能,所以,下个周期时,即使M10.2仍然为1,L0.1却为0,如果这里把L0.1换成具有记忆功能的M0.1,情况将不同,它的值将和M10.2的一模一样。
并且只要用了FP或着FN指令,多会对RLO位产生一个脉冲,我们一般常用这个脉冲来S一个位。
那么什么情况我们定义的局部变量具有记忆功能,什么情况下,我们定义的局部变量又不具有记忆功能呢,很简单,FC里的局部变量不具有,FB里的具有,
至于为什么,我想不说你也应该知道,因为我们多了一个背景数据块,所有程序中出现的变量都会被记录在背景数据块中,因此即使是局部变量,因为又了背景数据块的支持,它也具备了记忆功能。
谢谢!不过有点异议:对于这一句“那么什么情况我们定义的局部变量具有记忆功能,什么情况下,我们定义的局部变量又不具有记忆功能呢,很简单,FC里的局部变量不具有,FB里的具有”,FB其实对局部变量也没有记忆功能的,FB只对in、out、INT-OUT、STAT变量有记忆功能,而对于temp、L变量却没有记忆功能!
同时我也赞成临时变量没有记忆功能,可是下面的语句执行结果是一样的:(当M0.1变化一致时),我不知道是用仿真软件的原因,还是执行结果就应该一致:
1、A M10.1
FP M10.2
S M10.3
与
A M10.1
FP L10.2
S M10.3
以及:
2、A M10.1
FN M10.2
S M10.3
与
A M10.1
FN L10.2
S M10.3
以及
3、A M10.1
FP M10.2
= M10.3
与
A M10.1
FP L10.2
= M10.3
以及:
4、A M10.1
FN M10.2
= M10.3
与
A M10.1
FN L10.2
= M10.3