CoDeSys入门实战一起学习(十四):功能块(FB)与程序(PRG):实例化、调用与工程实践-CODESYS资源下载区-酷德网 - CoDeSys软件教程下载,CoDeSys工控资讯门户 

酷德网

HSC6490-cn中国制造,中国芯~
查看: 455|回复: 0

CoDeSys入门实战一起学习(十四):功能块(FB)与程序(PRG):实例化、调用与工程实践

[复制链接]

该用户从未签到

发表于 2026-3-18 11:04:12 | 显示全部楼层 |阅读模式
在前两篇博客中,我们掌握了POU的基础概念与函数(FUN)的编程方法。本文将聚焦POU的另外两类核心单元——功能块(FB)与程序(PRG),深入讲解FB的实例化、扩展性,PRG的调用逻辑与工程配置,结合案例说明两类POU在实际项目中的应用场景,帮助大家构建完整的PLC编程知识体系。

一、功能块(FB)深度解析:与函数的核心区别

功能块(FB)是带内部状态、可复用的复杂逻辑单元,常用于反复调用的控制场景(如计数器、定时器、PID控制),其与函数(FUN)的核心区别可通过下表强化记忆:

对比维度

函数(FUN)

功能块(FB)

内存分配

无指定内存地址,无内部存储

分配固定内存地址,存储内部状态变量

输入/输出

多输入,仅1个返回值

多输入、多输出(或无输出)

调用关系

仅可调用函数

可调用函数、其他功能块

使用前提

无需实例化,直接调用

必须实例化后才能调用

核心特征

无状态,相同输入必获相同输出

有状态,相同输入可能获不同输出

二、功能块(FB)的核心属性与实操

1. 实例化:FB使用的前提

FB的类型是抽象结构定义,并非具体数据实体,必须通过实例化转换为具体对象才能调用。实例化的本质是“定义FB类型的变量”,每个实例拥有独立的内部状态与内存空间,互不干扰。

实例化步骤(以TON延时ON功能块为例):

在目标POU(如主程序)的声明区,声明FB实例,格式为“实例名 : FB类型;”;


  • 示例代码:
    CoDeSys入门实战一起学习(十四):功能块(FB)与程序(PRG):实例化、调用与工程实践-1.png

  • 调用实例:在代码区通过实例名调用FB,赋值输入参数,读取输出参数
    CoDeSys入门实战一起学习(十四):功能块(FB)与程序(PRG):实例化、调用与工程实践-2.png

注意:同一FB类型可实例化多个对象(如Time9、),实例名在同一POU中不可重复,各自的内部状态独立(如Time9的延时计数不影响其他定时器)。

2. 扩展性:面向对象的FB扩展

CoDeSys支持面向对象编程,FB可通过“EXTENDS”关键字派生子FB,子FB继承父FB的所有变量与方法,同时可添加自定义逻辑、重写父FB方法,实现功能扩展。

扩展FB实操步骤:


  • 自定义父FB(fbA),声明变量与方法(如基础开关逻辑);
    CoDeSys入门实战一起学习(十四):功能块(FB)与程序(PRG):实例化、调用与工程实践-3.png

  • 新建子FB(fbB),在声明行添加“EXTENDS fbA”,继承父FB属性;
    CoDeSys入门实战一起学习(十四):功能块(FB)与程序(PRG):实例化、调用与工程实践-4.png

3. 自定义FB案例:简易增/减计数器

自定义一个FB(FB_Counter),实现增计数、减计数、复位功能,步骤如下:


  • 新建FB,名称设为“FB_Counter”,编程语言选ST;
  • 声明区变量:
    CoDeSys入门实战一起学习(十四):功能块(FB)与程序(PRG):实例化、调用与工程实践-5.png

  • 码区逻辑:// 复位逻辑(优先级最高)
    CoDeSys入门实战一起学习(十四):功能块(FB)与程序(PRG):实例化、调用与工程实践-6.png

  • 实例化调用:在主程序中声明FB实例,调用并测试计数逻辑。
    CoDeSys入门实战一起学习(十四):功能块(FB)与程序(PRG):实例化、调用与工程实践-7.png

三、程序(PRG):全局逻辑的核心载体

程序(PRG)是POU中最大的单元,作为全局逻辑的核心载体,可调用函数、功能块及其他程序,需绑定任务才能执行。其核心作用是整合分散的POU模块,实现完整的控制流程。

1. 程序(PRG)的核心性能


  • 支持地址配置:可声明PLC物理地址变量(如%IX1.1、%QD12),支持分级寻址,直接映射硬件信号;


  • 禁止自调用:不能直接或间接调用自身(避免死循环);


  • 实例化规则:仅在资源中实例化,需与任务绑定(否则不执行),无实例名,通过任务触发执行;


  • 调用权限:可被其他POU调用,函数不可调用程序。
2. 程序调用:文本与图形化方式

(1)文本语言调用(ST/IL)

调用程序时需加括号,输入参数用“:=”赋值,输出参数用“=>”接收,示例:

// 调用程序Prog1,输入参数in_var赋值为10,输出参数out_var传入erg变量
                        Prog1(in_var:= 10, out_var => erg);

可通过F2快捷键打开“输入助手”,自动列出程序参数,简化赋值操作。

(2)图形化语言调用(LD/FBD)

直接拖拽程序到编辑界面,在接口处填写变量或数值即可,直观展示调用关系,适合复杂控制链路的可视化编程。

3. 程序绑定任务:确保执行的关键步骤

程序需绑定任务才能被PLC执行,步骤如下:


  • 在左侧项目设备树中,找到“任务配置”,双击打开;
    CoDeSys入门实战一起学习(十四):功能块(FB)与程序(PRG):实例化、调用与工程实践-8.png

  • 右键目标任务(如循环任务),选择“添加对象”→“程序调用”;
    CoDeSys入门实战一起学习(十四):功能块(FB)与程序(PRG):实例化、调用与工程实践-9.png

  • 选择需绑定的程序(PRG),点击确定,程序将随任务周期执行(如循环任务每10ms执行一次)。
    CoDeSys入门实战一起学习(十四):功能块(FB)与程序(PRG):实例化、调用与工程实践-10.png

四、工程实践:POU创建的核心原则

在实际项目中,合理设计POU可大幅提升开发效率与代码可维护性,建议遵循以下原则:


  • 按工艺/功能拆分:将工程按流程拆分(如加料、搅拌、出料),每个流程对应一个程序(PRG),降低逻辑复杂度;
  • 重复逻辑封装为FB:如多台设备的开关控制、相同检测逻辑,封装为一个FB,通过实例化调用,减少代码冗余;
  • 独立算法设为FUN:如数据转换、数学运算等无状态逻辑,设为函数,便于表达式运算与复用;
  • 命名规范统一:POU、变量、实例名无空格、不重名,采用“类型_功能”命名(如FB_PID、F_Scale),提升可读性;
  • 内存优化:FB中优先用VAR_IN_OUT替代VAR_INPUT/VAR_OUTPUT,减少内存占用。
五、总结

至此,POU系列博客已全部更新完毕。我们从基础概念出发,逐步讲解了函数(FUN)、功能块(FB)、程序(PRG)的核心属性、实操方法与工程应用,形成了完整的知识闭环。在实际编程中,需根据场景灵活选择POU类型,通过“拆分-封装-复用”的思路设计程序,既能提升开发效率,又能降低后期维护成本。后续可结合标准库中的POU(如定时器、计数器),多做实操练习,逐步掌握复杂PLC项目的编程技巧。
+10
不赞一个?
打赏鼓励一下!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则


顶部qrcode底部
关注酷德网订阅号,获取更多资讯!

QQ|Archiver|手机版|小黑屋|酷德论坛 ( 苏ICP备16065247号-1 )|网站地图

GMT+8, 2026-10-9 10:30 , Processed in 0.146046 second(s), 50 queries .

酷德网

© 2001-2013 Hicodesys. 技术支持 by 酷德网

快速回复 返回顶部 返回列表