场景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;
};
}关键处理流程
- 实时监测 → 每秒检查所有在岗人员的定位数据
- 异常判定 → 信号消失 > 阈值 → 触发报警
- 自动响应 → 推送报警 + 显示辅助信息
- 升级机制 → 10分钟/15分钟自动升级
- 处置闭环 → 记录处置过程 + 自动归档
开发注意事项
- 阈值可配置:不要硬编码3分钟,支持运营人员配置
- 误报过滤:排除已出井人员、休息区人员
- 推送确认:必须确认收到,否则持续推送
- 数据留痕:所有异常事件和处置过程必须记录
相似场景复用
这个规则可以复用到:
- 建筑施工:工人进入危险区域超时未出
- 物流配送:配送员长时间停留或失联
- 医院运送:运送人员长时间未完成任务
### 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五、下一步行动
如果您对这个场景感兴趣
- 快速验证:我们可以用2天时间,基于模拟数据做原型演示
- 技术对接:提供UWB设备接口文档,评估对接工作量
- 成本预估:根据人员规模、定位点数量,给出详细报价
相关场景
- 场景02:瓦斯浓度异常预警 - 环境监测类场景
- 场景03:设备巡检漏检预警 - 计划任务类场景

