天天PLC培训学校欢迎您!

|在线报名
天天PLC培训学校
课程导航

深度解析:西门子 PLC 中 FC 与 FB 函数块的差异

logo
来源:天天PLC

更新:2026/3/25|关注9

资讯详情
    1. 在西门子 PLC 编程体系里,函数块 FC 与 FB 存在显著区别,理解这些差异对高效编程至关重要。

    FB 和 FC 的基本定义

    • FB 功能块:它带有背景数据块,本质上类似一种具备特定功能的模块。
    • FC 功能:相当于函数,在程序中实现特定功能。
    • 调用关系:FB 和 FC 块都类似于子程序,既能调用其他 FB、FC 块,也能被 OB、FB、FC 块调用。

    FB 和 FC 之间的主要差异

    • 存储区差异:FB 借助背景数据块作为自身存储区,而 FC 没有独立存储区,通常使用全局 DB 或 M 区。
    • 局部变量差异:FB 的局部变量包含 STAT 和 TEMP,FC 由于缺乏自身存储区,所以不具备 STAT。另外,TEMP 本身无法设置初始值。
    需注意,FB 和 FC 本质上目的相同,任何逻辑要求二者都能达成,只是实现方式在效率上存在差异,这也和工程师个人编程习惯相关。

    FB 块优点

    • 易于移植:对于控制逻辑相同但参数不同的被控对象,只需使用不同背景 DB,同一个 FB 块就能便捷应用。
    • 多重背景:可减少重复工作,有效提高编程效率。
    • 参数修改便捷:在多次调用时,修改参数更方便。
    • 独立存储区:拥有独立的存储区域,数据管理更清晰。

    FC 块优点

    • 小巧灵活:对于非多次调用的程序,FC 更易于理解。
    • 节省存储资源:不占用额外的存储资源,在资源有限的情况下优势明显。

    FB、FC 块管脚定义

    • IN:此变量由外部输入,本程序块只能读取,不能对其进行写入操作。
    • OUT:是本程序块输出的变量,本程序块可对其进行读写,而其他程序通过引脚仅能读取该变量的值,无法写入。
    • IN_OUT:输入输出变量,本程序块和其他程序都能对这个引脚的值进行读写。
    • TEMP:临时变量,用于暂时存储数据,这些临时数据存于 CPU 工作存储区的局部数据堆栈(L 堆栈)中。
    • STAT:在 PLC 运行期间一直被存储,S7 将静态变量定义在背景数据块(仅针对 FB,FC 和 OB 无静态变量)。当被调用块运行时,可读取或修改静态变量,被调用块结束后,静态变量保留在数据块中。

    为何定义的 FB、FC 块多次调用后程序混乱?

    对于多次调用的程序块,若使用 FB 块,建议每次调用更换不同的背景 DB;若使用 FC 块,则需保证使用的存储地址不重复,即每次调用块中涉及的地址都不同。

    为何含有定时器或计数器的 FB 或 FC 单次调用正常,多次调用时定时器或计数器混乱?

    对于多次调用的 FB、FC,若使用 S7 定时器、计数器,需在 IN 接口中定义 TIMER 或 Counter,每次调用 FB 或 FC 时,赋予不同的定时器或计数器号;若使用 IEC 定时器、计数器,则要在 IN 接口定义 Block_DB,每次调用 FB 或 FC 时,给其中的 IEC 定时器或计数器赋予不同的 DB 块。

    临时变量引发的问题

    临时变量可在组织块 OB、功能 FC 和功能块 FB 中使用,块执行时用于临时存储数据。块执行结束后,堆栈地址会重新分配给其他程序块,该地址上的数据不会自动清零,直至被其他程序块赋予新值。因此使用临时变量需遵循 “先赋值,再使用” 的原则。

    常见导致程序运行不正常的情况

    • 块程序运行不稳定:某个块程序运行状态时好时坏,其中某个或多个数值偶尔出现异常。这是因为未遵循 “先赋值,再使用” 原则,TEMP 的数值在每个扫描周期开始时未明确赋值,导致该地址数值随机。
    • 多块使用 TEMP 冲突:多个块使用 TEMP 时,单独使用任意一个块都正常,但一起使用就无法正常运行。原因是 TEMP 未先赋值就使用,程序块 1 的 TEMP 数值未清零,CPU 运行机制调用该地址或将其分配给程序块 2 使用,导致 TEMP 地址数值不为 0,程序出现混乱。由于内存运行机制不公开,这一分配过程看似随机,可能导致程序多次运行前期正常,一段时间后出现问题。遵循 “先赋值,再使用” 原则可避免此类情况。
    • TEMP 无法自锁:TEMP 无法像 M 点或 Q 点一样保持上一个周期的数值,它需要在每个扫描周期都有明确赋值,即先进行赋值(写)操作,再进行使用(读写)。解决方法是,FB 可使用 STAT 静态变量,FC 可使用 M 区或全局 DB 地址。
  • 培训课程

在线咨询
咨询电话
18501512500
联系人:王老师
工作时间:7*24
联系微信
天天PLC培训