开发清单 — 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 API(110+ 通道)
│
│ ★ 全局常量
│
├── 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 统一配置管理器(原子写入:tmp→copyFile→unlink)
│ ├── 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 新增)
Modbus 通讯(主机)
Modbus 从机(v1.1.0 TCP Server 新增)
Modbus 配置文件统一(v1.1.0)
后台轮询与自动保存
数据处理管线(dataPipeline)
PID 控制(pidOrchestrator)
内部变量系统
数据存储
报警管理
仪表盘(v1.1.0 重写布局引擎)
AI 推理引擎(v1.1.0 退避机制)
用户管理与授权
系统与安全
四、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: true,nodeIntegration: false
- 所有 Node.js API 通过
preload.js 的 contextBridge.exposeInMainWorld 暴露
- IPC 全部使用
ipcRenderer.invoke ↔ ipcMain.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 慢速探测 → 成功自动恢复
六、待开发功能
七、版本历史
| 版本 |
日期 |
主要变更 |
| 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 |
初始开发完成 |