PLC 块是怎么调用的?_plc程序块有哪些

PLC(可编程逻辑控制器)的程序采用模块化或者结构化编程设计时。通过 “块”使用的方式来组织不同功能的代码。块调用是 PLC 程序执行的使用场景比较多。

块的调用指的是一个块在执行过程中触发另一个块的执行,执行完成后返回原块继续运行。理解块调用原理需要从块的类型、调用机制、数据传递和执行流程四个方面展开。

PLC执行顺序是从上到下,从左到右。所以块的执行对于程序结构会有显著的变化。

块调用的顺序和嵌套称为调用层级。

下图所示为在一个执行周期内的块调用顺序和嵌套深度示例:


块调用深度,引用博途帮助文件


OB 的调用完全由 PLC 操作系统控制,根据不同的 OB 类型和触发条件自动执行。例如,OB1 作为最常用的组织块,在 PLC 上电后,操作系统会按照设定的固定周期不断调用 OB1,用户在 OB1 中编写的逻辑(如调用 FC、FB 等)会随着 OB1 的循环调用而反复执行。

功能(FC)的调用:无状态复用


FC 由用户程序主动调用,其调用流程如下:

1.假设 OB1 中调用 FC1:

2.OB1 执行到 “CALL FC1” 指令时,暂停当前的执行过程。

4.系统将 FC1 的输入参数(如 I0.0 的状态)从 OB1 传递到 FC1 的接口。

5.执行 FC1 内部的逻辑(如根据输入参数进行计算、逻辑判断等操作)。

6.FC1 将处理结果通过输出参数(如 Q0.0)返回给 OB1。

7.释放 FC1 的临时变量,程序回到 OB1 的断点处继续执行后续的指令。

由于 FC 无状态的特性,每次调用时都需要重新传递输入参数,其执行结果仅取决于当前的输入参数,不会受到之前调用的影响。

功能块(FB)的调用:带状态复用

FB 由用户程序调用:

FB 的带状态特性使其非常适合用于需要保留历史状态的控制场景,如计数器功能块,通过背景 DB 可以保存累计的计数值,每次调用时在原有计数值的基础上进行增减。

块调用是 PLC 模块化设计编程结构化编程的核心,其优势包括:

同一 FC/FB 可被多个调用者重复使用(如多个工位共用一个 “计数” FC);

整个程序结构更加清楚,核心封装复用,复杂功能拆分为块(如 “检测”“计算”“执行”,气缸,电机的运行检测)便于调试和维护,程序调试测试的工作量将大大降低。

FB 通过背景 DB 保存状态,适合需要 “记忆” 的场景(如累计计数、历史数据追溯,一些动作的执行记录等)。

个人观点,欢迎讨论指出不足。

相关文章

cython如何调用C语言的函数?_c 中如何调用python

在 Cython 中调用 C 语言函数主要通过以下几种方式实现:1. 使用 cdef extern 声明外部 C 函数基本语法cdef extern from "头文件.h":返回类型...

C/C++函数调用的奥秘_c++函数调用原理

在C/C++编程的世界里,函数调用是程序运行的核心机制之一。然而,许多程序员在日常开发中,往往只关注代码的逻辑,而忽略了函数调用背后的底层细节。今天,就让我们一起深入探索C/C++函数调用的全过程,从...

C++成员函数如何工作?this指针、name mangling 成员函数指针解析

0.引言 在C++面向对象编程中,成员函数是对象行为的核心载体。我们每天都在使用成员函数,但却很少深入思考其底层的实现机制:为什么成员函数可以直接访问成员变量?编译器如何区分不同类的同名函数?静态成员...

C语言入门:学生成绩管理程序的完善(1):用文件保存数据

这是C语言入门的第27篇文章。今天讲学生成绩管理程序的完善:怎样利用文件来保存数据。还是昨天的问题:我怎么知道一个文件的内容是什么?我怎么知道比如一行有多少个数,多少个数以后是换行?这是因为文件是我们...

C语言应用笔记:常用的printf打印输出不同类型数据

我叫程序员阿虾, 在终端前摸过太多凌晨, 熟悉printf这一行字带来的安心与危险。今天想跟你聊聊我踩过的坑, 和一些别人不常说的细节, 用第一人称把经验交给你, 有点唠叨, 希望你少走弯路。为什么要...

C语言应用笔记:简单的最大最小值比较

使用宏定义实现泛型比较函数,用于求取两个值的最大值和最小值。核心宏定义解析#define MAX(x, y) ((x) > (y) ? (x) : (y)) // 返回两个值中较大的一个 #de...