场景02:瓦斯浓度异常预警
当前阶段: 🔍 探索中 | 行业: 矿山安全 | 关键词: 瓦斯监测、环境监测、异常预警 | 返回矿山场景 →
一、需求探索
1.1 痛点时刻
具体场景:
周二下午3点,井下B区采煤面的瓦斯传感器显示:
- 14:45 → 0.3%(正常)
- 14:52 → 0.45%(上升中)
- 15:00 → 0.6%(超过预警线)
15分钟内,瓦斯浓度从0.3%上升到0.6%,上升幅度达0.3%。这是典型的瓦斯突出前兆,但调度室没有及时发现,直到15:05才注意到浓度已经超标。
业务背景:
- 监测规模:井下布设200-500个瓦斯传感器,覆盖所有作业面
- 监测频率:每分钟采集一次数据,实时上传到地面监控系统
- 作业环境:采煤作业会扰动煤层,可能导致瓦斯突然涌出
- 安全标准:《煤矿安全规程》规定瓦斯浓度 > 1.0%必须停止作业
1.2 核心痛点
问题1:发现滞后
- 瓦斯浓度缓慢上升时,调度员可能不会注意
- 只关注绝对值(是否超标),忽略变化趋势(快速上升)
- 夜班或疲劳时,容易漏看监控数据
问题2:判断困难
- 不知道是正常波动还是异常上升
- 不知道是局部问题还是大面积问题
- 不知道该立即撤人还是先加强通风
问题3:响应慢
- 发现异常后,人工通知、人工决策、人工执行,耗时长
- 应急预案在纸上,执行时容易遗漏步骤
- 事后追溯困难,责任不清
1.3 业务规则(行业标准)
《煤矿安全规程》相关要求:
- 采煤工作面瓦斯浓度 > 1.0% → 必须停止作业,撤出人员(第148条)
- 瓦斯浓度 > 1.5% → 必须停电撤人(第149条)
- 瓦斯监测系统应具备超限报警功能(第150条)
实际业务规则(基于行业调研):
- 0.5%预警规则:瓦斯浓度 > 0.5% → 黄色预警,加强通风
- 0.8%报警规则:瓦斯浓度 > 0.8% → 红色报警,准备撤人
- 1.0%强制撤离:瓦斯浓度 > 1.0% → 立即停止作业,撤出人员
- 快速上升规则:15分钟内上升 > 0.3% → 立即报警(可能是瓦斯突出前兆)
成本测算:
- 误报成本:停止作业、撤出人员,损失产量约5000元/次
- 漏报成本:瓦斯爆炸,可能造成重大伤亡(无法估量)
- 平衡点:宁可误报,不可漏报
二、方案设计
2.1 业务规则设计
规则1:绝对值预警规则
typescript
// 瓦斯浓度绝对值判定
interface GasConcentrationAlert {
// 判定条件
concentration: number; // 当前浓度(%)
// 判定结果
level: 'NORMAL' | 'WARNING' | 'ALARM' | 'CRITICAL';
action: string; // 应采取的措施
}
// 判定逻辑
function checkConcentration(concentration: number): GasConcentrationAlert {
if (concentration >= 1.0) {
return {
concentration,
level: 'CRITICAL',
action: '立即停止作业,撤出人员,切断电源'
};
} else if (concentration >= 0.8) {
return {
concentration,
level: 'ALARM',
action: '准备撤人,加强通风,停止爆破作业'
};
} else if (concentration >= 0.5) {
return {
concentration,
level: 'WARNING',
action: '加强通风,增加监测频率,通知现场负责人'
};
} else {
return {
concentration,
level: 'NORMAL',
action: '正常作业'
};
}
}规则2:快速上升预警规则
typescript
// 瓦斯浓度快速上升判定
interface RapidRiseAlert {
// 判定条件
startConcentration: number; // 起始浓度
endConcentration: number; // 结束浓度
duration: number; // 时间窗口(分钟)
riseAmount: number; // 上升幅度
// 判定结果
isRapidRise: boolean; // 是否快速上升
severity: 'warning' | 'critical';
}
// 判定逻辑
function checkRapidRise(
sensorData: SensorRecord[],
timeWindow: number = 15 // 默认15分钟
): RapidRiseAlert {
// 获取时间窗口内的数据
const now = new Date();
const startTime = new Date(now.getTime() - timeWindow * 60 * 1000);
const windowData = sensorData.filter(d => d.timestamp >= startTime);
if (windowData.length < 2) {
return { isRapidRise: false };
}
const startConcentration = windowData[0].concentration;
const endConcentration = windowData[windowData.length - 1].concentration;
const riseAmount = endConcentration - startConcentration;
// 15分钟内上升 > 0.3% → 快速上升
if (riseAmount > 0.3) {
return {
startConcentration,
endConcentration,
duration: timeWindow,
riseAmount,
isRapidRise: true,
severity: riseAmount > 0.5 ? 'critical' : 'warning'
};
}
return { isRapidRise: false };
}规则3:自动响应规则
typescript
// 自动响应动作
interface AutoResponse {
// 黄色预警(浓度 > 0.5%)
warning: {
alert: {
channels: ['调度室大屏', '现场负责人手机'];
message: 'B区采煤面瓦斯浓度0.6%,超过预警线';
};
autoActions: [
'增加通风量',
'增加监测频率(1分钟 → 30秒)',
'通知现场负责人'
];
};
// 红色报警(浓度 > 0.8% 或 快速上升)
alarm: {
alert: {
channels: ['调度室大屏', '现场负责人', '安全科长', '值班矿长'];
sound: '高优先级报警音';
message: 'B区采煤面瓦斯浓度0.9%,准备撤人';
};
autoActions: [
'停止爆破作业',
'加强通风',
'准备撤人方案',
'通知救护队待命'
];
};
// 强制撤离(浓度 > 1.0%)
critical: {
alert: {
channels: ['全矿广播', '所有管理人员'];
sound: '最高优先级报警音';
message: 'B区采煤面瓦斯浓度1.2%,立即撤人';
};
autoActions: [
'切断该区域电源',
'启动应急广播',
'通知所有人员撤离',
'启动应急预案'
];
};
}2.2 技术方案
技术架构
瓦斯传感器 → 数据采集 → 规则引擎 → 报警推送
↓
数据存储(时序数据)
↓
可视化大屏 + 移动端核心技术点
1. 瓦斯传感器数据采集
- 采集频率:1次/分钟(正常)、1次/30秒(预警时)
- 数据格式:
{ sensorId, location, concentration, timestamp } - 数据校验:排除异常值(如传感器故障导致的突变)
2. 时序数据存储
- 使用时序数据库(如InfluxDB)存储历史数据
- 支持快速查询时间窗口内的数据
- 支持数据聚合(如计算15分钟内的上升幅度)
3. 规则引擎
- 实时监测:每分钟检查一次所有传感器数据
- 双重判断:绝对值 + 变化趋势
- 支持规则配置(阈值、时间窗口可调整)
4. 报警推送
- 分级推送:黄色预警、红色报警、强制撤离
- 多通道推送:大屏、手机APP、短信、广播
- 推送确认:必须确认收到,否则持续推送
数据模型
typescript
// 传感器数据记录
interface SensorRecord {
id: string;
sensorId: string; // 传感器ID
location: string; // 位置(如"B区采煤面")
concentration: number; // 瓦斯浓度(%)
timestamp: Date;
status: 'NORMAL' | 'FAULT'; // 传感器状态
}
// 预警事件记录
interface AlertEvent {
id: string;
sensorId: string;
location: string;
alertType: 'ABSOLUTE' | 'RAPID_RISE'; // 预警类型
level: 'WARNING' | 'ALARM' | 'CRITICAL';
detectedAt: Date;
// 预警详情
details: {
concentration?: number; // 当前浓度
riseAmount?: number; // 上升幅度
duration?: number; // 时间窗口
};
// 处置记录
disposal: {
confirmedBy: string;
confirmedAt: Date;
actions: string[]; // 采取的措施
result: string; // 处置结果
resolvedAt: Date;
};
}三、AI辅助开发方案
3.1 技术迁移分析
复用已有资产:生鲜场景的"冷库温度监测"规则
相似点:
- 都是基于传感器数据的环境监测
- 都需要判断绝对值 + 变化趋势
- 都需要分级预警 + 自动响应
差异点:
| 维度 | 生鲜场景 | 矿山场景 |
|---|---|---|
| 监测对象 | 冷库温度 | 瓦斯浓度 |
| 阈值判断 | > 8°C预警 | > 0.5%预警 |
| 变化趋势 | 2小时上升 > 3°C | 15分钟上升 > 0.3% |
| 响应动作 | 检查制冷设备 | 加强通风、撤人 |
| 数据采集 | 5分钟/次 | 1分钟/次 |
技术复用度:80%
- 规则引擎逻辑:100%复用(绝对值 + 变化趋势)
- 报警推送逻辑:100%复用
- 数据采集层:需要适配瓦斯传感器(20%新开发)
3.2 Cursor Skill设计
Skill名称: environment-monitoring-alert.md
Skill内容: (见下一节"开发资产")
3.3 PROMPT模板
PROMPT 1:生成环境监测代码
你是一个业务逻辑开发专家。请根据以下业务规则,生成环境监测异常预警的代码。
## 业务场景
矿山井下瓦斯浓度监测,需要实时判断绝对值是否超标,以及是否快速上升。
## 业务规则
1. 绝对值判断:
- > 0.5%:黄色预警,加强通风
- > 0.8%:红色报警,准备撤人
- > 1.0%:强制撤离,切断电源
2. 变化趋势判断:
- 15分钟内上升 > 0.3%:立即报警(可能是瓦斯突出前兆)
3. 自动响应:
- 黄色预警:通知现场负责人,增加监测频率
- 红色报警:通知管理层,停止爆破作业
- 强制撤离:启动应急广播,切断电源
## 数据模型
- SensorRecord:传感器数据记录(sensorId, concentration, timestamp)
- AlertEvent:预警事件记录(alertType, level, details, disposal)
## 技术要求
- 使用TypeScript
- 实时监测(每分钟检查一次)
- 支持规则配置(阈值、时间窗口可调整)
- 记录所有预警事件和处置过程
请生成完整的代码实现。PROMPT 2:生成分级报警逻辑
你是一个业务逻辑开发专家。请根据以下业务规则,生成分级报警推送的代码。
## 业务场景
瓦斯浓度异常需要分级推送报警,不同级别推送给不同的人员。
## 业务规则
1. 黄色预警(浓度 > 0.5%):
- 推送到:调度室大屏、现场负责人
- 推送内容:当前浓度、位置、建议措施
2. 红色报警(浓度 > 0.8% 或 快速上升):
- 推送到:调度室、现场负责人、安全科长、值班矿长
- 推送内容:当前浓度、上升趋势、应急措施
3. 强制撤离(浓度 > 1.0%):
- 推送到:全矿广播、所有管理人员
- 触发:启动应急预案、切断电源
## 技术要求
- 支持多通道推送(APP、短信、广播)
- 推送确认机制(必须确认收到)
- 推送失败重试(最多3次)
请生成完整的代码实现。3.4 开发周期预估
基于已有资产(生鲜场景):
原型验证:1-2天
- Day 1:适配瓦斯传感器数据,复用规则引擎
- Day 2:调整阈值和报警逻辑,测试异常场景
首版上线:3-5天
- Day 3-4:完善处置流程、数据记录
- Day 5:对接监控系统、测试、部署上线
迭代优化:根据实际使用反馈调整阈值、优化报警策略
四、开发资产
4.1 Cursor Skill
文件名: environment-monitoring-alert.md
内容:
markdown
# 环境监测异常预警规则
## 业务场景
矿山、冷链、化工等场景中,需要实时监测环境参数(如瓦斯浓度、温度、湿度),发现异常时自动报警。
## 核心业务规则
### 1. 绝对值预警规则
**规则一:阈值判断**
```typescript
// 判断环境参数是否超过阈值
function checkThreshold(
value: number,
thresholds: { warning: number; alarm: number; critical: number }
): 'NORMAL' | 'WARNING' | 'ALARM' | 'CRITICAL' {
if (value >= thresholds.critical) {
return 'CRITICAL';
} else if (value >= thresholds.alarm) {
return 'ALARM';
} else if (value >= thresholds.warning) {
return 'WARNING';
} else {
return 'NORMAL';
}
}2. 变化趋势预警规则
规则一:快速上升检测
typescript
// 检测环境参数是否快速上升
function checkRapidRise(
sensorData: SensorRecord[],
timeWindow: number, // 时间窗口(分钟)
riseThreshold: number // 上升阈值
): boolean {
const now = new Date();
const startTime = new Date(now.getTime() - timeWindow * 60 * 1000);
const windowData = sensorData.filter(d => d.timestamp >= startTime);
if (windowData.length < 2) {
return false;
}
const startValue = windowData[0].value;
const endValue = windowData[windowData.length - 1].value;
const riseAmount = endValue - startValue;
return riseAmount > riseThreshold;
}3. 自动响应规则
规则一:分级报警
typescript
async function triggerAlert(
level: 'WARNING' | 'ALARM' | 'CRITICAL',
sensor: Sensor,
details: any
) {
const alertConfig = {
WARNING: {
channels: ['大屏', '现场负责人'],
priority: 'MEDIUM',
actions: ['增加监测频率', '通知现场负责人']
},
ALARM: {
channels: ['大屏', '现场负责人', '管理层'],
priority: 'HIGH',
actions: ['停止相关作业', '启动应急预案']
},
CRITICAL: {
channels: ['全矿广播', '所有管理人员'],
priority: 'CRITICAL',
actions: ['立即撤人', '切断电源', '启动应急预案']
}
};
const config = alertConfig[level];
await alertService.push({
channels: config.channels,
priority: config.priority,
message: `${sensor.location}环境异常:${details.message}`,
data: {
sensor,
details,
suggestedActions: config.actions
}
});
}数据模型
传感器数据记录
typescript
interface SensorRecord {
id: string;
sensorId: string;
location: string;
value: number; // 监测值
unit: string; // 单位
timestamp: Date;
status: 'NORMAL' | 'FAULT';
}预警事件记录
typescript
interface AlertEvent {
id: string;
sensorId: string;
location: string;
alertType: 'ABSOLUTE' | 'RAPID_RISE';
level: 'WARNING' | 'ALARM' | 'CRITICAL';
detectedAt: Date;
details: {
value?: number;
riseAmount?: number;
duration?: number;
};
disposal: {
confirmedBy: string;
confirmedAt: Date;
actions: string[];
result: string;
resolvedAt: Date;
};
}关键处理流程
- 实时监测 → 每分钟检查所有传感器数据
- 双重判断 → 绝对值 + 变化趋势
- 分级报警 → 根据严重程度推送给不同人员
- 自动响应 → 触发预设的应急措施
- 处置闭环 → 记录处置过程 + 自动归档
开发注意事项
- 阈值可配置:不要硬编码阈值,支持运营人员配置
- 数据校验:排除传感器故障导致的异常值
- 推送确认:必须确认收到,否则持续推送
- 数据留痕:所有预警事件和处置过程必须记录
相似场景复用
这个规则可以复用到:
- 冷链物流:冷库温度监测
- 化工厂:有毒气体浓度监测
- 数据中心:机房温湿度监测
- 医院:手术室温湿度监测
### 4.2 技术迁移说明
**可复用的已有资产:**
1. **生鲜场景:冷库温度监测规则**
- 复用:规则引擎框架(绝对值 + 变化趋势)、报警推送逻辑
- 调整:温度 → 瓦斯浓度,阈值调整
- 复用度:80%
2. **医废场景:超期预警规则**
- 复用:时间窗口判断、分级报警
- 调整:时间窗口(46/47/48小时 → 15分钟)
- 复用度:70%
**需要新开发的部分:**
- 瓦斯传感器数据采集接口(20%)
- 应急广播系统对接(井下广播)
### 4.3 实施指南
**步骤1:准备环境**
```bash
# 安装依赖
npm install
# 配置传感器接口
# 编辑 config/sensor-config.json步骤2:使用Cursor Skill
1. 将 environment-monitoring-alert.md 保存到 .cursor/rules/
2. 在Cursor中告诉AI:
"参考 environment-monitoring-alert.md 中的业务规则,
实现瓦斯浓度监测预警功能"
3. AI会基于规则生成代码步骤3:调整配置
typescript
// config/alert-rules.ts
export const GAS_ALERT_CONFIG = {
thresholds: {
warning: 0.5, // 黄色预警
alarm: 0.8, // 红色报警
critical: 1.0 // 强制撤离
},
rapidRise: {
timeWindow: 15, // 时间窗口(分钟)
threshold: 0.3 // 上升阈值
}
};步骤4:测试验证
bash
# 运行测试
npm test
# 模拟异常场景
npm run simulate:gas-alert五、下一步行动
如果您对这个场景感兴趣
- 快速验证:我们可以用1-2天时间,基于模拟数据做原型演示
- 技术对接:提供传感器接口文档,评估对接工作量
- 成本预估:根据传感器数量、监测点位,给出详细报价
相关场景
- 场景01:井下人员定位异常预警 - 人员定位类场景
- 场景03:设备巡检漏检预警 - 计划任务类场景

