找答案的高端用户(找答案钻石及双钻级别的用户)将尽可能从此问题下的所有回
答中,为您推荐最佳答案。届时您可以根据推荐数采纳答案。
如果自提问时间起7天内您仍无法选出最佳答案,您可以选择“无满意答案”关闭此问题。
不明白后面为什么要转换成32位再左移3位?是否可以实际举例说明?另外DBW[AR1,P#0.0]中P#0.0是什么意思呢?
1、首先解释DBW[AR1,P#0.0]中P#0.0是什么意思呢?
、 P#0.0是地址常数,例如P#8.0、P#10.5等等,一般用于表示地址的初值及地址的偏移量。
、 [AR1,P#0.0]的意义即表示AR1地址指针中的内容(例如为4.0)加上偏移量P#0.0形成新的地址(4.0+0.0=4.0)。那么,DBW[AR1,P#0.0]则为DBW4了。
、 运算的法则是:AR1/AR2和P#中的数值,按照BYTE位和BIT位分类相加。BIT位相加按八进制规则运算,而BYTE位相加,则按照十进制规则运算。
、再举一例:
例如:寄存器寻址指针是:DBX[AR1,P#2.4],其中AR1=26.4
当AR1等于26.4,
AR1:26.4
+ P#: 2.4
---------------------------
= 29.0 这是区域内寄存器间接寻址的最终确切地址数值单元。
DBX[AR1,P#2.4]即为DBX29.0。
2、为什么要转换成32位再左移3位?
、 首先要了解AR1/AR2的一般数据格式:
AR:0000 0000 0000 0BBB BBBB BBBB BBBB BXXX
其0-2bit,指定bit位,3-18bit指定byte字节。
例如:当AR=000000D4(hex)=0000 0000 0000 0000 0000 0000 1101 0100(b),实际上就是等于DBX26.4其0-2bit,指定bit位其0-2bit,指定bit位,实际上就是等于26.4。
、 再解释为什么要转换成32位再左移3位?
因为AR的32位的数据格式。再左移3位是形成其0-2bit,来指定bit位。
例如,L3(这里的L是表示32位长常数),左移(或乘以8)后即形成:
0000 0000 0000 0000 0000 0000 0100 0000(b)=8.0
3、如进一步了解有关指针变址寻址,请见下述资料:
、S7-300和S7-400寻址
https://support.industry.siemens.com/cs/cn/zh/view/79632832
、《关于S7-300和S7-400指针寻址的说明与例程 》下载:
http://www.ad.siemens.com.cn/download/searchResult.aspx?searchText=F0215
、《step7编程之地址概念详解》连接:
http://wenku.baidu.com/view/b2b4d3375a8102d276a22fd3.html
或
http://www.chinakong.com/rencai/disp.asp?id=1633&leibie=4
、《西门子STL间接寻址常问问题集》
http://www.ad.siemens.com.cn/download/docMessage.aspx?
ID=6175&loginID=&srno=&sendtime=
补充:指针是32位的,最后三位是表示的一个字节中的位数,你这个整数是要表示字节,所以左移三位。p#0.0表示你要访问的是地址寄存器ar1保存的地址开始,偏移量是0.0的地址。(0.0的面一个0表示的是字节,点后面的0表示的位,比如1.5,就是要访问的是ar1保存的地址开始,偏移量是1个字节加6个bit(0~7位))
你要学STL先把状态字,还有寄存器怎么寻址学一下吧
请参考zengzy网友的回答,需要注意的是这个数字要8的整数倍,要不无法寻址 p#x.x是一个偏移量,就是在你AR1的基础上偏移多少。
首次回答问题,获得
双倍西币积分!
立即成为技术知识分享的一员!
找答案微信小程序
提问
搜索
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!