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类型与类型实例的复用关系及修改同步 FB 类型:Motor_Ctrl 输入:Start / Stop / Fault 输出:Run / Ready / Alarm 输入输出:RunTime 静态:State / Timer / EdgeMem 接口契约:输入只读、状态内部化 实现:启停逻辑 + 故障锁存 + 计时 FC 类型:Scale_Analog 输入:Raw / RawMin / RawMax 输入:EngMin / EngMax 输出:Eng 无静态存储,纯线性换算 可多次调用,互不影响 Motor_1_DB State=0, RunTime=0h Motor_2_DB State=0, RunTime=0h Motor_3_DB State=0, RunTime=0h Motor_8_DB State=0, RunTime=0h FC 多次调用 Scale(AI_1) / Scale(AI_2) 修改类型接口的影响 新增输入变量 → 所有实例DB 自动扩展,需重新下载 删除变量 → 实例DB中对应 数据丢失,需确认无引用 修改数据类型 → 编译报错 需逐实例检查赋值兼容性 同步策略 ① 先改类型,再编译全部实例 ② 利用“更新实例”批量同步 ③ 保持性变量修改需评估 ④ 版本号管理,避免混用 ⑤ 修改后执行交叉引用检查 ⑥ 下载前做实例DB一致性校验 修改类型 同步 核心原则:类型是模板,实例是对象;接口是契约,同步是纪律。修改类型前先评估影响范围,修改后必须编译并校验所有实例。

四、修改类型对实例的影响:必须提前评估的连锁反应

修改FB/FC类型接口,是所有复用工程中最容易出问题的环节。影响程度取决于修改类型:

  • 新增输入/输出变量:所有实例DB会自动扩展,新增变量使用初始值。编译时通常不会报错,但需要重新下载实例DB,否则新变量在PLC中不存在。
  • 删除变量:实例DB中对应存储区被移除,原有数据丢失。如果该变量在HMI或其它逻辑中被引用,编译会报“未定义”错误,必须逐项排查。
  • 修改数据类型:例如将RunTime从Time改为DInt,实例DB中该变量的存储长度和解释方式改变,编译会报类型不匹配,必须手动调整所有赋值处。
  • 修改内部逻辑但不改接口:这是最安全的情况。实例DB结构不变,只需重新下载FB和OB,所有实例自动使用新逻辑。
注意:修改类型接口后,不要直接下载整个项目。应先执行“编译软件(全部重建)”,观察实例DB是否报错,再逐站下载。对于大型项目,建议在测试环境中先验证一个实例,确认无误后再批量同步。

五、同步策略:让修改可控、可追溯

同步策略的核心是“先类型、后实例、再验证”。具体操作可参考以下流程:

  1. 版本冻结:在修改类型前,将当前FB/FC类型和所有实例DB导出为源文件或库版本,作为回退点。
  2. 修改类型接口:在类型编辑器中完成变量增删改,保存并编译类型本身。
  3. 批量更新实例:在项目树中选中所有相关实例DB,右键选择“编译”或“更新实例”,TIA Portal会按新接口重建实例DB结构。
  4. 交叉引用检查:使用“交叉引用”功能,确认被删除或改名的变量没有残留引用。
  5. 下载与验证:先下载一个实例所在站点,在线监控State、RunTime等关键变量,确认行为正确后再推广到全部实例。

对于FC类型,由于没有实例DB,修改接口后只需重新编译调用它的OB/FC,并检查实参数量与类型是否匹配。FC的同步相对简单,但同样需要交叉引用检查,避免遗漏调用点。

六、一个可复用的检查清单

检查项 判断依据 处理动作
类型接口是否变更 变量增删改 导出备份,记录变更点
实例DB是否全部编译 编译无错误 批量编译,检查警告
被删变量是否被引用 交叉引用为空 修改引用或恢复变量
保持性变量是否受影响 Retain标记变化 评估断电数据丢失风险
下载后行为是否一致 在线监控关键变量 单实例验证后推广

类型与类型实例的复用设计,本质上是在“灵活性”和“稳定性”之间建立秩序。FB/FC类型提供逻辑模板,接口定义契约,实例承载独立状态,而同步策略则保证修改不会失控。掌握这套方法后,面对几十台电机、上百个模拟量通道时,你只需要维护一份类型逻辑,就能安全地生成和管理所有实例。