您现在的位置是:首页 > PLC技术 > PLC技术

S7-300/400的存储器间接寻址

来源:艾特贸易2017-09-19

简介在存储器间接寻址指令中,用方括号给出了一个作为地址指针的存储器,该存储器的内容是操作数所在存储单元的地址。地址指针就像收音机调台的指针,改变指针的位置,指针指向不

    在存储器间接寻址指令中,用方括号给出了一个作为地址指针的存储器,该存储器的内容是操作数所在存储单元的地址。地址指针就像收音机调台的指针,改变指针的位置,指针指向不同电台。改变地址指针中的地址值,地址指针“指向”不同的地址。间接寻址的优点是可以在程序处理期间,通过改变指针的值动态地修改指令中的地址。

    存储器间接寻址可用于循环程序和查表程序。在累加一片连续的存储区中的数据的循环程序中,每次循环累加一个数据。累加后修改地址指针的值,使它指向下一个存储单元,为下一次循环的累加运算做好准备。

    间接寻址可能会造成重复使用用于其他用途的存储器,从而导致PLC的意外动作。

   (1) 16位指针的间接寻址

    定时器(T)、计数器(C)、数据块(DB)、功能块(FB)和功能(FC)的编号范围小于65 535,因此使用16位的字指针。下面是定时器的存储器间接寻址的例子,用16位的MW8作地址指针。MW8的值为3T[MW8]相当于T3。在PLCSIM中监控T3,令I0.21状态,可以看到T3的当前值的变化。改变MW8的值,可以操作其他的定时器。

   L    3

   T    MW    8

   A    1    0.2

   L    S5T#5S

   SD    T[MW 8]    //接通延时定时器T3的线圈

   (2) 32位指针的存储器间接寻址

    其他地址则要使用双字指针,双字指针的格式如图3-88所示,第0~2位为被寻址地址中位的编号(0~7),第318位为被寻址的字节的编号(0~65 535)

    如果要用双字格式的指针访问一个字、字节或双字存储器,必须保证指针的位编号为0,例如P#Q20.0。只有双字MDLDDBDDID能作地址指针。用共享数据块中的字或双字作指针时,首先应打开该数据块。下面是存储器间接寻址的例子:

   OPN    DB    1    //打开DB 1

   L    P#4.0    //因为要访问字节,指针的位编号为0,字节编号为4

   T    DBD    10

   L    QB[DBD 10]    //QB4装入累加器1QB的地址在双字指针DBD10

   T    MB    6

   L    P#4.3

   T    LD    20

    A   M[LD 20]    //M4.3的值送RLOM4.3的地址在指针LD20

   =    Q    5.0

   P#4.0的值为2#0000 0000 0000 0000 0000 0000 0010 0000

   P#4.3的值为2#0000 0000 0000 0000 0000 0000 0010 0011

    运行时启动程序状态监控,用鼠标右键点击图3-89中的STANDARD(累加器1),执行出现的快捷菜单中的命令“显示”→“间接”,出现“INDIRECT”(间接)列,可以看到地址指针DBD10LD20中的地址值。

存储器间接寻址的双字指针格式

    3-88    存储器间接寻址的双字指针格式

间接寻址的程序状态

    3-89    间接寻址的程序状态

    【实例】某表格用MW10开始的20个字存放数据,表格的偏移量(表格中字的序号)在地址指针MD40中。第1个字MW10的序号为0,第2个字MW12的序号为1……在I0.0的上升沿,用间接寻址将表格中相对于偏移量的字的数值传送到MW110中去。

    下面是满足要求的语句表程序(见随书光盘中的例程“存储器间接寻址”),LD28是存储器间接寻址的地址指针,它的值实际上是以位为单位的整数。相邻的两个字相差16位,因此偏移量乘以16或乘以指针常数P#2.0,加上表格的起始地址,便得到要读取的字的地址。

   A    I    0.0

   FP    M    0.0

   JNB    m001    //不是I0.0的上升沿则跳转

   L    MD    40

   L    L#16    //L#16可改为P#2.0

   *D    //偏移量乘以16或乘以P#2.0

   L    P#10.0

    +D    //加上表格的起始地址,得到要读取的数据字的地址

   T    LD    28   //数据的地址送地址指针LD28

   L    MW[LD 28]    //表格中的数据送累加器1

   T    MW    110   //保存数据

   m001NOP    0

    使用32位地址指针对数据块内的地址寻址时,首先必须用OPN指令打开要寻址的数据块,然后才能寻址,例如DBW[MD10]。如果使用完整的数据格式(例如DB2. DBW[MD10])进行间接寻址,则会被视为出错,输入的指令变为红色。

    在用仿真软件调试程序时,用变量表设置MW10开始的数据区各个字的数值(见图3-90),设置MD40的值为2,表示要读取数据区中的第2个字MW14。在I0.0的上升沿之后,可以看到MW110中读取的数据与MW14的相同。改变指针的值,可以读取别的字的值。

变量表

    3-90    变量表