1. 课程导入与工程认知
在进入 FB 功能块的具体语法之前,先要建立一个整体判断:我们写的程序最终要装进哪一类项目、由谁维护、在什么平台上运行。TIA Portal(全集成自动化门户,Totally Integrated Automation Portal)是西门子面向自动化工程的统一工程平台,它把 PLC 编程、HMI 组态、驱动配置、网络组态、诊断与在线调试放在同一个项目视图里。理解这一点,直接决定了我们后面写 FB 时的组织方式——因为 FB 不只是"一段可复用的代码",它同时是跨 PLC、HMI、驱动之间传递数据的结构化载体。
一、TIA Portal 的定位:一个项目,多个设备,一套数据
传统工程方式中,PLC 程序、触摸屏画面、变频器参数往往分属不同软件,变量表各写一份,改一个点位要同步改三处。TIA Portal 的核心价值在于"全集成":在同一个项目中建立 PLC、HMI、驱动、分布式 I/O 等设备,共享同一套符号表与数据类型。例如在 PLC 中定义一个 UDT_Motor(电机数据类型),包含 Start、Run、Fault、Speed_SP 等成员,HMI 画面可以直接引用该类型的变量,无需重复定义地址。
这种集成关系可以用下面的结构图表示。图中左侧是工程对象,右侧是它们共享的数据基础,中间通过 TIA Portal 项目统一管理:
二、为什么必须用 FB:从"复制粘贴"到"一次定义、多次调用"
假设一条产线有 8 台同型号电机,每台都需要启保停、故障检测、运行计时。如果全部写在 OB1 里,就是 8 段几乎相同的梯形图,改一个逻辑要改 8 处,漏改一处就是隐患。FB(Function Block,功能块)解决的就是这个问题:把电机控制逻辑封装成一个 FB,接口定义输入输出,内部用静态变量保存每台电机的运行状态,然后在 OB1 中调用 8 次,每次分配一个独立的背景数据块(Instance DB)。
FB 与 FC 的关键区别在于"记忆能力"。FC 没有自己的存储区,每次调用都是"算完即走";FB 通过背景 DB 保存上一次调用的状态,因此适合做需要保持状态的设备控制、步序控制、PID 回路等。下面用一个电机 FB 的接口示例说明这种封装关系:
FUNCTION_BLOCK "FB_Motor"
VAR_INPUT
Start : Bool; // 启动按钮
Stop : Bool; // 停止按钮
Fault : Bool; // 故障信号
Speed_SP : Real; // 速度设定值
END_VAR
VAR_OUTPUT
Run : Bool; // 运行输出
Speed_PV : Real; // 实际速度
END_VAR
VAR
RunMem : Bool; // 运行状态记忆
RunTime : Time; // 累计运行时间
END_VAR
BEGIN
// 启保停逻辑
IF Start AND NOT Stop AND NOT Fault THEN
RunMem := TRUE;
ELSIF Stop OR Fault THEN
RunMem := FALSE;
END_IF;
Run := RunMem;
// 运行计时
IF RunMem THEN
RunTime := RunTime + T#1s;
END_IF;
END_FUNCTION_BLOCK
调用时,每台电机分配一个背景 DB,例如 DB_Motor1、DB_Motor2……DB_Motor8。这样,逻辑只写一次,状态各自独立,修改逻辑只需改 FB 一处,所有调用点自动生效。这就是结构化编程最直接的工程收益。
三、结构化编程的三层组织
结构化编程不是"把程序拆小"这么简单,它有一套清晰的分层:最底层是设备级 FB,如电机、阀门、气缸;中间层是单元级 FB,如一个工位、一条输送线,它调用多个设备级 FB;最上层是 OB 主程序,负责按工艺顺序调用单元级 FB,并处理模式切换、急停等全局逻辑。这种分层让程序结构对应物理结构,排查故障时能快速定位到"哪一层、哪个设备"。
与之配套的是数据类型设计。建议先定义 UDT,例如 UDT_Motor 包含 Start、Stop、Fault、Run、Speed_SP、Speed_PV、RunTime,然后在 FB 接口中直接使用该 UDT 作为 InOut 参数。这样 HMI 侧只需绑定一个 UDT 变量,就能访问全部成员,减少变量表条目和通信配置工作量。
四、课程目标与最终交付项目
本课程的目标不是记住 FB 的菜单在哪里,而是能够独立完成一个可运行、可维护、可扩展的结构化 PLC 项目。具体能力包括:
- 能在 TIA Portal 中建立 PLC、HMI、驱动集成的项目结构,并规划符号表与 UDT;
- 能根据设备类型设计 FB 接口,正确区分 Input、Output、InOut、Static、Temp 的使用场景;
- 能使用多重背景(Multi-instance)组织单元级 FB,减少背景 DB 数量;
- 能编写带步序控制的 FB,并用状态机方式管理自动/手动/故障状态;
- 能对 FB 进行在线调试,通过监控表、调用结构、交叉引用定位问题;
- 能完成一个包含 3 台电机、1 个气缸、1 个 HMI 画面的小型项目,并实现手动/自动切换与故障报警。
最终交付项目设定为"小型物料输送与分拣单元":PLC 控制 3 台电机(进料、输送、分拣)、1 个气缸(推料)、1 个光电传感器(检测)、1 个急停按钮;HMI 显示运行状态、速度设定、报警信息,并支持手动/自动模式切换。项目要求全部设备控制逻辑以 FB 实现,OB1 只负责调用与模式管理,HMI 变量全部来自 UDT 与背景 DB,不允许出现绝对地址硬编码。
五、学习路径
课程按"平台认知 → FB 基础 → 接口与数据类型 → 多重背景 → 步序与状态机 → 调试与诊断 → 项目集成"推进。每一节都会给出可在 TIA Portal 中直接操作的示例,建议边学边在练习项目中实现。第 1 章先建立整体认知,从第 2 章开始进入 FB 的创建与调用。请先确认你的 TIA Portal 版本(建议 V15 及以上)和 PLC 型号(建议 S7-1200 或 S7-1500),后续示例默认使用 S7-1500 的优化块访问方式。