描述
跟功能块 (FB) 不同,功能一种是没有存储区和静态变量的块。在 STEP 7 Basic V10.5 中,对于功能和功能块,临时和静态本地数据的存储方式不同。n
FBs中的静态本地数据
- 静态本地数据指的是保存在 FB 背景 DB 块中的操作数。n
- 该数据不会在块结尾被释放。n
- 该数据会被保留多个扫描周期直到被再次读写。
FBs,FCs 和 OBs 中的临时本地数据
- 临时本地数据以声明先后顺序保存在 CPU 系统存储区中,数据类型与声明时一致。n
- 该数据在块结尾被释放。n
- 变量用来存储中间值,只被保留一个扫描周期。
在本地数据区中的数据是没有保持功能的。当功能被调用的时候分析和分配数据成为必要的步骤。在调用 FC 过程中操作系统使用本地数据存储区存放类型参数传递的结果。因此,FC 在处理过程中没有完整的系统存储区。n
临时本地数据变量存储方式与存储一个全局数据块相同,分配的地址都是从 (相对的) 字节 0 开始。该编译过程同样用到本地数据,例如调用 FCs 过程中参数传送。n
表格 01 用一个例子说明块的调用结构和系统怎样在运行层级管理本地数据。n
调用结构 | 地址 | 本地数据 (路径) | 本地数据 (块) |
Main | OB1 | 12 | 12 |
==> Function 1 (call in OB1) | FC1 | 22 | 10 |
==> Function 2 (call in FC1) | FC2 | 32 | 10 |
==> Function 3 (call in OB1) | FC3 | 14 | 2 |
==> Function 2 (call in FC3) | FC2 | 24 | 10 |
==> Function 4 (call in FC2) | FC4 | 34 | 10 |
表格 01
“本地数据 (路径)”一栏说明了整个路径的本地数据,“本地数据 (块)”一栏说明了每次调用块时需要的本地数据。
注释
用符号定义地址的块对本地数据有更高的需求,因为符号地址的信息也要被存储。
临时本地数据的存储域用来存储临时的块数据。该数据是临时的,只有当块在处理过程中才有效。背景 DB 是功能块的存储域,包括传递变量、临时和静态变量。
传递变量 | OB | FB | FC |
输入 | - | 背景DB | 系统存储区 |
输出 | - | 背景DB | 系统存储区 |
输入/输出 | - | 背景DB | 系统存储区 |
内部块变量 | OB | FB | FC |
静态本地数据 | - | 背景 DB | - |
临时本地数据 | 系统存储 | 系统存储 | 系统存储区 |
表格 02
当调用一个功能 (FC) ,输入和输出变量参数和输入/输出参数符合下面的原则。
- 所有的形式参数必须赋给当前的参数,因为功能没有数据存储区。
- 如果功能的一个输出参数没有被赋值,该调用块的返回值可能是一个任意值。输出参数必须始终被赋值。
- 输入/输出参数也应该用变量对其进行参数化来防止旧值持续处理。
如果输入、输出和输入/输出参数没有被赋值,在这种情况下功能块 (FB) 存储在背景 DB 中的值被使用。随机值不能被使用,但也有可能发生旧值被无理由地继续处理。
图. 01
图. 01 以调用带背景数据块的功能块,并在 OB1 中调用一个功能为例。因为功能的本地数据区中存储数据是“没有保持”功能的,当功能被调用的时候分析和分配数据是必要的。
更多信息可在 STEP 7 Basic V10.5 中关于下面内容的在线帮助中得到
- 块接口结构
- 调用结构
- 系统存储区域
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc331727.html