第3章 S7-200软件体系结构
前一章着重介绍了西门子公司SIMATIC S7-200系列PLC的硬件结构。本章将着重介绍的是S7-200的软件体系结构。S7-200的软件体系结构主要是对系统程序和用户程序组提供系统支持。系统程序是由PLC制造厂商设计编写的,并存入PLC的系统存储器中,用户不能直接读写与更改。PLC的用户程序是用户利用PLC的编程语言,根据控制要求编制的程序。在PLC系统的开发过程中,必须对PLC系统的软件体系结构有清楚的认识,包括S7-200的存储器系统,S7-200数据类型,S7-200寻址方式等。
本章要点:
● S7-200的存储器系统
● S7-200数据类型
● S7-200寻址方式
3.1 S7-200的存储系统
S7-200系列PLC的存储器是PLC系统软件开发过程中的编程元件,每个单元都有唯一的地址,为满足不同编程功能的需要,S7-200系统为存储单元做了分区,因而不同的存储区有不同的有效范围,可以完成不同的编程功能。S7-200 PLC的存储器空间大致分为三个空间,即程序空间、数据空间和参数空间。
1. 程序空间
该空间主要用于存放用户应用程序,程序空间容量在不同的CPU中是不同的。另外CPU中的RAM区与内置EEPROM上都有程序存储器,但它们互为映像,且空间大小一样。
2. 数据空间
数据空间是本节的主要介绍内容。数据空间的主要作用是用于存放工作数据,这部分存储器称为数据存储器;另外有一部分数据空间作寄存器使用称为数据对象。无论是数据存储器还是数据对象,在PLC系统的软件开发及硬件应用过程当中都是非常重要的工具, PLC通过对各种数据的读取及逻辑判断才能完成相应的控制功能,所以需要开发人员认真了解此部分内容。数据空间主要包括以下几种存储器。
(1) 数据存储器
数据存储器包括变量存储器(V),数字量输入映像区(I),数字量输出映像区(Q),内部标志位存储器(M,又称内部辅助继电器),特殊标志位存储器(SM)。除特殊标志位外,其他部分都能以位、字节、字和双字的格式自由读取或写入。下面分别介绍各种存储器的特点和使用方法。
● 变量存储器(V)
变量存储器相当于内辅继电器。PLC执行程序过程中,会存在一些控制过程的中间结果,这些中间数据也需要用存储器来保存,而变量存储器就是用来存储和保存程序执行过程中控制逻辑操作的中间结果的存储器。变量存储器就是根据这个实际的要求设计的。变量存储器是S7-200CPU为保存中间变量数据而建立的一个存储区,用V表示。所有的V存储器都可以存储在永久存储器区内,其内容可在PLC的EPROM和编程设备(如计算机)间双向传送。
变量存储器可以按位、字节、字、双字四种方式来存取。(1位指二进制数的1位,1字节=8位,1字=16位,双字=32位。)
按“位”方式:从V0.0~I5119.7,共有40960点。CPU221、CPU222变量存储器只有2048个字节,其变量存储区只能到V2047.7位。
按“字节”方式:从VB0~VB5119,共有5120个字节。
按“字”方式:从VW0~VW5118,共有2560个字。
按“双字”方式:从VD0~VD5116,共有1280个双字。
● 数字量输入映像区(I)
数字量输入映像区也叫做输入映像寄存器,它是S7-200CPU为输入端信号状态开辟的一个存储区,它的标识符为I。它是以字节为单位的寄存器,并且可以按位、字节、字、双字四种方式来存取。例如:
按“位”方式:从I0.0~I15.7,共有128点。
按“字节”方式:从IB0~IB15,共有16个字节。
按“字”方式:从IW0~IW14,共有8个字。
按“双字”方式:从ID0~ID12,共有4个双字。
它的每一位对应于一个数字量输入结点。在每个扫描周期开始,PLC依次对各个输入结点采样,并把采样结果送入输入映像存储器。PLC在执行用户程序过程中,不再理会输入结点的状态,它所处理的数据为输入映像存储器中的值。因而将输入映像寄存器看成是PLC接收外部输入的开关量信号的窗口。
● 数字量输出映像区(Q)
数字量输出映像区也叫做数字量输出寄存器,它是S7-200CPU为输出端信号状态开辟的一个存储区。输出映像寄存器的标识符为Q。PLC在执行用户程序的过程中,并不把输出信号随时送到输出结点,而是送到输出映像存储器,只有到了每个扫描周期的末尾,才将输出映像寄存器的输出信号几乎同时送到各输出结点。
使用输出输入映像区的优点在于:它可以同步地在扫描周期开始时采样所有输入点,并在扫描的执行阶段冻结所有输入值;在程序执行完后再从映像区刷新所有输出点,使被控系统能获得更好稳定性;存取映像区的速度高于存取I/O速度,使程序执行得更快;而且I/O点只能以位为单位存取,但映像区则能以位、字节、字、双字进行存取。
按“位”方式:从Q0.0~I15.7,共有128点。
按“字节”方式:从QB0~QB15,共有16个字节。
按“字”方式:从QW0~QW14,共有8个字。
按“双字”方式:从QD0~QD12,共有4个双字。
因此,映像区提供了更高的灵活性。另外针对控制系统中个别I/O点要求实时性较高情况,可用直接I/O指令直接存取输入/输出点,从而绕过映像区,得到更高的实时控制速度。在实际工程开发过程中,实际没有使用的输入端和输出端的映像区的存储单元可以作中间继电器使用。
● 内部标志位存储器(M)
内部标志位存储器(M)又称内部线圈(内部继电器等)。由于PLC在执行程序过程中,可能会用到一些标志位,这些标志位需要用存储器来寄存。内部标志位存储器就是根据这个要求设计的。内部标志位存储器是S7-200CPU为保存标志位数据而建立的一个存储区,用M表示。该区虽然叫位存储器,但是其中的数据不仅可以是位,还可以是字节、字或双字。根据PLC所要表达运行状态的不同,需要使用不同数据类型的内部标志位。按照不同的数据类型,其内部标志位地址也不同。
按“位”方式:从M0.0~M31.7,共有256点。
按“字节”方式:从MB0~MB31,共有32个字节。
按“字”方式:从MW0~MW30,共有16个字。
按“双字”方式:从MD0~MD28,共有8个双字。
● 特殊标志位存储器(SM)
特殊标志位存储器是S7-200 PLC为保存自身工作状态数据而建立的一个存储区,用SM表示。特殊标志位存储器是S7-200 PLC为CPU和用户程序之间传递信息的媒介。它们可以反映CPU在运行中的各种状态信息,用户可以根据这些信息来判断机器的工作状态,从而确定用户程序该做什么,不该做什么。这些特殊信息也需要用存储器来寄存。特殊标志位存储器就是根据这个要求设计的。例如SM0.0一直为“1”状态,SM0.1仅在执行用户程序的第一个扫描周期为“1”状态。SM0.4和SM0.5分别提供周期为1 min和1 s的时钟脉冲。SM1.0、 SM1.1和SM1.2分别是零标志、溢出标志和负数标志。
特殊标志位存储器区的数据有些是可读可写的,有一些是只读的。特殊标志位存储器区的数据可以是位,也可是字节、字或双字。
按“位”方式:从SM0.0~SM179.7,共有1440点。
按“字节”方式:从SM0~SM179,共有180个字节。
按“字”方式:从SMW0~SMW178,共有90个字。
按“双字”方式:从SMD0~SMD176,共有45个双字。
(2) 数据对象
数据对象包括定时器、计数器、高速计数器、累加器、模拟量输入/输出映像区。这些对象是完成复杂逻辑控制的主要元件。
● 定时器(T)
PLC在工作中少不了需要计时,定时器就是实现PLC具有计时功能的计时设备,即定时器(T),它类似于继电器电路中的时间继电器,但它的精度更高,定时精度分为l ms, 10 ms和100 ms三种,根据精度需要由编程者选用。定时器的数量根据CPU型号不同。定时器的编号为:T0、T1、…、T255等。
● 计数器(C)
PLC在工作中有时不仅需要计时,还可能需要计数功能。计数器(C)就是PLC具有计数功能的计数设备。计数器的编号为:C0、C1、…、C255等。计数器的计数脉冲由外部输入,计数脉冲的有效沿是输入脉冲的上升沿或下降沿,计数的方式有累加1和累减1两种方式。计数器的个数同各CPU的定时器个数。
● 高速计数器(HC)
高速计数器用来累计比CPU扫描速率更快的事件。高速计数器与一般计数器不同之处在于,计数脉冲频率更高可达30 kHz,计数容量大,一般计数器为16位,而高速计数器为32位,与之相对应的S7-200各个高速计数器有32位带符号整数计数器的当前值。此外,一般计数器可读可写,而高速计数器一般只能作读操作。若要存取高速计数器的值,则必须给出高速计数器的地址,即高速计数器的编号。高速计数器的编号为:HSC0、HSC1、…、HSC5。S7-200有6个高速计数器。其中CPU221和CPU222仅有4个高速计数器(HSC0、HSC3、HSC4、HSC5)。
● 累加器(AC)
PLC的运算功能是离不开累加器的,累加器是可以像存储器那样进行读/写的软件存储设备。例如,可以用累加器向子程序传递参数,或从子程序返回参数,以及用来存储计算的中间数据。在S7-200CPU中有4个32位累加器,即AC0~AC3,用它可把参数传给子程序或任何带参数的指令和指令块。此外,PLC在响应外部或内部的中断请求而调用中断服务程序时,累加器中的数据是不会丢失的,即PLC会将其中的内容压入堆栈。因此,用户在中断服务程序中仍可使用这些累加器,待中断程序执行完返回时,将自动从堆栈中弹出原先的内容,以恢复中断前累加器的内容。但应注意,不能利用累加器作主程序和中断服务子程序之间的参数传递。S7-200的累加器可以按字节、字或双字来存取累加器数据中的数据。但是,以字节形式读/写累加器中的数据时,只能读/写累加器32位数据中的最低8位数据。如果是以字的形式读/写累加器中的数据,只能读/写累加器32位数据中的低16位数据。只有采取双字的形式读/写累加器中的数据时,才能一次读写全部32位数据。
● 模拟量输入/输出(AI/AQ)
模拟量输入/输出可实现模拟量和数字量之间的A/D和D/A转换,而PLC所处理的是其中的数字量。模拟量输入映像区是S7-200CPU为模拟量输入端信号开辟的一个存储区。S7-200将测得的模拟量(如温度、压力)转换成1个字长(2个字节)的数字量,模拟量输入映像寄存器用标识符(AI)、数据长度(W)及字节的起始地址表示。从AIW0~AIW30,共有16个字,总共允许有16路模拟量输入,并且模拟量输入值为只读数据。模拟量输出映像区是S7-200CPU为模拟量输出端信号开辟的一个存储区。S7-200将1个字长(2个字节,16位)的数字量按比例转换为电流或电压。模拟量输出映像寄存器用标识符(AQ)、数据长度(W)及字节的起始地址表示。从AQW0~AQW30,共有16个字,总共允许有16路模拟量输出。
(3) 其他存储区
● 顺序控制继电器区(S)
PLC执行程序过程中,可能会用到顺序控制。顺序控制继电器就是根据顺序控制的特点和要求设计的。顺序控制继电器区是S7-200CPU为顺序控制继电器的数据而建立的一个存储区,用S表示。在顺序控制过程中,用于组织步进过程的控制。
同样的,顺序控制继电器区根据不同的数据类型,也可以按位、字节、字、双字四种方式来存取,具体说明如下。
按“位”方式:从S0.0~S31.7,共有256点。
按“字节”方式:从SB0~SB31,共有32个字节。
按“字”方式:从SW0~SW30,共有16个字。
按“双字”方式:从SD0~SD28,共有8个双字。
● 局部存储器区(L)(相当于内辅继电器)
S7-200PLC有64个字节的局部存储器,其中60个可以用作暂时存储器或者给子程序传递参数。
局部存储器和变量存储器很相似,主要区别是变量存储器是全局有效的,而局部存储器是局部有效的。全局是指同一个存储器可以被任何程序存取(例如,主程序、子程序或中断程序)。局部是指存储器区和特定的程序相关联,几种程序之间不能互访。
局部存储器区是S7-200CPU为局部变量数据建立的一个存储区,用L表示。该区域的数据可以用位、字节、字、双字四种方式来存取。
按“位”方式:从L0.0~L63.7,共有512点。
按“字节”方式:从LB0~LB63,共有64个字节。
按“字”方式:从LW0~LW62,共有32个字。
按“双字”方式:从LD0~LD60,共有16个双字。
3. 参数空间
用于存放有关PLC组态参数的区域,如保护口令、PLC站地址、停电记忆保持区、软件滤波、强制操作的设定信息等。存储器为EEPROM。
3.2 S7-200数据类型
数据是程序处理和控制的对象。在程序运行过程中,数据是通过变量来存储和传递的。任何变量都需要两个要素:名称和类型。其中数据的类型决定了数据的属性,如数据长度,取值范围等。
S7-200主要使用的是基本数据类型,是S7-200系统内部在进行数值计算、分析判断时使用的数据类型。这些数据类型是最简单的,也是最常用的数据类型。
1. 位(bit)
常称为BOOL(布尔型),只有两个值:0或1。如:I0.0,Q0.1,M0.0,V0.1,其中“M”、“V”都是S7-300系列PLC的变量名称。
2. 字节(Byte)
一个字节(Byte)等于8位(Bit),其中0位为最低位,7位为最高位。如:IB0(包括I0.0~I0.7位),QB0(包括Q0.0~Q0.7位),MB0,VB0等。其中第一个字母表示数据的类型如:“I”、“Q”、“M”等,具体字母的含义可参见本章的3.1节;而第二个字母“B”则表示“字节”。
3. 字(Word)
相邻的两字节(Byte)组成一个字(Word),来表示一个无符号数,因此,字为16位。如:IW0是由IB0和IB1组成的,其中I是区域标识符,W表示字,0是字的起始字节。需要注意的是,字的起始字节(如上例中的“0”)都必须是偶数。字的范围为十六进制数的0000~FFFF(即十进制数的0~65536)。在编程时要注意,如果已经用了IW0,如再用IB0或IB1要特别加以小心,可能会造成数据区的冲突使用,产生不可预料的错误。
4. 双字(Double Word)
相邻的两个字(Word)组成一个双字,来表示一个无符号数。因此,双字为32位。如:MD100是由MW100和MW102组成的,其中M是区域标识符,D表示双字,100是双字的起始字节。需要注意的是,双字的起始字节(如上例中的“100”)和字一样,必须是偶数。双字的范围为十六进制数的0000~FFFFFFFF(即十进制数的0~4294967295)。在编程时要注意,如果已经用了MD100,如再用MW100或MW102要特注意。
以上介绍的数据类型是均为为无符号数,即只有正数,没有负数。下面介绍的数据类型将有符号,即将有正负之分。
5. 16位整数(INT,Integer)
16位的整数为有符号数,最高位为符号位,如果符号位为1表示负数,符号位为0表示正数。范围为-32768~32767。
6. 32位整数(DINT,Double Integer)
32位整数和16位整数一样,为有符号数,最高位为符号位,1表示负数,0表示正数。只是范围为-2147483648~2147483647。
7. 浮点数(R,Real)
浮点数又称实数(real),浮点数为32位,可以用来表示小数。浮点数可以为:1.m×2e,其存储结构如图3-1所示。
图3-1 浮点数结构
例如123.4可表示为:
123.4=1.234×102
根据ANSI/IEEE标准,浮点数可以表示为1.m×2e的形式。其中指数e,为8位正整数(1≤e≤254)。在ANSI/IEEE标准中浮点数占用一个双字(32位)。因为规定尾数的整数部分总是为1,只保留尾数的小数部分m(0~22位)。浮点数的表示范围为±1.175495×10-38 ~±3.402823×1038 。
8. 常数的表示方法
常数的数据类型可以是字节、字或双字,这是根据所要表达的常数内容确定的。在CPU当中,常数既可以二进制数方式进行存储,也可以用十进制数、十六进制数、ASCII码或浮点数形式来表示和存储,其表示方法如表3-1所示。
表3-1 常数的表示方法
在S7-200的指令集中,指令的操作数是具有一定数据长度的。如整数乘法指令的操作数是字型整数;数据传输指令的操作数可以是字节也可以是双字型数据。由于S7-200的指令并不支持对所使用的指令的操作数进行长度的检查,所以在使用数据的过程当中需要注意数据的长度,以免发生编程错误。
3.3 S7-200寻址方式
所谓寻址方式就是PLC系统指令在执行时获取操作数的方式。操作数的获取方式可以是直接或者间接的,所以寻址的方式也会根据操作方式的不同而不同。由于S7-200提供了存储器的特定区域,所以S7-200可以将信息存于不同的存储器单元,每个单元都对应唯一的地址,这种信息数据的存放方式使得程序在读取控制数据时更快、更有效。也就是说在指令的执行过程中,如果明确指出要存取的存储器的名称或者是地址,就能够直接存取这个信息。根据这个要求,S7-200CPU存储器的寻址方式被设计成直接寻址和间接寻址两种不同的方式。所谓直接寻址方式,即按给定地址所找到的存储单元中的内容就是操作数;而间接寻址方式,是在存储单元中放置一个地址指针,按照这一地址找到的存储单元中的数据才是所要取的操作数,相当于间接地取得程序指令所要得到的数据。下面具体介绍不同的寻址方式及其表达方式。
1. CPU存储区域的直接寻址
S7-200的存储功能将不同的PLC工作信息存储在不同的存储器单元中,每一个单元都有唯一的地址与之相对应。只要得到相应的存储区或者是存储单元的地址就可以使用户程序直接访问这个地址单元内的信息数据,进而进行相应的计算与判断操作。
此种寻址方式适用于多种寄存器和存储区的寻址,如输入输出映像寄存器(I、Q)、变量存储器(V)、标志位存储区(M)、 顺序控制继电器存储区(S)、特殊标志位存储区(SM)等。对于以上的存储区或者是寄存器,如果需要对其进行寻址,必须指定其地址,这个地址包括存储器标识符、字节地址及位号。下面以一个位寻址的实例说明如何使用直接寻址方法进行寻址。寻址示例如图3-2所示。
图3-2 寻址示例
在图3-2中,MSB表示最高位,LSB表示最低位。以“I4.5”为例,字母“I”表示寄存器的类型或者是名称,这个名称寄存器的类型为“数字量输入映像寄存器”;“4”表示是它的字节地址为4;“5”表示在相应的字节地址中,具体的位数为5。这样就可以唯一地确定一个数字输入量的地址了。
根据图3.2的示例我们可以得出数据地址的一般格式:数据地址一般由二部分组成,其基本格式可以归纳为:Aal.a2。其中:“A”表示存储器标识符(如I,Q,M,SM,V等), al为字节首址,a2为位地址(0~7)。例如I10.1表示该数据在I存储区10号地址的第1位。
在使用以字节、字或双字类型的数据时,除非所用指令已隐含有规定的类型,一般都应使用数据类型符来指明所取数据的类型。数据类型符共有三个,即B(字节),W(字)和D(双字),它的位置应紧跟在数据区域地址符后面。例如对变量存储器有VBl00、VW100、VDl00。同一个地址,在使用不同的数据类型后,所取出数据占用的内存量是不同的。下面将根据S7-200不同类型的存储器来说明其直接寻址的使用方法。
(1) 输入映像寄存器(I)寻址
在每个扫描周期的开始,CPU对输入点进行采样,并将采样值存于输入映像区中。此种寻址方式可以按位、字节、字或者双字来存取输入映像区。
寻址格式如下。
按位寻址:I[字节地址].[位地址]如:I0.1
按字节、字、双字寻址: I[长度].[起始字节地址]如: IB3、IW4、ID5
(2) 输出映像寄存器(Q)寻址
在每次扫描周期的结尾,CPU将输出映像寄存器的数值复制到物理输出点上。此种寻址方式可以按位、字节、字或者双字来存取输出映像寄存器。
寻址格式如下。
按位寻址:Q[字节地址].[位地址]如: Q0.1
按字节、字、双字寻址: Q[长度].[起始字节地址]如:QB3、QW4、QD5
(3) 变量存储器(V)区寻址
用于存储程序执行过程中控制逻辑操作的中间结果,也可以使用V存储器来保存与工序或任务相关的其他数据。此种寻址方式可以按位、字节、字或双字来存取V存储器。
寻址格式如下。
按位寻址:V[字节地址].[位地址]如:V0.1
按字节、字、双字寻址: V[长度].[起始字节地址]如:VB3、VW4、VD5
(4) 位存储器(M)寻址
可以使用内部存储器标志位(M)作为控制寄存器存取中间操作状态或其他控制信息。此种存储器尽管被命名为“位存储器区”,表示按位存储,实际上不仅可以按位,也可以按字节、字或双字来存取位存储存区。
寻址格式如下。
按位寻址:M[字节地址].[位地址]如:M2.5
按字节、字、双字寻址: M[长度].[起始字节地址]如:MB3、MW4、MD12
(5) 顺序控制继电器存储器区(S)寻址
顺序控制继电器位(S)用于组织机器操作或进入等效程序段的步控制。顺序控制继电器(SCR)提供控制程序的逻辑分段。此种寻址方式可以按位、字节、字或双字来存取S存储器。
寻址格式如下。
按位寻址:S[字节地址].[位地址]如:S2.5
按字节、字、双字寻址: S[长度].[起始字节地址]如:SB3、SW4、SD12
(6) 特殊存储器(SM)标志位
SM位提供了CPU和用户程序之间传递信息的方法。可以使用这些位选择和控制S7-200CPU的一些特殊功能,例如:
● 第—次扫描的ON位。
● 以固定速度触发位。
● 数学运算或操作指令状态位。
尽管SM区基于位存取,但也可以按位、字节、字或双字来存取。
寻址格式如下。
按位寻址:SM[字节地址].[位地址]如:S2.5
按字节、字、双字寻址: SM[长度].[起始字节地址]如:SMB3、SMW4、SMD12
(7) 局部存储器区(L)寻址
S7-200 PLC有64个字节的局部存储器,其中60个可以用作暂时存储器或者给子程序传递参数。如果用梯形图或功能块图编程,其编程软件STEP7-Micro/Win32保留这些局部存储器的最后4个字节。如果用指令表编程,可以寻址所有的64个字节,但是用户是不允许使用局部存储器的最后4个字节。局部存储器和变量存储器很相似,主要区别在于其有效的范围是不同的,变量存储器是全局有效的,而局部存储器是局部有效的。全局是指同一个存储器可以被任何程序所存取(例如,主程序、子程序或中断程序);局部是指存储器区和特定的程序相关联。S7-200 PLC给主程序分配64个字节的局部存储器,给每一级子序嵌套分配64个字节的局部存储器;给中断程序也分配64个字节的局部存储器。子程序或中断程序不能访问分配给主程序的局部存储器;子程序只能访问分配给主程序、中断程序或其他子程序的局部存储器;同样地,中断程序也不能访问分配给主程序或主程序的局部存储器。
S7-200 PLC根据需要分配局部存储器。即当执行主程序时,分配给用户程序或中断程序的局部存储器是不存在的。当出现中断或调用一个子程序时,需要分配局部存储器。新的局部存储器可以重新使用分配给不同子程序或中断程序的相同局部存储器。局部存储器在分配时,PLC并不对其进行初始化,所以相应存储器中的初始值可能是任意的。当子程序在被调用的过程中进行参数传递时,在被调用子程序的局部存储器中,由CPU代替被传递的参数的值。局部存储器在参数传递过程中并不接受值的传入,在分配时不被初始化,也没有任何值。
局部存储器可以按位、字节、字或者双字访问局部存储器。可以把局部存储器作为间接寻址的指针,但不能作为间接寻址的存储器区。
寻址格式如下。
按位寻址:L[字节地址].[位地址]如: L2.5
按字节、字、双字寻址: L[长度].[起始字节地址]如:LB3、LW4、LD12
(8) 定时器存储器区(T)寻址
在S7-200CPU中,定时器是累计时间增量的设备。S7-200定时器的精度(时基增量)有1 ms、10 ms、100 ms三种。与定时器相关的变量有以下两个。
当前值:它是16位符号整数,存取定时器所累计的时间。
定时器值:定时器的当前值如果大于预设值时,该位置为“l”(预设值作为定时器指令的一部分输入)。在对定时器进行寻址时,可以使用定时器地址(T+定时器号)来存取这些变量。对定时器位或当前值的存取依赖于所用的指令,使用不同的指令可以读取定时器不同的数据值。
示例如图3-3所示,这个例子说明了如何使用不同的指令读取相同的定时器值,但是读取的数值的格式却是不相同的。在图3-3(a)“存取当前值”中,寄存器“T3”中存放的是由16位有符号整数所存储的累计的当前时间量,这个指令的作用是将“T3”中所存放的当前计时值输出到变量“VW200”中去;如果I2.1为1的话,就将执行这个指令,在完成数据传输后,变量“VW200”中也将存放一个16位的有符号整数,这个整数就是计时器T3的当前计时值。而在图3-3(b)“存取计时器位”的使用中,将“T3”这一位作为一个I/O信号点来使用,如果定时器的当前值大于设定值,T3将变成1,否则T3将维持0的状态。
图3-3 计时器值的寻址及使用
使用格式为:T[定时器号],如:T23
(9) 计数器(C)存储器寻址
S7-200提供三种类型的计数器,可以在计数器输入上计算每个从低到高转换事件:一种类型只往上计算,一种类型只往下计算,还有一种类型既往上计算又往下计算。与定时器类似的,与计数器相关的变量有以下两个。
● 当前值:该16位有符号整数存储当前的累加数。
● 计数器位:设置或清除该位作为当前和预设值比较的结果,即如果当前值大于或者等于预置值时,输出为1,否则为0。
使用格式如下。
C[计数器号],如:C24
通过使用计数器地址(C+计数器号码)可以对计数器进行寻址。与定时器的使用方法类似,具体是使用计数器的计数器位还是使用读数器内存放的当前值,主要取决于使用什么样的指令来对计数变量进行操作。
位操作数指令存取计数器位,字操作数指令存取当前值。如图3-4所示,使用不同的指令可以读取计数器当前值,或者是计数器位。
图3-4 计数器值的寻址及使用
计数器的应用与计时器是非常类似的,如果I2.1为1,则将C3中的当前计数值存放到变量VW200中,同样的,VW200中的数据将是一个格式为16的有符号整数,如图3-4 (a)所示。如果把C3当作一个I/O信号点来使用的话,它的值只有0和1。如果已经达到了计数值,那么C3将为1,否则为0,如图3-4(b)所示。
(10) 模拟量输入(AI)寻址
S7-200将模拟量值(如温度或电压)转换成1个字长(16位)的数字量。可以用区域标识符(AI)、数据长度(W)及字节的起始地址来存取这些值。因为模拟输入量为1个字长,且从偶数位字节(如0,2,4)开始,所以必须用偶数字节地址(如AIW0,AIW2, AIW4)来存取这些值。模拟量输入值为只读数据。
使用格式如下。
AIW[起始字节地址],如:AIW4
(11) 模拟量输出(AQ) 寻址
S7-200把1个字长(16位)数字值按比例转换为电流或电压。可以用区域标识符(AQ)、数据长度(W)及字节的起始地址来改变这些值。因为模拟量为一个字长,且从偶数字节(如0,2,4)开始,所以必须用偶数字节地址(如AQW0,AQW2,AQW4)来改变这些值。模拟量输出值是只写数据。
使用格式如下。
AQW[起始字节地址],如:AQW4
(12) 高速计数器(HC)寻址
高速计数器对高速事件计数,它独立于CPU的扫描周期。高速计数器有一个32位的有符号整数计数值(或当前值)。若要存取高速计数器中的值,则应给出高速计数器的地址,即存储器类型(HC)加上计数器号(如HC0)。高速计数器的当前值是只读数据,仅可以作为双字(32位)来寻址。
使用格式如下。
HC[高速计数器号],如:HC1
(13) 累加器(AC)寻址
累加器是可以像存储器一样使用的读写设备。例如,可以用它来向子程序传递参数,也可以从子程序返回参数,以及用来存储计算的中间结果。S7-200提供4个32位累加器(AC0,AC1,AC2和AC3)。并且可以按字节、字或双字的形式来存取累加器中的数值。
使用格式如下。
AC[累加器号],如:AC0
被访问的数据长度取决于存取累加器时所使用的指令。如图3-5所示,当以字节或者字的形式存取累加器时,使用的是数值的低8位或低16位。当以双字的形式存取累加器时,使用全部32位,如图3-5所示。在图中的示例当中,可以看出,累加器AC2的最高位是32位,但是并不是所有的位都会被使用到。在第一行指令当中,由于目的储存器是VB200,其长度为一个字节,即长度为8位。所以被AC2中占用的部分为白色部分,从最低位(LSB)到最高位(MSB),一共是8位,为一个字节。同理,在第二行和第三行指令当中,由于数据的传输分别使用的是自减指令“DEC_W”和自加指令“INV_DW”,它们所对应的操作数的长度分别为单字和双字,即长度分别为16位和32位,也就是图中相应白色指示的部分。 AC2在自减后或者是自加后所得到的结果将分别存放到VB200(长度为16位)和VD200(长度为32位)中。
图3-5 累加器寻址应用
2. 间接寻址
间接寻址是指用指针来访问存储区数据的寻址方式。指针以双字的形式存储其他存储区的地址。只能用V存储器、L存储器或者累加器寄存器(AC1、AC2、AC3)作为指针。要建立一个指针,必须以双字的形式,将需要间接寻址的存储器地址移动到指针中。指针也可以作为参数传递到子程序中。
S7-200允许指针访问以下存储区:I、Q、V、M、S、AI、AQ、SMT(仅限于当前值)和C(仅限于当前值)。需要注意的是,用户无法用间接寻址的方式访问单独的位,也不能访问HC或者L存储区。
要使用间接寻址,应该用“&”符号加上要访问的存储区地址来建立一个指针,这与C语言中指针的使用是非常类似的。所以指令的输入操作数应该以“&”符号开头来表明是存储区的地址,而不是其内容将移动到指令的输出操作数(指针)中。
使用格式如下。
例如:MOVD &VB200,VD302
MOVD &MB10,AC2
MOVD &C2,LD14
需要注意的是,建立指针用MOVD指令。
当指令中的操作数是指针时,应该在操作数前面加上“*”号,格式如下:
MOVD &VB200,AC0
MOVW *AC0,AC1
又如图3-6所示,输入*AC1指定AC1是一个指针,MOVW指令决定了指针指向的是一个字长的数据。在本例中,存储在VB200和VB201中的数值被移动到累加器AC0中。
图3-6 间接寻址应用1
MOVW指令决定了指针指向的是一个字长的数据。如图3-7所示,存储在VB200和VB201中的数值被移动到累加器AC0中。
图3-7 间接寻址应用2
3.4 课后习题
1. 填空题
(1) S7-200 PLC的存储器空间大致分为三个空间: 、 和 。(2) 数据存储器包括________,________,________ ,________和________。
(3) PLC执行程序过程中变量存储器相当于________。
(4) 数字量输入映像区也叫做________。
(5) PLC在工作中少不了需要计时,________就是实现PLC具有计时功能的计时设备
2. 选择题
(1) 特殊标志位存储器(SM)按“位”方式寻址的最大空间是________。
A. 256
B. 128
C. 32767
D. 1440
(2) 下列数据类型占据存储空间最大的数据类型是________。
A. 位
B. 字
C. 双字
D. 字节
(3)使用ANSI/IEEE754-1985标准表达浮点数23445,其中正确的表达方式是________。
A. 23445=2.3445×104
B. 23445=23.445×104
C. 23445=2.3445×103
D. 234.45=2.3445×102
3. 简答题
(1) S7-200系列PLC有哪些编址方式?
(2) S7-200的基本数据类型有哪些?
(3) S7-200有哪几种寻址方式?直接寻址与间接寻址有何区别?
(4) S7-200 PLC有哪些内部元器件?各元件地址分配和操作数范围怎么确定?
(5) 试说明以下指令的含义:
MOVD &VB0,VD300
+D VD200 VD300
+D VD200,VD300
MOVW *VD300,VW210