فهرست منبع

docs: 添加手闸状态指示器实现文档

- 新增 docs/实现/手闸状态指示器.md 文档
- 文档包含功能概述、需求说明、技术实现细节
- 记录了双状态管理机制(generatorStatus 和 generatorStatus_2)
- 说明了状态显示逻辑和优先级设计
- 提供了完整的枚举定义和使用场景

改动文件:
- docs/实现/手闸状态指示器.md
sw 3 روز پیش
والد
کامیت
19ac64051f
1فایلهای تغییر یافته به همراه216 افزوده شده و 0 حذف شده
  1. 216 0
      docs/实现/手闸状态指示器.md

+ 216 - 0
docs/实现/手闸状态指示器.md

@@ -0,0 +1,216 @@
+# 手闸状态指示器
+
+## 功能概述
+
+手闸状态指示器是 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): 服务
+
+### 状态显示逻辑
+
+```typescript
+// 颜色显示优先级(从高到低)
+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 事件驱动状态更新:
+
+```typescript
+// 在 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));
+});
+```
+
+### 代码实现
+
+```tsx
+// 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 枚举
+
+```typescript
+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 枚举
+
+```typescript
+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 显示,将数值转换为更友好的文字描述