智能脱硝控制系统-开发清单

开发清单 — ActDenox 智能脱硝控制系统

最后更新:2026-06-27 | 版本 v1.1.0(工业上位机 UI 重构 + Modbus 配置统一 + 仪表盘自由布局 + TCP 从机 + AI 退避)


一、项目最新技术指标

指标 数值 备注
桌面框架 Electron 42.x Chromium + Node.js
运行时 Node.js (CommonJS) 单进程 + contextBridge
主进程入口 main.js 编排器模式,deps 注入
核心自治模块 7 个 core/ 误差/备份/管线/健康/窗口/轮询/PID
业务逻辑模块 7 个 modules/ Modbus 主/从/PID/报警/用户/审计/AI
IPC 通信层 7 个 ipc/ 文件 依赖注入,零直接耦合
服务模块 5 个 配置/路由/存储/日志/变量注册
渲染进程页面 14 个 HTML 页面 HTML + JS(contextIsolation, 无 Node 集成)
CSS 主题 工业控制台风格 冷灰背景 + 微圆角 + 强语义色 + 零毛玻璃
仪表盘布局 12 列显式 Grid 拖拽定位 + 自由拉伸 + 模板管理
Modbus 配置 3 文件统一 modbus-connect.json + parse-rules.json + factory
Modbus 从机 RTU + TCP 双模 ServerSerial + ServerTCP
数据存储 SQLite (WAL 模式) 4 个数据库,180 天保留
代码保护 javascript-obfuscator 4.x 打包时自动混淆
打包 electron-builder 26.x (NSIS) Windows 安装包

二、项目结构与模块依赖

2.1 目录树

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
Electron_Test/

   编排层  纯编排器,只做 Import  Init  IPC  Window

├── main.js                           主进程入口(编排器,deps 注入)

   安全桥接  唯一渲染进程通道

├── preload.js                        contextBridge API110+ 通道)

   全局常量

├── constants/
   ├── constants.js                   全局常量 (MAX_INTERNAL_VARIABLES)
   ├── licenseKey.js                  授权密钥单一来源
   └── pidDefaults.js                 PID 默认配置模板(单一来源)

   core/  7 个自治微服务模块(从 main.js 深度解耦)

├── core/
   ├── errorLogger.js                 全局异常捕获 + 进程退出快照 + 错误日志
   ├── backupScheduler.js             每日数据备份 + 过期清理 + 数据库完整性周检
   ├── dataPipeline.js                数据处理管线(解析→过滤→补偿→计算变量,自持状态)
   ├── healthMetrics.js               系统健康指标采集(5s 周期,含 AI 状态)
   ├── windowManager.js               BrowserWindow + 系统托盘 + 电源监控(休眠/唤醒)
   ├── pollEngine.js                  后台轮询引擎(Modbus 周期读取→管线→自动保存→健康心跳)
   └── pidOrchestrator.js             PID 编排器(多实例生命周期/无扰动切换/定时器看门狗)

   ipc/  7  IPC 注册模块(deps 注入,零直接耦合)

├── ipc/
   ├── modbusIpc.js                   Modbus 主机/从机/后台轮询/自动保存
   ├── pidIpc.js                      PID 实例管理 (增删/启停/配置/状态/图表)
   ├── alarmIpc.js                    报警配置/规则/历史
   ├── authIpc.js                     用户/授权/自登录/权限/审计
   ├── dataIpc.js                     数据存储/映射/列管理
   ├── variableIpc.js                 内部变量/计算变量/过滤器/补偿/字段名
   └── systemIpc.js                   健康状态/配置备份/仪表盘布局/原生对话框/连接配置保存

   modules/  7 个业务逻辑模块(有状态 / 独立自治)

├── modules/
   ├── modbusManage.js                Modbus 主机(连接/队列/诊断/重连,PID 退避已上移)
   ├── modbusSlave.js                 Modbus 从机(RTU ServerSerial + TCP ServerTCP
   ├── pidController.js               PID 控制器类(位置式/抗饱和/微分先行/低通滤波)
   ├── alarmManager.js                报警引擎(看门狗/阈值/延时/滞后/分级/历史)
   ├── authManager.js                 用户管理(CRUD/权限矩阵/硬件指纹/授权/自登录/超时降级)
   ├── aiInferenceEngine.js           AI 推理引擎(双定时器:采样+请求,失败退避+慢速探测恢复)
   └── auditLogger.js                 操作审计日志

   services/  5 个服务模块(无状态 / 纯函数 / 全项目共享)

├── services/
   ├── configManager.js               统一配置管理器(原子写入:tmpcopyFileunlink
   ├── controlRouter.js               控制策略路由(源→目标变量复制)
   ├── dataStore.js                   SQLite 数据存储(自动建列/聚合查询/列管理/健康)
   ├── logger.js                      中央日志控制器
   └── variableRegistry.js            变量元数据注册表(单例,category/description/unit/writable

   utils/

├── utils/
   └── modbusUtils.js                 Modbus 共享工具(CRC16/帧构建解析/字节重排/寄存器↔值转换)

   renderer/pages/  14 个渲染进程页面(contextIsolation,  nodeIntegration

├── pages/
   ├── dashboard.html + .js           仪表盘首页(12列自由布局/10种组件)
   ├── dashboardWidgets.js            组件注册表(含报警摘要/补偿摘要/顶栏状态灯)
   ├── modbus.html + modbusRender.js  Modbus 通讯管理(主/从,TCP Server
   ├── variables.html + .js           内部变量监控(含 AI 分类筛选)
   ├── pid.html + .js                 PID 控制(多实例/无扰动/偏差带/健康灯)
   ├── data.html + .js                数据保存与查询(保留策略/Excel 导出)
   ├── trend.html + .js               历史趋势(多轴/聚合/缩放)
   ├── filter.html + .js              数据过滤器(范围/速率/移动平均/尖峰)
   ├── compensation.html + .js        仪表状态补偿(状态机/取变量值)
   ├── alarm.html + .js               报警配置(看门狗/延时进度/历史查询)
   ├── auth.html + .js                用户管理(权限矩阵/审计/自登录/超时/丰富授权信息)
   ├── aiControl.html + .js           AI 优化控制
   ├── mapping.html + .js             字段映射
   ├── sysTools.html + .js            系统工具
   ├── chartPopout.html               PID 趋势弹出窗
   ├── trendPopout.html               历史趋势弹出窗
   ├── components.css                 共享组件样式(按钮/表格/卡片/徽章)
   ├── theme-industrial.css           工业控制台主题(冷灰/微圆角/强语义色)
   ├── layout-shell.css               侧边栏+顶条三区 CSS Grid 布局
   ├── layout-shell.js                Shell 注入引擎(替代旧 layout.js
   └── authGuard.js                   权限守卫(查权限矩阵 + 返回仪表盘按钮)

├── build-obfuscate.js                 构建混淆脚本
├── generateLicense.js                 离线授权码生成工具(开发环境,不打包)
├── package.json                       ( electron-builder NSIS 配置)
├── nodemon.json                       开发热重启配置
├── icon.png                           应用图标
├── data/                              运行时数据 (安装后在 %APPDATA%)
├── 开发清单.md                         本文档
└── 操作手册说明.md                     运维操作手册

2.2 模块依赖关系图(数据流方向)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
main.js (编排器)
  ├─→ core/errorLogger        ← 全局异常 + 退出快照
  ├─→ core/backupScheduler    ← 定时备份/清理
  ├─→ core/dataPipeline       ← 自持: 过滤器配置/补偿配置/计算变量
  ├─→ core/healthMetrics      ← 读取各模块状态 → _sys_* 变量(含 AI)
  ├─→ core/windowManager      ← 窗口/托盘/电源
  ├─→ core/pollEngine         ← 注入: modbus, dataStore, onDataRefresh
  └─→ core/pidOrchestrator    ← 注入: pidInstances, modbus, onLatestItems

数据流:  Modbus设备 → pollEngine → dataPipeline → internalVariables → pidOrchestrator
                         DCS/PLC ← modbusSlave ←─────────────────────────┘

三、已实现功能全景

界面框架(v1.1.0 新增)

  • 左侧深色固定侧边栏 + 顶部紧凑状态条(CSS Grid 三区布局)
  • 侧边栏宽度可拖拽调整(160-360px),localStorage 持久化
  • 侧边栏自包含登录弹窗(切换账号/顶条用户区点击)
  • 工业控制台主题(冷灰 #e8ecf0 背景 / 2-3px 微圆角 / 强语义色 / 零毛玻璃零渐变)
  • 顶栏系统状态指示器(Modbus/PID/报警/保存)+ 仪表盘顶栏状态灯组件
  • 14 个导航链接(仪表盘为首),当前页蓝色竖条高亮,无权限页面半透明加锁

Modbus 通讯(主机)

  • RTU/TCP 双协议,连接/断开按钮 + 后台轮询/停止
  • 停止轮询自动断开物理连接 + 释放串口/TCP 端口
  • 多数据类型 uint16/int16/uint32/int32/float32/float64
  • 字节序 BE/LE + 字序 ABCD/BADC/CDAB/DCBA
  • 报文帧 hex 调试(请求/响应,含 CRC 校验显示)
  • 操作队列串行化(enqueue,防并发冲突)
  • PID 写入短超时队列路径(1200ms)+ 退避保护
  • 连接健康心跳(30s 独立检测)+ 智能断线重连(3 次失败触发)
  • 重连冷却期保护(10 秒锁频防抖)
  • 冷启动自适应超时 + PID 写入拥塞预检

Modbus 从机(v1.1.0 TCP Server 新增)

  • RTU 从机 (ServerSerial) + TCP 从机 (ServerTCP),主从模式可同时运行
  • 解析规则表统一服务主机解析 + 从机映射(共用 modbus-parse-rules.json
  • 从机帧捕获 + RS-485 回显过滤
  • 从机诊断统计 + 事件日志
  • 多寄存器缓存机制(_slaveRegCache_*),防部分写入产生中间值
  • PID 输出寄存器和报警寄存器自动注入从机映射

Modbus 配置文件统一(v1.1.0)

  • modbus-connect.json:主机 + 从机连接参数统一文件(master / slave 对称结构)
  • modbus-parse-rules.json:主机/从机共用寄存器解析规则(registerMap 统一键名)
  • modbus-parse-rules.factory.json:出厂默认模板(首次启动种子)
  • 向前兼容:旧 modbus.json / modbus-slave.json / modbus-slave-config.json 自动迁移
  • 解析规则加载兼容 registerMap / rules 两种键名

后台轮询与自动保存

  • 主进程定时轮询,页面切换后继续运行
  • 并发保护 + 连续失败检测 + 强制重连
  • 重连冷却期(10s,防健康检查重复触发)
  • 休眠唤醒后自动恢复(断开→等待 1.5s→重连→恢复轮询)
  • 自动保存(独立定时器,周期性写 SQLite)
  • 保存变量过滤器(只保存勾选的字段)

数据处理管线(dataPipeline)

  • 自持状态:过滤器配置/补偿配置/计算变量/运行时状态全部模块内管理
  • 寄存器解析(按规则表顺序 + 类型校验)
  • 4 种数据过滤器:范围钳位/变化率限制/移动平均/尖峰抑制
  • 仪表状态补偿(状态机模式 + 跟随模式,AND/OR 条件逻辑)
  • 安全计算变量引擎(vm 沙箱,三道防线:黑名单→白名单→空原型沙箱)
  • 伴生变量体系:XXX(过滤) + XXX(补偿) + <规则名>_compensating

PID 控制(pidOrchestrator)

  • 多实例 PID 控制器(增删/Tab 切换)
  • 位置式 PID + 积分抗饱和 + 微分先行
  • PV 低通滤波 / 死区 / 输出变化率限制
  • 反向作用(Reverse Action) — 脱硝等负增益过程,error = PV − SP
  • 前馈控制(Feed-forward) — 可测扰动直接叠加到输出
  • 增益调度(Gain Scheduling) — 根据工况变量动态缩放 P/I/D 系数
  • 史密斯预估器(Smith Predictor) — 补偿 3~15 分钟纯滞后
  • 手动/自动无扰动切换(Bumpless Transfer)
  • 远程复位信号(上升沿触发,只响应 0→1)
  • ECharts 实时趋势(SP/PV/预估 PV/总输出/修正 五曲线 + 偏差带虚线)
  • 健康指示灯(输出饱和 + 偏差状态 + 偏离持续时长)
  • 周期溢出检测 + 定时器卡死看门狗

内部变量系统

  • internalVariables 全局数据中心(对象共享,按引用传递)
  • 变量元数据注册表(单例,category/description/unit/writable)
  • 分类筛选:全部/Modbus/PID/手动/计算/系统/AI
  • 30+ 系统健康指标(含 4 个 AI 状态变量)
  • 变量上限 500 防护(MAX_INTERNAL_VARIABLES)

数据存储

  • SQLite (WAL 模式) — datastore.sqlite / auth.db / alarm_history.sqlite / audit_log.sqlite
  • 自动建列 + 数据库列管理
  • 聚合查询(分钟/小时/天 AVG/MIN/MAX),动态 SQL 生成
  • 每日凌晨 3:00 自动备份
  • 过期数据自动清理(保留 N 天,默认 180 天)

报警管理

  • 看门狗心跳 + 阈值报警 + 三级分级(预警/报警/严重)
  • 延时触发(倒计时显示)+ 滞后死区
  • 报警历史 SQLite 记录 + 桌面通知
  • 仪表盘报警摘要组件(自动展示全部活跃报警)

仪表盘(v1.1.0 重写布局引擎)

  • 12 列显式 CSS Grid 自由布局(替代旧 auto-fit 流布局)
  • 自由拉伸:右下角三角手柄,2-12 列 × 1-6 行无极调节
  • 拖拽移动:⋮⋮ 手柄拖拽 + 半透明占位 ghost + 网格吸附 + 位置交换
  • 10 种组件:数值卡片/状态灯/顶栏状态灯/可编辑数值/折线图/柱状图/环形仪表盘/进度条/控制路由/报警摘要/补偿摘要
  • 报警摘要 + 补偿摘要:自动获取系统数据,无需配置数据源
  • 顶栏状态灯:逻辑与状态指示灯一致,同时在顶部状态条渲染
  • 布局持久化:{ x, y, w, h } 存入 localStorage + 文件(向后兼容旧 size 格式)
  • 组件注册表模式(dashboardWidgets.js)+ 增量渲染
  • 聚合模式(分钟/小时/天均值)

AI 推理引擎(v1.1.0 退避机制)

  • 双定时器架构(采样 + 请求,完全解耦)
  • 连续 3 次失败自动退避:停请求定时器,切慢速探测(30s 一次)
  • 探测成功自动恢复:重启请求定时器,切回正常频率
  • 4 个 AI 系统变量(_sys_ai_enabled/connected/consecutive_failures/success_count
  • 变量监控页面 AI 分类筛选

用户管理与授权

  • 三角色(admin/operator/viewer)+ 可配置权限矩阵
  • 硬件指纹 + AES-256-CBC 授权码激活
  • 3 天试用期 + 丰富的授权信息展示(剩余天数/起止日期/到期警告)
  • 自动登录(无人值守)+ 会话超时降级
  • 侧边栏切换账号(自包含登录弹窗)
  • 登录审计 + 操作审计

系统与安全

  • contextIsolation: true + nodeIntegration: false(进程严格隔离)
  • 所有 IPC 通过 invoke/handle(无 on/send 裸通道)
  • 配置原子写入(tmp + copyFile + unlink,防断电损坏)
  • 配置备份与恢复(动态扫描 data/,选择性导出/导入)
  • 系统托盘 + 最小化到托盘
  • 电源休眠阻止 + 休眠唤醒全自动恢复
  • 代码混淆保护(打包时自动)

四、v1.1.0 相比 v1.0.0-rc4 的变更清单

删除的文件

文件 原因
src/renderer/pages/home.html 仪表盘即首页
src/renderer/pages/home-dashboard.css 随 home.html 删除
src/renderer/pages/home-dashboard.js 随 home.html 删除
src/renderer/pages/layout.js layout-shell.js 替代
src/renderer/pages/index.css 旧登录页暗色主题,样式全部被覆盖
src/renderer/pages/theme-light.css 毛玻璃主题,被 theme-industrial.css 替代
src/config/modbus-parse-rules.json 出厂模板迁入 data/(重命名为 .factory.json
src/config/ 目录 空目录已删除
data/modbus.json 合并到 modbus-connect.json
data/modbus-slave.json 合并到 modbus-connect.json
data/modbus-slave-config.json 寄存器映射合并到 modbus-parse-rules.json
data/control-routing.json 残留的开发期半成品配置
data/pages.json authManager 有兜底列表,非必需
data/save-filter.json 零代码引用
data/write_log.sqlite 5 月残留,无引用

新增的文件

文件 用途
src/renderer/pages/theme-industrial.css 工业控制台主题(冷灰/微圆角/强语义色)
src/renderer/pages/layout-shell.css 侧边栏 + 顶条三区 CSS Grid 布局
src/renderer/pages/layout-shell.js Shell 注入引擎(侧边栏/顶条/登录弹窗/状态轮询/拖拽调整)
data/modbus-connect.json 统一连接配置(主机 + 从机对称结构)

代码死区清理

位置 变更
src/ipc/systemIpc.js 移除孤立的 preview-config-backup IPC 处理器
src/core/healthMetrics.js 移除无人引用的 refreshHealthMetrics 导出
src/core/backupScheduler.js 移除无人引用的 runDataCleanup / runIntegrityCheck 导出
src/main.js 移除冗余的 1 秒 controlRouter.tick 定时器(healthMetrics 已覆盖)
src/modules/authManager.js 兜底页面列表移除已删除的 home

五、已闭环的安全与稳定性防线

5.1 进程隔离

  • 渲染进程 contextIsolation: truenodeIntegration: false
  • 所有 Node.js API 通过 preload.jscontextBridge.exposeInMainWorld 暴露
  • IPC 全部使用 ipcRenderer.invokeipcMain.handle 模式,无通配符通道
  • 110+ API 通道,零 send/on 裸调用

5.2 IPC deps 访问器兼容设计

  • 所有 IPC 模块通过 register(deps) 接收依赖注入
  • main.js 的 deps 对象使用 getter/setter 代理到各 core/ 模块
  • 前端和 IPC 模块完全无感于底层模块拆分

5.3 Modbus 字节重排去重

  • 统一提取到 modbusUtils.js,主从双方共享同一份实现

5.4 PID 无扰动切换

  • 自动→手动:反算积分项对齐当前输出(输出零跳变)
  • 手动→自动:积分从对齐值平滑接管

5.5 定时器幂等清理与看门狗

  • 所有 start* 函数内部先 clear* 旧定时器再创建
  • PID 定时器卡死看门狗:3×采样周期强制释放

5.6 配置原子写入

  • ConfigManager.save() 三步:tmp → copyFile → unlink

5.7 AI 退避与自动恢复

  • 连续 3 次失败 → 停请求定时器 → 30s 慢速探测 → 成功自动恢复

六、待开发功能

  • PID 自整定 (auto-tuning)
  • 报表自动生成(日报/月报 PDF)
  • 国际化 (i18n)
  • 多窗口支持
  • OPC UA 协议支持
  • 远程 Web 监控面板

七、版本历史

版本 日期 主要变更
1.1.0 2026-06-27 工业上位机 UI 重构:侧边栏 + 顶条 Shell、工业控制台主题、12 列仪表盘自由布局、10 种组件(含报警/补偿摘要、顶栏状态灯)、侧边栏拖拽/切换账号。Modbus 统一:TCP 从机、modbus-connect.json + modbus-parse-rules.json 三文件结构、连接/断开/读/写分离、停止轮询自动断开。AI 优化:3 次失败退避 +30s 探测恢复、AI 状态变量 + 分类。工程清理:删除 15 个残留文件、死代码扫描、CSS 变量统一映射、授权信息丰富化、配置文件向前兼容迁移
1.0.0-rc4 2026-06-08 终局代码审查与精准重构:统一 dataDir 注入、ConfigManager DI 解耦、电源监听器清理、死代码删除、密钥源去重、PID 退避上移
1.0.0-rc3 2026-06-07 史密斯预估器 + 系统工具页面
1.0.0-rc2 2026-06-07 安全加固:密钥混淆存储、默认密码预计算哈希、电源休眠闭环
1.0.0-rc1 2026-06-07 架构重构:main.js 从 2172 行缩减至 340 行,拆分为 7 个 core 模块
1.0.0-beta 2026-06-01 初始开发完成
Licensed under CC BY-NC-SA 4.0