- S7-1200 PLC应用教程
- 廖常初
- 9103字
- 2021-03-25 02:09:29
2.3 数据类型与系统存储区
2.3.1 物理存储器
PLC的操作系统使PLC具有基本的智能,能够完成PLC设计者规定的各种工作。用户程序由用户设计,它使PLC能完成用户要求的特定功能。
1.PLC使用的物理存储器
(1)随机存取存储器
CPU可以读出随机存取存储器(RAM)中的数据,也可以将数据写入RAM。它是易失性的存储器,电源中断后,存储的信息将会丢失。RAM的工作速度快,价格便宜,改写方便。在关断PLC的外部电源后,可以用锂电池保存RAM中的用户程序和某些数据。
(2)只读存储器
只读存储器(ROM)的内容只能读出,不能写入。它是非易失的,电源消失后,仍能保存存储的内容,ROM一般用来存放PLC的操作系统。
(3)快闪存储器和可电擦除可编程只读存储器
快闪存储器(FlashEPROM)简称为FEPROM,可电擦除可编程的只读存储器简称为E2PROM。它们是非易失性的,可以用编程装置对它们编程,兼有ROM的非易失性和RAM的随机存取优点,但是将数据写入它们所需的时间比RAM长得多。它们用来存放用户程序和断电时需要保存的重要数据。
2.装载存储器与工作存储器
(1)装载存储器
装载存储器是非易失性的存储器,用于保存用户程序、数据和组态信息。所有的CPU都有内部的装载存储器,CPU插入存储卡后,用存储卡作装载存储器。项目下载到CPU时,保存在装载存储器中。装载存储器具有断电保持功能,它类似于计算机的硬盘,工作存储器类似于计算机的内存条。
(2)工作存储器
工作存储器是集成在CPU中的高速存取的RAM,为了提高运行速度,CPU将用户程序中与程序执行有关的部分,例如组织块、函数块、函数和数据块从装载存储器复制到工作存储器。CPU断电时,工作存储器中的内容将会丢失。
3.保持性存储器
断电保持存储器(保持性存储器)用来防止在PLC电源关闭时丢失数据,暖启动后保持性存储器中的数据保持不变,存储器复位时其值被清除。
CPU提供了10KB的保持性存储器,可以在断电时,将工作存储器的某些数据(例如数据块或位存储器M)的值永久保存在保持性存储器中。
断电时组态的工作存储器的值被复制到保持性存储器。电源恢复后,系统将保持性存储器保存的断电之前工作存储器的数据,恢复到原来的存储单元。
在暖启动时,所有非保持的位存储器被删除,非保持的数据块的内容被复位为装载存储器中的初始值。保持性存储器和有保持功能的数据块的内容被保持。
在线时可以用CPU操作面板上的“MRES”按钮复位存储器(见图6-26),只能在STOP模式复位存储器。存储器复位使CPU进入所谓的“初始状态”,清除所有的工作存储器,包括保持和非保持的存储区,将装载存储器的内容复制给工作存储器,数据块中变量的值被初始值替代。编程设备与CPU的在线连接被中断,诊断缓冲区、时间、IP地址、硬件组态和激活的强制任务保持不变。
4.存储卡
SIMATIC存储卡基于FEPROM,是预先格式化的SD存储卡,它用于在断电时保存用户程序和某些数据,不能用普通读卡器格式化存储卡。可以将存储卡作为程序卡、传送卡或固件更新卡。
装载了用户程序的存储卡将替代设备的内部装载存储器,后者的数据被擦除。拔掉存储卡不能运行。无须使用STEP 7,用传送卡就可将项目复制到CPU的内部装载存储器,复制后必须取出存储卡。
将模块的固件存储在存储卡上,就可执行固件更新。忘记密码时,插入空的传送卡将会自动删除CPU内部装载存储器中受密码保护的程序,以后就可以将新的程序下载到CPU中。
存储卡的详细使用方法见《S7-1200系统手册》的5.5节“使用存储卡”。
2.3.2 数制与编码
1.数制
(1)二进制数
二进制数的1位(bit)只能取0和1这两个不同的值,可以用来表示开关量(或称数字量)的两种不同的状态,例如触点的断开和接通、线圈的通电和断电等。如果该位为1,则表示梯形图中对应的位编程元件(例如位存储器M和过程映像输出位Q)的线圈“通电”,其常开触点接通,常闭触点断开,以后称该编程元件为TRUE或1状态,如果该位为0,则对应的编程元件的线圈和触点的状态与上述的相反,称该编程元件为FALSE或0状态。
(2)多位二进制整数
计算机和PLC用多位二进制数来表示数字,二进制数遵循逢二进一的运算规则,从右往左的第n位(最低位为第0位)的权值为2n。二进制常数以2#开始,用下式计算2#1100对应的十进制数:
1×23+1×22+0×21+0×20=8+4=12
(3)十六进制数
多位二进制数的书写和阅读很不方便。为了解决这一问题,可以用十六进制数来取代二进制数,每个十六进制数对应于4位二进制数。十六进制数的16个数字是0~9和A~F(对应于十进制数10~15)。B#16#、W#16#和DW#16#分别用来表示十六进制字节、字和双字常数,例如W#16#13AF。在数字后面加“H”也可以表示十六进制数,例如16#13AF可以表示为13AFH。
表2-3给出了不同进制数的表示方法。
表2-3 不同进制的数的表示方法
2.编码
(1)补码
有符号二进制整数用补码来表示,其最高位为符号位,最高位为0时为正数,为1时为负数。正数的补码就是它本身,最大的16位二进制正数为2#0111111111111111,对应的十进制数为32767。
将正数的补码逐位取反(0变为1,1变为0)后加1,得到绝对值与它相同的负数的补码。例如将1158对应的补码2#0000010010000110逐位取反后加1,得到-1158的补码2#1111 101101111010。
将负数的补码的各位取反后加1,得到它的绝对值对应的正数的补码。例如将-1158的补码2#1111101101111010逐位取反后加1,得到1158的补码2#0000010010000110。
整数的取值范围为-32768~32767,双整数的取值范围为−2147483648~2147483647。
(2)BCD码
BCD(Binary-codedDecimal)是二进制编码的十进制数的缩写,BCD码用4位二进制数表示一位十进制数(见表2-3),每一位BCD码允许的数值范围为2#0000~2#1001,对应于十进制数0~9。BCD码的最高位二进制数用来表示符号,负数为1,正数为0。一般令负数和正数的最高4位二进制数分别为1111或0000(见图2-6)。3位BCD码的范围为-999~+999,7位BCD码(见图2-7)的范围为-9999999~+9999999。BCD码各位之间的关系是逢十进一,图2-6中的BCD码为-829。
图2-63 位BCD码的格式
图2-77 位BCD码的格式
BCD码常用来表示PLC的输入/输出变量的值。TIA博途用BCD码来显示日期和时间值。拨码开关(见图2-8)内的圆盘的圆周面上有0~9这10个数字,用按钮来增、减各位要输入的数字。它用内部硬件将10个十进制数转换为4位二进制数。PLC用输入点读取的多位拨码开关的输出值就是BCD码,可以用“转换值”指令CONVERT将它转换为二进制整数。
用PLC的4个输出点给译码驱动芯片4547提供输入信号,可以用LED七段显示器显示一位十进制数(见图2-9)。需要使用“转换值”指令CONVERT,将PLC中的二进制整数或双整数转换为BCD码,然后分别送给各个译码驱动芯片。
图2-8 拨码开关
图2-9 LED七段显示器电路
(3)美国信息交换标准代码(ASCII码)
美国信息交换标准代码(AmericanStandardCodeforInformationInterchange,ASCII码)由美国国家标准局(ANSI)制定,它已被国际标准化组织(ISO)定为国际标准(ISO646标准)。ASCII码用来表示所有的英语大/小写字母、数字0~9、标点符号和在美式英语中使用的特殊控制字符。数字0~9的ASCII码为十六进制数30H~39H,英语大写字母A~Z的ASCII码为41H~5AH,英语小写字母a~z的ASCII码为61H~7AH。
2.3.3 数据类型
1.数据类型
数据类型用来描述数据的长度(即二进制的位数)和属性。本节主要介绍基本数据类型。其他数据类型主要在2.3.4和4.2.1节介绍。
很多指令和代码块的参数支持多种数据类型。不同的任务使用不同长度的数据对象,例如位逻辑指令使用位数据,MOVE指令使用字节、字和双字。字节、字和双字分别由8位、16位和32位二进制数组成。表2-4给出了基本数据类型的属性。
2.位
位数据的数据类型为Bool(布尔)型,在编程软件中,Bool变量的值1和0用英语单词TRUE(真)和FALSE(假)来表示。
位存储单元的地址由字节地址和位地址组成,例如I3.2中的区域标识符“I”表示输入(Input),字节地址为3,位地址为2(见图2-10)。这种存取方式称为“字节.位”寻址方式。
3.位字符串
数据类型Byte、Word、Dword统称为位字符串。它们不能比较大小,它们的常数一般用十六进制数表示。
1)字节(Byte)由8位二进制数组成,例如I3.0~I3.7组成了输入字节IB3(见图2-10),B是Byte的缩写。
2)字(Word)由相邻的两个字节组成,例如字MW100由字节MB100和MB101组成(见图2-11)。MW100中的M为区域标识符,W表示字。
3)双字(DWord)由两个字(或4个字节)组成,双字MD100由字节MB100~MB103或字MW100、MW102组成(见图2-11),D表示双字。需要注意以下两点:
①用组成双字的编号最小的字节MB100的编号作为双字MD100的编号。
②组成双字MD100的编号最小的字节MB100为MD100的最高位字节,编号最大的字节MB103为MD100的最低位字节。字也有类似的特点。
表2-4 基本数据类型
图2-10 字节与位
图2-11 字节、字和双字
4.整数
一共有6种整数(见表2-4),SInt和USInt分别为8位的短整数和无符号短整数,Int和UInt分别为16位的整数和无符号整数,DInt和UDInt分别为32位的双整数和无符号的双整数。所有整数的符号中均有Int。符号中带S的为8位整数(短整数),带D的为32位双整数,不带S和D的为16位整数。带U的为无符号整数,不带U的为有符号整数。有符号整数的最高位为符号位,最高位为0时为正数,为1时为负数。有符号整数用补码来表示。
5.浮点数
32位的浮点数(Real)又称为实数,最高位(第31位)为浮点数的符号位(见图2-12),正数时为0,负数时为1。规定尾数的整数部分总是为1,第0~22位为尾数的小数部分。8位指数加上偏移量127后(0~255),放在第23~30位。
图2-12 浮点数的结构
浮点数的优点是用很小的存储空间(4B)可以表示非常大和非常小的数。PLC输入和输出的数值大多是整数,例如AI模块的输出值和AQ模块的输入值。用浮点数来处理这些数据需要进行整数和浮点数之间的相互转换,浮点数的运算速度比整数的运算速度慢一些。
在编程软件中,用十进制小数来输入或显示浮点数,例如50是整数,而50.0为浮点数。
LReal为64位的长浮点数,它的最高位(第63位)为符号位。尾数的整数部分总是为1,第0~51位为尾数的小数部分。11位的指数加上偏移量1023后(0~2047),放在第52~62位。浮点数Real和长浮点数LReal的精度最高为十进制6位和15位有效数字。
6.时间与日期
Time是有符号双整数,其单位为ms,能表示的最大时间为24天多。Date(日期)为16位无符号整数,TOD(TIME OF DAY)为从指定日期的0时算起的毫秒数(无符号双整数)。其常数必须指定小时(24小时/天)、分钟和秒,ms是可选的。
数据类型DTL的12个字节为年(占2B)、月、日、星期的代码、小时、分、秒(各占1B)和纳秒(占4B),均为BCD码。星期日、星期一~星期六的代码分别为1~7。可以在块的临时存储器或者DB中定义DTL数据。
7.字符
每个字符(Char)占一个字节,Char数据类型以ASCII格式存储。WChar(宽字符)占两个字节,可以存储汉字和中文的标点符号。字符常量用英语的单引号来表示,例如'A'。
2.3.4 全局数据块与其他数据类型
1.生成全局数据块
在项目“电动机控制”中,单击项目树PLC的“程序块”文件夹中的“添加新块”,在打开的对话框中(见图2-13中的大图),单击“数据块(DB)”按钮,生成一个数据块,可以修改其名称或采用默认的名称,其类型为默认的“全局DB”,生成数据块编号的方式为默认的“自动”。如果用单选框选中“手动”,可以修改块的编号。
图2-13 添加数据块与数据块中的变量
单击“确定”按钮后自动生成数据块。选中下面的复选框“新增并打开”,生成新的块之后,将会自动打开它。用鼠标右键单击项目树中新生成的“数据块1”,执行快捷菜单命令“属性”,选中打开的对话框左边窗口中的“属性”(见图2-14),如果勾选右边窗口中的复选框“优化的块访问”,只能用符号地址访问生成的块中的变量,不能使用绝对地址。这种访问方式可以提高存储器的利用率。
只有在未勾选复选框“优化的块访问”时,才能用绝对地址访问数据块中的变量,数据块中才会显示“偏移量”列中的偏移量。
2.字符串
数据类型String(字符串)是字符组成的一维数组,每个字节存放1个字符。第一个字节是字符串的最大字符长度,第二个字节是字符串当前有效字符的个数,字符从第3个字节开始存放,一个字符串最多254个字符。
数据类型WString(宽字符串)存储多个数据类型为WChar的Unicode字符(长度为16位的宽字符,包括汉字)。第一个字是最大字符个数,默认的长度为254个宽字符,最多16382个WChar字符。第二个字是当前的总字符个数。
图2-14 设置数据块的属性
可以在代码块的接口区和全局数据块中创建字符串、数组和结构。
在“数据块1”的第2行的“名称”列(见图2-13中的小图)输入字符串的名称“故障信息”,单击“数据类型”列中的按钮,选中下拉式列表中的数据类型“String”。“String[30]”表示该字符串的最大字符个数为30,其启动值(初始字符)为‘OK’。
3.数组
数组(Array)是由固定数目的同一种数据类型元素组成的数据结构。允许使用除了Array之外的所有数据类型作为数组的元素,数组的维数最多为6维。图2-15给出了一个名为“电流”的二维数组Array[1..2,1..3]ofByte的内部结构,它一共有6个字节型元素,第一维的下标1、2是电动机的编号,第二维的下标1~3是三相电流的序号。数组元素“电流[1,2]”是一号电动机第2相的电流。
图2-15 二维数组的元素
在数据块1的第3行的“名称”列输入数组的名称“功率”(见图2-13中的小图),单击“数据类型”列中的按钮,选中下拉式列表中的数据类型“Array[lo..hi]oftype”。其中的“lo”(low)和“hi”(high)分别是数组元素的编号(下标)的下限值和上限值,它们用两个小数点隔开,可以是任意的整数(-32768~32767),下限值应小于等于上限值。方括号中各维的参数用逗号隔开,type是数组元素的数据类型。
将“Array[lo..hi]oftype”修改为“Array[0..23]ofInt”(见图2-13),其元素的数据类型为Int,元素的下标为0~23。在用户程序中,可以用符号地址"数据块1".功率[2]或绝对地址DB1.DBW36访问数组“功率”中下标为2的元素。
单击图2-13中“功率”左边的按钮,它变为,将会显示数组的各个元素,可以监控它们的启动值和监控值。单击“功率”左边的按钮,它变为,数组的元素被隐藏起来。
4.结构
结构(Struct)是由固定数目的多种数据类型的元素组成的数据类型。可以用数组和结构做结构的元素,结构可以嵌套8层。用户可以把过程控制中有关的数据统一组织在一个结构中,作为一个数据单元来使用,而不是使用大量的单个的元素,为统一处理不同类型的数据或参数提供了方便。
在数据块1的第4行生成一个名为“电动机”的结构(见图2-13),数据类型为Struct。在第5~8行生成结构的4个元素。单击“电动机”左边的按钮,它变为,结构的元素被隐藏起来。单击“电动机”左边的按钮,它变为,将会显示结构的各个元素。
数组和结构的“偏移量”列是它们在数据块中的起始绝对字节地址。结构的元素的“偏移量”列是它们在结构中的地址偏移量,可以看出数组“功率”占48B。
下面是用符号地址表示结构的元素的例子:"数据块1".电动机.电流。
单击数据块编辑器的工具栏上的按钮(见图2-13),在选中的变量的下面增加一个空白行,单击工具栏上的按钮,在选中的变量的上面增加一个空白行。单击扩展模式按钮,可以显示或隐藏结构和数组的元素。
选中项目树中的PLC1,将PLC的组态数据和用户程序下载到CPU,将CPU切换到RUN模式。打开数据块1以后,单击工具栏上的按钮,启动监控功能,出现“监视值”列,可以看到CPU中变量的值。
5.Pointer指针
指针数据类型(Pointer、Any和Variant)可用于FB和FC代码块的块接口参数,还可以将Variant数据类型用作指令参数。它们包含的是地址信息而不是实际的数值。
Pointer指针占6个字节(见图2-16),字节0和字节1中的数值用来存放数据块的编号。如果指针不是用于数据块,DB编号为0。3位位地址用x表示,16位字节地址用b表示。字节2用来表示CPU中的存储区,存储区的编码见表2-5。
图2-16 Pointer指针的结构
P#20.0是内部区域指针,不包含存储区域。P#M20.0是包含存储区域M的跨区域指针,P#DB10.DBX20.0是指向数据块的DB指针,存储有数据块的编号。输入时可以省略“P#”,编译时STEP 7会将它自动转换为指针形式。
表2-5Pointer指针中的存储区编码
6.Any指针
指针数据类型Any指向数据区的起始位置,并指定其长度。Any指针使用存储器中的10个字节(见图2-17),字节4~9的意义与图2-16中Pointer指针的0~5号字节相同。存储区编码见表2-5,字节1(数据类型编码)的意义见S7-1200的系统手册。
图2-17 Any指针的结构
Any指针可以用来表示一片连续的数据区,例如P#DB2.DBX10.0BYTE8表示DB2中的DBB10~DBB17这8个字节。在这个例子中,DB编号为2,重复因子(数据长度)为8,数据类型的编码为B#16#02(Byte)。
Any指针也可以用地址作实参,例如DB2.DBW30和Q12.5,但是只能指向一个地址。
7.Variant指针
Variant数据类型可以指向各种数据类型或参数类型的变量。Variant指针可以指向结构和结构中的单个元素,它不会占用任何存储器的空间。
下面是使用符号地址的Variant数据类型的例子:MyDB.Struct1.pressure1,MyDB、Struct1和pressure1分别是用小数点分隔的数据块、结构和结构的元素的符号地址。
下面是使用绝对地址的Variant数据类型的例子:P#DB5.DBX10.0INT12和%MW10,前者相当于数据类型Any,用来表示一个地址区,其起始地址为DB5.DBW10,一共12个连续的Int(整数)变量。
8.PLC数据类型
PLC数据类型用来定义可以在程序中多次使用的数据结构。打开项目树的“PLC数据类型”文件夹,双击“添加新数据类型”,可以创建PLC数据类型。定义好以后可以在用户程序中作为数据类型使用。
PLC数据类型可以用作代码块接口或数据块中的数据类型,或用于创建具有相同数据结构的全局数据块的模板。例如,为混合颜色的配方创建PLC数据类型后,用户可以将该PLC数据类型分配给多个数据块。通过调节各数据块中的变量,就可以创建特定颜色的配方。
9.使用符号方式访问非结构数据类型变量的“片段”
可以用符号方式按位、按字节或按字访问PLC变量表和数据块中某个符号地址变量的一部分。双字大小的变量可以按位0~31、字节0~3或字0~1访问(见图2-18),字大小的变量可按位0~15、字节0~1或字0访问。字节大小的变量则可按位0~7或字节0访问。
例如在PLC变量表中,“状态”是一个声明为DWord数据类型的变量,“状态”.x11是“状态”的第11位,“状态”.b2是“状态”的第2号字节,“状态”.w0是“状态”第0号字。
图2-18 双字中的字、字节和位
10.访问带有一个AT覆盖的变量
通过关键字“AT”,可以将一个已声明的变量覆盖为其他类型的变量,比如通过Bool型数组访问Word变量的各个位。使用AT覆盖访问变频器的控制字和状态字的各位非常方便。
在FC或FB的块接口参数区组态覆盖变量。生成名为“函数块1”的函数块FB1,用右键单击项目树中的“函数块1”,选中快捷菜单中的“属性”,在“属性”选项卡取消“优化的块访问”属性(去掉复选框中的对勾)。
打开函数块1的接口区,输入想要用新的数据类型覆盖的输入参数“状态字”,其数据类型为Word(见图2-19)。在“状态字”下面的空行中输入变量名称“状态位”,双击“数据类型”列表中的“AT”,在“名称”列的变量名称“状态位”的右边出现“AT‘状态字’”。
再次单击“数据类型”列,并声明变量“状态位”的数据类型为数组Array[0..15]ofBool。单击“状态位”左边的按钮,它变为,显示出数组“状态位”的各个元素,例如“状态位[0]”。至此覆盖变量的声明已经完成,可以在程序中使用数组“状态位”的各个元素,即Word变量“状态字”的各位。
图2-19 在块的接口区声明AT覆盖变量
2.3.5 系统存储区
1.过程映像输入/输出
过程映像输入在用户程序中的标识符为I,它是PLC接收外部输入的数字量信号的窗口。输入端可以外接常开触点或常闭触点,也可以接多个触点组成的串、并联电路。
在每次扫描循环开始时,CPU读取数字量输入点的外部输入电路的状态,并将它们存入过程映像输入区(见表2-6)。
表2-6 系统存储区
过程映像输出在用户程序中的标识符为Q,用户程序访问PLC的输入和输出地址区时,不是去读、写数字量模块中信号的状态,而是访问CPU的过程映像区。在扫描循环中,用户程序计算输出值,并将它们存入过程映像输出区。在下一扫描循环开始时,将过程映像输出区的内容写到数字量输出点,再由后者驱动外部负载。
对存储器的“读写”“访问”“存取”这3个词的意思基本上相同。
I和Q均可以按位、字节、字和双字来访问,例如I0.0、IB0、IW0和ID0。程序编辑器自动地在绝对操作数前面插入%,例如%I3.2。在SCL中,必须在地址前输入“%”来表示该地址为绝对地址。如果没有“%”,STEP7将在编译时生成未定义的变量错误。
2.外设输入
在I/O点的地址或符号地址的后面附加“:P”,可以立即访问外设输入或外设输出。通过给输入点的地址附加“:P”,例如I0.3:P或“Stop:P”,可以立即读取CPU、信号板和信号模块的数字量输入和模拟量输入。访问时使用I:P取代I的区别在于前者的数字直接来自被访问的输入点,而不是来自过程映像输入。因为数据从信号源被立即读取,而不是从最后一次被刷新的过程映像输入中复制,这种访问被称为“立即读”访问。
由于外设输入点从直接连接在该点的现场设备接收数据值,因此写外设输入点是被禁止的,即I:P访问是只读的。
I:P访问还受到硬件支持的输入长度的限制。以被组态为从I4.0开始的2DI/2DQ信号板的输入点为例,可以访问I4.0:P、I4.1:P或IB4:P,但是不能访问I4.2:P~I4.7:P,因为没有使用这些输入点。也不能访问IW4:P和ID4:P,因为它们超过了信号板使用的字节范围。
用I:P访问外设输入不会影响存储在过程映像输入区中的对应值。
3.外设输出
在输出点的地址后面附加“:P”(例如Q0.3:P),可以立即写CPU、信号板和信号模块的数字量和模拟量输出。访问时使用Q:P取代Q的区别在于前者的数字直接写给被访问的外设输出点,同时写给过程映像输出。这种访问被称为“立即写”,因为数据被立即写给目标点,不用等到下一次刷新时将过程映像输出中的数据传送给目标点。
由于外设输出点直接控制与该点连接的现场设备,因此读外设输出点是被禁止的,即Q:P访问是只写的。与此相反,可以读写Q区的数据。
与I:P访问相同,Q:P访问还受到硬件支持的输出长度的限制。
用Q:P访问外设输出同时影响外设输出点和存储在过程映像输出区中的对应值。
4.位存储器区
位存储器区(M存储器)用来存储运算的中间操作状态或其他控制信息。可以用位、字节、字或双字读/写位存储器区。
5.数据块
数据块用来存储代码块使用的各种类型的数据,包括中间操作状态或FB的其他控制信息参数,以及某些指令(例如定时器、计数器指令)需要的数据结构。
数据块可以按位(例如DB1.DBX3.5)、字节(DBB)、字(DBW)和双字(DBD)来访问。在访问数据块中的数据时,应指明数据块的名称,例如DB1.DBW20。
如果启用了块属性“优化的块访问”,不能用绝对地址访问数据块和代码块的接口区中的临时局部数据。
6.临时存储器
临时存储器用于存储代码块被处理时使用的临时数据。临时存储器类似于M存储器,二者的主要区别在于M存储器是全局的,而临时存储器是局部的。
1)所有的OB、FC和FB都可以访问M存储器中的数据,即这些数据可以供用户程序中所有的代码块全局性地使用。
2)在OB、FC和FB的接口区生成临时变量(Temp)。它们具有局部性,只能在生成它们的代码块内使用,不能与其他代码块共享。即使OB调用FC,FC也不能访问调用它的OB的临时存储器。
CPU在代码块被启动(对于OB)或被调用(对于FC和FB)时,将临时存储器分配给代码块。代码块执行结束后,CPU将它使用的临时存储器区重新分配给其他要执行的代码块使用。CPU不对在分配时可能包含数值的临时存储单元初始化。只能通过符号地址访问临时存储器。
可以通过菜单命令“工具”→“调用结构”查看程序中各代码块占用的临时存储器空间。