找答案的高端用户(找答案钻石及双钻级别的用户)将尽可能从此问题下的所有回
答中,为您推荐最佳答案。届时您可以根据推荐数采纳答案。
如果自提问时间起7天内您仍无法选出最佳答案,您可以选择“无满意答案”关闭此问题。
回答这个问题前,建议你看一下阿鸣提到的F0215这篇文章,里面对寻址做了详细的说明。其实为什么要移,移多少位不是随意规定的,那么这个是怎么来的呢?我们还需要对症下药,先来看看指针数据类型的存储格式是怎么样的,这里就直接说32位的存储器寻址吧。
32位的指针当然是32位的,它的每一位都有特殊的含义。这个必须先要了解。
0000 0000 0000 0BBB BBBB BBBB BBBB BXXX
0-2位(X) 表示位地址。
3-18位(B)表示字节地址。
19-31位(0) 没有定义。
XXX 表示从 000-111 正好可以代表 .0- .7 ,所以称它为位地址
而BBB表示的范围是0-65536 这个范围,正好可以覆盖I Q M L DB的表示范围,所以称它为字节地址。
比如我们读取 MW20 这个存储器的数据,那么我们可以使用下面的指令
L MW20
用寻址的方式来表示的话就是
L MW[ MD2 ] 其中MD2是一个变量,我们希望当MD2的数值等于20的时候就可以访问到MW20了。
这个时候我们要清醒地看到MD2是一个32位长度变量,加上中括号[ ]后,它就代表了一个32位的指针了,这个时候,如果MD2=20的话,它表示的就不是20,而是
10100,按照32位指针的数据定义,
它的位地址是100
字节地址是10,
那么它代表的是 2.4
这样的话 L MW[MD2] 就变成了 L MW2.4 显然这样的结果是错误的,只有对于位寻址我们才可以使用2.4这样的格式例如
A M 2.4
对于字节,字,双字都不能这样写。那怎么办,按规矩办,根据32位的指针格式,我们希望它的字节地址为20,那么将最低的3位左移,
L L#20 // L#20表示整数20
SLD 3
T MD2
这样的话 MD2的数据就变成10100 000,
表示20.0
当对字节,字,双字进行寻址的时候,位地址必须为0。这一条原则结合32位指针的数据结构就可以解释为什么要左移3位,或者乘以8 (左移3位相当于乘以8)。什么时候移的答案也就在这其中了。
见《关于S7-300和S7-400指针寻址的说明与例程(更新版)(2008.03.04) 》下载:
http://www.ad.siemens.com.cn/download/searchResult.aspx?searchText=F0215
首次回答问题,获得
双倍西币积分!
立即成为技术知识分享的一员!
找答案微信小程序
提问
搜索
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!