下面有段程序看不太懂,希望高手解答
图片说明:
最佳答案
1、要想弄清这段程序的功能,首先必须清楚32位指针格式:
32位指针格式规定:
地址寄存器是专门用于寻址的一个特殊指针区域,西门子的地址寄存器共有两个:AR1和AR2,每个32位。
当使用在区域内寄存器间接寻址中时,我们知道这时的AR中的内容只是指明数值单元,因此,区域内寄存器间接寻址时,寄存器中的内容等同于上帖中提及的存储器间接寻址中的双字指针,也就是:
其0-2bit,指定bit位,3-18bit指定byte字节。其第31bit固定为0。
AR:
0000000000000BBBBBBBBBBBBBBBBXXX
这样规定,就意味着AR的取值只能是:0.0——65535.7
例如:当AR=D4(hex)=00000000000000000000000011010100(b),实际上就是等于26.4。
2、程序解释:
LMW14
L"变量表".line_pointer
+I///将MW14中的值加上变量表中的line_pointer
Tmw16//结果存入MW16
LL#2//取32位长常数2
*D//进行乘法运算(为了得到字的地址)
SLD3//结果左移3位,为了形成上述的32位指针格式。
LAR1//存入地址寄存器1
LDBW[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=
提问者对于答案的评价:
谢谢