2.3 S7-200系列PLC内部元器件及寻址方法

2.3.1 S7-200执行程序的过程

1.S7-200将程序和物理输入输出点联系起来

S7-200的基本操作非常简单,分为三个过程:

(1)CPU读输入状态。

(2)CPU中存储的程序利用输入执行控制逻辑。当程序运行时,CPU刷新有关数据。

(3)CPU将计算后的数据写到输出。

图2-5给出了一个简图,说明一个继电器如何与S7-200联系起来。在本例中,电动机启动开关的状态和其他输入点的状态结合在一起。它们计算的结果,最终决定了控制执行机构启动电动机的输出点状态。

图2-5 输入和输出的控制

图2-6 S7-200执行周期

2.S7-200在扫描循环中完成任务

S7-200周而复始地执行一系列任务。任务循环执行一次称为一个扫描周期。如图2-6所示,在一个扫描周期中,S7-200将执行部分或全部下列操作:

(1)读输入:S7-200将物理输入点上的状态复制到输入过程映像寄存器中。

(2)执行逻辑控制程序:S7-200执行程序指令并将数据存储在各种存储区中。

(3)处理通信请求:S7-200执行通信任务。

(4)执行CPU自诊断:S7-200检查固件、程序存储器和扩展模块是否工作正常。

(5)写输出:在输出过程映像寄存器中存储的数据被复制到物理输出点。

用户程序的执行取决于S7-200是处于停止模式还是运行模式。当S7-200处于运行模式时,CPU执行程序;当S7-200处于停止模式时,CPU不执行程序。

2.3.2 数据存储类型

1.数据的长度

在计算机中使用的都是二进制数,其最基本的存储单位是位(bit),8位二进制数组成1个字节(Byte),其中的第0位为最低位(LSB),第7位为最高位(MSB)。两个字节(16位)组成1个字(Word),两个字(32位)组成1个双字(Double word)。把位、字节、字和双字占用的连续位数称为长度。

二进制数的“位”只有0和1两种取值,开关量(或数字量)也只有两种不同的状态,如触点的断开和接通,线圈的失电和得电等。在S7-200梯形图中,可用“位”描述它们,如果该位为1则表示对应的线圈为得电状态,触点为转换状态(常开触点闭合、常闭触点断开);如果该位为0,则表示对应线圈、触点的状态与前者相反。

2.数据类型及数据范围

S7-200系列PLC的数据类型可以是字符串、布尔型(只有0或1两个值)、整数型和实数型(浮点数)。不同长度的数据表示的十进制和十六进制数范围如表2-7所示。

表2-7 不同长度的数据表示的十进制和十六进制数范围

3.常数

S7-200的许多指令中常会使用常数。常数的数据长度可以是字节、字和双字。CPU以二进制的形式存储常数,书写常数可以用二进制、十进制、十六进制、ASCII码或实数等多种形式。书写格式如下:

十进制常数:1234;十六进制常数:3AC6;二进制常数:1010 0001 1110 0000;ASCII码:“Show”;实数(浮点数):+1.175495E-38(正数),-1.175495E-38(负数)。

2.3.3 编址方式

可编程控制器的编址就是对PLC内部的元件进行编码,以便程序执行时可以唯一地识别每个元件。PLC内部在数据存储区为每一种元件分配一个存储区域,并用字母作为区域标志符,同时表示元件的类型。如:数字量输入写入输入映像寄存器(区标志符为I),数字量输出写入输出映像寄存器(区标志符为Q),模拟量输入写入模拟量输入映像寄存器(区标志符为AI),模拟量输出写入模拟量输出映像寄存器(区标志符为AQ)。除了输入输出外,PLC还有其他元件:V表示变量存储器;M表示内部标志位存储器;SM表示特殊标志位存储器;L表示局部存储器;T表示定时器;C表示计数器;HC表示高速计数器;S表示顺序控制存储器;AC表示累加器。

若要存取存储区的某一位,则必须指定地址,包括存储器标识符、字节地址和位号。图2-7是一个位寻址的例子(也称为“字节.位”寻址)。在这个例子中,存储器区、字节地址(I代表输入,3代表字节3)和位地址(第4位)之间用点号(“.”)相隔开。若要存取存储区的某一位,则必须指定地址,包括存储器标识符、字节地址和位号。

图2-7 字节.位寻址举例

若要存取CPU中的一个字节、字或双字数据,则必须以类似位寻址的方式给出地址,包括存储器标识符、数据大小以及该字节、字或双字的起始字节地址。存储器的单位可以是位(bit)、字节(Byte)、字(Word)、双字(Double Word),那么编址方式也可以分为位、字节、字、双字编址。

掌握各元件的功能和使用方法是编程的基础。下面将介绍元件的编址方式:

1.位编址

位编址的指定方式为:(区域标志符)字节号.位号,如I0.0;Q0.0;I1.2。

2.字节编址

字节编址的指定方式为:(区域标志符)B(字节号),如IB0表示由I0.0~I0.7这8位组成的字节。如图2-8所示。

3.字编址

字编址的指定方式为:(区域标志符)W(起始字节号),且最高有效字节为起始字节。例如VW0表示由VB0和VB1这2字节组成的字。如图2-8所示。

图2-8 字节、字和双字寻址举例

4.双字编址

双字编址的指定方式为:(区域标志符)D(起始字节号),且最高有效字节为起始字节。例如VD0表示由VB0到VB3这4字节组成的双字。如图2-8所示。

2.3.4 寻址方式

1.直接寻址

直接寻址是在指令中直接使用存储器或寄存器的元件名称(区域标志)和地址编号,直接到指定的区域读取或写入数据。有按位、字节、字、双字的寻址方式,如图2-7和图2-8所示。

2.间接寻址

间接寻址时操作数并不提供直接数据位置,而是通过使用地址指针来存取存储器中的数据。在S7-200中允许使用指针对I、Q、M、V、S、T、C(仅当前值)存储区进行间接寻址。

(1)使用间接寻址前,要先创建一指向该位置的指针。指针为双字(32位),存放的是另一存储器的地址,只能用V、L或累加器AC作指针。生成指针时,要使用双字传送指令(MOVD),将数据所在单元的内存地址送入指针,双字传送指令的输入操作数开始处加&符号,表示某存储器的地址,而不是存储器内部的值。指令输出操作数是指针地址。例如:MOVD & VB200,AC1指令就是将VB200的地址送入累加器AC1中。

(2)指针建立好后,利用指针存取数据。在使用地址指针存取数据的指令中,操作数前加“*”号表示该操作数为地址指针。例如:MOVW *AC1 AC0//MOVW表示字传送指令,指令将AC1中的内容为起始地址的一个字长的数据(即VB200、VB201内部数据)送入AC0内。如图2-9所示。

图2-9 间接寻址

2.3.5 编程元件功能及地址分配

1.输入映像寄存器(输入继电器)I

(1)输入映像寄存器的工作原理

输入继电器是PLC用来接收用户设备输入信号的接口。PLC中的“继电器”与继电器控制系统中的继电器有本质性的差别,是“软继电器”,它实质是存储单元。每一个“输入继电器”线圈都与相应的PLC输入端相连(如“输入继电器”1I0.0的线圈与PLC的输入端子0.0相连),当外部开关信号闭合,则“输入继电器的线圈”得电,在程序中其常开触点闭合,常闭触点断开。由于存储单元可以无限次地读取,所以有无数对常开、常闭触点供编程时使用。编程时应注意,“输入继电器”的线圈只能有外部信号来驱动,不能在程序内部用指令来驱动,因此,在用户编制的梯形图中只应出现“输入继电器”的触点,而不应出现“输入继电器”的线圈。

(2)输入映像寄存器的地址分配

S7-200输入映像寄存器区域有IB0~IB15共16个字节的存储单元。系统对输入映像寄存器是以字节(8位)为单位进行地址分配的。输入映像寄存器可以按位进行操作,每一位对应一个数字量的输入点。如CPU224的基本单元输入为14点,需占用2×8=16位,即占用IB0和IB1两个字节。而I1.6、I1.7因没有实际输入而未使用,用户程序中不可使用。但如果整个字节未使用如,则可作为内部标志位(M)使用。

输入继电器可采用位、字节、字或双字来存取。输入继电器位存取的地址编号范围为I0.0~I15.7。

2.输出映像寄存器(输出继电器)Q

(1)输出映像寄存器的工作原理

“输出继电器”是用来将输出信号传送到负载的接口,每一个“输出继电器”线圈都与相应的PLC输出相连,并有无数对常开和常闭触点供编程时使用。除此之外,还有一对常开触点与相应PLC输出端相连(如输出继电器Q0.0有一对常开触点与PLC输出端子0.0相连),用于驱动负载。输出继电器线圈的通断状态只能在程序内部用指令驱动。

(2)输出映像寄存器的地址分配

S7-200输出映像寄存器区域有QB0~QB15共16个字节的存储单元。系统对输出映像寄存器也是以字节(8位)为单位进行地址分配的。输出映像寄存器可以按位进行操作,每一位对应一个数字量的输出点。如CPU224的基本单元输出为10点,需占用2×8=16位,即占用QB0和QB1两个字节。但未使用的位和字节均可在用户程序中作为内部标志位使用。

输出继电器可采用位、字节、字或双字来存取。输出继电器位存取的地址编号范围为Q0.0~Q15.7。

以上介绍的两种软继电器都是和用户有联系的,因而是PLC与外部联系的窗口。下面所介绍的则是与外部设备没有联系的内部软继电器。它们既不能用来接收用户信号,也不能用来驱动外部负载,只能用于编制程序,即线圈和接点都只能出现在梯形图中。

3.变量存储器V

变量存储器主要用于存储变量。可以存放数据运算的中间运算结果或设置参数。在进行数据处理时,变量存储器会被经常使用。变量存储器可以是位寻址,也可按字节、字、双字为单位寻址,其位存取的编号范围根据CPU的型号有所不同,CPU221/222为V0.0~V2047.7共2KB存储容量,CPU224/226为V0.0~V5119.7共5KB存储容量。

4.内部标志位存储器(中间继电器)M

内部标志位存储器,用来保存控制继电器的中间操作状态,其作用相当于继电器控制中的中间继电器。内部标志位存储器在PLC中没有输入/输出端与之对应,其线圈的通断状态只能在程序内部用指令驱动,其触点不能直接驱动外部负载,只能在程序内部驱动输出继电器的线圈,再用输出继电器的触点去驱动外部负载。

内部标志位存储器可采用位、字节、字或双字来存取。内部标志位存储器位存取的地址编号范围为M0.0~M31.7共32个字节。

5.特殊标志位存储器SM

PLC中还有若干特殊标志位存储器,特殊标志位存储器位提供大量的状态和控制功能,用来在CPU和用户程序之间交换信息。特殊标志位存储器能以位、字节、字或双字来存取,CPU224的SM的位地址编号范围为SM0.0~SM179.7共180个字节。其中SM0.0~SM29.7的30个字节为只读型区域。

常用的特殊存储器的用途如下:

SM0.0:运行监视。SM0.0始终为“1”状态。当PLC运行时可以利用其触点驱动输出继电器,在外部显示程序是否处于运行状态。

SM0.1:初始化脉冲。每当PLC的程序开始运行时,SM0.1线圈接通一个扫描周期,因此SM0.1的触点常用于调用初始化程序等。

SM0.3:开机进入RUN时,接通一个扫描周期,可用在启动操作之前,给设备提前预热。

SM0.4、SM0.5:占空比为50%的时钟脉冲。当PLC处于运行状态时,SM0.4产生周期为1min的时钟脉冲,SM0.5产生周期为1s的时钟脉冲。若将时钟脉冲信号送入计数器作为计数信号,可起到定时器的作用。

SM0.6:扫描时钟,1个扫描周期闭合,另一个为OFF,循环交替。

SM0.7:工作方式开关位置指示,开关放置在RUN位置时为1。

SM1.0:零标志位,运算结果为0时,该位置1。

SM1.1:溢出标志位,运算结果溢出或非法值时,该位被置1。

SM1.2:负数标志位,运算结果为负数时,该位被置1。

SM1.3:被0除标志位。

其他特殊存储器的用途可查阅相关手册。

6.局部变量存储器L

局部变量存储器L用来存放局部变量,局部变量存储器L和变量存储器V十分相似,主要区别在于全局变量是全局有效,即同一个变量可以被任何程序(主程序、子程序和中断程序)访问。而局部变量只是局部有效,即变量只和特定的程序相关联。

S7-200有64个字节的局部变量存储器,其中60个字节可以作为暂时存储器,或给子程序传递参数。后4个字节作为系统的保留字节。PLC在运行时,根据需要动态地分配局部变量存储器,在执行主程序时,64个字节的局部变量存储器分配给主程序,当调用子程序或出现中断时,局部变量存储器分配给子程序或中断程序。

局部存储器可以按位、字节、字、双字直接寻址,其位存取的地址编号范围为L0.0~L63.7。

L可以作为地址指针。

7.定时器T

PLC所提供的定时器作用相当于继电器控制系统中的时间继电器。每个定时器可提供无数对常开和常闭触点供编程使用,其设定时间由程序设置。

每个定时器有一个16位的当前值寄存器,用于存储定时器累计的时基增量值(1~32767),另有一个状态位表示定时器的状态。若当前值寄存器累计的时基增量值大于或等于设定值时,定时器的状态位被置“1”,该定时器的常开触点闭合。

定时器的定时精度分别为1ms、10ms和100ms三种,CPU222、CPU224及CPU226的定时器地址编号范围为T0~T225,它们的分辨率、定时范围并不相同,用户应根据所用CPU型号及时基,正确选用定时器的编号。

8.计数器C

计数器用于累计计数输入端接收到的由断开到接通的脉冲个数。计数器可提供无数对常开和常闭触点供编程使用,其设定值由程序赋予。

计数器的结构与定时器基本相同,每个计数器有一个16位的当前值寄存器用于存储计数器累计的脉冲数,另有一个状态位表示计数器的状态。若当前值寄存器累计的脉冲数大于或等于设定值时,计数器的状态位被置“1”,该计数器的常开触点闭合。计数器的地址编号范围为C0~C255。

9.高速计数器HC

一般计数器的计数频率受扫描周期的影响,不能太高。而高速计数器可用来累计比CPU的扫描速度更快的事件。高速计数器的当前值是一个双字长(32位)的整数,且为只读值。

高速计数器的地址编号范围根据CPU的型号有所不同,CPU221/222各有4个高速计数器,CPU224/226各有6个高速计数器,编号为HC0~HC5。

10.累加器AC

累加器是用来暂存数据的寄存器,它可以用来存放运算数据、中间数据和结果。CPU提供了4个32位的累加器,其地址编号为AC0~AC3。累加器的可用长度为32位,可采用字节、字、双字的存取方式,按字节、字只能存取累加器的低8位或低16位,双字可以存取累加器全部的32位。

11.顺序控制继电器S(状态元件)

顺序控制继电器是使用步进顺序控制指令编程时的重要状态元件,通常与步进指令一起使用以实现顺序功能流程图的编程。

顺序控制继电器的地址编号范围为S0.0~S31.7。

12.模拟量输入/输出映像寄存器(AI/AQ)

S7-200的模拟量输入电路是将外部输入的模拟量信号转换成1个字长的数字量存入模拟量输入映像寄存器区域,区域标志符为AI。

模拟量输出电路是将模拟量输出映像寄存器区域的1个字长(16位)数值转换为模拟电流或电压输出,区域标志符为AQ。

在PLC内的数字量字长为16位,即两个字节,故其地址均以偶数表示,如AIW0、AIW2…;AQW0、AQW2…。

对模拟量输入/输出是以2个字(W)为单位分配地址,每路模拟量输入/输出占用1个字(2个字节)。如有3路模拟量输入,需分配4个字(AIW0、AIW2、AIW4、AIW6),其中没有被使用的字AIW6,不可被占用或分配给后续模块。如果有1路模拟量输出,需分配2个字(AQW0、AQW2),其中没有被使用的字AQW2,不可被占用或分配给后续模块。

模拟量输入/输出的地址编号范围根据CPU的型号的不同有所不同,CPU222为AIW0~AIW30/AQW0~AQW30;CPU224/226为AIW0~AIW62/AQW0~AQW62。

2.3.6 扩展I/O编址

前面介绍了CPU上集成的I/O的编址,知道CPU提供的集成I/O具有固定的I/O地址。对于扩展I/O的编制,可以将扩展模块连接到CPU的右侧来增加点,形成I/O链。对于同种类型的输入输出模块而言,模块的I/O地址取决于I/O类型和模块在I/O链中的位置。举例来说,输出模块不会影响输入模块上的点地址,反之亦然。类似地,模拟量模块不会影响数字量模块的地址,反之亦然。

图2-10中是一个特定的硬件配置中的I/O地址。地址间隙(用灰色斜体文字表示)无法在程序中使用。

图2-10 CPU224XP的本地和扩展I/O地址举例