3. 虚拟I/O联调总体流程

虚拟I/O联调不是“把PLC程序跑起来看看有没有报错”这么简单,它的本质是:在真实设备尚未到场或不允许动作的前提下,用一套可执行的虚拟信号系统,替代真实传感器与执行器,让控制程序的输入采集、逻辑运算、输出驱动三条链路都能被完整地“走通”并留下可判读的证据。因此,联调工作必须有一条清晰的总体链路,把设备信号表、虚拟点表、仿真模型、联调验证和交付物串起来,任何一环脱节,后面的验证结论都不可信。

一、链路的起点:设备信号表是唯一权威源

设备信号表(也称I/O清单、点位表)是整条链路的源头。它通常由机械、电气、工艺和控制多方确认,字段至少应包含:点号(如 DI-0101、DO-0203)、信号名称、信号类型(DI/DO/AI/AO)、电气规格(24VDC、4~20mA、0~10V等)、所属设备/工位、PLC地址(如 %I0.0、%Q0.1、%IW64)、正常状态定义、以及备注(常开/常闭、脉冲/保持、量程上下限)。

这里有一个容易被忽略但极其关键的约定:信号有效状态的定义必须统一。例如“气缸伸出到位”这个DI点,是传感器得电为1表示到位,还是失电为1表示到位?如果信号表里写的是“常闭,失电到位”,而虚拟点表里按“得电到位”生成,联调时程序逻辑会整体反相,排查代价极高。因此,在进入虚拟点表之前,必须先做一次信号表一致性核对,重点核对:点号唯一性、PLC地址不重复、有效状态定义、模拟量量程与工程值换算关系。

二、从信号表到虚拟点表:建立可操作的映射

虚拟点表不是信号表的简单复制,而是在信号表基础上增加“虚拟化”所需的字段,使其能被仿真软件或虚拟PLC直接驱动。典型新增字段包括:虚拟变量名(如 vDI_Cyl1_Ext)、初始值、强制方式(手动/脚本/模型联动)、关联仿真模型对象、以及验证标记(是否已联调通过)。

映射过程中要处理三类特殊点:

  • 脉冲型信号:如按钮、接近开关的瞬态触发,虚拟点表中需定义脉冲宽度(例如 200ms),否则程序可能采集不到上升沿。
  • 模拟量信号:需明确原始值(如 0~27648)与工程值(如 0~100℃)的线性换算,虚拟点表中应同时保留两个字段,便于在仿真时直接注入工程值或原始值。
  • 安全相关信号:如急停、安全门,虚拟点表中应单独标记,联调时优先验证其逻辑优先级,不能与普通DI混在一起随机测试。

完成映射后,虚拟点表应能回答一个问题:每一个PLC地址,我可以用哪个虚拟变量、以什么方式、注入什么值来模拟? 如果回答不了,说明映射还不完整。

三、仿真模型:让虚拟点表“活”起来

虚拟点表本身只是静态数据,真正让联调有意义的是仿真模型。仿真模型负责根据程序输出(DO/AO)反向计算或联动生成输入(DI/AI),形成闭环。例如:程序输出 DO_Cyl1_Ext=1,仿真模型经过一个“气缸伸出时间”延时(示例取 0.8s),将 DI_Cyl1_Ext_Ok 置为1;程序输出 DO_Motor_Run=1,仿真模型根据设定的转速斜坡,将 AI_Motor_Speed 从0逐步升至设定值。

仿真模型的粒度要与联调目标匹配。如果只是验证逻辑互锁,可以用理想模型(瞬时响应、无故障);如果要验证时序和节拍,就必须加入延时、超时和故障注入。建议在模型层单独维护一份“仿真参数表”,记录每个动作的响应时间、超时阈值和故障条件,便于复现和调整。

虚拟I/O联调总体链路:信号表 → 虚拟点表 → 仿真模型 → 联调验证 → 交付 ① 设备信号表 点号 / 名称 / 类型 PLC地址 / 有效状态 量程 / 常开常闭 唯一权威源 多方确认版本 映射 ② 虚拟点表 虚拟变量名 初始值 / 强制方式 脉冲宽度 / 量程换算 可注入、可观测 安全点单独标记 驱动 ③ 仿真模型 DO→DI 联动逻辑 响应延时 / 超时阈值 故障注入 / 斜坡 形成闭环 参数可复现 运行 ④ 联调验证 单点强制 / 逻辑互锁 时序节拍 / 故障响应 安全优先级验证 记录证据 判定通过/不通过 验证不通过:修正虚拟点表或仿真参数后重新验证 ⑤ 交付物 虚拟点表(最终版) 仿真模型及参数表 联调记录与问题清单 验证结论与遗留风险 验证通过 关键原则:信号表定义“是什么”,虚拟点表定义“怎么注入”,仿真模型定义“怎么联动”,验证定义“是否可信”,交付定义“留下什么”

四、联调验证:按层次推进,而不是随机点测

联调验证建议按四个层次推进,每层通过后再进入下一层:

  1. 单点验证:逐个强制虚拟点,观察PLC输入映像区或程序变量是否按预期变化。例如强制 vDI_StartBtn=1,检查程序内 StartBtn 是否为1,且无地址错位。
  2. 逻辑互锁验证:验证程序内部的互锁、自锁和优先级。例如同时强制“急停=1”和“启动=1”,确认输出 DO_Motor_Run 保持为0。
  3. 时序与节拍验证:让仿真模型带延时运行,观察动作顺序和总节拍是否符合工艺要求。示例:上料→夹紧→加工→松开→下料,若仿真设定夹紧延时0.5s、加工2.0s,则一个循环理论节拍约3.5s,实际观测偏差超过10%就要检查模型参数或程序扫描周期。
  4. 故障与异常验证:注入超时、传感器失效、急停触发等条件,确认程序能进入安全状态并给出报警。例如将 DI_Cyl1_Ext_Ok 在2s内保持为0,程序应触发“气缸伸出超时”报警并停止后续动作。

每一层验证都要留下可判读的记录:强制了哪个点、期望结果、实际结果、是否通过、异常现象。这些记录不是形式,而是后续交付和现场调试的重要依据。

五、交付:把“能跑通”变成“可复现”

联调结束后的交付物至少应包括:最终版虚拟点表(与信号表版本对应)、仿真模型文件及参数表、联调记录与问题清单、验证结论与遗留风险说明。交付的核心标准不是“程序能运行”,而是换一个人、换一台电脑,按照交付物能复现同样的联调结果。如果仿真参数散落在个人电脑里、虚拟点表没有版本号、验证记录只有“已通过”三个字,那么这次联调的价值会大打折扣。

建议在项目开始时就把信号表、虚拟点表、仿真参数表和联调记录放在同一个版本管理目录下,每次修改都记录变更点和影响范围。虚拟I/O联调的最大风险往往不是技术难度,而是版本错位导致“验证过的”和“实际用的”不是同一套数据。

总体来看,这条链路是一条“数据逐步具体化、验证逐步深入、交付逐步固化”的链路:信号表回答“设备有什么”,虚拟点表回答“怎么模拟”,仿真模型回答“怎么联动”,联调验证回答“是否可信”,交付回答“如何复现”。把这条链路走完整,虚拟I/O联调才真正具备工程价值。