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逐步升至设定值。
仿真模型的粒度要与联调目标匹配。如果只是验证逻辑互锁,可以用理想模型(瞬时响应、无故障);如果要验证时序和节拍,就必须加入延时、超时和故障注入。建议在模型层单独维护一份“仿真参数表”,记录每个动作的响应时间、超时阈值和故障条件,便于复现和调整。
四、联调验证:按层次推进,而不是随机点测
联调验证建议按四个层次推进,每层通过后再进入下一层:
- 单点验证:逐个强制虚拟点,观察PLC输入映像区或程序变量是否按预期变化。例如强制
vDI_StartBtn=1,检查程序内StartBtn是否为1,且无地址错位。 - 逻辑互锁验证:验证程序内部的互锁、自锁和优先级。例如同时强制“急停=1”和“启动=1”,确认输出
DO_Motor_Run保持为0。 - 时序与节拍验证:让仿真模型带延时运行,观察动作顺序和总节拍是否符合工艺要求。示例:上料→夹紧→加工→松开→下料,若仿真设定夹紧延时0.5s、加工2.0s,则一个循环理论节拍约3.5s,实际观测偏差超过10%就要检查模型参数或程序扫描周期。
- 故障与异常验证:注入超时、传感器失效、急停触发等条件,确认程序能进入安全状态并给出报警。例如将
DI_Cyl1_Ext_Ok在2s内保持为0,程序应触发“气缸伸出超时”报警并停止后续动作。
每一层验证都要留下可判读的记录:强制了哪个点、期望结果、实际结果、是否通过、异常现象。这些记录不是形式,而是后续交付和现场调试的重要依据。
五、交付:把“能跑通”变成“可复现”
联调结束后的交付物至少应包括:最终版虚拟点表(与信号表版本对应)、仿真模型文件及参数表、联调记录与问题清单、验证结论与遗留风险说明。交付的核心标准不是“程序能运行”,而是换一个人、换一台电脑,按照交付物能复现同样的联调结果。如果仿真参数散落在个人电脑里、虚拟点表没有版本号、验证记录只有“已通过”三个字,那么这次联调的价值会大打折扣。
总体来看,这条链路是一条“数据逐步具体化、验证逐步深入、交付逐步固化”的链路:信号表回答“设备有什么”,虚拟点表回答“怎么模拟”,仿真模型回答“怎么联动”,联调验证回答“是否可信”,交付回答“如何复现”。把这条链路走完整,虚拟I/O联调才真正具备工程价值。