在PLC中使用的寻址方式分为直接寻址和间接寻址两种方式。
所谓的直接寻址,就是直接使用存储区或寄存器的元件名称和地址编号,根据这个地址去找到该数据;
而间接寻址,不直接给处存储区或寄存器的地址,而是通过对地址的地址进行访问来实习对存储区的数据读取,通俗的来讲,这个地址的地址就是一个编号或一个代号,这好比读书时每同学会有一个学号,老师在点名的时候,可以叫名字,也可以叫学号,叫名字就好比直接寻址,叫学号就好比间接寻址。
不管是叫名字还是叫学号,其实对应的都是同一个人。如下图所示:
VB0:就好比一个人的名字,而地址的地址16#08000000就相当于学号。CPU会为每一个存储区分配一个32位大小的数值作为存储器地址的地址。
所有不管是通过间接寻址的方式还是直接寻址的方式其实是访问同一个存储器或是寄存器。
不同的PLC有不同的寻址方式,这里给大家介绍下西门子系列PLC的间接寻址的方式。这里先给大家介绍下西门子S7-200系列的PLC的间接寻址的过程。
在S7-200系列PLC中,可以用间接寻址访问的存储有:
输入过程映像区(I)、
输出过程映像区(Q)、
位存储器(M)、
全局变量存储区(V)、
顺控状态继电器(S)
以及定时器(T)
和计数器(C)。
在S7-200系列PLC中间接寻址的使用主要分为三步骤:
(1) 建立指针
使用间接寻址对某个存储单元读写时,首先需要建立地址指针,指针为双字的长度,可作为指针的存储区有全局变量存储区V,局部变量存储区L和累加器(AC1\AC2\AC3),建立指针时,必须使用双字的传送指令(MOVD),将存储区中所要访问单元的地址装入用来作为指针的存储器单元或寄存器中。
如前面图中所示,若需要提取VB0地址的地址出来,则需要在VB0前面加上符号“&”即&VB0,&VB0所表示的就不是VB0的值了,而是VB0地址的地址即16#08000000.
如下图所示:
VD100表示指针,用于存储VB0这个存储器地址的地址。
(2)修改指针
在连续存储数据时,可以通过修改指针后很容易存储器其紧接着的数据,简单的数学运算指令,如加法,减法,自增,自减指令可以用来修改指针,在修改指针时需要分清楚访问的数据长度,存储字节时,指针加1,存储字时,指针加2,存储双字,指针加4.
如下程序所示,以VB0存储器地址的地址作为指针,然后把指针移动到指向VB2的存储器地址的地址。
(3)用指针来存储器数据
在操作数前面加“*”表示该操作数为一个指针,如*AC1,那么AC1表示的就是指针,存储的是一个存储器地址的地址,当加上“*”如*AC1,则表示的是以AC1中的数据做作为存储器地址的地址所对应的存储器中的数值。
如下程序所示: