4. 现有系统逆向工程

在Modicon控制系统升级迁移项目中,逆向工程是决定迁移成败的第一道关口。旧系统往往运行了十年以上,原始设计文档缺失、程序经过多轮修改、图纸与现场实际不符,甚至HMI画面上的按钮标签与PLC内部变量早已脱节。如果直接按“新平台重写”的思路推进,很容易在联调阶段才发现某个联锁条件被遗漏、某个模拟量量程被误解,导致停机返工。因此,逆向工程的目标不是“把旧程序抄一遍”,而是建立一份可验证的现状基线:控制逻辑、I/O清单、通信关系三者必须相互印证,形成闭环。

一、逆向工程的四个信息源及其可信度

旧程序、电气图纸、HMI画面和现场设备是四个独立但互补的信息源。它们的可信度并不相同,需要交叉验证:

  • 旧程序:反映PLC内部实际执行的逻辑,可信度最高,但可能包含废弃代码、临时旁路和未使用的变量。
  • 电气图纸:反映设计意图和接线关系,但可能未反映现场改造,端子号、线号可能与实际不符。
  • HMI画面:反映操作员视角的监控点、报警和操作权限,但变量地址可能经过中间寄存器映射,不能直接对应物理I/O。
  • 现场设备:反映最终执行机构和传感器实际状态,是验证前两者的最终依据,但需要停电、挂牌、逐点核对,成本最高。

合理的策略是:以旧程序为逻辑主线,以电气图纸为物理接线参考,以HMI画面为操作语义补充,最后用现场设备逐点验证。四者不一致时,以现场实际接线和程序实际扫描结果为准,并记录差异原因。

二、从旧程序提取控制逻辑与I/O清单

以Modicon Quantum/Unity平台为例,旧程序通常以Concept、ProWORX或Unity Pro工程文件形式存在。提取时按以下顺序展开:

  1. 导出变量表与交叉引用:在Unity Pro中通过“工具→项目浏览器→变量与FB实例”导出所有变量,同时生成交叉引用报告,标记每个变量的读写位置。重点关注被多次写入的变量,这往往是联锁或模式切换的核心。
  2. 识别物理I/O映射:查找%I、%Q地址的直接引用,区分数字量、模拟量、专用模块。例如%I0.1.3表示机架0、槽1、通道3的数字量输入;%IW0.2.1表示模拟量输入字。将地址与模块型号、量程、信号类型对应记录。
  3. 提取逻辑段落:按功能块或梯形图网络分段,标注每段的触发条件、输出动作和互锁关系。对于复杂联锁,用状态表或因果表记录“条件→动作→复位条件”。
  4. 标记遗留与旁路:记录被强制、被旁路或注释掉的逻辑,这些往往是历史改造痕迹,迁移时需与工艺人员确认是否保留。

下面是一份从旧程序提取的I/O清单示例片段,字段包括地址、信号名、类型、量程/状态、关联设备、备注:

地址信号名类型量程/状态关联设备备注
%I0.1.0P101_RUN_FBDI1=运行泵P101来自接触器辅助触点
%I0.1.1P101_FAULTDI1=故障泵P101热继电器常开
%IW0.2.0PT101AI4-20mA / 0-1.6MPa压力变送器量程需现场核对
%Q0.3.0P101_STARTDO1=启动泵P101脉冲输出,保持2s
%Q0.3.1V101_OPENDO1=开阀阀V101与开到位反馈联锁

三、从电气图纸提取物理接线与供电关系

电气图纸的核心价值在于确认“PLC端子到现场设备”的物理路径。重点提取:

  • 电源分配:24VDC、220VAC、仪表电源的回路编号与断路器位置。
  • 端子号与线号:每个I/O点的端子排编号、电缆编号、芯线颜色,用于现场核对。
  • 中间继电器与隔离器:信号是否经过中间继电器、安全栅或隔离器,这会影响信号类型和负载能力。
  • 接地与屏蔽:模拟量屏蔽层接地方式,迁移后需保持一致以避免干扰。

图纸与程序不一致时,常见原因包括:现场改造未更新图纸、备用点被临时启用、线号管脱落。此时应记录差异清单,安排现场核对。

四、从HMI画面提取操作语义与报警清单

HMI画面是操作员与系统交互的界面,提取时关注:

  • 画面层级与导航关系:总貌、分组、详情、趋势、报警页。
  • 操作按钮与权限:启动/停止、自动/手动、参数设定,记录对应的PLC变量和权限等级。
  • 报警与事件:报警文本、触发条件、优先级、确认方式。报警文本往往包含工艺语义,是理解联锁目的的重要线索。
  • 趋势与历史数据:记录趋势变量、采样周期、存储位置,迁移后需保证历史数据可追溯。

HMI变量常通过中间寄存器与PLC交换,例如画面按钮写%MW100,PLC程序再根据%MW100驱动%Q0.3.0。逆向时必须追踪这条映射链,不能只记录画面标签。

五、通信关系提取

旧系统通信关系包括:PLC与远程I/O的现场总线(如Modbus Plus、RIO)、PLC与HMI的以太网或串口、PLC与变频器/智能仪表的Modbus RTU、以及PLC与上位机的OPC或Modbus TCP。提取时记录:通信协议、物理接口、站号/IP、波特率、数据区映射、轮询周期、超时处理。对于Modbus RTU,需明确功能码、寄存器地址、数据类型(如32位浮点高低字顺序),这些细节在迁移时最容易出错。

现有系统逆向工程:四源交叉验证与输出基线 旧程序 变量表 / 交叉引用 逻辑段落 / 旁路标记 电气图纸 端子号 / 线号 / 供电 隔离器 / 接地屏蔽 HMI画面 操作语义 / 权限 报警文本 / 趋势 现场设备 实际接线 / 量程 执行机构状态 交叉验证与差异记录 程序逻辑 ↔ 图纸接线 ↔ HMI语义 ↔ 现场实际 逆向工程输出基线(迁移设计输入) 控制逻辑清单 联锁条件 / 时序 / 模式 复位条件 / 旁路记录 PID参数 / 报警阈值 状态机与步序 I/O清单 地址 / 信号名 / 类型 量程 / 工程单位 / 报警 端子号 / 电缆号 / 机架槽位 备用点与强制点标记 通信关系表 协议 / 接口 / 站号或IP 波特率 / 数据区映射 轮询周期 / 超时处理 数据类型与字序

六、现场核对与差异闭环

完成桌面提取后,必须进行现场核对。建议按“先电源、后信号、再通信”的顺序:先确认供电回路和断路器状态,再逐点核对数字量输入输出(用万用表或强制输出观察执行机构动作),最后核对模拟量量程和通信数据。现场核对时使用I/O清单作为检查表,每核对一点标记“一致/不一致/待确认”,不一致项记录实际状态和照片。

实用提示:对于模拟量,现场可用信号发生器在变送器端注入4mA、12mA、20mA,观察PLC原始值(如0-27648或0-4095)和HMI显示值,反推量程和线性关系。若原始值与理论值偏差超过1%,需检查隔离器、接地或模块通道。
常见陷阱:不要假设HMI上的“启动”按钮直接对应PLC的%Q输出。很多旧系统通过中间寄存器、模式字或权限位间接控制。逆向时必须追踪完整映射链,否则迁移后可能出现“按钮能点但设备不动”或“权限失效”的问题。

七、逆向工程成果的交付形式

逆向工程的最终交付物应至少包括:控制逻辑清单(含联锁因果表)、I/O清单(含端子与量程)、通信关系表、HMI报警与操作清单、差异记录表。这些成果直接作为新系统编程、画面组态和通信配置的输入。建议在迁移项目中使用统一编号规则,例如“旧地址—新地址—信号名—功能描述”,确保每个点可追溯。只有四源交叉验证完成、差异闭环关闭后,才进入新平台设计阶段,否则迁移风险将不可控。