S7-200间接寻址解析
S7-200指令详解

S7-200指令详解PLC在运行时需要处理的数据一般都根据数据的类型不同、数据的功能不同而把数据分成几类。
这些不同类型的数据被存放在不同的存储空间,从而形成不同的数据区。
S7-200的数据区可以分为数字量输入和输出映像区、模拟量输入和输出映像区、变量存储器区、顺序控制继电器区、位存储器区、特殊存储器区、定时器存储器区、计数器存储器区、局部存储器区、高速计数器区和累加器区。
3.1 S7-200的数据区1. 数字量输入和输出映象区(1) 数字量输入映像区(I区)数字量输入映像区是S7-200 CPU为输入端信号状态开辟的一个存贮区,用I表示。
在每次扫描周期的开始,CPU对输入点进行采样,并将采样值存于输入映像区寄存器中。
该区的数据可以是位(1bit)、字节(8bit)、字(16bit)或者双字(32bit)。
其表示形式如下。
·用位表示I0.0、I0.1、…I0.7I1.0、I1.1、…I1.7…I15.0、I15.1、…I15.7共l28点。
输入映像区每个位地址包括存储器标识符、字节地址及位号三部分。
存储器标识符为“I”,字节地址为整数部分,位号为小数部分。
比如Il.0表明这个输入点是第1个字节的第0位。
·用字节表示IB0、IB1、…IB15共l6个字节。
输入映像区每个字节地址包括存储器字节标识符、字节地址两部分。
字节标识符为“IB”,字节地址为整数部分。
比如IB1表明这个输入字节是第1个字节,共8位,其中第0位是最低位,第7位是最高位。
·用字表示IW0、IW2、…IW14共8个字。
输入映像区每个字地址包括存储器字标识符、字地址两部分。
字标识符为“IW”,字地址为整数部分。
一个字含两个字节,一个字中的两个字节的地址必须连续,且低位字节在一个字中应该是高8位,高位字节在一个字中应该是低8位。
比如,IW0中的IB0应该是高8位,IB1应该是低8位。
·用双字表示ID0、ID4、…ID12共4个双字。
S7-200操作数所在的存储单元地址表示及寻址方法表1

S7-200操作数所在的存储单元地址表示及寻址方法
区域名称
寻址方法
操作数类型
标识符
指令举例
输入映象寄存器I
在每次扫描周期开始,CPU对输入点进行采样,并将采样值存于输入映像寄存器中,供程序使用.
(输入)位
(输入)字节
(输入)字
(输入)双字
I
IB
IW
ID
AI 0.0
输入映象寄存器Q
在扫描周期的结尾,CPU将输出映象寄存器的内容输出到输出端点上.
SM0。0
该位绐终为1
SM1。0
操作结果= 0
SM0。1
首次扫描时为1
SM1。1
结果溢出或非法数值
SM0。2
保持数据丢失时为1
SM1。2
结果为负数
SM0。3
开机进入RUN时为1
一个扫描周期
SM1。3
被0除
SM0。4
时钟脉冲:30s闭/30s断开
SM1。4
超出表范围
SM0。5
时钟脉冲:0.5s闭合/0.5s断开
(存储器)字
(存储器)双字
V
VB
VW
VD
BMB VB 20,
VB 100,4
定时器T
带位操作的指令,存取定时器位,带字操作数的指令,存取当前值.
定时器号
T
TON T33,3
计数器C
带位操作的指令,存取计数器位,带字操作数的指令,存取当前值.
计时器号
C
CTD C50,3
局部存储器L
局部存储器与变量存储器很相拟,主要区别是:变量存储器是全局有效的,而局部存储器是局部有效的,S7-200 PLC有64个字节的局部存储器用于做暂存器或给子程序传递参数.
S7-200 SMART PLC指令系统

S7-200 SMART指令中的立即数(常数)可以为字节、字或双字。CPU
可以以二进制方式、十进制方式、十六进制方式、ASCII方式、浮点数方
式来存储。
•十进制格式 [十进制数],
取值范围为 字节0~255、字0~65535、双字0~4294967295。
例如
255
•十六进制格式 16#[十六进制数],
取值范围为 字节0~FF、字0~FFFF、双字0~FFFF FFFF。
例如
16#100F
•实数或浮点格式 [浮点数],
例如:
2.05
+1.175495Eห้องสมุดไป่ตู้3
•ASCII码格式 “[ASCII码文本]”。
例如
“ABCDEF”
•二进制格式 2#[二进制数]。
例如
2#1010-0101-1010-0101
表5-2 标准触点指令语句表的表示方法
•输出操作 输出操作由输出线圈和位地址bit构成。输出操作由输出操作码“=” 和线圈位地址bit构成。输出操作用梯形图、语句表的表示如图5-9所 示。 输出操作是把前面各逻辑运算的结果复制到输出线圈,从而使输出线 圈驱动的输出常开触点闭合,常闭触点断开。输出操作时,CPU是通 过输入/输出映像区来读/写输出的状态的。输出操作的操作数范围:I、 Q、M、SM、T、C、V、S、L(位)。
机电一体化
1)S7-200 SMART PLC寻址方式 S7-200 SMART PLC编程语言的基本单位是语句,而语句的构成是指令。
CPU将信息存储在不同存储单元,每个位置均具有唯一的地址。每条指令有两 部分组成,一部分是操作码,另一部分是操作数。操作码是指出这条指令的功 能是什么,操作数则指明了操作码所需要的数据所在。所谓寻址,就是寻找操 作数的过程。寻址时,数据地址以代表存储区类型的字母开始,随后是表示数 据长度的标记,然后是存储单元编号;对于二进制位寻址,还需要在一个小数 点分隔符后指定位编号。S7-200 SMART CPU的寻址方式可以分为三种,即 立即寻址、直接寻址和间接寻址。 (1)立即寻址 在一条指令中,如果操作码后面的操作数就是操作码所需要的具体数据,这种 指令的寻址方式就叫做立即寻址。
S7-200SMART间接寻址

S7-200 SMART 间接寻址一、间接寻址概念:1、间接寻址是指用指针来访问存储区的数据。
指针以双字的形式存储其它存储区的地址,只能将V 存储单元、L 存储单元或累加器寄存器(AC1、AC2、AC3)用作指针。
注意:S7-200 SMART CPU 允许指针访问下列存储区:I、Q、V、M、S、AI、AQ、SM、T(仅限当前值)和C(仅限当前值)。
不能使用间接寻址访问单个位或访问HC、L 或累加器存储区。
2、指针存储的就是存储器的内存地址或编号,如下所示,VB0表示的是一个存储器,而内存地址:16#08000000则就是VB0这个存储区所对应的内存地址,通过对这个内存地址的改变就可以实现对不同的存储区的访问,这就是间接寻址的过程。
3、间接寻址的使用过程主要分为建立指针,改变指针,通过指针实现存储器三步骤。
二、建立指针:要创建指针,用“&”符号加上要访问的存储区地址可建立一个指针,必须使用“移动双字”指令,将间接寻址的存储单元地址移至指针位置。
注意:修改指针的值时,请记住调整所访问数据的大小:访问字节时,指针值加1;访问定时器或计数器的字或当前值时,指针值加2;访问双字时,指针值加4。
三、修改指针:对指针中的数据进行修改,可以实现对存储地址的改变,如图所示通过对指针进行加法操作来改变指针中的所存的数据,该数据指向的是PLC中存储器的内存地址。
四、通过指针对数据进行存取:当指针的内容修改完后,需要根据修改后的指针的内容访问对应的存储区的数据,此时指令中的操作数是指针是,应该在操作数前面加上“*”号。
例程1.通过指针访问数据表所实现的功能:索引号VW1008=0时,将指定的配方0(VB100~VB104) 数据传送到(VB1500~VB1504) 索引号VW1008=1时,将指定的配方1(VB105~VB109) 数据传送到(VB1500~VB1504) 索引号VW1008=2时,将指定的配方2(VB110~VB114) 数据传送到(VB1500~VB1504) 索引号VW1008=3时,将指定的配方3(VB115~VB119) 数据传送到(VB1500~VB1504)例程2.通过指针存储数据表所实现的功能:索引号VW1008=0时,将(VB1500~VB1504)数据传送到指定的配方0(VB100~VB104) 索引号VW1008=1时,将(VB1500~VB1504)数据传送到指定的配方1(VB105~VB109) 索引号VW1008=2时,将(VB1500~VB1504)数据传送到指定的配方2(VB110~VB114) 索引号VW1008=3时,将(VB1500~VB1504)数据传送到指定的配方3(VB115~VB119)例程3.通过地址偏移量来访问V存储区数据所实现的功能:本例程可以实现对区任意字节数据的访问。
S7-200模拟量数据格式与寻址

S7-200模拟量数据格式与寻址
S7-200模拟量数据格式与寻址:
模拟量输入/输出数据是有符号整数,占用一个字长(两个字节),所以地址必须从偶数字节开始。
模拟量的转换精度为12位。
格式:
输入:AIW[起始字节地址]如AIW6
输出:AQW[起始字节地址]如AQW0
.每个模拟量输入模块,按模块的先后顺序和输入通道数目,以固定的递增顺序向后排地址。
例如:AIW0、AIW2、AIW4、AIW6、AIW8等。
对于EM231RTD(热电阻)两通道输入模块,不再占用空的通道,后面的模拟量输入点是紧接着排地址的。
.每个有模拟量输出的模块占两个输出通道。
即使第一个模块只有一个输出AQW0,第二个模块的输出地址也应从AQW4开始寻址(AQW2被第一个模块占用),依此类推。
.温度模拟量输入模块(EM231TC、EM231RTD)也按照上述规律寻址,但是所读取的数据是温度测量值的10倍(摄氏或华氏温度)。
如520相当于52.0度。
注意:每一模块的起始地址都可在STEP7-Micro/WIN中的菜单PLCInformation里在线读到。
图文详解S7-200SMART间接寻址方法

图文详解S7-200SMART间接寻址方法PLC寻址分为直接和间接两种,前面已经介绍了直接寻址使用方法,本文介绍间接寻址如何使用,间接寻址类似于地球上经纬度定位方式,地球上任意一个地方都有一个与之相对于的经度和纬度值,这样定位不再分区域,可以延伸到全球。
间接寻址也是如此,PLC中只有一个存储数据的硬件(硬盘),所谓的I,Q,M,V等区只是西门子开发人员定义出来的逻辑分区,类似电脑C,D,E,F盘,其实都处在一个硬盘中,并且都有相对应得一个编号,如果能找到地址的编号,同样可以对其进行寻址,并且不再受存储区的限制,能够大批量的访问连续或有一定规律的地址,这就是间接寻址。
间接寻址分三步:1.建立指针,即获取需要访问存储区起始地址对应编号。
&为地址符号,是S7-200SMART中特殊的编程写法,&VB0代表VB0处在整个存储区的地址编号(指针),可以理解成我们的身份证号码,是一个很大的数值,必须存储在32位存储器中,如VD100,LD0,AC1(AC0不能做指针)等。
2. 间接访问。
通过访问指针指向地址来进行寻址。
间接寻址支持字节,字,双字方式访问,如下图所示:*为访问指针符号,*AC1代表AC1所指向地址的数值,以字节访问则代表一个字节,字访问代表一个字,双字访问代表一个双字。
3.指针偏移。
访问完一个地址后可以以该地址为起始,通过加/减方式对指针进行偏移,从而实现其它地址的访问。
通常字节偏移1,字偏移2,双字偏移4(位不支持间接寻址)总结:间接寻址与直接寻址各有千秋,直接寻址直观简单,适合单个或少量的寻址,不管有没有规律都可以使用,可以满足大部分寻址要求。
间接寻址适合批量且连续或有一定规律的地址,当寻址量较大时,可以将数据设计成有规律,用间接方式寻址可以少写很多步程序,使编程更加简单。
S7-200 PLC寻址指令

✓(2)各元件介绍 ✓输入继电器(I) ✓输出继电器(Q) ✓通用辅助继电器(M) ✓特殊标志继电器(SM) ✓变量存储器(V) ✓局部变量存储器(L) ✓顺序控制继电器(S)
✓定时器(T) ✓计数器(C) ✓模拟量输入映像寄存器(AI)、模拟量
输出映像寄存器(AQ) ✓高速计数器(HC) ✓累加器(AC)
1.直接寻址 (1)编址 要了解存储器的寻址方法,必须先掌握其编址方法。S7-
200系列PLC的存储单元编址有一定的规律,它将存储器按 功能不同划分成若干个区,如I区(输入继电器区)、Q区 (输出继电器区)、M区、SM区、V区、L区等,由于每个 区又有很多存储单元,这些单元需要进行编址。
PLC存储区常采用以下方式编址: 1)I、Q、M、SM、S区按位顺序编址,如I0.0~I15.7、M0.0~M31.7。 2)V、L区按字节顺序编址,如VB0~ VB2047、LB0~ LB63。 3) AI、AQ区按字顺序编址,如AIW0~AIW30、AQW0~ AQW30。 4)T、C、HC、AC区直接按编号大小编址,如T0~ T255、C0~C255、
S7-200数据存储区及元件(内部资源)的 功能
外部输入点
输入端子
• 1. 输入/输出映像寄存器:S7-200 PLC编址范围(I0.0~I15.7) 输入映像寄存器(该区域可以按位操作又称输入继电器) 输入继电器线圈由外部信号驱动,常开触点和常闭触点供用
户编程使用。
输入继电器用来接收外部输入的开关量信号。它 和对应的输入端子相连,同时提供无数的常开和常闭 触点用于编程
双字来存取存储区的数据。
• 4. 顺序控制继电器(S)存储区 S又称状态元件,以实现顺序控制和步进控制。 S7-200 PLC编址范围S0.0~S31.7,可以按位、字节、字或双
S7-200SMART系列PLC的间接寻址功能

S7-200SMART系列PLC的间接寻址功能在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这个存储器地址的地址。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
网络1:
LD M0.0
MOVD &VB0, VD10
MOVB *VD10, VB100
+D 1, VD10
网络2:
LD M0.1
MOVB *VD10, VB100
第一次读指针时,读取的是VB0。
第二次读指针时,读取的是VB1。
②读取下一个字:
网络1:
LD M0.0
MOVD &VB0, VD10
网络4:
NEXTS7-200cpu允许使用指针对下述存储区进行间接寻址:I, Q, V, M, S, T和C。但不能对独立的位或模拟量进行间接寻址。指针为双字值,用来存放另一个存储器的地址,只能用V, L或累加器AC1,AC2和AC3作指针。为了生成指针,必须用双字传送指令(MOVD)将某个位置的地址移入另一个位置或累加器作为指针。
LD M0.0
MOVD &VB0, VD10
MOVD *VD10, VD40
译为:在VD10建立指针,指针指向以VB0为首的地址,读取在指针VD10所指向的首地址开始的一个双字(即以VB0开始的一个双字,很明显就是VD0),所以,读取指针时将VD0放到VD40。
3:修改指针
修改指针是在使用指针寻址中关健的一部分,修改指针是将指针指向的首地址进行适当的偏移,使之指向我们需要访问的地址,这样我们可以比较方便的使用在这一存储区的某一具体地址,使程序的灵活性有所增加。
网络4:
NEXT
网络5:
LDW>= VW1000,1:
LD M0.0
MOVD &VB300, VD131
MOVW 0, VW129
网络2:
LD M0.0
FOR VW125, 1, 6
网络3:
LD SM0.0
MOVB *VD131, AC0
+I AC0, VW129
+D 1, VD131
2:指令的操作数没有直接的给出,而是给出它所在的地址。
LD M0.0
MOVW VW0, VW4
-I VW2, VW4
这是一条减法指令,译为:将存储器VW0内的数值减去存储器VW2内的数值,将“差”存放在存储器VW4内。
3:指令的操作数没有直接的给出,而是给出它所在的地址的“地址”,在S7-200中,将这种寻址方式称之为“指针寻址”。
MOVW *VD10, VW100
+D 2, VD10
网络2:
LD M0.1
MOVW *VD10, VW100
第一次读指针时,读取的是VW0。
第二次读指针时,读取的是VW2。
③读取下一个双字:
网络1:
LD M0.0
MOVD &VB0, VD10
MOVD *VD10, VD100
+D 4, VD10
网络2:
1:指令的操作数为“立即数”,(如:15、16#F、2#1111等、、、、、、)。
LD M0.0
MOVW +255, VW0
+I +45, VW0
这是一条加法指令,被加数为:255、加数为45执行这条指令后计算出来的“和”存放在VW0这一存储器内。
LD M0.0
MOVB 15, VB0
这是一条传指令,译为:将15传送至存储器VB0内。
③在建立指针时在存储器前加“&”这个符号的表示进行间接访问的区域的首地址,所以除定时器T及计数器C外都必须是以字节的形式出现的。
2:读取指针
在读取指针时,有如下几种不同的情况出现:
①以字节的形式读取指针:
LD M0.0
MOVD &MB0, VD10
MOVB *VD10, VB30
译为:在VD10建立指针,指针指向以MB0为首地址的地址,读取在指针VD10所指向的首地址开始的一个字节(即以MB0开始的一个字节,很明显就是MB0本身),所以,读取指针时将MB0放到VB30。
修改指针的方法大致的可以概括为如下几种:
①使用加法或减法指令,对指针进行指定常数作为偏移量的修改指针。
②使用加“1”或减“1”指令,对指针进行1个单位(字节)的偏移。
下面将以实际情况为例来说明修改批指针的方法:
例1:
网络1:
LD M0.0
MOVD &VB0, VD10
MOVD *VD10, VD40
+D 4, VD10
网络2:
LD M0.1
MOVD *VD10, VD44
译为:在VD10建立指针,指针指向以VB0为首的地址,读取在指针VD10所指向的首地址开始的一个双字(即以VB0开始的一个双字,很明显就是VD0),所以,读取指针时将VD0放到VD40。然后对指针进行修改,对其指定4个单位的偏移量,即指针此时指向的首地址为VB4。
②以字的形式读取指针:
LD M0.0
MOVD &MB0, VD10
MOVW *VD10, MW20
译为:在VD10建立指针,指针指向以MB0为首的地址,读取在指针VD10所指向的首地址开始的一个字(即以MB0开始的一个字,很明显就是MW0),所以,读取指针时将MW0放到MW20。
③以双字的形式读取指针:
在下一网络中又以双字的形式读取指针。所以,此时读取指针是将以VB4为首的一个双字传送至VD44(即VD4传送至VD44)。
例2:
网络1:
LD M0.0
MOVD &VB0, VD10
MOVB *VD10, MB0
INCD VD10
网络2:
LD M0.1
MOVB *VD10, MB1
译为:在VD10建立指针,指针指向以VB0为首的地址,读取在指针VD10所指向的首地址开始的一个字节(即以VB0开始的一个字节,很明显就是VB0),所以,读取指针时将VB0放到MB0。然后对指针进行修改,对其进行一个单位(字节)的偏移,即指针此时指向的首地址为VB1。
下面,我们一起来学习一下关于指针的使用方法:
在使用指针进行间接寻址的过程中,会涉及到的两个符号:
&:建立指针(进行间接访问的区域)
*:读取指针(读取指针间接指定的地址)
下面是使用指针的一般步骤:
1:建立指针
建立指针需要使用双字传送指令,如下所示:
LD M0.0
MOVD &MB0, VD10
译为:在VD10建立指针,指针指向被间接访问的首地址MB0。
LD M0.1
MOVD *VD10, VD100
第一次读指针时,读取的是VD0。
第二次读指针时,读取的是VD4。
综上所述,在以连续方式读取指针时:
⑴读取下一个字节,修改指针时“加1”。
⑵读取下一个字,修改指针时“加2”。
⑶读取下一个双字,修改指针时“加4”。
下面,给出两个应用实例,读者可自行分析其工作原理。
例1:
网络1:
LD I1.0
EU
MOVD &VB0, VD100
S M0.0, 1
网络2:
LD M0.0
FOR VW1000, 1, 10
网络3:
LD Always_On:SM0.0
MOVW VW1000, VW1002
+I VW1000, VW1002
MOVW VW1002, *VD100
+D 2, VD100
MOVD &VB200,AC1
MOVW *AC1,AC0
在下一网络中又以字节的形式读取指针。所以,此时读取指针是将以VB1为首的一个字节传送至MB1(即VB1传送至MB1)。
在程序中,如果希望以连续的形式去间接访问地址(即:读取VB0后希望下一次读取的是VB1、读取VW0后希望下一次读取的是VW2、读取VD0后希望下一次读取的是VD4),修改指针时,需要注意以下问题:
对指令的操作数的指定方式,我将其理解为“寻址”。
下面将以我个人的理解对西门子S7-200的寻址方式进行描述,如有不当之处,还请广大读者指正。
在程序中绝大部分的指令都带有操作数,所谓的操作数,是执行这一指令时被这一指令加以操作、处理的数值。对指令的操作数的指令方式大致的总结一下,可以概括为如下几个类型:
在建立指针时需要注意如下几个问题:
①可以进行间接访问的区域,包括如下几个区域:I、Q、M、S、V、T(当前值)、C(当前值)。在S7-200中位状态是不能进行间接指定的,所以这里特别强调只是访问定时器及计数器的当前值,而不是其位状态。
②可以作为建立指针的区域,包括如下几个区域:V、L、及累加器AC1至AC3。且只能是双字(32bit)类型的地址。