扬杰二厂泵站 — 业务逻辑规格书
版本: v2.0
日期: 2026-09-08
依据: 现场 PLC 点位确认表
状态: 已确认,待实施
一、项目定位
| 项 |
值 |
| 工艺场景 |
扬杰二厂 集水池排污泵站(1 个集水池 + 3 台排污泵) |
| PLC |
西门子 S7-200 Smart |
| 上位机角色 |
中控室监控 — 只监不控(自动逻辑由 PLC 执行) |
| 控制模式 |
屏控(现场触摸屏)↔ 中控(远程上位机) |
| 前端模板 |
PumpStation |
核心原则
自动控制由现场 PLC 完成,上位机不自动启停泵。
上位机仅在 中控 + 手动 模式下允许远程手动启停泵。
二、控制模式与安全联锁
2.1 两级模式切换
远程操作泵启停需要满足 两级条件,缺一不可:
第一步: 切换到「中控模式」
ModeSelectAddress = 0 → 中控(上位机可操作)
ModeSelectAddress = 1 → 屏控(现场控制,上位机只监视)
│
▼
第二步: 切换到「手动模式」
AutoStateAddress = 0 → 手动(允许远程启停)
AutoStateAddress = 1 → 自动(PLC 自动逻辑运行中,远程不可干预)
│
▼
✅ 可以操作泵启停
2.2 联锁判定表
| ModeSelect (中控/屏控) |
AutoState (自动/手动) |
上位机可启停泵? |
说明 |
| 屏控 (1) |
自动 (1) |
❌ |
现场自动运行,上位机纯监视 |
| 屏控 (1) |
手动 (0) |
❌ |
现场手动操作,上位机纯监视 |
| 中控 (0) |
自动 (1) |
❌ |
上位机监控,PLC 自动逻辑执行 |
| 中控 (0) |
手动 (0) |
✅ |
唯一允许远程启停的状态 |
2.3 上位机启停泵前置检查流程
操作员点击 启动/停止 按钮
│
▼
① 权限检查: AuthService.HasPermission ≥ Operator
│
▼
② 项目配置检查: profile.Control.AllowManualControl == true
│
▼
③ 模式联锁检查:
├─ 读 ModeSelectAddress → 必须 = 0 (中控)
│ └─ 否则: 提示 "当前为屏控模式,无法远程操作"
└─ 读 AutoStateAddress → 必须 = 0 (手动)
└─ 否则: 提示 "当前为自动模式,请切换到手动"
│
▼
④ 执行点动写入:
启动 → WriteBool(StartAddress, true) → 200ms → WriteBool(StartAddress, false)
停止 → WriteBool(StopAddress, true) → 200ms → WriteBool(StopAddress, false)
│
▼
⑤ 审计日志 + 下一轮询验证运行状态
三、PLC 点位表(已确认)
3.1 基本监控 — 模拟量读取
| # |
名称 |
地址 |
数据类型 |
方向 |
JSON 字段 |
| 1 |
1#泵电流 |
VD50 |
REAL |
读 |
pumps[0].currentAddress |
| 2 |
2#泵电流 |
VD54 |
REAL |
读 |
pumps[1].currentAddress |
| 3 |
3#泵电流 |
VD58 |
REAL |
读 |
pumps[2].currentAddress |
| 4 |
即时压力 |
VD6600 |
REAL |
读 |
gauges[0].valueAddress |
| 5 |
即时流量 |
VD6604 |
REAL |
读 |
gauges[1].valueAddress |
| 6 |
总流量 |
VD7000 |
REAL |
读 |
sensors[0].address |
| 7 |
即时液位 |
VD62 |
REAL |
读 |
tanks[0].levelAddress |
3.2 基本监控 — 数字量读取
| # |
名称 |
地址 |
数据类型 |
方向 |
JSON 字段 |
| 1 |
1#泵运行状态 |
Q0.1 |
开关量 |
读 |
pumps[0].runAddress |
| 2 |
2#泵运行状态 |
Q0.2 |
开关量 |
读 |
pumps[1].runAddress |
| 3 |
3#泵运行状态 |
Q0.3 |
开关量 |
读 |
pumps[2].runAddress |
3.3 故障监控 — 数字量读取
| # |
名称 |
地址 |
数据类型 |
方向 |
JSON 字段 |
| 1 |
低液位报警 |
M19.5 |
开关量 |
读 |
digitalInputs (新增) |
| 2 |
高压报警 |
M30.1 |
开关量 |
读 |
digitalInputs (新增) |
| 3 |
泵1过流报警 |
M17.1 |
开关量 |
读 |
pumps[0].faultAddress |
| 4 |
泵2过流报警 |
M17.2 |
开关量 |
读 |
pumps[1].faultAddress |
| 5 |
泵3过流报警 |
M17.3 |
开关量 |
读 |
pumps[2].faultAddress |
| 6 |
变频器1报警 |
M3.1 |
开关量 |
读 |
digitalInputs |
| 7 |
变频器2报警 |
M6.1 |
开关量 |
读 |
digitalInputs |
| 8 |
变频器3报警 |
M9.1 |
开关量 |
读 |
digitalInputs |
| 9 |
复位按钮 |
M30.0 |
开关量 |
脉冲写 |
digitalOutputs |
3.4 参数设置 — 模拟量读写
| # |
名称 |
地址 |
数据类型 |
方向 |
JSON 字段 |
| 1 |
启动1台泵液位 |
VD500 |
REAL |
读写 |
tanks[0].startPump1LevelAddress |
| 2 |
启动2台泵液位 |
VD504 |
REAL |
读写 |
tanks[0].startPump2LevelAddress |
| 3 |
启动3台泵液位 |
VD508 |
REAL |
读写 |
tanks[0].startPump3LevelAddress |
| 4 |
停止液位 |
VD528 |
REAL |
读写 |
tanks[0].stopLevelAddress |
| 5 |
保护液位 |
VD962 |
REAL |
读写 |
tanks[0].protectionLevelAddress |
| 6 |
高压设置 |
VD6704 |
REAL |
读写 |
gauges[0].highSetAddress |
| 7 |
低压设置 |
VD6700 |
REAL |
读写 |
gauges[0].lowSetAddress |
3.5 泵控制 — 模式与操作
| 功能 |
1#泵 |
2#泵 |
3#泵 |
JSON 字段 |
| 中控/屏控选择 (读) |
M1.0 |
M4.0 |
M7.0 |
modeSelectAddress |
| 手自动状态 (读) |
M2.6 |
M5.6 |
M8.6 |
autoStateAddress |
| 手动启动 (脉冲写) |
M1.3 |
M4.3 |
M7.3 |
startAddress |
| 手动停止 (脉冲写) |
M1.4 |
M4.4 |
M7.4 |
stopAddress |
| 切手动命令 (脉冲写) |
M2.1 |
M5.3 |
M8.3 |
manualCommandAddress |
| 切自动命令 (脉冲写) |
M2.2 |
M5.4 |
M8.4 |
autoCommandAddress |
3.6 日台时(运行时间统计)
| 功能 |
1#泵 |
2#泵 |
3#泵 |
数据类型 |
JSON 字段 |
| 台时-小时 (读) |
VD950 |
VD954 |
VD958 |
DINT |
dailyHoursAddress / dailyHoursDataType |
| 台时-分钟 (读) |
VD10 |
VD18 |
VD28 |
DINT |
dailyMinutesAddress / dailyMinutesDataType |
| 台时清零 (脉冲写) |
M19.4 |
M19.4 |
M19.4 |
- |
dailyResetAddress |
四、上位机功能清单
4.1 实时监控(只读)
| 功能 |
数据来源 |
刷新频率 |
| 集水池液位 + 趋势曲线 |
VD62 |
1s |
| 3 台泵运行状态 (运行/停止/故障) |
Q0.1-3 + M17.1-3 |
1s |
| 3 台泵电流 + 负荷比 |
VD50/54/58 |
1s |
| 即时压力 + 刻度 |
VD6600 |
1s |
| 即时流量 |
VD6604 |
1s |
| 总流量 |
VD7000 |
1s |
| 中控/屏控模式显示 |
M1.0/M4.0/M7.0 |
1s |
| 手自动状态显示 |
M2.6/M5.6/M8.6 |
1s |
| 日台时 (时+分) |
VD950+VD10 等 |
1s |
| 故障报警 (低液位/高压/过流/变频器) |
M19.5/M30.1/M17.x/M3.1/M6.1/M9.1 |
1s |
4.2 手动控制(需 中控+手动 模式)
| 操作 |
前置条件 |
PLC 写入 |
| 远程启动泵 |
ModeSelect=0 AND AutoState=0 |
点动 StartAddress (200ms) |
| 远程停止泵 |
ModeSelect=0 AND AutoState=0 |
点动 StopAddress (200ms) |
| 日台时清零 |
无 |
点动 DailyResetAddress (200ms) |
4.3 参数同步(写入 PLC)
| 操作 |
PLC 写入地址 |
| 设置启泵液位阈值 |
VD500 / VD504 / VD508 |
| 设置停泵液位 |
VD528 |
| 设置保护液位 |
VD962 |
| 设置压力高限 |
VD6704 |
| 设置压力低限 |
VD6700 |
| 一键全量同步 |
以上所有 |
4.4 报警管理
| 操作 |
行为 |
| 报警确认 |
标记 IsConfirmed + 记录操作人 |
| 报警复位(单条) |
清除活跃状态 + 点动 M30.0 |
| 报警复位(全部) |
清除所有活跃状态 + 点动 M30.0 |
| 报警通知 |
级别 ≥ 3 的报警触发桌面通知 |
4.5 中控/远程 (Hub 命令)
| 命令 |
行为 |
query_mode |
查询当前控制模式 |
sync_params |
远程触发参数全量同步 |
reset_alarm |
远程复位指定报警 |
reset_all_alarms |
远程复位所有报警 |
start_pump / stop_pump |
远程启停泵(需 AllowManualControl) |
五、项目配置(ControlConfig)
{
"control": {
"enableAutoControl": false,
"controlModeDescription": "PLC自动(上位机仅监控)",
"allowManualControl": true,
"allowParameterSync": true
}
}
| 字段 |
含义 |
本项目值 |
enableAutoControl |
上位机是否执行自动启停逻辑 |
false — PLC 自行处理 |
controlModeDescription |
UI 显示用的模式描述 |
"PLC自动(上位机仅监控)" |
allowManualControl |
是否允许远程手动启停泵 |
true — 需联锁检查 |
allowParameterSync |
是否允许写参数到 PLC |
true |
六、数据采集流程
PlcPollingService 定时轮询 (默认 1s)
│
├─ 读模拟量: VD62(液位) / VD6600(压力) / VD6604(流量)
│ VD50/54/58(泵电流) / VD7000(总流量)
│ VD950+VD10 / VD954+VD18 / VD958+VD28(日台时)
│
├─ 读数字量: Q0.1-3(泵运行) / M17.1-3(泵过流)
│ M3.1/M6.1/M9.1(变频器故障)
│ M19.5(低液位报警) / M30.1(高压报警)
│ M1.0/M4.0/M7.0(中控/屏控) / M2.6/M5.6/M8.6(手自动)
│
├─ 读控制参数: VD500/504/508/528/962(液位阈值)
│ VD6700/6704(压力阈值)
│
└─ 发布 DataUpdated 事件
├─ AlarmService → 报警检测 + 报警显示
├─ ProjectViewModel → UI 刷新 (模式显示、泵状态、液位趋势)
├─ DataLoggingService → 历史数据入库
└─ (AutoControlService → 不激活,因 enableAutoControl=false)
注意: AutoControlService 在 enableAutoControl=false 时不会订阅 DataUpdated,不向 PLC 写入任何启停命令。
七、报警逻辑
7.1 报警源
| 报警类型 |
触发条件 |
来源 |
级别 |
| 低液位报警 |
M19.5 = 1 |
PLC 数字量 |
警告(2) |
| 高压报警 |
M30.1 = 1 |
PLC 数字量 |
严重(3) |
| 泵1过流 |
M17.1 = 1 |
PLC 数字量 |
严重(3) |
| 泵2过流 |
M17.2 = 1 |
PLC 数字量 |
严重(3) |
| 泵3过流 |
M17.3 = 1 |
PLC 数字量 |
严重(3) |
| 变频器1故障 |
M3.1 = 1 |
PLC 数字量 |
严重(3) |
| 变频器2故障 |
M6.1 = 1 |
PLC 数字量 |
严重(3) |
| 变频器3故障 |
M9.1 = 1 |
PLC 数字量 |
严重(3) |
| 压力超高限 |
压力 > VD6704 |
上位机计算 |
警告(2) |
| 压力超低限 |
压力 < VD6700 |
上位机计算 |
警告(2) |
| PLC 断连 |
通信超时 |
上位机检测 |
紧急(4) |
7.2 报警处理
报警触发 → 记录到 alarm_records 表 → UI 弹出 → 桌面通知
│
├─ 确认: 操作员点击确认 → 标记 IsConfirmed
└─ 复位: 操作员点击复位 → 清除活跃状态 + 点动 M30.0 → PLC 侧复位报警输出
7.3 报警特性
| 特性 |
值 |
| 延迟触发 |
3 秒(防止瞬间波动误报) |
| 死区防抖 |
±2(防止在阈值边界反复触发) |
| 升级机制 |
未确认 10 分钟自动升到级别 4 |
| 异步入库 |
Channel 有界队列 (200),不阻塞轮询 |
八、与旧版差异(v1 → v2 变更摘要)
| # |
变更项 |
v1 (旧) |
v2 (新) |
| 1 |
上位机角色 |
自动启停泵 (AutoControlService) |
仅监控,PLC 处理自动逻辑 |
| 2 |
故障地址 |
I0.1/I0.2/I0.3 (I区物理输入) |
M17.1/M17.2/M17.3 (泵过流) + M3.1/M6.1/M9.1 (变频器) |
| 3 |
低液位报警 |
无 |
M19.5 (新增) |
| 4 |
高压报警 |
无 |
M30.1 (新增) |
| 5 |
总流量 |
VD884 (日流量) |
VD7000 (总流量) |
| 6 |
操作联锁 |
无 |
中控+手动 双重检查 |
| 7 |
参数同步 |
无 |
可写 7 个阈值到 PLC |
| 8 |
报警复位 |
仅确认 |
确认 + 复位 (软件清除 + M30.0 脉冲) |
| 9 |
模式显示 |
无聚合 |
中控/屏控/混合 模式徽章 |
| 10 |
按项目配置 |
无 |
ControlConfig 按项目决定是否自动控制 |