为什么 STEP 7 Basic V10.5 中本地数据和功能块参数被覆盖?

描述
跟功能块 (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 中的值被使用。随机值不能被使用,但也有可能发生旧值被无理由地继续处理。

为什么 STEP 7 Basic V10.5 中本地数据和功能块参数被覆盖?
图. 01

图. 01 以调用带背景数据块的功能块,并在 OB1 中调用一个功能为例。因为功能的本地数据区中存储数据是“没有保持”功能的,当功能被调用的时候分析和分配数据是必要的。

更多信息可在 STEP 7 Basic V10.5 中关于下面内容的在线帮助中得到

  • 块接口结构
  • 调用结构
  • 系统存储区域

原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc331727.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年11月5日 下午12:03
下一篇 2021年4月12日 上午12:00

相关推荐

发表回复

登录后才能评论