间接寻址是PLC学习中的一个难点,S7-300/400的间接寻址最为复杂,学习的难度更大。
在指令中直接给出操作数(常数),称为立即寻址。在指令中给出操作数的地址(例如M5.2),称为直接寻址。
间接寻址在指令中给出的不是操作数或操作数的地址,而是给出一个被称为地址指针的存储单元的地址,地址指针里存放的是真正的操作数的地址。
地址指针就像收音机调台的指针,改变指针的位置,指针指向不同电台。改变地址指针中的地址值,地址指针“指向”不同的地址。
再打一个比喻,邮递员的摩托车就好像一个地址指针。邮递员根据信封上的地址,将摩托车开到用户A的家门口,这个时候指针(摩托车)指向了这个地址,把信送给用户A,就好像将数据写入这个地址。送下一封信的时候,相当于修改了地址指针中的值,摩托车开到下一个用户的门口,地址指针指向了另外一个地址。
我们入住酒店的时候,在前台办完入住手续,酒店就会给我们一个房卡,房卡上面有房号,旅客根据房号使用宾馆的房间,每天每间房间可能住不同的旅客。在这里房卡就是指针,房间就是存储单元,旅客就是存储单元中存放的数据。
间接寻址用来在程序运行期间,通过改变指针中地址的值动态地修改指令中的地址。间接寻址常用于循环程序和查表程序。例如循环程序用来累加一片连续的存储区中的数值,每次循环累加一个数值。累加后修改地址指针的值,使它指向下一个存储单元,为下一次循环的累加运算做好准备。没有间接寻址,就不能编写循环程序。
间接寻址分为存储器间接寻址和寄存器间接寻址。它们分别用存储单元和地址寄存器来作地址指针。
S7-200的地址指针为双字,只能用V、L区的存储单元或累加器作指针。首先用双字传送指令MOVD将存储器地址送到指针中,例如指令“MOVD &VB200, VD300”将VB200的地址送到VD300。&VB200表示VB200的地址,而不是VB200中的值。
指令“MOVW *VD300, VW20”表示将指针VD300中的地址(VB200)中的值送到VW20。*VD300是VD300所指的地址中的数据。
S7-200的间接寻址不能用于位(bit)地址、HC或L存储区的寻址。地址指针中地址值以字节为单位。
----------------------------------------------
此篇文章从博客转发
原文地址: Http://blog.gkong.com/more.asp?id=131249&Name=liaochangchu
最后修改:2010/12/22 15:59:03