# RO膜污染监控与CIP预测系统 ## 系统简介 基于压差预测数据分析膜污染速率,自动计算最优CIP清洗时机。 **核心原理**: - 通过滑动窗口计算污染速率 k 值(压差上升速度) - 识别 k 值持续上升的时间段,找出污染最严重的时机 - 综合一段、二段数据,给出最优CIP建议 **主要功能**: - 支持 RO1-RO4 四个机组同时分析 - 提供 4 种决策策略(最早/最晚/加权/严重度) - 自动生成日志、图表、HTML报告 - 支持 API 回调推送决策结果 ## 快速开始 ### 1. 基本运行 ```python from main_simple import main # 使用默认参数(策略3-加权平均,当前时间,所有机组) result_df = main() # 指定策略和时间 result_df = main(strategy=3, start_date='2025-08-26 00:00:00') # 只分析特定机组 result_df = main(strategy=1, unit_filter='RO1') ``` ### 2. 自动监控模式 ```python # 自动持续监控,到期触发预测 python smart_monitor.py ``` 监控系统会: - 检查 config.json 中的 CIP 历史时间 - 到期自动运行预测并更新下次时间 - 循环监控,无需人工干预 ### 3. 策略说明 | 策略 | 说明 | 适用场景 | |-----|------|---------| | 1 | 最早时机 - 取一段/二段中较早的 | 保守维护 | | 2 | 最晚时机 - 取一段/二段中较晚的 | 最大化运行时间 | | 3 | 加权平均 - 根据k值加权(推荐) | 平衡维护和运行 | | 4 | 污染严重 - 选k值最大的段 | 基于实际污染程度 | ## 配置文件 (config.json) ```json { "api": { "base_url": "http://example.com", "callback_endpoint": "/api/cip/callback", "jwt_token": "your_token" }, "scada": { "project_id": "12345" }, "cip_history": { "RO1": "2025-08-05 10:00:00", "RO2": "2025-07-20 15:00:00", "RO3": "2025-08-01 08:00:00", "RO4": "2025-07-15 12:00:00" } } ``` **说明**: - `cip_history`:记录各机组最近一次CIP时间,用于计算预测周期 - `api`:可选,配置后会自动推送决策结果到回调接口 - `scada.project_id`:项目标识,用于API回调 ## 算法原理 ### 核心逻辑 1. **获取预测数据** → 从污染预测模型获取未来压差数据 2. **计算k值** → 7天滑动窗口线性回归,得到污染速率序列 3. **识别上升段** → 找出k值连续上升的时间段 4. **应用约束** → 至少距离起点30天(避免过早CIP) 5. **找最优点** → 在有效时间段内选k值最大的点 6. **策略综合** → 对一段、二段按策略综合决策 ### 参数调整 核心参数在 `OptimalCIPPredictor` 类中: - `window_days=7`:k值计算窗口,增大平滑噪声,减小提高敏感度 - `min_continuous_rising=3`:k值连续上升最小点数,增大避免误报 - `min_delay_days=30`:最小延迟天数,根据实际CIP周期调整 ## 输出示例 ### 控制台输出 ``` 分析机组 RO1 预测天数: 90天 找到RO1压差列: 2个 C.M.RO1_DB@DPT_1_pred: 2025-10-15 18:00:00 (第71天, k=0.000234) C.M.RO1_DB@DPT_2_pred: 2025-10-18 12:00:00 (第75天, k=0.000198) RO1最优CIP时机: 2025-10-16 08:00:00 ================================================== 分析完成 ================================================== 机组类型 CIP时机 策略说明 RO1 2025-10-16 08:00:00 加权平均策略 (第72天) RO2 2025-11-04 06:00:00 加权平均策略 (第91天) RO3 2025-10-28 14:00:00 加权平均策略 (第84天) RO4 None 无有效CIP时机 ``` ## 日志与图表 系统自动生成完整的分析记录,保存在 `analysis_logs/` 目录: ### 目录结构 ``` analysis_logs/ ├── CIP_Analysis_20251015_095138.log # 主日志 ├── data/ # 数据文件 │ ├── CIP_Analysis_20251015_095138_prediction_data.csv # 原始预测数据 │ ├── CIP_Analysis_20251015_095138_RO1_pressure_data.csv # RO1压差数据 │ ├── CIP_Analysis_20251015_095138_RO2_pressure_data.csv │ └── CIP_Analysis_20251015_095138_final_results.csv # 最终结果 ├── plots/ # 图表 │ ├── CIP_Analysis_20251015_095138_pressure_trends.png # 压差趋势图 │ └── CIP_Analysis_20251015_095138_unit_comparison.png # 机组对比图 └── reports/ # 报告 ├── CIP_Analysis_20251015_095138_analysis_data.json # 完整分析数据 └── CIP_Analysis_20251015_095138_report.html # HTML报告 ``` ### 主要输出 **1. 压差趋势图** (`pressure_trends.png`) - 4个子图,分别展示RO1-RO4的压差变化 - 一段、二段压差曲线对比 - 自动截取到各机组预测周期 **2. 机组对比图** (`unit_comparison.png`) - 左图:各机组预测周期对比(柱状图) - 右图:CIP建议时机分布(距起点天数) **3. HTML报告** (`report.html`) - 会话信息、输入参数、分析结果 - 带样式的表格展示 - 适合分享和存档 **4. 主日志** (`.log`) - 详细记录每个机组的分析过程 - k值计算、时间段识别、策略选择 - API调用结果、耗时统计 ## 系统集成 ### API回调 配置了API的话,系统会自动推送决策结果: **推送格式**: ```json { "list": [ { "type": "RO1", "project_id": "12345", "ctime": "2025-10-16 08:00:00" } ] } ``` 失败会自动重试3次,间隔10秒。 ### 依赖模块 - `fouling_model_0922.predict.Predictor`:压差预测模型 - `cip.run_this.main`:计算各机组预测周期 - `logging_system.CIPAnalysisLogger`:日志和图表生成 --- ## 注意事项 1. **预测周期不够**:确保预测数据至少覆盖30天以上 2. **频繁无结果**:可以降低 `min_continuous_rising` 或 `min_delay_days` 3. **结果不合理**:检查预测模型质量,或尝试不同策略 4. **查看详细过程**:打开 `analysis_logs/` 目录下的日志文件