关于S7-1200中FC与FB的区别以及静态变量的含义,核心结论是:FB是“带记忆”的功能块,它通过静态变量和背景数据块来保持数据;FC是“无记忆”的函数,无法内部存储数据。静态变量正是FB实现“记忆”功能的关键。
为了看得更清楚,现将两者的核心区别整理为下表:
维度
FB (功能块)
FC (函数)
关键差异说明
存储区
有专属存储区(背景数据块 Instance DB)-5-7-8
无专属存储区,依赖全局DB或M区-7
最根本区别。FB自带“记忆体”,FC没有。
变量类型
支持 静态变量 (STAT) 和临时变量(TEMP)-4-6-10
仅有临时变量(TEMP),无静态变量-4-7
静态变量是FB独占的“记忆”单元。
数据保持
变量值存储在背景DB中,调用结束后保持,下次调用时仍可使用-2-6-8
临时变量在调用结束后立即释放,数值丢失-2-7-10
FB适合需要“记住”状态的对象;FC适合纯计算逻辑。
编程思维
类似面向对象的“类”或“对象”(如一个电机)-1-3
类似面向过程的“方法”或“函数”(如数学计算)-1-7
FB对应实体,FC对应操作。
多次调用
每调用一次需指定一个不同的背景DB来隔离数据-5-7-8
每次调用需确保使用的全局地址不重复,否则冲突-7
FB极易移植和复用;FC需手动管理地址,易出错。
深入理解:静态变量 (STAT) 到底是什么?1. 定义与存储静态变量是只能在FB中定义的一种局部变量-4-6。它并不像临时变量那样存储在临时的CPU堆栈中,而是被永久地分配在FB关联的背景数据块(DB)里-4-7-8。
2. 核心特性:保持与私有
3. 为什么必须用静态变量?(实战意义)这是由上述“保持”特性决定的经典应用场景:
特别提醒:如果在FC中也需要实现类似“记忆”的功能(如边沿检测),由于FC没有静态变量,必须将存储位定义为IN-OUT(输入输出)参数,通过引脚连接一个外部的全局存储器(如M区或全局DB)来模拟“静态存储”-4。
4. 临时变量(TEMP)的陷阱作为对比,临时变量(TEMP)是所有逻辑块(OB/FC/FB)都有的。它的生命周期仅限于当前扫描周期该块的执行期间。一个最常见的编程错误是:在未对TEMP变量进行赋值(写)之前,直接读取(读)它。此时读到的值是CPU局部堆栈中残留的随机值,会导致程序运行“时好时坏”,极难排查-7。使用TEMP必须遵循“先写后读”原则-7。
总结选择FB还是FC,本质上是在选择“面向对象”还是“面向过程”。
本站是社保查询公益性网站链接,数据来自各地人力资源和社会保障局,具体内容以官网为准。
定期更新查询链接数据 苏ICP备17010502号-11