传统线性程序(OB1 里直接写梯形图)只适合小型简易设备;多工位、多机台复用的非标自动化、成套电控柜项目,行业主流方案是结构化编程,核心载体就是 FB、FC、UDT。
FC(功能):无背景数据块,属于临时函数。内部变量使用临时区 TEMP,TEMP 变量不具备掉电保持能力,调用结束后数据丢失。适合无状态的逻辑计算,例如工程量转换、报警判断。
风险:TEMP 临时变量如果没有先赋值再读取,会读取到内存残留垃圾数据,出现偶发随机故障,是现场隐蔽 BUG 高发点。
FB(功能块):自带独立背景 DB 块,内部静态变量 STAT 可以保存状态,掉电可保持。适合带状态持续保存的对象,比如单工位气缸、输送电机、阀门控制。 每调用一次 FB,分配独立背景 DB,实现多实例复用:写一套电机 FB,直接调用多份控制多台电机,程序结构统一,减少重复代码,方便后期维护改程序。
UDT 相当于工控自定义结构体,可以把同一设备的 IO 信号、参数、报警、状态打包成一个数据类型。 示例:电机 UDT 包含:启动指令、停止指令、反馈信号、故障位、运行频率、报警代码、延时参数。 把 UDT 作为 FB 接口参数,一个变量就能传递整套设备数据,大幅减少接口引脚数量,程序可读性显著提升。
设备对象化:气缸、电机、传感器、阀门全部封装 FB,采用面向对象思路;
程序分层:OB1 主循环只负责调用 FB,不写底层逻辑;中断 OB 处理急停、高速信号;
数据分离:工艺逻辑和设备参数分离,参数统一放在全局 DB,方便上位机、触摸屏读写;
可移植性:FB 内部不使用全局变量,所有交互全部通过接口 IN/OUT,项目复用直接复制功能块。
FB 多重实例调用时,注意背景 DB 的存储,不要滥用单一背景;
UDT 修改结构后,需要重新编译 DB 块,否则会出现数据偏移,通讯读写错乱;
大量 FB 调用会增加程序扫描时间,复杂项目需要评估扫描周期,必要时拆分任务到不同 OB 块。
结构化编程最大价值不是代码好看,而是降低非标项目后期调试、现场改工艺、设备售后维护的成本,是大中型自动化项目电控方案的标准开发模式。
上一篇:标题:PLC 循环扫描机制深度解析:输入采样、程序执行、输出刷新的底层逻辑
下一篇:没有了!