实例解析西门子S7-200PLC的间接寻址.docx
《实例解析西门子S7-200PLC的间接寻址.docx》由会员分享,可在线阅读,更多相关《实例解析西门子S7-200PLC的间接寻址.docx(6页珍藏版)》请在冰点文库上搜索。
实例解析西门子S7-200PLC的间接寻址
间接寻址
相对于直接寻址而言的,指令地址字段的形式地址D不是操作数的真正地址,而是操作数地址的指示器,或者说是D单元的内容才是操作数的有效地址。
间接寻址是在直接寻址的基础上面建立起来的,也就是直接寻址得到的数据是一个地址,通过这个地址找到最终的数据,也就是两次寻址,第一次得到的是地址,第二次才是目标数据。
S7-200PLC内部存储区域的划分,S7-200系列PLC内部存储器按功能分为以下几个区域。
序号
名称
1
输入映像寄存器
(1)
2
输出映像寄存器(Q)
3
变量寄存器(V)
4
局部寄存器(L)
5
累加器(AC)
6
内部辅助位寄存器(M)
7
特殊功能寄存器(SM)
8
顺序控制寄存器(S)
9
定时器存储器(T)
10
计数器存储器(C)
11
高速计数器(HC)
12
模拟量输入(AI)
13
模拟量输出(QI)
以上寄存器均可进行位寻址、字节寻址、字寻址、双字寻址。
存储区的存取方式:
按“位”存取:
如V2.1,表示通道2内的第1位;
按“字节”存取:
如VB2,表示整个2通道内的8位的组合;
按“字”存取:
如VW2,表示VB21及VB3两个通道内16位的组合,并且VB2存放于高字节,VB3存放于低字节;
按“双字”存取:
如VD2,表示VB2、VB3、VB4、VB5四个通道内32位的组合从高字节至低字节的排序:
VB2、VB3、VB4、VB5。
存取
类型
CPU221
CPU222
CPU224
CPU226
位
V
0.0-2047.7
0.0-2047.7
0.0-5119.7
0.0-5119.7
I
0.0-15.7
0.0-15.7
0.0-15.7
0.0-15.7
Q
0.0-15.7
0.0-15.7
0.0・15.7
0.0-15.7
M
0.0-31.7
0.0-31.7
0.0-31.7
0.0-31.7
SM
0.0-179.7
0.0-299.7
0.0-549.7
0.0・549.7
S
0.0-31.7
0.0-31.7
0.0-31.7
0.0-31.7
T
0-255
0-255
0-255
0-255
C
0-255
0-255
0-255
0-255
L
0.0-59.7
0.0-59.7
0.0-59.7
0.0-59.7
下表中S7-200CPU的内存地址范围:
寻址方式
S7-200编程语言的基本单位是语句,而语句的构成是指令,每条指令有两个部分:
一部
分是操作码,另一部分是操作数。
操作码是指出这条指令的功能是什么,操作数则指明了操作码所需要的数据所在。
所谓寻址,就是寻找操作数的过程。
S7-200CPU的寻址分三种:
立即寻址、直接寻址、间接寻址。
1.立即寻址
在一条指令中,如果操作码后面的操作数就是操作码所需要的具体数据,这种指令的寻址方式就叫立即寻址。
如:
在传送指令中:
MOVINOUT-操作码“MOV”指出该指令的功能把IN中的数据传送到OUT中,其中IN--源操作数,OUT-目标操作数。
若该指令为:
MOVD2505VD500
功能:
将十进制数2505传送到VD500中,这里2505就是源操作数。
因这个操作数的数值已经在指令中了,不用再去寻址,这个操作数即立即数。
这个寻址方式就是立即寻址方式。
而目标操作数的数值在指令中并未给出,只给出了要传送的地址VD500,这个操作数的寻址方式就是直接寻址。
2直接寻址
在一条指令中,如果操作码后面的操作数是以操作数所在地址的形式出现的,这种指令的寻址方式就叫直接寻址。
如:
MOVDVD400VD500
功能:
将VD400中的双字数据传送给VD500
3.间接寻址
在一条指令中,如果操作码后面的操作数是以操作数所在地址形式出现的,这种指令的寻址方式就叫间接寻址。
如:
MOVD2505*VD500
*VD500是指存放2505的寄存器的地址。
如VD500中存放的是VBO,VD0则是存放2505的地址。
该指令的功能:
将十进制数2505传送给VD0地址中。
间接寻址解说
用指针对S7-200存储区间接寻址
间接寻址是指用指针来访问存储区数据。
指针以双字的形式存储其它存储区的地址。
只能用V存储
器、L存储器或者累加器寄存器(AC1、AC2、AC3)作为指针。
要建立一个指针,必须以双字的形
式,将需要间接寻址的存储器地址移动到指针中。
指针也可以作为参数传递到子程序中。
S7-200允许指针访问以下存储区:
I、Q、V、M、S、Al、AQ、SMT(仅限于当前值)和
C(仅限于
当前值)。
您无法用间接寻址的方式访问单独的位,也不能访问HC或者L存储区。
要使用间接寻址,您应该用“&”符号加上要访问的存储区地址来建立一个指针。
指令的输入操作数
应该以“&”符号开头来表明是存储区的地址,而不是其内容将移动到指令的输出操作数(指针)
中。
当指令中的操作数是指针时,应该在操作数前面加上“火”号。
如图4-11所示,输入
*AC1指定AC1是
一个指针,MOVW指令决定了指针指向的是一个字长的数据。
在本例中,存储在VB200
和VB201中
的数值被移动到累加器ACO中。
如图4-12所示,您可以改变一个指针的数值。
由于指针是一个32位的数据,要用双字指令来改变指针
的数值。
简单的数学运算,如加法指令或者递增指令,可用于改变指针的数值。
提示
按照所访问的数据长度使用不同的指令:
当访问字节时,使用递增指令使指针值加1;当访问字或
者计数器、定时器的当前值时,用加法或者递增指令使指针值加2;当访问双字时,使用加法或者
递增指令使指针值加4o
用地址偏移量来访问V存储区数据的例子程序
本例中用LD1O作为VBO的地址指针。
然后可以利用VD1004中存储的地址偏移量来改变指针值。
经过改变后,LD1O指向
V区中的另外一个地址(VBO+偏移量)。
然后将LD1O指向的V区地址中存储的数值复制到VB1900中。
通过改变
VD1004中的数值,您可以访问V存储器中的任意单元。
总结:
间接寻址定义:
间接编址使用指针存取内存中的数据。
指针是包含另一个内存位置地址的双字内存位置。
您只能将V内存位置、L内存位置或累加器寄存器(AC1、AC2、AC3)用作指针。
欲建立指针,您必须使用"移动双字"指令,将间接编址内存位置移至指针位置。
指针还可以作为参数传递至子程序。
S7-200允许指针存取以下内存区:
I、Q、V、M、S、T*仅限当前值)和C(仅限当前值)。
您不能使用间接编址存取单个位或存取Al、AQ、HC、SM或内存区。
&VB200间接寻址,表示的是取寄存器VB200的地址。
VB200 直接寻址,表示的是寄存器VB200里存的数据。
*VD100指针,指向存储在VD100里的地址指向的那个寄存器里的数据。