最近在调试时,发现一个有意思的问题。
AR1的地址内容被隐形调用了。
在OB1中调用一个FC,在FC的输出接口上有一个UDT格式的输出。
OB1
CALL FC352
FC352
UDT格式为:Comm
#Comm.Test1 INT
#Comm.Test2 INT
L L#3200
LAR1
TAR1 MD 36
L MW [AR1,P#0.0]
TAR1 MD 40
T #Comm.Test1
TAR1 MD 44
L MW [AR1,P#2.0]
TAR1 MD 48
T #Comm.Test2
TAR1 MD 52
监测到AR1地址寄存器的地址发生变化了。
请各位来指点下迷津~~
quote:
--------------------------------------------------------------------------------
以下是引用Zane在2009-11-26 10:08:08的发言:
对UDT的访问就是对数据块的访问,需要用到AR1和AR2,所以在访问数据块之前要保护现场,或先取出UDT中的数值,存放在零时变量中,然后再寻址目标地址。
--------------------------------------------------------------------------------
Zane斑竹,我理解你的意思就是我在用传送指令时,传送的目标是UDT与DB块,地址都会发生变化.即 T #Comm.Test1 与T DB200.DBW0是相同的.
我又做了以下实验,其余保持不变,将FC352中的T #Comm.Test1 与 T #Comm.Test2换成了 T "Test".Time_Dog_Old(即DB200.DBW0) 与 T "Test".Comm_Counter (即DB200.DBW2)
检测AR1的地址未发生变化,一直是L#3200