3. 虚拟调试中的I/O信号强制与仿真验证
为什么强制 I/O 是虚拟调试的核心手段
在真实设备上,强制输入信号需要短接端子或使用强制表,风险高且不可反复。虚拟调试环境里,PLC 仿真器(如 PLCSIM Advanced、CODESYS SoftPLC)允许直接对输入过程映像区(I 区)写入值,相当于"无接线强制"。本节以一条典型的安全互锁回路为例:安全门关闭 + 启动按钮按下 → 电机接触器输出 Q0.0 得电;安全门打开 → Q0.0 立即失电。我们通过强制 I0.0(安全门)、I0.1(启动按钮)来验证该逻辑在虚拟模型中的响应。
强制的是 PLC 的输入过程映像,不是物理端子。仿真器中的强制值会覆盖程序扫描前的输入刷新结果,因此可以稳定复现"门开/门关"两种工况。
信号定义与互锁逻辑
| 地址 | 符号名 | 类型 | 含义 | 正常状态 |
|---|---|---|---|---|
| I0.0 | DoorClosed | BOOL | 安全门关闭到位 | 1=关闭 |
| I0.1 | StartPB | BOOL | 启动按钮 | 1=按下 |
| I0.2 | EStop_OK | BOOL | 急停回路正常 | 1=正常 |
| Q0.0 | MotorRun | BOOL | 电机接触器 | 1=运行 |
| Q0.1 | DoorOpenLamp | BOOL | 门开指示灯 | 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 的变化:
- 强制 I0.2=1(急停正常),I0.0=1(门关),I0.1=0(未按启动)→ 预期 Q0.0=0,Q0.1=0。
- 保持上述状态,强制 I0.1=1(按下启动)→ 预期 Q0.0=1,Q0.1=0,虚拟模型中电机开始转动。
- 在电机运行状态下强制 I0.0=0(模拟门被打开)→ 预期 Q0.0 立即变为 0,Q0.1=1,虚拟模型中电机停转、门开指示灯亮。
- 恢复 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 门开灯 | 模型表现 |
|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 1 | 0 | 0 | 电机停,灯灭 |
| 2 | 1 | 1 | 1 | 1 | 0 | 电机转,灯灭 |
| 3 | 0 | 1 | 1 | 0 | 1 | 电机停,灯亮 |
| 4 | 1 | 1 | 1 | 1 | 0 | 电机转,灯灭 |
| 5 | 1 | 1 | 0 | 0 | 0 | 电机停,灯灭 |
常见异常与排查
- 强制后输出不变:检查仿真器是否处于 RUN 模式,STOP 模式下程序不扫描,强制值不会传递到输出。
- 强制值被程序覆盖:若程序中存在对同一地址的写操作(如
I0.0 := ...),强制值会在扫描周期内被覆盖。输入地址只应由外部强制或物理输入写入。 - 模型响应延迟大:检查 OPC UA 或共享内存的通信周期,通常应 ≤ 50 ms。若模型使用轮询方式读取,需缩短轮询间隔。
- 互锁逻辑失效:确认梯形图中没有使用 SET 指令保持 Q0.0,安全回路必须使用直接赋值或 RESET 优先逻辑。
完成本节后,你应能独立完成:在仿真器中强制任意输入组合,观察输出与虚拟模型的一致性,并判断互锁逻辑是否满足"条件不满足即切断"的安全要求。这套强制验证方法可直接复用到后续电机正反转、气缸顺序动作等案例中。