扬杰二厂业务流程梳理.md 8.7 KB

扬杰二厂泵站 业务流程梳理

依据:docs/扬杰二厂泵站需求.md、projects/yangjie2.json、AutoControlService.cs 等现有实现 梳理日期:2026-09-06


一、项目概况

项 值
工艺场景 扬杰二厂集水池排污泵站(1 个集水池 + 3 台排污泵)
PLC 西门子 S7(S7-200 Smart),地址 I/Q/M/VD
控制方式 中控(上位机)/ 屏控(现场触摸屏)二选一,由 M*.0 位决定
监测量 液位、压力、流量、日流量、3 台泵电流、日台时
前端模板 PumpStation(泵站专用视图)

二、核心业务流程

1️⃣ 数据采集流程(每轮询周期,默认 1s)

PlcPollingService 定时轮询
   │
   ├─ 读模拟量 VD62(液位) / VD6600(压力) / VD6604(流量)
   │         VD50/54/58(泵电流) / VD884(日流量) / VD950+VD10(日台时)
   │
   ├─ 读数字量 Q0.1~Q0.3(泵运行) / I0.1~I0.3(变频器故障) / M2.6/M5.6/M8.6(手自动)
   │
   ├─ 读控制参数 VD500/504/508/528/962(液位阈值) / VD6700/6704(压力阈值)
   │
   └─ 发布 DataUpdated 事件 → 触发下游所有业务
        ├─ AlarmService       → 报警检测
        ├─ AutoControlService  → 液位自动启停泵
        ├─ DeviceStateMachineManager → 设备状态机转换
        ├─ DataLoggingService  → 历史数据入库
        └─ UI ViewModel       → 界面刷新

2️⃣ 控制模式判定(每台泵独立)

读 M*.0(中控/屏控选择位)
   ├─ M*.0 = 0 → 中控模式:上位机启停命令【有效】
   └─ M*.0 = 1 → 屏控模式:上位机【只监视】,写命令无效

3️⃣ 液位自动控制(核心业务,AutoControlService)

每个轮询周期:
  读集水池液位 VD62
       │
       ▼
  计算需要泵数 requiredCount:
  ┌─────────────────────────────────────────────┐
  │ 液位 > VD962(保护液位)  → 3台全启(紧急排污)│
  │ 液位 > VD528(停止液位)  → 0台(全部停止)    │
  │ 液位 < VD508(启3台位)   → 3台               │
  │ 液位 < VD504(启2台位)   → 2台               │
  │ 液位 < VD500(启1台位)   → 1台               │
  │ 其余(滞后区间)        → 维持现状           │
  └─────────────────────────────────────────────┘
       │
       ▼
  防抖延迟:
    启泵条件需持续 ≥ 3 秒 (StartDelaySeconds)
    停泵条件需持续 ≥ 5 秒 (StopDelaySeconds)
       │
       ▼
  选泵策略 (SelectPumpsToRun):
    ① 剔除故障泵
    ② 按日台时(累计运行时长)升序 → 优先选运行时间最短的泵
    ③ 时长相同时用轮换索引打破平局(均衡磨损)
       │
       ▼
  执行启停(对每台泵):
    目标开 & 未运行 & 无故障 & 距上次启动 ≥ 60秒
        → 点动写 M*.3 (置ON 200ms → OFF)
    目标关 & 运行中 & 距上次停止 ≥ 60秒
        → 点动写 M*.4

要点:requiredCount 只在越限时变化,滞后区间防止液位在阈值附近抖动导致频繁启停。

4️⃣ 手动控制流程(操作员在中控执行)

操作员点击 启动/停止 按钮 (ViewA / ProjectView)
   │
   ▼
权限检查 (AuthService.HasPermission ≥ Operator)
   │
   ▼
写入点动命令位: 启动 M*.3 / 停止 M*.4 (ON 200ms → OFF)
   │  (命令是否生效取决于该泵当前是中控模式 M*.0=0)
   ▼
下一轮询周期读回 Q0.x 验证运行状态 → 界面刷新
   │
   └─ 审计日志记录 (AuditService.Log)

5️⃣ 报警流程

每周期 AlarmService.CheckAlarms:
  ┌────────────────────────┬──────┬──────────────────────┐
  │ 条件                    │ 级别 │ 动作                  │
  ├────────────────────────┼──────┼──────────────────────┤
  │ 压力 < VD6700(低压设定) │ 警告 │ 日志 + 界面提示       │
  │ 压力 > VD6704(高压设定) │ 警告 │ 日志 + 界面提示       │
  │ 泵变频器故障 I0.1~I0.3  │ 严重 │ 报警记录 + 通知       │
  │ PLC 断连                │ 提示 │ PLC_Connection 报警   │
  └────────────────────────┴──────┴──────────────────────┘
       │
       ├─ 报警延迟 3 秒 + 死区 2.0(防抖)
       ├─ 通过 Channel 异步入库 alarm_records
       ├─ 升级机制: 未确认超 10 分钟 → 升级 + 通知
       └─ 操作员确认 → 更新 IsConfirmed/ConfirmedBy

6️⃣ 设备状态机流程(每台泵)

PLC 信号驱动 Stateless 状态机:
  Q0.x 运行 + I0.x 无故障 → Running
  Q0.x 停止 + 无故障      → Stopped
  I0.x = 1 (变频器故障)   → Fault(触发设备报警)
       │
       └─ 状态每次变化持久化到 equipment_statuses 表

7️⃣ 数据统计与留存

持续: 轮询数据 → analog_records / flow_records(360天保留)
每日: DataRetentionService 清理过期记录(24h 周期)
每日: BackupService 启动备份 + 24h 定时备份(WAL checkpoint + VACUUM INTO)
日台时: 读 VD950+VD10 等(PLC 累计),M19.4 点动清零
日流量: 读 VD884,M19.3 点动复位

三、PLC 点位速查

3.1 数字量 I/O

地址 名称 方向
I0.0 预留 读
I0.1 泵1变频器故障 读(1=故障)
I0.2 泵2变频器故障 读(1=故障)
I0.3 泵3变频器故障 读(1=故障)
Q0.1 1#泵启停 写
Q0.2 2#泵启停 写
Q0.3 3#泵启停 写

3.2 模拟量

地址 名称
VD62 即时液位
VD50 泵1电流
VD54 泵2电流
VD58 泵3电流
VD6600 即时压力
VD6604 即时流量
VD884 日流量(累计)

3.3 液位控制参数

地址 名称
VD500 启动1台泵液位
VD504 启动2台泵液位
VD508 启动3台泵液位
VD528 停止液位
VD962 保护液位

3.4 泵控制位

功能 泵1 泵2 泵3
中控/屏控选择 M1.0 M4.0 M7.0
上位手动启动 M1.3 M4.3 M7.3
上位手动停止 M1.4 M4.4 M7.4
上位自动命令 M2.2 M5.4 M8.4
上位手动命令 M2.1 M5.3 M8.3
手自动状态 M2.6 (1=自动) M5.6 (1=手动) M8.6 (1=手动)
故障信号 M3.1 M6.1 M9.1

3.5 日台时 / 日流量

功能 泵1 泵2 泵3
日台时-小时 VD950 VD954 VD958
日台时-分钟 VD10 VD18 VD28
日台时清零 M19.4 M19.4 M19.4
日流量复位 M19.3 — —

四、⚠️ 已知风险点(待确认)

# 问题 现状 影响
1 泵1 与泵2/3 的手自动状态位极性相反(M2.6: 1=自动;M5.6/M8.6: 1=手动) 档案照抄点位表,未做极性归一 控制逻辑判断可能出错
2 日台时/日流量清零由谁触发(定时 or 手动) 未实现自动清零 统计数据可能不准
3 保护液位触发后是否需人工复位 未实现复位确认 安全逻辑待确认
4 点动持续时间(当前写死 200ms) 需现场联调确认 需现场验证
5 故障泵是否自动顶替 选泵时自动剔除故障泵 ✅ 已覆盖
6 泵1故障信号位(M3.1/M6.1/M9.1)与 I0.1~I0.3 是否重复 需确认 PLC 程序 报警逻辑可能重复

五、与当前代码的对应关系

需求 对应代码 状态
PLC 地址重映射 projects/yangjie2.json + PlcConfig ✅ 已完成
液位自动控制 AutoControlService.cs ✅ 已完成
中控/屏控切换 需在写命令前检查 M*.0 ⏳ 待实现
压力监测 AlarmService.CheckAlarmsFromProfile ✅ 已完成
泵电流监测 yangjie2.json 中 currentAddress 已配置 ✅ 读取已有
3台泵状态 DeviceStateMachineManager ✅ 已完成
日台时统计 读取地址已配置,UI 待展示 ⏳ 部分
日流量统计 VD884 读取已配置 ✅ 读取已有
报警逻辑 AlarmService ✅ 已完成
设备状态机 DeviceStateMachine(Stateless) ✅ 已完成