恭喜,你发布的帖子
发布于 2016-01-01 17:24:33
3楼
AR1,AR2常被用来寻址,应变灵活的字节偏移要求。因为提供一些与AR1,AR2相关的操作指令,在处理一些难一点的寻址的时候会比较好。
寄存器优点
1.第一个优点得益于它本身的表达方式 yy [Ar1,P#x.x]
例如某几个连续的DP通讯变频器的GSD文件,组态的类型都是 I/O 32字节,起始地址是256,288,...变频器反馈的状态字如IW256里,正转运行标志是bit0,反转bit1,故障是bit4。
L StartAddress //假设256
ITD
SLD 3
LAR1
A I[AR1,P#0.0] //指向了I256.0
= DriverRunFbk //变频器运行反馈
A I[AR1,P#0.4] //I256.4
= Fault //变频器故障
L IW[AR1,P#2.0]
ITD
DTR
T SpeedRbk //读回的变频器速度反馈
你这样发现了吗?只需要改变[AR1,P#x.x]中的x.x就能访问到这32个I输入,而存储器间接寻址需要频繁的对地址信息存储的Dowrd计算。
2.另外在LOOP中使用 +AR1,P#0.1 移动一个bit 活着+AR1,P#2.0 移动一个字的长度等都是很方便的,比如计算32位的Dowrd中有多少个为TRUE的bit,就可以使用+AR1 P#0.1
3.然后就是TAR1,LAR1,TAR2,LAR2,CAR指令(这些指令也很用)如访问上述情况32I/O里的Bit4
L StartAddress //256,
L 12 //像这样常数都可以用变量代替写成活的可变换的数字
+I //268
itd
sld 3
lar1 //到这个位置时,I[AR1,p#0.4]已经是I268.4
L 4
itd
tar1
+d
LAR1 //I[AR1,p#0.0]已经是I268.4
为甚么不直接使用L P# 268.4,这也的话就写死了。我要访问第2个变频器偏移的12.4怎么办?
不再是256+12+0.4 而是288+12+0.4
存储器寻址的好处:
1.个数可以不受限制?AR1,AR2只有两个。我有时候觉得不够用,用着觉得少。
2.在FB里使用AR2很容易出错,如果没有掌握好寻址的规则,AR1配合存储器寻址却挺好。
我懂的就这么多了。我几乎没用过存储器寻址,可能会说错了什么,以上。
请填写推广理由:
分享
只看
楼主