问题有三个:
1.在FB中用到的AR2一般用到哪些地方?
2.在FB中如果要同时用到AR1和AR2是不是只要先保存AR1和AR2,用完后再把AR1和AR2还原就可以了
3.如果不是2上我说的那样使用的话,应该怎么使用呢?
问题补充:
特别是FB中使用到多重背景功能的时候
最佳答案
1.FB中为了方便背景数据块参数的寻址,自动使用AR2寄存器,AR2寄存器指向背景数据块的首地址P#DBX0.0,如果改变了这个寄存器的值,你再访问背景数据块参数时将不会得到正确的数值.所以,在FB里使用AR2寄存器要小心,对这两个寄存器改变后不要再使用背景数据块参数,当要使用背景数据块参数时要先恢复这两个寄存器的值。
2.可以这么用,不过要确保在这之间不要访问FB的接口参数,因为只要访问了FB的接口参数,那么AR2就会被系统重写。
3.有一个常用的用法是多重背景FB的接口参数的寻址用法,需要用到AR2:(因为在多重背景中,变量的地址并不是其在背景数据块中的绝对地址,而是其相对于AR2的偏移地址),所以:在多重背景FB中,如果要得到某变量variable在背景数据块中的绝对地址,可以使用以下代码:
TAR2 // 将地址寄存器装入累加器 AC 1 (偏移量),也就是多重背景FB中第一个变量在背景数据块中的地址。
AD DW#16#00FFFFFF // 关闭区域 ID
L P##variable // 装载变量的地址
+D // 加上偏移量和变量地址
LAR1 // 将结果保存到地址寄存器 AR1 中
仿真情况参考附图。
综上:为了避免出错,除非实在需要,否则最好不要在FB中使用AR2,使用的时候也要特别小心。
图片说明:
提问者对于答案的评价:
谢谢两位的热心帮助。
专家置评
回答的都很好。参考:
西门子STL间接寻址常问问题集
http://www.ad.siemens.com.cn/download/docMessage.aspx?ID=6175&loginID=&srno=&sendtime=
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc243689.html