在S7-200系列PLC中,数据是存在存储器中的,为了存取方便,需要对存储器的每个存储单元进行编址。在访问数据时,只要找到某单元的地址,就能对该单元的数据进行存取。S7-200系列PLC的寻址方式主要有两种:直接寻址和间接寻址。
1.直接寻址
(1)编址
要了解存储器的寻址方法,须先掌握其编址方法。S7-200系列PLC的存储单元编址有一定的规律,它将存储器按功能不同划分成若干个区,如I区(输入继电器区)、Q区(输出继电器区)、M区、SM区、V区、L区等,由于每个区又有很多存储单元,这些单元需要进行编址。PLC存储区常采用以下方式编址:
1)I、Q、M、SM、S区按位顺序编址,如I0.0~I15.7、M0.0~31.7。
2)V、L区按字节顺序编址,如VB0~VB2047、LB0~LB63。
3)AI、AQ区按字顺序编址,如AIW0~AIW30、AQW0~AQW30。
4)T、C、HC、AC区直接按编号大小编址,如T0~T255、C0~C255、AC0~AC3。
(2)直接寻址
直接寻址是通过直接指定要访问存储单元的区域、长度和位置来查找到该单元。S7-200系列PLC直接寻址方法主要有:
1)位寻址。位寻址格式为
位单元寻址=存储区名(元件名)+字节地址.位地址例如寻址时给出I2.3,要查找的地址是I存储区第2字节的第3位,如图5-1所示。可进行位寻址的存储区有I、Q、M、SM、L、V、S。
图5-1 位寻址举例
2)字节/字/双字寻址。字节/字/双字寻址是以字节、字或双字为单位进行的,字节/字/双字寻址格式为
字节/字/双字寻址=存储区名(元件名)+字长(字节、字或双字)+首字节地址
例如寻址时给出VB100,要查找的地址为V存储区的第100字节,若给出VW100,要查找的地址则为V存储区的第100、101两个字节,若给出VD100,要查找的地址为V存储区的第100~103四个字节。VB100、VW100、VD100之间的关系如图5-2所示,VW100即为VB100和VB101,VD100即为VB100~VB103,当VW100单元存储16位二进制数时,VB100存高字节(高8位),VB101存低字节(低8位),当VD100单元存储32位二进制数时,VB100存最高字节,VB103存最低字节。
图5-2 VB100、VW100、VD100之间的关系
可进行字节寻址的存储区有I、Q、M、SM、L、V、AC(仅低8位)、常数;可进行字寻址的存储区有I、Q、M、SM、L、V、T、C、AC(仅低16位)、常数;可进行双字寻址的存储区有I、Q、M、SM、L、V、AC(32位)、常数。
2.间接寻址
间接寻址是指不直接给出要访问单元的地址,而是将该单元的地址存在某些特殊存储单元中,这个用来存储地址的特殊存储单元称为指针,指针只能由V、L或AC(累加器)来承担。采用间接寻址方式在访问连续地址中的数据时很方便,使编程非常灵活。(www.xing528.com)
间接寻址存取数据一般有3个过程:建立指针、用指针存取数据和修改指针。
(1)建立指针
建立指针必须用双字传送指令(MOVD),利用该指令将要访问单元的地址存入指针(用来存储地址的特殊存储单元)中。指针建立举例如下:
MOVD &VB200,AC1 //将存储单元VB200的地址存入累加器AC1中
指令中操作数前的“&”为地址符号,“&VB200”表示VB200的地址(而不是VB200中存储的数据),“//”为注释符号,它后面的文字用来对指令注释说明,软件不会对它后面的内容编译。在建立指针时,指令中的第2个操作数的字长必须是双字存储单元,如AC、VD、LD。
(2)用指针存取数据
指针建立后,就可以利用指针来存取数据。举例如下:
MOVD &VB200,AC0 //建立指针,将存储单元VB200的地址存入累加器AC0中
MOVW ∗AC0,AC1 //以AC0中的地址(VB200的地址)作为首地址,将连续两个字节(一个字,即VB200、VB201)单元中的数据存入AC1中
MOVD ∗AC0,AC1 //以AC0中的地址(VB200的地址)作为首地址,将连续四个字节(双字,即VB200~VB203)单元中的数据存入AC1中
指令中操作数前的“∗”表示该操作数是一个指针(存有地址的存储单元)。下面通过图5-3来说明上述指令的执行过程。
图5-3 间接寻址说明图
“MOVD &VB200,AC0”指令执行的结果是AC0中存入存储单元VB200的地址;“MOVW ∗AC0,AC1”指令执行的结果是以AC0中的VB200地址作为首地址,将连续两个字节单元(VB200、VB201)中的数据存入AC1中,如果VB200、VB201单元中的数据分别为12、34,该指令执行后,AC1的低16位就存入了“1234”;“MOVD∗AC0,AC1”指令执行的结果是以AC0中的VB200地址作为首地址,将连续四个字节单元(VB200~VB203)中的数据存入AC1中,该指令执行后,AC1中就存入了“12345678”。
(3)修改指针
指针(用来存储地址的特殊存储单元)的字长为双字(32位),修改指针值需要用双字指令。常用的双字指令有双字加法指令(ADDD)和双字加1指令(INCD)。在修改指针值、存取字节时,指针值加1,存取字时,指针值加2,存取双字时,指针值加4。修改指针值举例如下:
MOVD &VB200,AC0 //建立指针
INCD AC0 //将AC0中的值加1(即地址值增1)
INCD AC0 //将AC0中的地址值再增1
MOVW ∗AC0,AC1 //读指针,以AC0中的新地址作为首地址,将它所对应连续两个字节单元中的数据存入AC1中
以图5-3为例,上述程序执行的结果以AC0中的VB202单元地址为首地址,将VB202、VB203单元中的数据56、78被存入AC1的低16位。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。