手闸状态指示器.md 6.2 KB

手闸状态指示器

功能概述

手闸状态指示器是 DeviceArea 组件中的核心功能之一,用于实时显示高压发生器手闸的当前状态,为操作人员提供即时的视觉反馈。

需求说明

功能需求

  1. 实时状态显示

    • 显示手闸的实时操作状态
    • 显示发生器的整体工作状态
    • 通过颜色变化提供直观的视觉反馈
  2. 状态反馈

    • 🟢 绿色:发生器待机,系统准备就绪
    • 🟡 黄色:手闸按下(一档或二档),准备曝光
    • ⚪ 默认色:其他状态(手闸抬起等)
  3. 交互体验

    • 鼠标悬停显示详细状态信息
    • 通过图标按钮形式呈现

技术实现

组件位置

  • 文件: src/pages/exam/DeviceArea.tsx
  • 状态管理: src/states/exam/deviceAreaSlice.ts

状态管理

使用 Redux 管理两个关键状态:

1. generatorStatus (手闸同步状态)

类型:GeneratorStatus 枚举

关键状态值:

  • GENERATOR_RAD_OFF (0): 手闸抬起
  • GENERATOR_RAD_PREPARE (1): 手闸一档按下
  • GENERATOR_RAD_READY (2): 手闸二档按下
  • GENERATOR_RAD_XRAYON (3): 发生器点片出线
  • GENERATOR_RAD_XRAYOFF (4): 发生器点片结束出线

2. generatorStatus_2 (发生器整体状态)

类型:GENERATOR_STATUS 枚举

关键状态值:

  • GENERATOR_STATUS_SHUTDOWN (0): 关机
  • GENERATOR_STATUS_INIT (1): 初始化
  • GENERATOR_STATUS_SLEEP (2): 睡眠
  • GENERATOR_STATUS_CHARGING (3): 充电
  • GENERATOR_STATUS_STANDBY (4): 待机
  • GENERATOR_STATUS_EXP (5): 曝光中
  • GENERATOR_STATUS_ERROR (6): 错误
  • GENERATOR_STATUS_CALIBRATION (7): 校准
  • GENERATOR_STATUS_SERVICE (8): 服务

状态显示逻辑

// 颜色显示优先级(从高到低)
IF generatorStatus_2 === GENERATOR_STATUS_STANDBY
  ➜ 显示绿色 (text-green-500)
  ➜ 含义:发生器处于待机状态,准备就绪

ELSE IF generatorStatus === GeneratorStatus.GENERATOR_RAD_PREPARE
  ➜ 显示黄色 (text-yellow-500)
  ➜ 含义:手闸一档按下,准备状态

ELSE IF generatorStatus === GeneratorStatus.GENERATOR_RAD_READY
  ➜ 显示黄色 (text-yellow-500)
  ➜ 含义:手闸二档按下,就绪状态

ELSE
  ➜ 显示默认色(无特殊样式)
  ➜ 含义:其他状态(如手闸抬起等)

状态更新机制

通过 MQTT 事件驱动状态更新:

// 在 deviceAreaSlice.ts 中注册事件监听器

// 发生器待机状态
emitter.on('GENERATOR_STATUS_STANDBY', () => {
  store.dispatch(setGeneratorStatus_2(GENERATOR_STATUS.GENERATOR_STATUS_STANDBY));
});

// 手闸抬起
emitter.on('GENERATOR_RAD_OFF', () => {
  store.dispatch(setGeneratorStatus(GeneratorStatus.GENERATOR_RAD_OFF));
});

// 手闸一档按下
emitter.on('GENERATOR_RAD_PREPARE', () => {
  store.dispatch(setGeneratorStatus(GeneratorStatus.GENERATOR_RAD_PREPARE));
});

// 手闸二档按下
emitter.on('GENERATOR_RAD_READY', () => {
  store.dispatch(setGeneratorStatus(GeneratorStatus.GENERATOR_RAD_READY));
});

代码实现

// DeviceArea.tsx 中的手闸状态指示器按钮
<Button
  style={btnStyle}
  className={classValue}
  icon={
    <ToolOutlined
      className={
        generatorStatus_2 === GENERATOR_STATUS.GENERATOR_STATUS_STANDBY
          ? 'text-green-500'
          : generatorStatus === GeneratorStatus.GENERATOR_RAD_PREPARE
            ? 'text-yellow-500'
            : generatorStatus === GeneratorStatus.GENERATOR_RAD_READY
              ? 'text-yellow-500'
              : ''
      }
    />
  }
  title={`手闸状态指示器: ${generatorStatus}`}
/>

设计特点

1. 双状态判断

同时监控两个层面的状态:

  • 发生器整体状态 (generatorStatus_2): 系统级状态
  • 手闸操作状态 (generatorStatus): 操作级状态

2. 优先级设计

发生器待机状态(绿色)优先于手闸操作状态(黄色),确保系统状态的优先显示。

3. 事件驱动架构

  • 通过 eventEmitter 监听硬件 MQTT 事件
  • 实时更新 Redux 状态
  • 组件自动响应状态变化

4. 视觉反馈清晰

  • 绿色表示安全、就绪
  • 黄色表示警示、准备中
  • 默认色表示待机或其他中性状态

状态枚举完整定义

GeneratorStatus 枚举

enum GeneratorStatus {
  GENERATOR_SYNC_ERR = -1,      // 错误状态
  GENERATOR_RAD_OFF,            // 手闸抬起
  GENERATOR_RAD_PREPARE,        // 手闸一档按下
  GENERATOR_RAD_READY,          // 手闸二档按下
  GENERATOR_RAD_XRAYON,         // 发生器点片出线
  GENERATOR_RAD_XRAYOFF,        // 发生器点片结束出线
  GENERATOR_FLU_OFF,            // 脚闸抬起
  GENERATOR_FLU_READY,          // 脚闸踩下
  GENERATOR_FLU_XRAYON,         // 透视出线
  GENERATOR_FLU_XRAYOFF,        // 透视结束出线
  GENERATOR_FLU_CINE_READY,     // 电影模式准备
  GENERATOR_SYNC_MAX,           // 状态最大值(枚举边界)
}

GENERATOR_STATUS 枚举

enum GENERATOR_STATUS {
  GENERATOR_STATUS_SHUTDOWN,      // 关机
  GENERATOR_STATUS_INIT,          // 初始化
  GENERATOR_STATUS_SLEEP,         // 睡眠
  GENERATOR_STATUS_CHARGING,      // 充电
  GENERATOR_STATUS_STANDBY,       // 待机
  GENERATOR_STATUS_EXP,           // 曝光中
  GENERATOR_STATUS_ERROR,         // 错误
  GENERATOR_STATUS_CALIBRATION,   // 校准
  GENERATOR_STATUS_SERVICE,       // 服务
  GENERATOR_STATUS_MAX,           // 状态最大值(枚举边界)
}

相关文件

  • src/pages/exam/DeviceArea.tsx - 组件UI实现
  • src/states/exam/deviceAreaSlice.ts - 状态管理和事件监听
  • src/domain/mqttServiceForDevice.ts - MQTT 消息处理(可能包含事件发送)
  • src/utils/eventEmitter.ts - 事件发射器工具

使用场景

  1. 操作提示: 操作人员通过颜色判断当前系统状态
  2. 安全确认: 绿色指示器确认系统处于安全待机状态
  3. 曝光准备: 黄色指示器警示手闸已按下,准备曝光
  4. 故障诊断: 通过 tooltip 查看详细的状态数值

后续优化建议

  1. 考虑添加错误状态的红色显示
  2. 增加状态切换的过渡动画
  3. 考虑添加声音提示(在关键状态变化时)
  4. 优化 tooltip 显示,将数值转换为更友好的文字描述