quote:以下是引用cher在2012-04-02 08:49:16的发言:quote:以下是引用n次看你的背影在2012-04-01 21:08:49的发言:
如果不移位,那麽ld0必须是8的整数倍!
敢问N大侠如果我把LD0换成MD90不就可以不用左移了吗?LD0是什么格式的?
cher:L是本地数据区,通常作为临时变量使用,LD0是本地数据区的第一个双字,包括LB0、LB1、LB2、LB3四个字节。LD0在楼主的程序当中只是起了一个中间运算的过程数据,并没有真正需要存储。所以用MD90替换LD0并没有太大的意义,我认为楼主LD0用法是比较合理的,是节约资源的!
L MW[LD0]此时的LD0是个32位指针。
除了先要理解间接寻址的概念外,还要了解清楚指针的结构。如32位指针,低3位:bit0-bit2用作位地址;3-18位:bit3-bit18用作字节地址。 19-31位:无定义。
——————————————————————————————————————————————
一个32位整型数左移3位后,即可将该整型数转换为指针常数。
举一例参考:
L L#2
L L#10
+D //累加器1的内容为12
RLD 3 //将累加器1里面的内容左移3位(相当于乘以8)
T LD0 //将累加器1里面的内容写到LD0
L MW[LD0] //将LD0里面的数据作为指针,此时的指针为P#12.0;将MW12的内容装载到累加器1
T MW110 //将累加器1的内容写到MW110
——————————————————————————————————————————————
——————————————————————————————————————————————
或者直接用8的倍数的长整数作为指针,这样就无需移位来得到指针了
举一例参考:
L L#16
L L#80
+D //累加器1的内容为96
T LD0 //将累加器1里面的内容写到LD0
L MW[LD0] //将LD0里面的数据作为指针,此时的指针为P#12.0;将MW12的内容装载到累加器1
T MW110 //将累加器1的内容写到MW110
——————————————————————————————————————————————
建议cher学习一下官方S7-300/400间接寻址资料,相信一定会更有收获的!