2. 屏蔽门开闭命令与门状态反馈联锁测试

联锁逻辑设计要点

屏蔽门控制接口在PLC侧通常表现为两组数字量:一组是PLC输出到门控单元的开门命令(DO_Open)与关门命令(DO_Close),另一组是门控单元回送给PLC的全开反馈(DI_OpenLimit)与全关反馈(DI_CloseLimit)。联锁测试的核心不是"命令能发出去",而是验证命令与反馈在时序上的一致性,以及防夹条件能否正确封锁关门命令。

本例采用如下联锁约定(示例参数,实际工程以设计文件为准):

  • 开门命令与关门命令互斥,任一时刻只允许一个为1;
  • 关门命令的允许条件为:无开门命令、无开门到位反馈、无防夹触发(障碍物检测DI_Obstacle=0)、无门区安全回路断开;
  • 开门命令的允许条件为:无关门命令、无全关反馈;
  • 命令输出后,若在设定监视时间(示例取8 s)内未收到对应到位反馈,则输出"动作超时"报警,并撤销该命令;
  • 防夹触发时立即撤销关门命令,并保持开门命令有效直至障碍清除。
输入信号(现场/门控单元) 开门按钮 / ATS开门指令 DI_OpenCmd 关门按钮 / ATS关门指令 DI_CloseCmd 门全开到位反馈 DI_OpenLimit 门全关到位反馈 DI_CloseLimit 障碍物/防夹检测 DI_Obstacle 门区安全回路状态 DI_SafetyLoop PLC 联锁逻辑 开门允许条件 NOT DO_Close AND NOT DI_CloseLimit AND DI_SafetyLoop → 置位 DO_Open 关门允许条件 NOT DO_Open AND NOT DI_OpenLimit AND NOT DI_Obstacle AND DI_SafetyLoop → 置位 DO_Close 动作监视定时器 命令发出后 8 s 未到位 → 超时报警 防夹联锁 DI_Obstacle=1 → 立即复位 DO_Close 输出与状态 开门命令输出 DO_Open 关门命令输出 DO_Close 门状态:全开 DI_OpenLimit=1 门状态:全关 DI_CloseLimit=1 动作超时报警 ALM_Timeout 防夹动作记录 ALM_AntiPinch 反馈 反馈

联锁逻辑的梯形图实现

下面给出可直接映射到主流PLC(如西门子S7-1200/1500、三菱FX/Q系列)的梯形图等价逻辑,用结构化文本表达以便阅读。变量均按本例定义,不依赖前例代码。

// ===== 变量声明(示例地址,按实际I/O表替换)=====
// 输入
DI_OpenCmd    : BOOL;  // I0.0 开门指令
DI_CloseCmd   : BOOL;  // I0.1 关门指令
DI_OpenLimit  : BOOL;  // I0.2 门全开到位
DI_CloseLimit : BOOL;  // I0.3 门全关到位
DI_Obstacle   : BOOL;  // I0.4 障碍物/防夹检测(1=有障碍)
DI_SafetyLoop : BOOL;  // I0.5 门区安全回路(1=正常)
// 输出
DO_Open       : BOOL;  // Q0.0 开门命令
DO_Close      : BOOL;  // Q0.1 关门命令
ALM_Timeout   : BOOL;  // Q0.2 动作超时报警
ALM_AntiPinch : BOOL;  // Q0.3 防夹动作记录
// 内部
TON_Open      : TON;   // 开门监视定时器
TON_Close     : TON;   // 关门监视定时器
T_Monitor     : TIME := T#8S;  // 监视时间示例值

// ===== 1. 防夹联锁:障碍物出现立即撤销关门命令 =====
IF DI_Obstacle THEN
    DO_Close := FALSE;
    ALM_AntiPinch := TRUE;
END_IF;

// ===== 2. 开门命令输出 =====
DO_Open := DI_OpenCmd
           AND NOT DO_Close
           AND NOT DI_CloseLimit
           AND DI_SafetyLoop;

// ===== 3. 关门命令输出(含防夹封锁)=====
DO_Close := DI_CloseCmd
            AND NOT DO_Open
            AND NOT DI_OpenLimit
            AND NOT DI_Obstacle
            AND DI_SafetyLoop;

// ===== 4. 动作监视定时器 =====
TON_Open(IN := DO_Open AND NOT DI_OpenLimit, PT := T_Monitor);
TON_Close(IN := DO_Close AND NOT DI_CloseLimit, PT := T_Monitor);

// ===== 5. 超时报警与命令撤销 =====
IF TON_Open.Q THEN
    ALM_Timeout := TRUE;
    DO_Open := FALSE;
END_IF;
IF TON_Close.Q THEN
    ALM_Timeout := TRUE;
    DO_Close := FALSE;
END_IF;

// ===== 6. 报警复位(示例:由复位按钮或上位机写1)=====
IF DI_Reset THEN
    ALM_Timeout := FALSE;
    ALM_AntiPinch := FALSE;
END_IF;
上述代码中,第2、3段存在"先赋值后又被第5段改写"的顺序依赖,实际梯形图中应把超时撤销放在命令线圈之后作为后续网络,或使用置位/复位指令保证扫描顺序清晰。若使用置位/复位,需在命令条件满足时置位、在超时或防夹时复位,避免同一扫描周期内多次赋值造成歧义。

模拟门状态变化进行验证

联调阶段门控单元可能尚未就位,可用PLC强制表或仿真开关模拟DI_OpenLimit、DI_CloseLimit、DI_Obstacle、DI_SafetyLoop。验证按以下用例逐条执行,每条记录命令输出与反馈的实际状态:

用例操作/输入条件预期输出判读依据
T1 正常开门DI_OpenCmd=1,DI_CloseLimit=1,DI_SafetyLoop=1DO_Open=1,DO_Close=0开门命令置位,关门命令被互锁封锁
T2 开门到位在T1基础上置DI_OpenLimit=1DO_Open保持,TON_Open不动作到位反馈消除监视计时,无超时报警
T3 正常关门DI_CloseCmd=1,DI_OpenLimit=1,DI_Obstacle=0DO_Close=1,DO_Open=0关门命令置位,开门命令被封锁
T4 关门到位在T3基础上置DI_CloseLimit=1DO_Close保持,TON_Close不动作全关反馈有效,无超时
T5 防夹触发关门过程中置DI_Obstacle=1DO_Close立即=0,ALM_AntiPinch=1关门命令被撤销,防夹记录置位
T6 开门超时DI_OpenCmd=1,DI_OpenLimit保持0超过8 s8 s后DO_Open=0,ALM_Timeout=1监视定时器到时,命令撤销并报警
T7 安全回路断开DI_SafetyLoop=0DO_Open=0,DO_Close=0安全条件不满足,两命令均封锁
T8 命令互斥DI_OpenCmd=1且DI_CloseCmd=1同时为1DO_Open=0,DO_Close=0(或按设计优先级)互锁条件使两命令均不输出,需与设计约定核对

结果判读与常见问题

  • 命令与反馈不同步:若DO_Open=1但DI_OpenLimit长时间为0,先检查门控单元反馈线是否接反(常开/常闭),再核对监视时间是否过短导致误报。
  • 防夹不生效:确认DI_Obstacle在程序中为"1=有障碍"的正逻辑;若现场为常闭触点,需在输入映射时取反,否则防夹条件永远不成立。
  • 命令抖动:按钮输入未去抖时,DO_Open可能在单次按下中出现多个扫描周期的通断,应在输入侧增加滤波或使用上升沿触发置位。
  • 超时报警无法复位:检查复位逻辑是否在超时条件仍成立时被反复置位,应先撤销命令条件再复位报警。
强制DI_OpenLimit或DI_CloseLimit进行模拟时,务必在测试结束后解除强制并恢复实际接线,否则联调转运行时会出现"门未动但反馈已到位"的假状态,导致联锁失效。