首页 理论教育SFC复制功能实现

SFC复制功能实现

【摘要】:图4-14 SFC21功能示意表4-23 SFC21的输入输出参数如果将一个结构作为输入参数传送,STEP 7总是把一个结构的长度定义为偶数个字节数。否则,CPU在调用SFC 23时将启动OB121。此SFC查询所选数据块的数据字节数并检查其是否为只读数据块。如果相同编号的数据块已存在于工作存储器和/或装载存储器中,或者该数据块为复制得到的,则SFC终止运行,并生成一条故障消息。

1.使用SFC 20“BLKMOV”复制存储区

使用SFC 20“BLKMOV”(块移动)可将存储器区(=源区域)的内容复制到另一个存储器区(=目标区域),如图4-13所示。如部分数据块、存储位、输入的过程映像分区(部分过程映像)和输出的过程映像分区(部分过程映像)均可作为源区域。

SFC20的输入输出参数如表4-21所示,其源参数可以是与程序执行无关的装载存储器中数据块(用关键字UNLINKED编译的数据块)的一部分。

978-7-111-38359-8-Chapter04-40.jpg

图4-13 SFC 20工作示意

表4-21 SFC20的输入输出参数

978-7-111-38359-8-Chapter04-41.jpg

在编程过程中,源区域与目标区域一定不可以交叉。如果指定的目标区域大于源区域,此功能只将源区域中包含的数据复制到目标区域。如果指定的目标区域(DSTBLK参数)小于源区域(SRCBLK参数),则功能仅复制所能写入到目标区域的尽可能多的数据。如果实际存在的目标区域或源区域小于源区域或目标区域的存储区的参数集大小(SRCBLK、DST-BLK参数),则数据将不传送。如果ANY指针(源或目标)是布尔类型,则指定的长度必须是8的倍数;否则SFC将不能执行。源或目标参数(或二者都)的数据类型也可以为STRING。如果源为字符串,将只复制该字符串的当前字符。如果源和目标为字符串,则复制字符数目的当前长度将被写入。

2.使用SFC 81“UBLKMOV”不间断地复制变量

使用SFC 81“UBLKMOV”(不间断的块移动),可以将存储区(=源区域)的内容原封不动地复制到另一个存储区(=目标区域)。此复制操作不能被其他操作系统任务打断。

使用SFC 81“UBLKMOV”,可以复制除计数器、定时器外设I/O区存储区、与运行无关的块、块类型(FB、SFB、FC、SFC、OB、SDB)之外的所有存储器区,其输入输出参数如表4-22所示。

表4-22 SFC81输入输出参数列表

978-7-111-38359-8-Chapter04-42.jpg

在编程中,SFC81可以复制最大512字节的数据,但不同的CPU此数值不同。同时,源区域与目标区域一定不可以交叉。如果指定的目标区域大于源区域,此功能只将源区域中包含的数据复制到目标区域。如果指定的目标区域小于源区域,则只复制目标区域中能容纳的数据。

3.使用SFC21“FILL”初始化存储区

使用SFC 21“FILL”,可以初始化一个存储区(目标区域),数据采用另一个存储区(源区域)的内容。此SFC拷贝数据直到充满整个存储区。图4-14所示为将MW14-MW20存储器中的内容FILL到MW100-MW118中。

表4-23为SFC21的输入输出参数,如果实际存在的目标区域或源区域小于源区域或目标区域的存储区的参数集大小(BVAL、BLK参数),则数据将不传送。如果ANY指针(源或目标)是布尔类型,则指定的长度必须是8的倍数;否则SFC将不能执行。

978-7-111-38359-8-Chapter04-43.jpg

图4-14 SFC21功能示意

表4-23 SFC21的输入输出参数

978-7-111-38359-8-Chapter04-44.jpg

如果将一个结构作为输入参数传送,STEP 7总是把一个结构的长度定义为偶数个字节数。因此,如果声明一个包含奇数个字节数的结构,需要另加一个字节的存储空间。

【实例】

声明一个结构如下:

TYP_5_BYTE_STRUCTURE:STRUCT

BYTE_1_2:WORD

BYTE_3_4:WORD

BYTE_5:字节

END_STRUCT

声明的结构“TYP_5_BYTE_STRUCTURE”需要6字节存储空间。

4.使用SFC 22“CREAT_DB”创建数据块

使用SFC 22“CREAT_DB”(创建数据块),可以创建不包含初始化数据的数据块。同时,该数据块中会包含随机数据。此SFC可以创建一个可选择长度的数据块,数据块号在一个特定范围内。SFC将给数据块分配一个可能的最低编号。如果要创建特定编号的数据块,只需选择将上限和下限指定为同一值的范围。在用户程序中已存在的数据块编号不可以再使用。数据块的长度必须为偶数字节。

5.使用SFC 23“DEL_DB”删除数据块

使用SFC 23“DEL_DB”(删除数据块),可删除存在于CPU的工作存储器以及装载存储器(如果存在)中的数据块。此数据块必须没有在当前或任何更低的优先级中打开,换言之,此数据一定不能是位于两个数据块寄存器中的任意一个或B堆栈中。否则,CPU在调用SFC 23时将启动OB121。如果OB121不存在,则CPU停机。对于S7-300(CPU 318例外),删除数据块时不调用OB121。

6.其他SFC功能

1)使用SFC 24“TEST_DB”(测试数据块),可获取位于CPU的工作存储器中的数据块的信息。此SFC查询所选数据块的数据字节数并检查其是否为只读数据块。

2)使用SFC 25“COMPRESS”可以压缩装载存储器和工作存储器的RAM区。压缩功能的启用与在RUN-P模式(模式选择)下外部启动CPU类似。

3)使用SFC 44“REPL_VAL”(替换值),可以传送一个值到累加器1中,这个值存在于可以引发故障的优先级中。

4)使用SFC 82“CREA_DBL”(在装载存储器中创建数据块),可在装载存储器(微型存储卡)中创建新的数据块。

SFC82使用指定范围中的一个编号生成一个默认值大小的数据块。该数据块的编号为指定范围内的最小可能值。可以通过分配指定编号范围的上限和下限值来生成一个特定编号的数据块。不能把已在用户程序中存在的数据块编号分配给新生成的数据块。如果相同编号的数据块已存在于工作存储器和/或装载存储器中,或者该数据块为复制得到的,则SFC终止运行,并生成一条故障消息。

5)使用SFC83“READ_DBL”(读取装载存储器中的数据块)可将装载存储器(微型存储卡)中的数据块或数据块的一个数据区复制到目标数据块的数据区中。目标数据块必须与运行有关;即不能用属性UNLINKED创建。在复制期间,装载存储器的内容不变。

6)使用SFC84“WRIT_DBL”(在装载存储器中写数据块),可以将工作存储器中某一数据块或数据块区域中的内容传送到“微存储卡”中的数据块或数据块的数据区中。此源数据必须与过程相关;即它一定不是用属性UNLINKED创建的。因此,它也可以使用SFC22“CREAT_DB”生成。

7)使用SFC85“CREA_DB”(创建数据块),可在用户程序中创建不带任何默认值的数据块。相反,此数据块包含随机数据。SFC将以指定区域中的编号和默认大小创建一个数据块。SFC给该数据块分配一个可能的最低编号。要创建具有特定编号的数据块,请为默认区域的上限和下限输入同样的编号。用户程序中已经存在的数据块编号不可以再使用。数据块的长度必须是偶数个字节。