2. TIA Portal项目对象模型
TIA Portal 的项目并不是一个“程序文件”,而是一个由多种对象共同构成的对象模型。理解这个模型,是后续做程序架构和版本治理的前提。因为版本治理的对象不是抽象的“程序”,而是具体的块、变量表、库类型、工艺对象和硬件组态。只有先看清这些对象在项目树中的位置、依赖关系和生命周期,才能判断哪些内容应该纳入版本控制、哪些内容可以复用、哪些内容一旦修改会引发连锁影响。
一、项目树是对象模型的入口
在 TIA Portal 中,项目树(Project Tree)是访问所有对象的统一入口。它按“设备与网络—PLC—程序块—工艺对象—PLC变量—监控与强制—在线访问”等层级组织。不同对象在项目树中的位置,实际上反映了它的归属和依赖关系。例如,PLC 变量表属于某个 CPU,程序块也属于某个 CPU,而库中的类型是跨项目复用的全局对象。项目树不是简单的文件夹,而是对象归属关系的可视化表达。
一个典型的 S7-1500 项目在项目树中大致呈现如下结构:
项目
├─ 设备与网络
│ └─ PLC_1 [CPU 1516-3 PN/DP]
│ ├─ 设备组态
│ ├─ 在线和诊断
│ ├─ 程序块
│ │ ├─ 组织块 OB
│ │ ├─ 函数块 FB
│ │ ├─ 函数 FC
│ │ └─ 数据块 DB
│ ├─ 工艺对象
│ │ ├─ TO_PositioningAxis
│ │ └─ TO_SynchronousAxis
│ ├─ PLC变量
│ │ ├─ 默认变量表
│ │ └─ 系统常数
│ └─ 监控与强制
└─ 库
├─ 项目库
└─ 全局库
这个结构说明:程序块、工艺对象、PLC 变量都从属于具体 CPU,而库是独立于设备的复用资源。硬件组态则决定了 CPU 的型号、接口、模块和地址分配,是其他对象能够存在的基础。
二、PLC变量:符号化编程的根基
PLC 变量表用于定义符号名、数据类型、地址和注释。它的核心价值在于把绝对地址(如 I0.0、Q0.0、MW10)映射为有意义的符号名(如 StartButton、MotorRun、SpeedSetpoint)。在 TIA Portal 中,变量表分为默认变量表、自定义变量表和系统常数。系统常数由硬件组态自动生成,例如模块的硬件标识符,通常不建议手工修改。
变量表的关键属性包括:名称、数据类型、地址、保持性、注释和是否在 HMI 中可见。对于需要跨项目复用的变量,可以将其放入库中的类型或模板。变量表本身也有版本属性,当变量名或数据类型发生变化时,所有引用该变量的块都需要重新编译。因此,变量表是版本治理中影响面最大的对象之一。
三、块:程序逻辑的载体
块是 TIA Portal 中程序逻辑的基本单位,主要包括 OB、FB、FC 和 DB。OB 是操作系统调用的入口,决定程序的执行时机;FB 是带背景数据块的函数块,适合封装有状态逻辑;FC 是无背景数据的函数,适合纯组合逻辑;DB 用于存储数据,分为全局 DB 和背景 DB。
块与变量表、工艺对象之间存在引用关系。例如,一个 FB 可能引用 PLC 变量表中的符号,也可能调用工艺对象的接口。块之间的调用关系形成调用树,调用树越深,耦合度越高。在版本治理中,块是变更最频繁的对象,因此需要重点关注块的接口稳定性、版本号和注释完整性。
四、库:复用与标准化的关键
库分为项目库和全局库。项目库只对当前项目可见,适合存放项目内复用的块、变量表或面板;全局库可以跨项目使用,适合存放企业标准块、行业模板和通用函数。库中的对象以“类型”或“模板”形式存在,类型具有版本号,模板则是副本。
库的核心价值在于减少重复开发、统一编程风格、降低维护成本。但库也带来版本治理的挑战:当库类型升级时,项目中已实例化的对象不会自动更新,需要手动同步。因此,库类型应遵循语义化版本管理,接口变更必须升主版本,内部优化可升次版本,注释修正可升修订号。
五、工艺对象与硬件组态
工艺对象(Technology Object,TO)用于封装运动控制、PID 控制、计数等工艺功能。它包含配置参数、接口变量和状态信息,通常与硬件组态中的模块和驱动密切相关。例如,一个定位轴工艺对象需要绑定到具体的驱动模块和编码器模块,其配置参数包括机械参数、限位开关、回零方式等。
硬件组态决定了 CPU 型号、模块顺序、地址分配、网络接口和分布式 IO 拓扑。它是项目对象模型中最底层的约束:硬件组态一旦变化,变量地址、工艺对象绑定和程序块中的硬件访问都可能失效。因此,硬件组态应作为版本治理的基线,任何变更都需要记录并评估影响范围。
六、对象之间的依赖关系与版本治理含义
从上面的对象模型可以看出,TIA Portal 项目中的对象不是孤立的,而是存在明确的依赖方向。硬件组态是基础,它决定了 CPU 型号、模块地址和网络接口;PLC 变量表依赖硬件组态提供的地址空间;程序块依赖变量表提供的符号;工艺对象依赖硬件组态中的驱动和编码器模块;库则独立于设备,但可以被程序块和变量表引用。
这种依赖关系对版本治理有直接含义。第一,硬件组态应作为版本基线,任何硬件变更都需要记录变更原因、影响范围和验证结果。第二,PLC 变量表是影响面最大的对象,变量名或数据类型变更会导致大量块重新编译,因此变量表应尽量保持稳定,新增变量优于修改已有变量。第三,程序块是变更最频繁的对象,应通过接口版本号和注释记录变更内容。第四,库类型应遵循语义化版本管理,接口变更升主版本,内部优化升次版本,注释修正升修订号。第五,工艺对象的配置参数应与硬件组态和程序块接口保持一致,避免因硬件变更导致工艺对象失效。
七、项目树组织方式的实践建议
项目树的组织方式直接影响项目的可读性和可维护性。建议按功能或工艺段划分程序块,而不是按块类型堆叠。例如,可以建立“01_公共”、“02_上料”、“03_加工”、“04_下料”、“05_诊断”等分组,每个分组内放置对应的 FB、FC 和 DB。变量表也应按功能分组,避免所有变量都堆在默认变量表中。库类型应统一命名规范,例如“FB_MotorControl_V1_2_0”,便于识别版本。
对于工艺对象,建议在项目树中按设备或轴命名,例如“TO_Axis_Conveyor”、“TO_Axis_Robot”,并在注释中记录绑定的驱动模块和编码器模块。硬件组态应保留完整的模块顺序和地址分配记录,便于后续排查和版本对比。