3.5 S7-200PLC的数据存储器及寻址方式
S7-200PLC将存储器划分为程序区、系统区和数据区三部分。程序区用于存放用户程序,系统区用于存放有关用户PLC配置结构的参数,数据区是CPU提供存储器的特定区域,也是用户程序执行过程中的内部工作区域。
3.5.1 存储器的数据格式
所有的数据在PLC中都是以二进制形式表示的,S7-200PLC的指令对数据格式有一定的要求,数据格式包括数据长度和数据类型,指令中数据格式一致才能正常工作。
1.数据类型
S7-200PLC指令所使用的数据类型有7种:1位布尔型、8位字节型、16位无符号整数、16位有符号整数、32位无符号双整数、32位有符号双整数和32位浮点数。32位浮点数是按照ANSI/IEEE 754—1985标准(单精度)来表示的。
2.数据长度与数值范围
在S7-200PLC的CPU存储器中,不同的数据类型具有不同的数据长度与数值范围。用1位数据长度表示开关量(或数字量),用字节型、字型和双字型分别表示8位、16位和32位数据的长度。不同数据类型、数据长度对应的数值范围如表3-4所示。
表3-4 存储器的数据类型、长度及取值范围
3.常数与字符串的表示方法
CPU以二进制数方式存储常数,常数数据的长度可以是字节、字或双字。常数的书写可以用二进制、十进制、十六进制、ASCII码或浮点数等形式来表示,例如:
二进制格式为2#1001_0100;
十进制格式为12345;
十六进制格式为16#25AE;
ASCII码格式为‘HELLO’;
实数或浮点数格式为50.1(正数),-1.175495E-38(负数);
实数又称为浮点数,可以表示为1.m×2E,其中尾数m和指数E均为二进制数,E可以是正数也可以是负数。
ANSI/IEEE 754—1985标准格式的32位实数(见图3-14)可以表示为浮点数1.m×2e,式中指数e=E+127(1≤e≤254)为8位整数。实数的最高位即31位是符号位,0为正数,1为负数。规定尾数m的整数部分总是1,只保留小数部分。浮点数的表示范围是±1.175495×10-38~±3.402823×1038。
ASCII(美国信息交换标准码)是一种字符编码格式,用一个字节中不同的二进制数值代表不同的字符。例如,字母“C”的ASCII码值为十六进制数43H,数字6的ASCII码值为36H。
字符串由若干个ASCII码字符组成,每个字符占一个字节(见图3-15)。字符串的第1个字节用于定义字符串的长度或个数(0~254),一个字符串的最大长度为255字节,一个字符串常量的最大长度为128字节。字符串也包括汉字编码,每个汉字占两个字节。
图3-14 浮点数的格式
图3-15 字符串的格式
3.5.2 数据存储器的功能
S7-200PLC为用户提供了许多数据存储空间,并将其划分为不同功能的区域,以存放不同类型的数据。这些数据存储器有各自的功能和固定的地址,其数量的多少决定了S7-200PLC的规模和数据处理能力。S7-200PLC的CPU的数据存储器就划分为如下的各种存储区。
1.输入映像寄存器(I)
在执行程序的每个扫描周期开始,CPU对外部接收的输入信号如按钮、行程开关、光电开关和传感器等的通/断状态进行采样,并将采样值存入输入映像寄存器中。
每一个输入端子都对应一个输入映像寄存器,外部输入信号接通时,对应输入映像寄存器的状态为ON(1状态),反之为OFF(0状态)。在梯形图中,可多次使用输入位的常开和常闭触点进行编程,这相当于CPU从存储器中取数据。
输入映像寄存器的状态只能由外部输入信号决定,而不能由程序指令来改变。它们一般采用八进制编号,一个输入端子占用1位。如位地址I0.0~I0.7,后面紧接着是I1.0~I1.7。
I、Q、V、M、S、SM和L均可以按位、字节、字和双字来存取数据,如CPU226模块输入映像寄存器的有效地址范围为:I(0.0~15.7),IB(0~15),IW(0~14),ID(0~12)。
2.输出映像寄存器(Q)
在每个扫描周期的结尾,CPU将输出映像寄存器的结果集中送到相应的输出锁存器中,通过输出模块驱动外部负载。
每一个输出模块的端子对应一个输出映像寄存器。如果梯形图中Q0.0的线圈“接通”,继电器型输出模块中对应的硬件继电器的常开触点闭合,使连在标号为0.0端子的外部负载通电;反之,外部负载断电。输出模块中的每一个硬件继电器只有一对常开触点,用于驱动外部负载,但在编写梯形图程序时,输出位的常开和常闭触点可以多次使用。
输出映像寄存器的状态是由程序执行的结果决定的,它们一般也采用八进制编号,一个输出端子占用1位。如位地址Q0.0~Q0.7,紧接着是Q1.0~Q1.7。
CPU226模块输出映像寄存器的有效地址范围为:Q(0.0~15.7),QB(0~15),QW(0~14),QD(0~12)。
3.变量存储器(V)
变量存储器用于存放全局变量、程序执行过程中的中间结果或其他相关的数据。变量存储器是全局有效的,全局有效是指同一个存储器可以在任一程序分区(主程序、子程序和中断程序)被访问。
CPU226模块变量存储器的有效地址范围为:V(0.0~10239.7),VB(0~10239),VW(0~10238),VD(0~10236)。
4.位存储器(M)
位存储器(M0.0~M31.7)也称为内部线圈,类似于继电器控制系统中的中间继电器,用它存放中间操作状态或其他相关的数据。
在S7-200PLC中,位存储器没有外部输入端子或输出端子与之对应,因此,它不能接受外部输入信号,其输出线圈也不能直接驱动外部负载。如果位存储器状态需要输出显示,则可接输出模块。
CPU226模块位存储器的有效地址范围为:M(0.0~31.7),MB(0~31),MW(0~30),MD(0~28)。
5.定时器存储器(T)
定时器相当于继电器控制系统中的时间继电器。S7-200PLC有通电延时、有记忆通电延时和断开延时3种定时器,它们的时间基准分别为1ms、10ms和100ms。定时器采用十进制编号,如T0、T40等。定时器由一个16位的当前值寄存器和一个1位的定时器位组成,当前值寄存器用于存放时间预设值和累计时间基准增量值(1~32767),定时器位用来描述定时器触点的状态。
使用定时器时,必须先将时间预设值输入到当前值寄存器中,当定时器的线圈通电时开始计时,于是当前值从0开始按相应的时间基准累加(对于通电延时定时器);当定时器的当前值大于或等于预设值时,定时器位被置为1;其线圈断电时,定时器位被复位为0。
定时器位为1时,梯形图中对应的常开触点闭合,常闭触点断开;定时器位为0时,触点的状态相反。
S7-200PLC定时器存储器的有效地址范围为:T(0~255)。
6.计数器存储器(C)
计数器用来累计其计数输入端的脉冲个数即电平由低到高或者由高到低的次数。S7-200PLC有加计数器、减计数器和加减计数器3种类型。计数器采用十进制编号,如C6、C20等。计数器由一个16位的当前值寄存器和一个1位的计数器位组成,当前值寄存器用于存放脉冲设定值和累计脉冲数(1~32767),计数器位用来描述其触点的状态。
使用计数器时,必须先将脉冲的设定值输入到当前值寄存器中,当计数器的输入条件满足时,它开始累计脉冲输入端电平由低到高(上升沿)的次数,于是当前值从0开始累加上升沿的次数(对于加计数器);当加计数器的当前值大于或等于设定值时,计数器位被置为1,其常开触点闭合,常闭触点断开。
S7-200PLC计数器存储器的有效地址范围为:C(0~255)。
一般计数器的计数频率受扫描周期的影响,所以不能太高。对高频信号的计数可以使用高速计数器。
7.高速计数器(HC)
高速计数器用来累计比CPU扫描速率更快的高速脉冲信号,它的计数过程与扫描周期无关。每个高速计数器有一个32位有符号整数的当前值寄存器,当前值为只读数据。高速计数器的数量较少,其地址由标识符HC和计数号组成,如HC5。
CPU226模块高速计数器的有效地址范围为:HC(0~5)。
8.顺序控制继电器(S)
顺序控制继电器(SCR)用于顺序控制(步进控制)。它与顺序控制继电器指令配合使用,采用基于顺序功能图(SFC)的编程方式。有关顺序控制继电器的使用请参考第5章。
CPU226模块顺序控制继电器存储器的有效地址范围为:S(0.0~31.7),SB(0~31),SW(0~30),SD(0~28)。
9.特殊标志位存储器(SM)
特殊标志位存储器也称为特殊寄存器,是用户程序与系统程序之间的界面,它为用户提供一些特殊的控制功能及系统信息。特殊标志位存储器分为只读区域(SM0.0~SM29.7)和可读/写区域两部分,在只读区,用户只能利用特殊标志位触点。例如:
SM0.0——RUN监控,PLC在RUN方式时,SM0.0总为1;
SM0.1——初始脉冲,PLC由STOP转为RUN时,SM0.1接通一个扫描周期;
SM0.5——秒脉冲,占空比为50%,周期为1s的脉冲。
可读/写特殊标志位则用于特殊控制功能。例如,用于自由通信口设置的SMB30,用于定时中断间隔时间设置的SMB34、SMB35,用于高速计数器设置的SMB36~SMB65等。
因此,熟悉特殊标志位SM的使用还可以简化用户编程。CPU226模块特殊标志位存储器的有效地址范围为:SM(0.0~549.7),SMB(0~549),SMW(0~548),SMD(0~546)。有关SM的详细信息请参考附录B。
10.累加器(AC)
累加器是用于暂存数据的存储器。它可以用来存放运算中间数据和结果数据,也可向子程序传递参数或返回参数。S7-200PLC的CPU提供了4个32位累加器(AC0,AC1,AC2,AC3),它的数据长度可以是字节、字或双字。
实际应用时,存取数据的长度取决于所使用的指令。按字节、字只能存取累加器的低8位或低16位,按双字则可存取全部32位。
11.模拟量输入映像寄存器(AI)
S7-200PLC的模拟量输入模块(A/D转换模块)将外部输入的模拟信号转换成1个字长(16位)的数字量,存放在模拟量输入映像寄存器(AI)中,供CPU运算处理。模拟量输入的值为只读数据,必须从偶数字节开始存放,有效地址为AIW0、AIW2等。
CPU226模块模拟量输入映像寄存器的有效地址范围为:AIW(0~62)。
12.模拟量输出映像寄存器(AQ)
CPU运算的结果存放在模拟量输出映像寄存器(AQ)中,S7-200PLC的模拟量输出模块(D/A转换模块)将1个字长(16位)的数字量转换为模拟量,以驱动外部模拟量控制的设备。模拟量输出映像寄存器中的数字量为只写数据,必须从偶数字节开始存放,有效地址为AQW0、AQW2等。
CPU226模块模拟量输出映像寄存器的有效地址范围为:AQW(0~62)。
13.局部存储器(L)
局部(local)存储器用来存放局部变量,局部变量是局部有效的,局部有效是指某一局部存储器只能在某一程序分区(主程序或子程序或中断程序)中使用。
S7-200PLC有64个字节的局部存储器,其中60个可用做暂时存储器或给子程序传递参数。如果用梯形图编程,编程软件保留局部存储器的最后4个字节LB60~LB63。如果用语句表编程,可以使用全部的64个字节,建议不使用最后4个字节。
主程序、子程序和中断程序简称为POU(program organizational unit,程序组织单元),各POU都有自己的局部变量表,局部变量仅仅在它被创建的POU中有效。变量存储器(V)是全局存储器,可以被所有的POU存取。
CPU226模块局部存储器的有效地址范围为:L(0.0~63.7),LB(0~33),LW(0~32),LD(0~60)。
3.5.3 数据存储器的寻址方式
S7-200PLC数据存储器的存储单元按字节进行编址,每个单元都有唯一的地址。CPU将数据存放在不同的存储单元中,为了存取某个数据,必须按一定的方式指明数据(或称操作数)的地址。指令中如何提供操作数或操作数地址,称为寻址方式。S7-200PLC的寻址方式分为直接寻址和间接寻址两种,如果在指令中直接使用操作数的地址,则称为直接寻址方式;如果使用指针来存取存储器中的数据,则称为间接寻址方式。
1.直接寻址
在S7-200PLC中,直接寻址可以按位、字节、字和双字对存储单元进行寻址。在表示数据长度时,分别用B、W、D字母作为字节、字和双字的标识符。寻址时,数据地址以存储区类型的字母开始,随后是数据长度,然后是存储单元编号。例如VW100,V表示变量存储器;W表示数据长度为字;100是其地址编号。对于按位寻址,还需要在分隔符后指定位编号。
按位、字节、字和双字对存储单元进行寻址时,存储器地址的表示方法如下:
(1)位寻址:[存储区类型标识符][字节编号].[位号]。
(2)字节寻址:[存储区类型标识符]B[字节编号]。
(3)字寻址:[存储区类型标识符]W[起始字节编号]。
(4)双字寻址:[存储区类型标识符]D[起始字节编号]。
如果要存取存储器中某一位的数据,就要进行位寻址。例如,图3-16(a)所指明的地址是输入映像寄存器中的第4个字节的第5位,图3-16(b)显示了该位在输入映像寄存器中的确切位置(黑影部分)。
图3-16 位地址格式及存储器示意图
如果要存取存储器中某个字节的数据,就要进行字节寻址,同理,根据数据长度还可以进行字和双字寻址,图3-17所示的是对变量存储器寻址的例子。其中图3-17(a)所示的是变量存储器字节的地址格式,而VW100和VD100分别表示变量存储器字和双字的地址格式;图3-17(b)所示的是字节、字和双字在变量存储器中存放的位置。
2.间接寻址
在间接寻址方式中,指令给出的是存放操作数地址的存储单元的地址(也称为地址指针)。S7-200PLC的CPU允许用指针进行间接寻址的存储器有I、Q、V、M、S、AI、AQ、T(仅当前值)和C(仅当前值),而不能用于位地址、HC和L存储器。
图3-17 字节、字和双字的寻址示意图
使用间接寻址存取数据的方法与计算机C语言指针的应用是基本相同的,其寻址过程如下。
1)建立指针
使用间接寻址之前,首先要创建地址指针。指针为双字长,用来存放被访问存储器的地址,并且只能用变量存储器V、局部变量存储器L或累加器作为指针。建立指针时必须用双字传送指令(MOVD)将需要间接寻址的存储器地址送入指针,例如,“MOVD &VB200,AC1”,其中“&”是地址符号,&VB200表示VB200的地址,而不是VB200中的值。指令中第二个地址数据长度必须是双字长,指令中的“&VB200”如果改为“&VW200”或“&VD200”,效果完全相同。指针也可以为子程序传递参数。
2)用指针存取数据
使用指针存取数据时,在操作数前加“*”表示该操作数是一个指针。如图3-18所示,*AC1表示AC1是一个指针,执行指令“MOVW*AC1,AC0”,是把指针中的内容(VB200)作为地址。由于指令MOVW的数据长度是字长“W”,因此该指令是将地址VB200和VB201两个字节中的内容(1234)传给AC0。
图3-18 使用指针的间接寻址
3)修改指针
通过修改指针可以很方便地完成连续地址单元中数据的存取。由于指针是32位的数据,所以要使用双字指令来修改指针值,通常使用双字加法(ADDD)和双字加1 (INCD)指令。如图3-19所示,用两次双字加1指令“INCD AC1”,将AC1指针中的值(VB200)修改为VB202后,指针就指向新地址VB202。执行指令“MOVW*AC1,AC0”,就可在变量存储器(V)中连续地存取数据,即将地址VB202和VB203两个字节中的内容(5678)传给AC0。
图3-19 修改指针
修改指针时,应根据存取的数据长度来进行调整。存取字节时,指针值加1;存取字时,指针值加2;存取双字时,指针值加4。
3.CPU存储器和操作数的范围
S7-200PLC的CPU的型号不同,寻址时存储器所占用的范围也不同。编程时必须严格按指定的存储器范围进行寻址,否则程序会出错。CPU的型号不同,操作数的范围也有所不同,编程时必须根据寻址方式选用相应范围的操作数,CPU才能正常工作。
S7-200PLC的CPU存储器的范围和操作数的范围分别如表3-5和表3-6所示。
表3-5 S7-200CPU存储器的范围
续表
表3-6 S7-200操作数的范围
3.5.4 I/O扩展模块的编址
S7-200PLC的CPU22X系列给主机提供的I/O点数和I/O端地址是固定的,根据需求进行I/O点扩展时,可以在CPU右边连接多个扩展模块。扩展的I/O点分为数字量输入、数字量输出、模拟量输入和模拟量输出4种类型。每个扩展模块的地址编号取决于各模块的类型和该模块在I/O链中所处的位置。
S7-200PLC系统扩展对I/O模块的地址分配规则如下。
(1)同类型输入或输出点的模块按所处的位置递增,这种递增是按字节进行的。
(2)每个模块的I/O点数如果不是8的整数倍,分配地址时,最后1个字节未用完的位不能分配给I/O链中的后续模块,后续模块的地址编排必须从新的1个字节开始。
(3)模拟量扩展模块以2点或2个通道(4字节)递增的方式来分配地址,本模块中未使用的通道地址不能被后续的同类模块继续使用,后续模块的地址编排必须从新的2个字以后的地址开始。
这样,输入与输出模块的地址不会冲突,模拟量控制模块地址也不会影响数字量。
例如,某一控制系统选用CPU224(主机本身有14点输入和10点输出),系统所需的I/O点数为:数字量输入24点、数字量输出20点、模拟量输入6点和模拟量输出2点。
本系统可以有多种不同模块的选取组合,并且各模块在I/O链中的位置排列方式也可能有多种,图3-20所示的为其中一种模块的连接方式。模块1可扩展8个输入点、模块2可扩展8个输出点、模块3和模块5都可扩展4个模拟量输入通道和1个模拟量输出通道、模块4可扩展4个输入点和4个输出点。表3-7所示的为其对应的各模块的编址情况。
图3-20 I/O扩展模块的连接方式
因为输入或输出点的扩展模块是按字节(即8位)递增方式来分配地址的,分配给CPU模块的字节地址为QB0和QB1,那么分配给模块2的字节地址为QB2,分配给模块4的字节地址为QB3。CPU最后1个字节中未用的位Q1.2~Q1.7不会分配给后续模块。而模拟量扩展模块是以4个字节递增方式来分配地址的,虽然模块3中的AQW2未用,模块5中的模拟量输出地址应从AQW4开始。
表3-7 CPU224及扩展模块的I/O地址分配表
注:表中斜体粗字排列的地址为后续模块不能使用的地址间隙。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。