4. 数控机床模式选择与互锁

任务目标

在数控系统PLC中实现四种操作模式(手动JOG、自动AUTO、MDI、回零REF)的互锁选择逻辑:任一时刻仅允许一种模式生效,模式切换需在非运行状态下进行,防止因模式冲突导致进给轴误动作。

实现思路

采用“请求-仲裁-生效”三段式结构:面板按钮产生模式请求信号,仲裁逻辑按优先级和互锁条件选出唯一有效模式,输出对应的模式标志位供后续进给/主轴控制程序使用。关键互锁条件:循环启动中(自动运行)禁止切换模式;急停或进给保持时强制回到手动模式。

模式选择互锁逻辑流程 面板按钮输入 模式请求锁存 互锁条件检查 优先级仲裁 模式标志输出 进给/主轴控制 互锁规则 1. 循环启动中 → 禁止切换模式,保持当前模式 2. 急停/进给保持 → 强制切回手动模式 3. 多按钮同时按下 → 按 REF > JOG > MDI > AUTO 优先级仲裁

PLC变量定义

以下为最小可复现的变量表(以IEC 61131-3 ST语言为例,可直接在CODESYS/西门子S7-1500等平台运行):

VAR_INPUT
    btnJog   : BOOL;  // 手动按钮
    btnAuto  : BOOL;  // 自动按钮
    btnMdi   : BOOL;  // MDI按钮
    btnRef   : BOOL;  // 回零按钮
    cycleRun : BOOL;  // 循环启动中信号
    eStop    : BOOL;  // 急停信号
    feedHold : BOOL;  // 进给保持信号
END_VAR

VAR_OUTPUT
    modeJog  : BOOL;  // 手动模式生效
    modeAuto : BOOL;  // 自动模式生效
    modeMdi  : BOOL;  // MDI模式生效
    modeRef  : BOOL;  // 回零模式生效
END_VAR

VAR
    reqJog, reqAuto, reqMdi, reqRef : BOOL;  // 请求锁存
    modeActive : INT := 0;  // 0=无 1=JOG 2=AUTO 3=MDI 4=REF
END_VAR

核心互锁逻辑

模式请求锁存后,先检查互锁条件,再按优先级仲裁,最后输出唯一模式标志。

// --- 1. 模式请求锁存(按钮上升沿置位,互锁时清除)---
IF btnJog AND NOT cycleRun AND NOT eStop THEN
    reqJog := TRUE; reqAuto := FALSE; reqMdi := FALSE; reqRef := FALSE;
END_IF;
IF btnAuto AND NOT cycleRun AND NOT eStop THEN
    reqAuto := TRUE; reqJog := FALSE; reqMdi := FALSE; reqRef := FALSE;
END_IF;
IF btnMdi AND NOT cycleRun AND NOT eStop THEN
    reqMdi := TRUE; reqJog := FALSE; reqAuto := FALSE; reqRef := FALSE;
END_IF;
IF btnRef AND NOT cycleRun AND NOT eStop THEN
    reqRef := TRUE; reqJog := FALSE; reqAuto := FALSE; reqMdi := FALSE;
END_IF;

// --- 2. 互锁强制复位 ---
IF eStop OR feedHold THEN
    reqJog := TRUE; reqAuto := FALSE; reqMdi := FALSE; reqRef := FALSE;
END_IF;

// --- 3. 优先级仲裁(REF > JOG > MDI > AUTO)---
IF reqRef THEN
    modeActive := 4;
ELSIF reqJog THEN
    modeActive := 1;
ELSIF reqMdi THEN
    modeActive := 3;
ELSIF reqAuto THEN
    modeActive := 2;
ELSE
    modeActive := 0;
END_IF;

// --- 4. 输出唯一模式标志 ---
modeJog  := (modeActive = 1);
modeAuto := (modeActive = 2);
modeMdi  := (modeActive = 3);
modeRef  := (modeActive = 4);

运行与验证

将上述代码导入PLC编程环境(如CODESYS、TIA Portal),编译下载后在线监控变量。验证步骤:

  1. 依次按下各模式按钮,观察对应modeXxx输出为TRUE且其余为FALSE,确认互斥生效。
  2. 置cycleRun=TRUE后按任意模式按钮,观察modeActive保持不变,确认运行中禁止切换。
  3. 置eStop=TRUE或feedHold=TRUE,观察modeJog强制为TRUE,其余为FALSE。
  4. 同时置多个按钮为TRUE,观察modeRef优先输出,验证优先级仲裁正确。

通过条件:任一时刻仅一个modeXxx为TRUE;互锁条件下模式不切换;急停/保持时强制回手动。