4. 类型与类型实例的复用设计
在TIA Portal的大型项目里,真正决定工程效率的不是“写了多少程序”,而是“有多少程序可以被安全复用”。类型(Type)与类型实例(Instance)正是这一复用体系的核心:FB/FC类型是“模板”,类型实例是“按模板生成的具体对象”。理解它们之间的接口契约、生成方式以及修改后的同步行为,才能避免“改一处、崩一片”的连锁问题。
一、FB/FC类型:把可复用逻辑固化为模板
FB(Function Block)与FC(Function)都可以作为类型被复用,但二者在“是否保存状态”上有本质区别。FB类型拥有静态存储区,适合封装带记忆的逻辑,例如电机启停控制、PID回路、阀门时序控制;FC类型没有静态存储,适合纯计算、数据转换、无状态判断,例如量程换算、报警字解析、字符串处理。
创建FB/FC类型时,建议遵循“先定义接口、再写实现”的顺序。以电机控制FB为例,接口可设计为:输入Start、Stop、Fault、Interlock;输出Run、Ready、Alarm;输入输出RunTime(累计运行时间);静态变量State、Timer、EdgeMem。接口一旦确定,内部逻辑只依赖这些变量,不直接访问全局DB,这样类型才具备可移植性。
FC类型则更适合“无状态工具”。例如创建一个Scale_Analog FC,输入Raw、RawMin、RawMax、EngMin、EngMax,输出Eng,内部只做线性换算。它不保存任何中间状态,因此可以被任意多次调用而互不影响。
二、定义类型接口:契约先于实现
类型接口是复用设计的“合同”。接口定义得越清晰,实例生成和后续修改就越安全。接口设计应遵循三条原则:
- 输入输出分离:输入只读、输出只写,避免在FB内部反向修改输入变量,否则调用方难以追踪数据来源。
- 状态内部化:所有需要记忆的变量放入Static,不依赖外部DB或M区,保证实例之间互不干扰。
- 参数命名带语义:如
Start、Stop、Fault,而不是I1、I2,便于在交叉引用和监控表中快速定位。
接口定义完成后,TIA Portal会自动生成对应的变量声明表。此时应检查每个变量的数据类型、保持性(Retain)和初始值。对于需要断电保持的累计时间、配方参数,应勾选“保持”;对于临时中间变量,应放入Temp而非Static,避免占用实例DB空间。
三、生成类型实例:从模板到具体对象
生成类型实例有两种典型方式。第一种是在OB或FC中直接调用FB,TIA Portal会提示创建背景数据块(Instance DB),该DB即为该FB类型的一个实例。第二种是在项目库中右键FB类型,选择“生成实例”,指定实例名称和编号,批量生成多个实例DB。
以电机控制为例,若现场有8台电机,可创建Motor_1_DB至Motor_8_DB,每个DB都拥有独立的State、Timer、RunTime。调用时使用Motor_1_DB作为背景,逻辑完全相同,但状态完全隔离。这正是类型复用的价值:一份逻辑,八份独立状态。
对于FC类型,由于没有背景DB,实例化表现为“多次调用同一FC,传入不同实参”。例如Scale_Analog(Raw := AI_1, ...)和Scale_Analog(Raw := AI_2, ...),两次调用互不影响,因为FC不保存状态。
四、修改类型对实例的影响:必须提前评估的连锁反应
修改FB/FC类型接口,是所有复用工程中最容易出问题的环节。影响程度取决于修改类型:
- 新增输入/输出变量:所有实例DB会自动扩展,新增变量使用初始值。编译时通常不会报错,但需要重新下载实例DB,否则新变量在PLC中不存在。
- 删除变量:实例DB中对应存储区被移除,原有数据丢失。如果该变量在HMI或其它逻辑中被引用,编译会报“未定义”错误,必须逐项排查。
- 修改数据类型:例如将
RunTime从Time改为DInt,实例DB中该变量的存储长度和解释方式改变,编译会报类型不匹配,必须手动调整所有赋值处。 - 修改内部逻辑但不改接口:这是最安全的情况。实例DB结构不变,只需重新下载FB和OB,所有实例自动使用新逻辑。
五、同步策略:让修改可控、可追溯
同步策略的核心是“先类型、后实例、再验证”。具体操作可参考以下流程:
- 版本冻结:在修改类型前,将当前FB/FC类型和所有实例DB导出为源文件或库版本,作为回退点。
- 修改类型接口:在类型编辑器中完成变量增删改,保存并编译类型本身。
- 批量更新实例:在项目树中选中所有相关实例DB,右键选择“编译”或“更新实例”,TIA Portal会按新接口重建实例DB结构。
- 交叉引用检查:使用“交叉引用”功能,确认被删除或改名的变量没有残留引用。
- 下载与验证:先下载一个实例所在站点,在线监控
State、RunTime等关键变量,确认行为正确后再推广到全部实例。
对于FC类型,由于没有实例DB,修改接口后只需重新编译调用它的OB/FC,并检查实参数量与类型是否匹配。FC的同步相对简单,但同样需要交叉引用检查,避免遗漏调用点。
六、一个可复用的检查清单
| 检查项 | 判断依据 | 处理动作 |
|---|---|---|
| 类型接口是否变更 | 变量增删改 | 导出备份,记录变更点 |
| 实例DB是否全部编译 | 编译无错误 | 批量编译,检查警告 |
| 被删变量是否被引用 | 交叉引用为空 | 修改引用或恢复变量 |
| 保持性变量是否受影响 | Retain标记变化 | 评估断电数据丢失风险 |
| 下载后行为是否一致 | 在线监控关键变量 | 单实例验证后推广 |
类型与类型实例的复用设计,本质上是在“灵活性”和“稳定性”之间建立秩序。FB/FC类型提供逻辑模板,接口定义契约,实例承载独立状态,而同步策略则保证修改不会失控。掌握这套方法后,面对几十台电机、上百个模拟量通道时,你只需要维护一份类型逻辑,就能安全地生成和管理所有实例。