本文档记录压力/振动算法在 models/ 重构后的运行方式:设备号输入、全量/实时模式、
compressor_alarm 存储映射与定时服务。对应代码:models/scan_all.py、
models/realtime_service.py、models/common/devices.py、models/common/alarm_store.py。
--device 7# 8# 9#(默认 7# 8# 9#),也兼容 7、7号机。compressor_data_import.directory_path 解析到 PKS 导入批次:SELECT pls.*
FROM pks_long_sample pls
INNER JOIN compressor_data_import di ON di.id = pls.import_batch_id
WHERE di.data_type = 'PKS' AND di.directory_path = '7#';
7#/8#/9# 分别对应 7/8/9 号机;4#/5#/6# 暂不纳入本算法。批次 划分周期(与历史一致),因此本地全量结果与现有
润滑油压力小时阶段段.csv、振动异常段.csv 逐字节一致。# 本地:自动查询起止时间,先清理旧中间/结果再生成
python models/scan_all.py --device 7# 8# 9# --store local
# 数据库:本地结果照常生成,并额外写入 compressor_alarm
python models/scan_all.py --device 7# 8# 9# --store db
# 开启模型预测参考(3 小时滑动预测,写入概率均值/最大/最小)
python models/scan_all.py --device 7# 8# 9# --store db --with-model
# 显式时间或复用小时中间表
python models/scan_all.py --start "2025-01-01 00:00:00" --end "2026-09-01 00:00:00"
python models/scan_all.py --hourly-csv models/datas/hourly/pks_hourly_full.csv
start = floor(最小 sample_time),end = floor(最大 sample_time) + 1h
(保证最后一个完整整点小时纳入),按设备取范围。models/datas/hourly/、
models/results/{common,pressure,vibration} 中的扫描产物),不删除模型测试结果与
models/datas/reference/。--store db 会按 (device_code, alarm_type ∈ {润滑油压力故障, 振动故障})
先删除所选设备的旧告警,再插入新段。compressor_alarm)| 结果 | device_code | device_part | device_point | alarm_type | alarm_level |
|---|---|---|---|---|---|
| 压力段 | 7# |
润滑油压力 |
YSJ_5 |
润滑油压力故障 |
压力阶段 |
| 振动段 | 7# |
联轴器端振动 / 链轮端振动 |
YSJ_10 / YSJ_11 |
振动故障 |
振动阶段 |
device_part/device_point 由该段
最强异常侧 决定(链轮端 → YSJ_11,联轴器端 → YSJ_10),与
振动异常段.csv 一行一段对应。alarm_des = 阶段触发依据(已迁移为 VARCHAR(4000));alarm_time_start / alarm_time_end = 开始小时 / 结束小时;alarm_info_json = 对应 CSV 行的 JSON(阶段/基线/评分/触发依据/最强异常侧 等全部字段);status = 1;scan_start_time / scan_end_time = 本次扫描范围。models/migrations/alter_compressor_alarm_alarm_des_4000.sql
(ALTER TABLE compressor_alarm MODIFY alarm_des VARCHAR(4000))。--with-model,默认关闭)模型异常概率均值、模型异常概率最大值、模型异常概率最小值。alarm_info_json 增加上述 3 个概率字段及 模型预测参考
(模型预测参考:3小时窗口异常概率 均值x/最大y/最小z(n次));alarm_des 只保留 阶段触发依据,不再追加模型预测参考;润滑油压力小时阶段段.csv / 振动异常段.csv 同步增加这 3 列 + 模型预测参考 列。build_datasets / split / train)完全不受影响;预测复用同一窗口与特征函数。models/datas/artifacts/* 缺失会直接报错,需先运行对应 run_pipeline.py。python models/realtime_service.py --once # 单次
python models/realtime_service.py --loop --interval 300 # 每 5 分钟(命令行定时)
python models/realtime_service.py --once --with-model # 同时写入模型预测参考
end = min(floor(本机当前时间), floor(最新数据) + 1h),
start = end - lookback(默认 45 天),按设备跑与全量相同的算法得到段。(device_code, alarm_type, alarm_level) 找时间重叠、或间隔
≤6 小时的既有行:
alarm_time_start = min、alarm_time_end = max,刷新 alarm_des / alarm_info_json
/ scan_*;device_part/device_point 更新为最新 最强异常侧;| 平台 | 安装 | 卸载 |
|---|---|---|
| macOS | bash models/service/mac/install.sh |
bash models/service/mac/uninstall.sh |
| Linux | sudo bash models/service/linux/install.sh |
sudo bash models/service/linux/uninstall.sh |
| Windows | models\service\windows\install_service.bat |
models\service\windows\uninstall_service.bat |
均为每 5 分钟执行 python models/realtime_service.py --once;详见
models/service/README.md(含 cron 备选与日志位置)。
# 顺序模拟多个时刻运行,结束后默认回滚数据库
python models/realtime_service.py --simulate "2026-02-03 20:00:00,2026-02-04 00:00:00"
# 校验本地结果与 golden 一致、DB 行数与 CSV 对应
python models/common/verify.py --with-db
--with-db 会校验 compressor_alarm 行数与参考 CSV 对应:压力 72 行、振动 25 行,共 97 行。