Skip to content

场景02:闸门控制异常监测

当前阶段: 🔍 探索中 | 行业: 水利行业 | 关键词: 闸门控制、执行监测、偏差报警 | 返回水利场景 →


一、需求探索

1.1 痛点时刻

具体场景:

下午2点,调度中心下发指令:将3号闸门开度从20%调整到50%,以增加下泄流量。系统显示"指令已下发"。

20分钟后,现场巡查人员发现3号闸门实际开度只有30%,并未达到目标的50%。原因是闸门启闭机出现故障,卡在30%位置无法继续开启。

此时调度中心仍然认为闸门已开到50%,按此计算下泄流量,导致水位控制失误。如果不是巡查人员偶然发现,可能造成更大问题。

业务背景:

  • 闸门规模:中型水库有5-10个闸门,大型水库有20-50个闸门
  • 控制方式:远程控制为主,现场手动为辅
  • 监测设备:闸门开度传感器每10秒上报一次数据
  • 调度频率:汛期每天调度5-10次,非汛期每天1-2次

1.2 核心痛点

问题1:执行情况不透明

  • 调度中心下发指令后,不知道闸门是否真正执行到位
  • 系统只显示"指令已下发",不显示"执行结果"
  • 需要人工巡查才能发现执行异常

问题2:发现滞后

  • 闸门执行异常后,可能20-30分钟才被发现
  • 依赖现场巡查人员偶然发现,没有自动监测机制
  • 夜间或恶劣天气时,巡查频率低,发现更晚

问题3:影响判断

  • 调度中心按"目标开度"计算下泄流量,实际开度不符导致计算错误
  • 可能影响水位控制、防汛调度等关键决策
  • 事后追溯困难,责任不清

1.3 业务规则(行业标准)

《水闸安全鉴定规定》相关要求:

  • 闸门启闭设备应定期检查维护(第12条)
  • 闸门开度应与指令一致,偏差不超过5%(第13条)
  • 发现闸门异常应立即报告并处理(第14条)

实际业务规则(基于行业调研):

  • 5分钟检查规则:指令下发后5分钟内检查执行情况
  • 偏差10%预警:实际开度与目标开度偏差 > 10% → 预警
  • 偏差20%报警:实际开度与目标开度偏差 > 20% → 报警(紧急)
  • 零开度特殊规则:目标开度 > 0但实际开度 = 0 → 立即报警(闸门卡死)

成本测算:

  • 误报成本:派人现场检查,耗时30分钟,人工成本约200元/次
  • 漏报成本:调度失误导致水位控制失败,可能影响防汛安全(无法估量)
  • 平衡点:宁可误报,不可漏报

二、方案设计

2.1 业务规则设计

规则1:闸门执行偏差检测

typescript
// 闸门执行偏差检测规则
interface GateExecutionDeviation {
  // 指令信息
  command: {
    gateId: string;           // 闸门ID
    targetOpening: number;    // 目标开度(%)
    issuedAt: Date;           // 指令下发时间
  };

  // 实际执行情况
  actual: {
    currentOpening: number;   // 当前开度(%)
    measuredAt: Date;         // 测量时间
  };

  // 偏差判定
  deviation: {
    value: number;            // 偏差值(%)
    percentage: number;       // 偏差百分比
    isAnomalous: boolean;     // 是否异常
    severity: 'normal' | 'warning' | 'alarm';  // 严重程度
  };
}

// 判定逻辑
function checkGateExecutionDeviation(
  command: GateCommand,
  currentOpening: number,
  checkTime: Date
): GateExecutionDeviation {
  // 计算偏差
  const deviation = Math.abs(currentOpening - command.targetOpening);
  const deviationPercentage = (deviation / command.targetOpening) * 100;

  // 判定严重程度
  let severity: 'normal' | 'warning' | 'alarm' = 'normal';
  let isAnomalous = false;

  // 特殊情况:目标开度 > 0 但实际开度 = 0(闸门卡死)
  if (command.targetOpening > 0 && currentOpening === 0) {
    severity = 'alarm';
    isAnomalous = true;
  }
  // 偏差 > 20%
  else if (deviation > 20) {
    severity = 'alarm';
    isAnomalous = true;
  }
  // 偏差 > 10%
  else if (deviation > 10) {
    severity = 'warning';
    isAnomalous = true;
  }

  return {
    command: {
      gateId: command.gateId,
      targetOpening: command.targetOpening,
      issuedAt: command.issuedAt
    },
    actual: {
      currentOpening,
      measuredAt: checkTime
    },
    deviation: {
      value: deviation,
      percentage: deviationPercentage,
      isAnomalous,
      severity
    }
  };
}

规则2:执行超时检测

typescript
// 执行超时检测规则
interface GateExecutionTimeout {
  // 时间限制
  timeLimit: number;        // 时间限制(秒)

  // 判定结果
  isTimeout: boolean;       // 是否超时
  elapsedTime: number;      // 已用时间(秒)
  expectedTime: number;     // 预期时间(秒)
}

// 判定逻辑
function checkGateExecutionTimeout(
  command: GateCommand,
  currentOpening: number,
  checkTime: Date
): GateExecutionTimeout {
  // 计算已用时间
  const elapsedTime = (checkTime.getTime() - command.issuedAt.getTime()) / 1000;

  // 计算预期时间(假设闸门开启速度为10%/分钟)
  const openingChange = Math.abs(command.targetOpening - command.initialOpening);
  const expectedTime = (openingChange / 10) * 60;  // 秒

  // 判定是否超时(预期时间 + 5分钟缓冲)
  const timeLimit = expectedTime + 300;
  const isTimeout = elapsedTime > timeLimit &&
                    Math.abs(currentOpening - command.targetOpening) > 5;

  return {
    timeLimit,
    isTimeout,
    elapsedTime,
    expectedTime
  };
}

规则3:自动响应规则

typescript
// 自动响应动作
interface AutoResponse {
  // 预警(偏差10-20%)
  warning: {
    alert: {
      channels: ['调度室大屏', '值班人员手机'];
      sound: '普通报警音';
      message: '3号闸门执行偏差:目标50%,实际40%,偏差10%';
    };
    actions: [
      '显示闸门实时开度曲线',
      '显示启闭机运行状态',
      '提示人工确认是否需要重新下发指令'
    ];
  };

  // 报警(偏差>20%或闸门卡死)
  alarm: {
    alert: {
      channels: ['调度室大屏', '值班人员手机', '现场维护人员手机'];
      sound: '高优先级报警音';
      message: '3号闸门执行异常:目标50%,实际30%,偏差20%,疑似启闭机故障';
    };
    actions: [
      '自动切换到手动控制模式',
      '通知现场维护人员检查',
      '记录异常事件到设备台账',
      '如果是关键闸门,启动备用方案'
    ];
  };

  // 超时(5分钟后仍未到位)
  timeout: {
    alert: {
      channels: ['调度室大屏', '值班人员手机'];
      sound: '普通报警音';
      message: '3号闸门执行超时:已用时8分钟,预期3分钟,当前开度35%';
    };
    actions: [
      '检查启闭机是否卡顿',
      '评估是否需要停止执行',
      '记录超时事件'
    ];
  };
}

2.2 技术方案

技术架构

闸门开度传感器 → 数据采集 → 规则引擎 → 报警推送

                指令执行监测

                可视化大屏 + 移动端

核心技术点

1. 闸门开度数据采集

  • 采集频率:每10秒上报一次
  • 数据格式:{ gateId, opening, timestamp, sensorStatus }
  • 数据校验:异常值过滤(如传感器故障导致的突变)

2. 指令执行监测

  • 指令下发后,启动执行监测任务
  • 每10秒检查一次当前开度与目标开度的偏差
  • 5分钟后检查是否到位,未到位则报警

3. 规则引擎

  • 支持多条规则并行判断(偏差规则 + 超时规则)
  • 支持规则配置(偏差阈值、超时时间可调整)
  • 支持规则测试(模拟闸门执行异常场景)

4. 报警推送

  • 多通道推送:大屏、手机APP、短信
  • 分级推送:不同严重程度推送给不同人员
  • 推送确认:重要报警必须确认收到

数据模型

typescript
// 闸门指令记录
interface GateCommand {
  id: string;
  gateId: string;             // 闸门ID
  gateName: string;           // 闸门名称
  initialOpening: number;     // 初始开度(%)
  targetOpening: number;      // 目标开度(%)
  issuedAt: Date;             // 指令下发时间
  issuedBy: string;           // 下发人
  status: 'EXECUTING' | 'COMPLETED' | 'FAILED';
}

// 闸门开度记录
interface GateOpeningRecord {
  id: string;
  gateId: string;             // 闸门ID
  gateName: string;           // 闸门名称
  opening: number;            // 开度(%)
  timestamp: Date;            // 采集时间
  sensorStatus: 'normal' | 'abnormal';  // 传感器状态
}

// 执行异常事件记录
interface ExecutionAnomalyEvent {
  id: string;
  commandId: string;          // 关联的指令ID
  gateId: string;
  gateName: string;
  anomalyType: 'DEVIATION' | 'TIMEOUT';  // 异常类型
  severity: 'warning' | 'alarm';  // 严重程度
  detectedAt: Date;           // 检测到异常的时间
  targetOpening: number;      // 目标开度
  actualOpening: number;      // 实际开度
  deviation: number;          // 偏差值
  status: 'PENDING' | 'CONFIRMED' | 'RESOLVED';

  // 处置记录
  disposal: {
    confirmedBy: string;      // 确认人
    confirmedAt: Date;
    cause: string;            // 异常原因
    actions: string[];        // 处置措施
    result: string;           // 处置结果
    resolvedAt: Date;
  };
}

三、AI辅助开发方案

3.1 技术迁移分析

复用已有资产:矿山场景的"环境监测异常预警"规则

相似点:

  • 都是基于传感器数据的异常监测
  • 都需要实时判断 + 自动报警
  • 都需要分级预警 + 处置闭环

差异点:

维度矿山场景(瓦斯监测)水利场景(闸门控制)
监测对象瓦斯浓度闸门开度
异常判断浓度 > 阈值实际开度与目标开度偏差 > 阈值
触发条件实时监测指令下发后监测
响应动作停止作业、人员撤离切换手动控制、通知维护

技术复用度:80%

  • 规则引擎逻辑:100%复用
  • 报警推送逻辑:100%复用
  • 异常判断逻辑:需要调整为"偏差判断"(20%新开发)

3.2 Cursor Skill设计

Skill名称: environment-monitoring-alert.md(已存在,可直接复用)

复用说明:

  • 矿山场景的"环境监测异常预警"规则可以应用到闸门控制监测
  • 只需调整监测对象(瓦斯浓度 → 闸门开度)和判断逻辑(阈值判断 → 偏差判断)

3.3 PROMPT模板

PROMPT 1:生成闸门执行偏差检测代码

你是一个业务逻辑开发专家。请根据以下业务规则,生成闸门执行偏差检测的代码。

## 业务场景
水利调度中心下发闸门控制指令后,需要监测闸门是否按指令执行到位。如果实际开度与目标开度偏差过大,需要自动报警。

## 业务规则
1. 偏差判定:
   - 偏差 > 10% → 预警(黄色)
   - 偏差 > 20% → 报警(红色)
   - 目标开度 > 0 但实际开度 = 0 → 立即报警(闸门卡死)

2. 超时判定:
   - 指令下发后5分钟内检查执行情况
   - 如果5分钟后仍未到位(偏差 > 5%)→ 超时报警

3. 自动响应:
   - 预警:显示实时开度曲线,提示人工确认
   - 报警:切换手动控制,通知现场维护人员
   - 超时:检查启闭机状态,评估是否停止执行

## 数据模型
- GateCommand:闸门指令记录(gateId, targetOpening, issuedAt)
- GateOpeningRecord:闸门开度记录(gateId, opening, timestamp)
- ExecutionAnomalyEvent:执行异常事件记录(anomalyType, severity, deviation)

## 技术要求
- 使用TypeScript
- 指令下发后启动监测任务,每10秒检查一次
- 支持规则配置(偏差阈值、超时时间可调整)
- 记录所有异常事件和处置过程

请参考 environment-monitoring-alert.md 中的规则,生成完整的代码实现。

PROMPT 2:生成分级报警推送逻辑

你是一个业务逻辑开发专家。请根据以下业务规则,生成分级报警推送的代码。

## 业务场景
闸门执行异常需要根据严重程度推送给不同人员,并触发不同的应急响应动作。

## 业务规则
1. 预警(偏差10-20%):
   - 推送到:调度室大屏、值班人员手机
   - 动作:显示实时开度曲线、提示人工确认

2. 报警(偏差>20%或闸门卡死):
   - 推送到:调度室大屏、值班人员手机、现场维护人员手机
   - 动作:切换手动控制、通知维护人员、记录异常事件

3. 超时(5分钟后仍未到位):
   - 推送到:调度室大屏、值班人员手机
   - 动作:检查启闭机状态、评估是否停止执行

## 技术要求
- 支持多通道推送(APP、短信)
- 推送确认机制(重要报警必须确认收到)
- 推送失败重试(最多3次)

请生成完整的代码实现。

3.4 开发周期预估

基于已有资产(矿山场景):

  • 原型验证:1-2天

    • Day 1:复用规则引擎,调整为偏差判断逻辑
    • Day 2:增加超时判断,测试异常场景
  • 首版上线:3-5天

    • Day 3:完善报警推送逻辑,对接闸门控制系统
    • Day 4:测试各种异常场景(偏差、超时、卡死)
    • Day 5:部署上线
  • 迭代优化:根据实际使用反馈调整阈值、优化报警策略


四、开发资产

4.1 Cursor Skill

文件名: environment-monitoring-alert.md(已存在)

复用说明: 矿山场景的"环境监测异常预警"规则可以直接应用到闸门控制监测,只需调整以下配置:

typescript
// 监测对象配置
const MONITORING_CONFIG = {
  // 矿山场景:瓦斯浓度
  mining: {
    metric: 'gasConcentration',
    unit: '%',
    thresholds: [0.5, 1.0, 1.5],  // 预警、报警、紧急
    checkMode: 'realtime'          // 实时监测
  },

  // 水利场景:闸门开度
  waterConservancy: {
    metric: 'gateOpening',
    unit: '%',
    deviationThresholds: [10, 20],  // 预警、报警
    checkMode: 'onCommand',         // 指令下发后监测
    checkInterval: 10,              // 检查间隔(秒)
    timeoutLimit: 300               // 超时限制(秒)
  }
};

4.2 技术迁移说明

可复用的已有资产:

  1. 矿山场景:环境监测异常预警规则

    • 复用:规则引擎框架、报警推送逻辑、分级预警机制
    • 调整:监测对象(瓦斯浓度 → 闸门开度)、判断逻辑(阈值判断 → 偏差判断)
    • 新增:超时判断逻辑
    • 复用度:80%
  2. 医废场景:GPS轨迹验证规则

    • 复用:偏差计算逻辑(GPS偏离距离 → 闸门开度偏差)
    • 调整:偏差阈值(50米 → 10%/20%)
    • 复用度:60%

需要新开发的部分:

  • 指令执行监测任务调度(15%)
  • 超时判断逻辑(5%)

4.3 实施指南

步骤1:准备环境

bash
# 安装依赖
npm install

# 配置闸门控制系统接口
# 编辑 config/gate-control-config.json

步骤2:使用Cursor Skill

1. 确认 environment-monitoring-alert.md 已存在于 .cursor/rules/
2. 在Cursor中告诉AI:
   "参考 environment-monitoring-alert.md 中的业务规则,
   实现闸门执行偏差监测功能。监测对象是闸门开度,
   判断实际开度与目标开度的偏差,偏差>10%预警,>20%报警。
   指令下发后5分钟内检查执行情况,未到位则超时报警。"
3. AI会基于规则生成代码

步骤3:调整配置

typescript
// config/gate-monitoring-rules.ts
export const GATE_MONITORING_CONFIG = {
  deviationWarningThreshold: 10,   // 偏差预警阈值(%)
  deviationAlarmThreshold: 20,     // 偏差报警阈值(%)
  checkInterval: 10,               // 检查间隔(秒)
  timeoutLimit: 300,               // 超时限制(秒)
  completionTolerance: 5,          // 到位容差(%)
};

步骤4:测试验证

bash
# 运行测试
npm test

# 模拟闸门执行异常场景
npm run simulate:gate-execution-anomaly

五、下一步行动

如果您对这个场景感兴趣

  1. 快速验证:我们可以用1-2天时间,基于模拟数据做原型演示
  2. 技术对接:提供闸门控制系统接口文档,评估对接工作量
  3. 成本预估:根据闸门数量、监测点数量,给出详细报价

相关场景

相关资产


← 返回水利场景 | 联系合作 →

基于 AI 辅助开发,快速、灵活、可靠