Skip to content

场景01:井下人员定位信号异常预警

当前阶段: 🔍 探索中 | 行业: 矿山安全 | 关键词: 人员定位、异常预警、应急响应 | 返回矿山场景 →


一、需求探索

1.1 痛点时刻

具体场景:

凌晨2点,井下C区作业人员张三的定位信号突然消失。调度室发现时已经过去5分钟,立即呼叫但无人应答。此时无法确定:

  • 是设备故障(定位卡没电、信号干扰)
  • 还是人员遇险(被困、受伤、昏迷)

调度员需要立即启动应急预案,但不知道该派谁去、去哪里找、需要带什么设备。

业务背景:

  • 作业规模:井下同时作业100-500人,分布在多个作业面
  • 定位技术:井下无GPS信号,使用UWB(超宽带)定位系统
  • 作业环境:纵深数公里,通信条件差,存在盲区
  • 时间特点:24小时连续作业,夜班(22:00-6:00)人员较少

1.2 核心痛点

问题1:发现滞后

  • 定位信号消失后,调度室可能5-10分钟才发现
  • 没有自动报警机制,依赖人工盯屏
  • 夜班调度员可能疲劳,容易漏看

问题2:判断困难

  • 不知道是设备故障还是人员遇险
  • 不知道最后位置在哪里(信号消失前的轨迹)
  • 不知道附近有没有其他人员可以协助

问题3:响应慢

  • 人工呼叫、人工派单、人工记录,耗时长
  • 应急预案在纸上,执行时容易遗漏步骤
  • 事后追溯困难,责任不清

1.3 业务规则(行业标准)

《煤矿安全规程》相关要求:

  • 井下人员必须携带定位设备(第447条)
  • 定位系统应能实时显示井下人员位置(第448条)
  • 发现人员定位异常应立即核实并采取措施(第449条)

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

  • 3分钟判定规则:定位信号消失 > 3分钟 → 判定为异常
  • 15分钟应急响应:异常发生后15分钟内必须完成人员确认
  • 升级规则:10分钟内未处理 → 升级到安全科科长

成本测算:

  • 误报成本:派人下井核实,耗时30分钟,人工成本约200元/次
  • 漏报成本:人员遇险延误救援,可能造成重大伤亡(无法估量)
  • 平衡点:宁可误报,不可漏报

二、方案设计

2.1 业务规则设计

规则1:异常判定规则

typescript
// 定位信号异常判定
interface LocationAnomaly {
  // 判定条件
  signalLostDuration: number;  // 信号消失时长(秒)
  threshold: number;            // 阈值(默认180秒 = 3分钟)

  // 判定结果
  isAnomalous: boolean;         // 是否异常
  severity: 'warning' | 'critical';  // 严重程度
  lastKnownLocation: {          // 最后已知位置
    area: string;               // 作业区域(如"C区3号采煤面")
    coordinates: { x: number; y: number; z: number };
    timestamp: Date;
  };
}

// 判定逻辑
function checkLocationAnomaly(
  worker: Worker,
  currentTime: Date
): LocationAnomaly {
  const lastSignalTime = worker.lastLocationUpdate;
  const duration = (currentTime.getTime() - lastSignalTime.getTime()) / 1000;

  if (duration > 180) {  // 3分钟
    return {
      signalLostDuration: duration,
      threshold: 180,
      isAnomalous: true,
      severity: duration > 600 ? 'critical' : 'warning',  // 10分钟为严重
      lastKnownLocation: worker.lastKnownLocation
    };
  }

  return { isAnomalous: false };
}

规则2:自动响应规则

typescript
// 自动响应动作
interface AutoResponse {
  // 立即动作(0分钟)
  immediate: {
    alert: {
      channels: ['调度室大屏', '调度员手机', '安全科长手机'];
      sound: '高优先级报警音';
      message: '井下人员定位异常:张三(工号001)信号消失3分钟';
    };
    displayInfo: {
      workerInfo: '姓名、工号、班组、联系方式';
      lastLocation: '最后位置、时间、轨迹回放';
      nearbyWorkers: '附近500米内的其他人员列表';
      emergencyContacts: '紧急联系人(家属、班组长)';
    };
  };

  // 10分钟未处理 → 升级
  escalation_10min: {
    notifyTo: ['安全科科长', '值班矿长'];
    message: '人员定位异常未处理:张三信号消失13分钟,请立即处理';
  };

  // 15分钟未确认 → 启动应急预案
  escalation_15min: {
    triggerEmergencyPlan: true;
    notifyTo: ['矿长', '安全科', '救护队'];
    autoActions: [
      '调取该区域监控录像',
      '通知附近人员前往查看',
      '准备救援设备'
    ];
  };
}

规则3:处置闭环规则

typescript
// 处置流程
interface DisposalProcess {
  // 步骤1:调度员确认(必须)
  step1_confirm: {
    action: '呼叫该人员 + 呼叫附近人员';
    timeLimit: 5;  // 5分钟内完成
    recordRequired: true;  // 必须记录呼叫结果
  };

  // 步骤2:现场核实(必须)
  step2_verify: {
    action: '派人前往最后位置核实';
    timeLimit: 15;  // 15分钟内到达
    reportRequired: true;  // 必须上报核实结果
  };

  // 步骤3:结果记录(必须)
  step3_record: {
    mustRecord: [
      '异常原因(设备故障/人员遇险/其他)',
      '处置措施',
      '处置结果',
      '处置时长',
      '责任人'
    ];
    autoArchive: true;  // 自动归档到安全台账
  };
}

2.2 技术方案

技术架构

UWB定位基站 → 定位数据采集 → 规则引擎 → 报警推送

              数据存储(轨迹、事件)

              可视化大屏 + 移动端

核心技术点

1. UWB定位数据采集

  • 定位精度:±30cm(井下环境)
  • 更新频率:1次/秒
  • 数据格式:{ workerId, x, y, z, timestamp, signalStrength }

2. 信号异常检测

  • 实时监测:每秒检查一次所有在井人员的定位数据
  • 异常判定:超过3分钟未收到数据 → 触发报警
  • 误报过滤:排除已出井人员、休息区人员

3. 规则引擎

  • 基于时间窗口的规则判断
  • 支持规则配置(阈值、升级时间可调整)
  • 支持规则测试(模拟异常场景)

4. 报警推送

  • 多通道推送:大屏、手机APP、短信、语音电话
  • 优先级控制:高优先级报警强制弹窗
  • 推送确认:必须确认收到,否则持续推送

数据模型

typescript
// 人员定位记录
interface LocationRecord {
  id: string;
  workerId: string;           // 人员ID
  workerName: string;         // 姓名
  area: string;               // 作业区域
  coordinates: { x: number; y: number; z: number };
  timestamp: Date;
  signalStrength: number;     // 信号强度
}

// 异常事件记录
interface AnomalyEvent {
  id: string;
  workerId: string;
  workerName: string;
  anomalyType: 'SIGNAL_LOST';
  detectedAt: Date;           // 检测到异常的时间
  lastSignalAt: Date;         // 最后信号时间
  lastLocation: LocationRecord;
  status: 'PENDING' | 'CONFIRMED' | 'RESOLVED';

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

三、AI辅助开发方案

3.1 技术迁移分析

复用已有资产:医废场景的"GPS轨迹验证"规则

相似点:

  • 都是基于位置数据的异常监测
  • 都需要实时判断 + 自动报警
  • 都需要记录轨迹 + 事后追溯

差异点:

维度医废场景矿山场景
定位技术GPS(室外)UWB(井下)
异常判断偏离路线 > 50米信号消失 > 3分钟
响应动作推送报警推送报警 + 应急预案
数据采集4G网络实时上传本地网络(井下无4G)

技术复用度:85%

  • 规则引擎逻辑:100%复用
  • 报警推送逻辑:100%复用
  • 数据采集层:需要适配UWB设备(15%新开发)

3.2 Cursor Skill设计

Skill名称: personnel-location-anomaly.md

Skill内容: (见下一节"开发资产")

3.3 PROMPT模板

PROMPT 1:生成异常检测代码

你是一个业务逻辑开发专家。请根据以下业务规则,生成人员定位异常检测的代码。

## 业务场景
矿山井下人员定位信号消失超过3分钟,需要自动报警并启动应急响应流程。

## 业务规则
1. 异常判定:定位信号消失 > 3分钟 → 判定为异常
2. 严重程度:
   - 3-10分钟:warning(警告)
   - > 10分钟:critical(严重)
3. 自动响应:
   - 立即推送报警(调度室大屏 + 手机APP)
   - 显示最后位置、轨迹回放、附近人员
   - 10分钟未处理 → 升级到安全科科长
   - 15分钟未确认 → 启动应急预案

## 数据模型
- LocationRecord:人员定位记录(workerId, coordinates, timestamp)
- AnomalyEvent:异常事件记录(workerId, detectedAt, lastLocation, status)

## 技术要求
- 使用TypeScript
- 实时监测(每秒检查一次)
- 支持规则配置(阈值可调整)
- 记录所有异常事件和处置过程

请生成完整的代码实现。

PROMPT 2:生成报警推送逻辑

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

## 业务场景
人员定位异常需要立即推送报警,并根据处理情况自动升级。

## 业务规则
1. 立即推送(0分钟):
   - 推送到:调度室大屏、调度员手机、安全科长手机
   - 推送内容:人员信息、最后位置、附近人员

2. 升级推送(10分钟未处理):
   - 推送到:安全科科长、值班矿长
   - 推送内容:异常持续时长、未处理原因

3. 应急推送(15分钟未确认):
   - 推送到:矿长、安全科、救护队
   - 触发:启动应急预案

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

请生成完整的代码实现。

3.4 开发周期预估

基于已有资产(医废场景):

  • 原型验证:2天

    • Day 1:适配UWB数据采集,复用规则引擎
    • Day 2:调整报警逻辑,测试异常场景
  • 首版上线:5-7天

    • Day 3-4:完善处置流程、数据记录
    • Day 5-6:对接调度系统、测试
    • Day 7:部署上线
  • 迭代优化:根据实际使用反馈调整阈值、优化报警策略


四、开发资产

4.1 Cursor Skill

文件名: personnel-location-anomaly.md

内容:

markdown
# 人员定位异常监测规则

## 业务场景
矿山、建筑、物流等场景中,需要实时监测人员定位信号,发现异常时自动报警并启动应急响应。

## 核心业务规则

### 1. 异常判定规则

**规则一:信号消失检测**
```typescript
// 检测定位信号是否消失
function checkSignalLost(
  worker: Worker,
  currentTime: Date,
  threshold: number = 180  // 默认3分钟
): boolean {
  const lastSignalTime = worker.lastLocationUpdate;
  const duration = (currentTime.getTime() - lastSignalTime.getTime()) / 1000;
  return duration > threshold;
}

规则二:严重程度判定

typescript
// 判定异常严重程度
function getSeverity(duration: number): 'warning' | 'critical' {
  if (duration > 600) {  // 10分钟
    return 'critical';
  }
  return 'warning';
}

2. 自动响应规则

规则一:立即报警(0分钟)

typescript
async function triggerImmediateAlert(anomaly: AnomalyEvent) {
  // 推送报警
  await alertService.push({
    channels: ['大屏', '手机APP', '短信'],
    priority: 'HIGH',
    message: `人员定位异常:${anomaly.workerName}信号消失${anomaly.duration}秒`,
    data: {
      workerInfo: anomaly.worker,
      lastLocation: anomaly.lastLocation,
      nearbyWorkers: await getNearbyWorkers(anomaly.lastLocation, 500)
    }
  });
}

规则二:升级报警(10分钟未处理)

typescript
async function escalateAlert(anomaly: AnomalyEvent) {
  if (anomaly.status === 'PENDING' && anomaly.duration > 600) {
    await alertService.push({
      channels: ['安全科科长', '值班矿长'],
      priority: 'CRITICAL',
      message: `人员定位异常未处理:${anomaly.workerName}信号消失${anomaly.duration}秒`
    });
  }
}

规则三:启动应急预案(15分钟未确认)

typescript
async function triggerEmergencyPlan(anomaly: AnomalyEvent) {
  if (anomaly.status === 'PENDING' && anomaly.duration > 900) {
    await emergencyService.trigger({
      plan: 'PERSONNEL_MISSING',
      notifyTo: ['矿长', '安全科', '救护队'],
      autoActions: [
        '调取监控录像',
        '通知附近人员',
        '准备救援设备'
      ]
    });
  }
}

3. 处置闭环规则

规则一:处置步骤

typescript
interface DisposalSteps {
  step1: {
    action: '呼叫该人员 + 呼叫附近人员';
    timeLimit: 300;  // 5分钟
    recordRequired: true;
  };
  step2: {
    action: '派人前往最后位置核实';
    timeLimit: 900;  // 15分钟
    reportRequired: true;
  };
  step3: {
    action: '记录异常原因和处置结果';
    mustRecord: ['原因', '措施', '结果', '时长', '责任人'];
  };
}

数据模型

人员定位记录

typescript
interface LocationRecord {
  id: string;
  workerId: string;
  workerName: string;
  area: string;
  coordinates: { x: number; y: number; z: number };
  timestamp: Date;
  signalStrength: number;
}

异常事件记录

typescript
interface AnomalyEvent {
  id: string;
  workerId: string;
  workerName: string;
  anomalyType: 'SIGNAL_LOST';
  detectedAt: Date;
  lastSignalAt: Date;
  lastLocation: LocationRecord;
  status: 'PENDING' | 'CONFIRMED' | 'RESOLVED';
  disposal: {
    confirmedBy: string;
    confirmedAt: Date;
    verifiedBy: string;
    verifiedAt: Date;
    cause: string;
    actions: string[];
    result: string;
    resolvedAt: Date;
  };
}

关键处理流程

  1. 实时监测 → 每秒检查所有在岗人员的定位数据
  2. 异常判定 → 信号消失 > 阈值 → 触发报警
  3. 自动响应 → 推送报警 + 显示辅助信息
  4. 升级机制 → 10分钟/15分钟自动升级
  5. 处置闭环 → 记录处置过程 + 自动归档

开发注意事项

  1. 阈值可配置:不要硬编码3分钟,支持运营人员配置
  2. 误报过滤:排除已出井人员、休息区人员
  3. 推送确认:必须确认收到,否则持续推送
  4. 数据留痕:所有异常事件和处置过程必须记录

相似场景复用

这个规则可以复用到:

  • 建筑施工:工人进入危险区域超时未出
  • 物流配送:配送员长时间停留或失联
  • 医院运送:运送人员长时间未完成任务

### 4.2 技术迁移说明

**可复用的已有资产:**

1. **医废场景:GPS轨迹验证规则**
   - 复用:规则引擎框架、报警推送逻辑
   - 调整:GPS → UWB,偏离距离 → 信号消失时间
   - 复用度:85%

2. **医废场景:超期预警规则**
   - 复用:时间窗口判断、升级机制
   - 调整:阈值(46/47/48小时 → 3/10/15分钟)
   - 复用度:90%

**需要新开发的部分:**
- UWB定位数据采集接口(15%)
- 井下网络环境适配(本地部署,无4G)

### 4.3 实施指南

**步骤1:准备环境**
```bash
# 安装依赖
npm install

# 配置UWB定位设备接口
# 编辑 config/uwb-config.json

步骤2:使用Cursor Skill

1. 将 personnel-location-anomaly.md 保存到 .cursor/rules/
2. 在Cursor中告诉AI:
   "参考 personnel-location-anomaly.md 中的业务规则,
   实现人员定位异常监测功能"
3. AI会基于规则生成代码

步骤3:调整配置

typescript
// config/anomaly-rules.ts
export const ANOMALY_CONFIG = {
  signalLostThreshold: 180,      // 3分钟(可调整)
  escalationTime_1: 600,         // 10分钟升级
  escalationTime_2: 900,         // 15分钟启动应急预案
  nearbyRadius: 500,             // 附近人员搜索半径(米)
};

步骤4:测试验证

bash
# 运行测试
npm test

# 模拟异常场景
npm run simulate:signal-lost

五、下一步行动

如果您对这个场景感兴趣

  1. 快速验证:我们可以用2天时间,基于模拟数据做原型演示
  2. 技术对接:提供UWB设备接口文档,评估对接工作量
  3. 成本预估:根据人员规模、定位点数量,给出详细报价

相关场景

相关资产


← 返回矿山场景 | 联系合作 →

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