3. 虚拟调试中的I/O信号强制与仿真验证

虚拟调试中的I/O信号强制与仿真验证 学习卡片

为什么强制 I/O 是虚拟调试的核心手段

在真实设备上,强制输入信号需要短接端子或使用强制表,风险高且不可反复。虚拟调试环境里,PLC 仿真器(如 PLCSIM Advanced、CODESYS SoftPLC)允许直接对输入过程映像区(I 区)写入值,相当于"无接线强制"。本节以一条典型的安全互锁回路为例:安全门关闭 + 启动按钮按下 → 电机接触器输出 Q0.0 得电;安全门打开 → Q0.0 立即失电。我们通过强制 I0.0(安全门)、I0.1(启动按钮)来验证该逻辑在虚拟模型中的响应。

强制的是 PLC 的输入过程映像,不是物理端子。仿真器中的强制值会覆盖程序扫描前的输入刷新结果,因此可以稳定复现"门开/门关"两种工况。

信号定义与互锁逻辑

地址符号名类型含义正常状态
I0.0DoorClosedBOOL安全门关闭到位1=关闭
I0.1StartPBBOOL启动按钮1=按下
I0.2EStop_OKBOOL急停回路正常1=正常
Q0.0MotorRunBOOL电机接触器1=运行
Q0.1DoorOpenLampBOOL门开指示灯1=门开

互锁逻辑用梯形图表达为:Q0.0 = I0.0 AND I0.1 AND I0.2,同时 Q0.1 = NOT I0.0。下面用一段与仿真器兼容的 ST 代码实现,可直接在 CODESYS/OpenPLC 中运行:

PROGRAM SafetyInterlock
VAR
    DoorClosed  AT %I0.0 : BOOL;
    StartPB     AT %I0.1 : BOOL;
    EStop_OK    AT %I0.2 : BOOL;
    MotorRun    AT %Q0.0 : BOOL;
    DoorOpenLamp AT %Q0.1 : BOOL;
END_VAR

// 安全互锁:三个条件同时满足才允许电机运行
MotorRun := DoorClosed AND StartPB AND EStop_OK;

// 门开指示:门未关闭时点亮
DoorOpenLamp := NOT DoorClosed;
END_PROGRAM

强制操作与响应观察

在仿真器中打开变量监控表,将 I0.0、I0.1、I0.2 加入强制列。按以下顺序写入并观察 Q0.0、Q0.1 的变化:

  1. 强制 I0.2=1(急停正常),I0.0=1(门关),I0.1=0(未按启动)→ 预期 Q0.0=0,Q0.1=0。
  2. 保持上述状态,强制 I0.1=1(按下启动)→ 预期 Q0.0=1,Q0.1=0,虚拟模型中电机开始转动。
  3. 在电机运行状态下强制 I0.0=0(模拟门被打开)→ 预期 Q0.0 立即变为 0,Q0.1=1,虚拟模型中电机停转、门开指示灯亮。
  4. 恢复 I0.0=1,但保持 I0.1=1 → 预期 Q0.0 重新变为 1(若程序为自锁保持则需复位启动按钮,本例为电平逻辑,故直接恢复)。
若第 3 步中 Q0.0 未在 1 个扫描周期内变为 0,说明程序中存在自锁或延时,需检查梯形图是否有 SET/RESET 指令或 TON 定时器。安全互锁必须是无条件立即切断。

虚拟模型响应与验证判据

数字孪生模型中,Q0.0 映射到电机转速输入,Q0.1 映射到门开指示灯材质。强制 I0.0=0 后,模型应在 100 ms 内显示电机转速归零、指示灯变红。验证通过的判据是:PLC 输出状态与模型视觉状态一致,且互锁条件不满足时输出不可能为 1。下表给出完整的强制序列与预期结果,可作为测试用例直接使用:

步骤I0.0 门I0.1 启动I0.2 急停Q0.0 电机Q0.1 门开灯模型表现
110100电机停,灯灭
211110电机转,灯灭
301101电机停,灯亮
411110电机转,灯灭
511000电机停,灯灭
安全互锁强制验证:信号流与状态响应 仿真器强制输入 I0.0 DoorClosed 强制值:1 / 0 I0.1 StartPB 强制值:1 / 0 I0.2 EStop_OK 强制值:1 / 0 强制写入 I 区 覆盖扫描输入 PLC 互锁逻辑 Q0.0 = I0.0 AND I0.1 AND I0.2 Q0.1 = NOT I0.0 门开指示 扫描周期 ≤ 10 ms 输出立即刷新 数字孪生模型 电机执行器 映射 Q0.0 转速 0 / 1500 rpm 门开指示灯 映射 Q0.1 颜色 灰 / 红 响应延迟 < 100 ms 视觉状态与输出一致 验证判据: 互锁条件不满足时 Q0.0 必须为 0 | Q0.0 与模型转速一致 | Q0.1 与门开状态一致

常见异常与排查

  • 强制后输出不变:检查仿真器是否处于 RUN 模式,STOP 模式下程序不扫描,强制值不会传递到输出。
  • 强制值被程序覆盖:若程序中存在对同一地址的写操作(如 I0.0 := ...),强制值会在扫描周期内被覆盖。输入地址只应由外部强制或物理输入写入。
  • 模型响应延迟大:检查 OPC UA 或共享内存的通信周期,通常应 ≤ 50 ms。若模型使用轮询方式读取,需缩短轮询间隔。
  • 互锁逻辑失效:确认梯形图中没有使用 SET 指令保持 Q0.0,安全回路必须使用直接赋值或 RESET 优先逻辑。
完成本节后,你应能独立完成:在仿真器中强制任意输入组合,观察输出与虚拟模型的一致性,并判断互锁逻辑是否满足"条件不满足即切断"的安全要求。这套强制验证方法可直接复用到后续电机正反转、气缸顺序动作等案例中。