下面有段程序看不太懂,希望高手解答
图片说明:
最佳答案
1、要想弄清这段程序的功能,首先必须清楚32位指针格式:
32位指针格式规定:
地址寄存器是专门用于寻址的一个特殊指针区域,西门子的地址寄存器共有两个:AR1和AR2,每个32位。
当使用在区域内寄存器间接寻址中时,我们知道这时的AR中的内容只是指明数值单元,因此,区域内寄存器间接寻址时,寄存器中的内容等同于上帖中提及的存储器间接寻址中的双字指针,也就是:
其0-2bit,指定bit位,3-18bit指定byte字节。其第31bit固定为0。
AR:
0000 0000 0000 0BBB BBBB BBBB BBBB BXXX
这样规定,就意味着AR的取值只能是:0.0 ——65535.7
例如:当AR=D4(hex)=0000 0000 0000 0000 0000 0000 1101 0100(b),实际上就是等于26.4。
2、程序解释:
L MW14
L "变量表".line_pointer
+I ///将MW14中的值加上变量表中的line_pointer
T mw16 //结果存入MW16
L L#2 //取32位长常数2
*D //进行乘法运算(为了得到字的地址)
SLD 3 //结果左移3位,为了形成上述的32位指针格式。
LAR1 //存入地址寄存器1
L DBW[AR1,P#0.0] //按地址寄存器1加偏移量(为0)寻址
T "变量表".KP_VAR /取出的数据存入变量表中KP_VAR变量中。
注意,程序中乘以2就是为了得到字的地址,因为字地址一般为偶数。结果左移3位,为了形成上述的32位指针格式。
3、建议系统看看下述资料,再遇到类似问题就不用求人了:
、《关于S7-300和S7-400指针寻址的说明与例程(更新版)(2008.03.04) 》下载:
http://www.ad.siemens.com.cn/download/searchResult.aspx?searchText=F0215
、《step7编程之地址概念详解》连接:
http://ishare.iask.sina.com.cn/f/22746895.html
http://www.gongkong365.com/bbs/job.php?action=download&aid=96
、《西门子STL间接寻址常问问题集》
http://www.ad.siemens.com.cn/download/docMessage.aspx?
ID=6175&loginID=&srno=&sendtime=
提问者对于答案的评价:
谢谢
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc228761.html