西门子PLC关于FC、FB及静态变量的使用场景和应用区别

12333社保查询网www.sz12333.net.cn 2026-02-15来源:人力资源和社会保障局

  关于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. 核心特性:保持与私有

  • 数值保持:这是静态变量最重要的特性。在FB执行完毕后,静态变量的值不会清零或消失,而是继续保存在背景DB中。当下个扫描周期再次调用同一个FB(及对应的背景DB)时,读取到的静态变量是上一次保存的值-2-6-10。
  • 块内私有:静态变量是当前FB的局部变量,理论上其他程序块无法直接访问(区别于全局变量M或DB)-4。当然,通过背景数据块,外部程序实际上是可以读写这些静态变量的-2-8。

      3. 为什么必须用静态变量?(实战意义)这是由上述“保持”特性决定的经典应用场景:

  • 边沿检测:检测信号从0变1或1变0时,需要“记住”上一个周期的状态。如果用临时变量(TEMP),该记忆值在每个周期都会被随机覆盖,导致边沿检测失效。必须使用静态变量(STAT)作为边沿存储位-4-7。
  • 累计计数/定时:电机运行时间的累加、产品数量的累加,需要不断在上一次结果上加1。
  • 自锁/保持电路:内部线圈的自锁逻辑依赖上一次扫描周期的结果。

      特别提醒:如果在FC中也需要实现类似“记忆”的功能(如边沿检测),由于FC没有静态变量,必须将存储位定义为IN-OUT(输入输出)参数,通过引脚连接一个外部的全局存储器(如M区或全局DB)来模拟“静态存储”-4。

      4. 临时变量(TEMP)的陷阱作为对比,临时变量(TEMP)是所有逻辑块(OB/FC/FB)都有的。它的生命周期仅限于当前扫描周期该块的执行期间。一个最常见的编程错误是:在未对TEMP变量进行赋值(写)之前,直接读取(读)它。此时读到的值是CPU局部堆栈中残留的随机值,会导致程序运行“时好时坏”,极难排查-7。使用TEMP必须遵循“先写后读”原则-7。

    总结

      选择FB还是FC,本质上是在选择“面向对象”还是“面向过程”。

  • 对于电机、阀门、气缸等具有明确状态且需要复用的控制对象,使用FB,将其接口和静态变量封装起来,每调用一次生成一个新的背景DB来管理数据。
  • 对于数学运算、数据转换、编码解码等无需记忆状态的纯算法逻辑,使用FC,它轻量、无额外数据存储开销

    本文标题:西门子PLC关于FC、FB及静态变量的使用场景和应用区别本文网址:https://www.sz12333.net.cn/zhzx/kexue/70570.html 编辑:12333社保查询网
  • 本站是社保查询公益性网站链接,数据来自各地人力资源和社会保障局,具体内容以官网为准。
    定期更新查询链接数据 苏ICP备17010502号-11