西门子S7-1200 PLC编程与应用(第2版)
上QQ阅读APP看书,第一时间看更新

3.2 存储器及其寻址

3.2.1 S7-1200 PLC的存储器

S7-1200的CPU提供了以下用于存储用户程序、数据和组态的存储器,见表3-1。

1)装载存储器:用于非易失性地存储用户程序、数据和组态。项目被下载到CPU后,首先存储在装载存储器中。每个CPU都具有内部装载存储器。该内部装载存储器的大小取决于所使用的CPU。该内部装载存储器可以用外部存储卡来替代。如果未插入存储卡,CPU将使用内部装载存储器;如果插入了存储卡,CPU将使用该存储卡作为装载存储器。但是,可使用的外部装载存储器的大小不能超过内部装载存储器的大小,即使插入的存储卡有更多空闲空间。该非易失性存储区能够在断电后继续保持。

2)工作存储器:它是易失性存储器,用于在执行用户程序时存储用户项目的某些内容。CPU会将一些项目内容从装载存储器复制到工作存储器中。该易失性存储区将在断电后丢失,而在恢复供电时由CPU恢复。

3)系统存储器:系统存储器是CPU为用户程序提供的存储器组件,被划分为若干个地址区域。使用指令可以在相应的地址区内对数据直接进行寻址。系统存储器用于存放用户程序的操作数据,例如过程映像输入/输出、位存储器、数据块、局部数据,I/O输入输出区域和诊断缓冲区等。

表3-1 S7-1200 PLC的存储区

S7-1200 CPU的系统存储器的地址区见表3-2。在用户程序中使用相应的指令可以在相应的地址区直接对数据进行寻址。

表3-2 S7-1200 CPU的系统存储器的地址区

(续)

表3-2中,通过外设I/O存储区域,可以不经过过程映像输入和过程映像输出直接访问输入模块和输出模块。注意不能以位(bit)为单位访问外设I/O存储区,只能以字节、字和双字为单位访问。临时存储器即局域数据(L堆栈),用来存储程序块被调用时的临时数据。访问局域数据比访问数据块中的数据更快。用户生成块时,可以声明临时变量(TEMP),它们只在执行该块时有效,执行完后就被覆盖了。

另外,还可以组态保持性存储器,用于非易失性地存储限量的工作存储器值。保持性存储器用于在断电时存储所选用户存储单元的值。发生掉电时,CPU留出了足够的缓冲时间来保存几个有限的指定单元的值,这些保持性值随后在上电时进行恢复。

S7-1200 PLC存储区的保持性特性见表3-3。

表3-3 S7-1200 PLC存储区的保持性特性

3.2.2 寻址

SIMATIC S7 CPU中可以按照位、字节、字和双字对存储单元进行寻址。

二进制数的1位(bit)只有0和1两种不同的取值,可用来表示数字量的两种不同的状态,如触点的断开和接通,线圈的通电和断电等。8位二进制数组成1个字节(Byte,B),其中的第0位为最低位、第7位为最高位。两个字节组成1个字(Word,W),其中的第0位为最低位、第15位为最高位。两个字组成1个双字(Double Word,DW),其中的第0位为最低位、第31位为最高位。位、字节、字和双字示意图如图3-8所示。

S7-1200 CPU不同的存储单元都是以字节为单位,示意图如图3-9所示。

对位数据的寻址由字节地址和位地址组成,如I3.2,其中的区域标识符“I”表示寻址输入(Input)映像区,字节地址为3,位地址为2,这种存取方式称为“字节.位”寻址方式,如图3-10所示。

图3-8 位、字节、字和双字示意图

图3-9 存储单元示意图

图3-10 位寻址举例

对字节的寻址,如MB2,其中的区域标识符“M”表示位存储区,“2”表示寻址单元的起始字节地址为2,“B”表示寻址长度为1个字节,即寻址位存储区第2个字节,如图3-11所示。

对字的寻址,如MW2,其中的区域标识符“M”表示位存储区,“2”表示寻址单元的起始字节地址为2,“W”表示寻址长度为1个字(2个字节),也就是寻址位存储区第2个字节开始的一个字,即字节2和字节3,如图3-11所示。

对双字的寻址,如MD0,其中的区域标识符“M”表示位存储区,“0”表示寻址单元的起始字节地址为0,“D”表示寻址长度为1个双字(2个字,4个字节),也就是寻址位存储区第0个字节开始的一个双字,即字节0、字节1、字节2和字节3,如图3-11所示。

注意:输入字节MB200由M200.0~M200.7这8位组成。MW200表示由MB200和MB201组成的1个字。MD200表示由MB200~MB203组成的双字。可以看出,M200.2、MB200、MW200和MD200等地址有重叠现象,在使用时一定注意,以免引起错误。

图3-11 字节、字和双字寻址示意图

另外,需要注意S7 CPU中的“高地址,低字节”的规律,如果将16#12送入MB200,将16#34送入MB201,则MW200=16#1234。

关于数据块的内容请参考3.4.3节和6.4节。关于局部数据的使用请参看6.5节。