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

项目概述

基于 Electron 的工业 SCADA 桌面应用,支持 Modbus RTU/TCP 主机与 RTU 从机模式,具备 CEMS 数据采集解析、PID 控制、报警管理、仪表状态补偿、历史数据存储、趋势分析、仪表盘看板等完整的脱硝控制功能。

技术栈

技术
桌面框架 Electron 42.x
串口/TCP modbus-serial 8.x
数据存储 SQLite (sqlite3, WAL 模式)
图表 ECharts 5.6 (CDN)
Excel xlsx 0.18
代码保护 javascript-obfuscator 4.x
打包 electron-builder 26.x (NSIS)

项目结构

 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
Electron_Test/
├── main.js                 # 主进程入口 (~2020行)
├── preload.js              # 安全桥接 (contextBridge, ~150 API)
├── configManager.js        # 统一配置管理器 (load/save/list/backupAll)
├── variableRegistry.js     # 变量元数据注册表 (category/description/unit)
├── modbusManage.js         # Modbus 主机 (连接/读写/队列/诊断)
├── modbusSlave.js          # Modbus 从机 (ServeSerial)
├── pidController.js        # PID 控制器类 (位置式/抗饱和/微分先行)
├── dataStore.js            # SQLite 数据存储 (读写/聚合/列管理)
├── alarmManager.js         # 报警引擎 (看门狗/阈值/延时/滞后/历史)
├── authManager.js          # 用户管理 (账号/权限/授权/自登录/超时降级)
├── auditLogger.js          # 操作审计日志
├── generateLicense.js      # 离线授权码生成工具
├── build-obfuscate.js      # 构建混淆脚本
├── ipc/
   ├── modbusIpc.js        # Modbus 主机/从机/轮询 IPC
   ├── pidIpc.js           # PID 实例管理 IPC
   ├── alarmIpc.js         # 报警配置 IPC
   ├── authIpc.js          # 用户/授权/自登录 IPC
   ├── dataIpc.js          # 数据存储/映射 IPC
   ├── variableIpc.js      # 变量/过滤器/补偿/字段名 IPC
   └── systemIpc.js        # 健康状态/备份/布局/对话框/审计 IPC
├── pages/
   ├── home.html           # 首页 (功能入口 + 授权检查)
   ├── dashboard.html      # 仪表盘 (组件拖拽/7种组件/聚合模式)
   ├── dashboard.js        # 仪表盘逻辑 (增量渲染/组件注册)
   ├── dashboardWidgets.js # 组件注册表 (value/status/chart/gauge/...)
   ├── modbus.html         # Modbus 通讯管理
   ├── modbusRender.js     # Modbus 页面逻辑
   ├── variables.html/js   # 内部变量监控 (分类/搜索/元数据)
   ├── pid.html/js         # PID 控制 (多实例/健康灯/偏差带)
   ├── data.html/js        # 数据保存与查询 (保留策略/Excel导出)
   ├── trend.html/js       # 历史趋势 (多轴/聚合/缩放)
   ├── filter.html/js      # 数据过滤器 (按需新增模式)
   ├── compensation.html/js # 仪表补偿 (状态机/取变量值)
   ├── alarm.html/js       # 报警配置 (看门狗/延时进度/历史查询)
   ├── auth.html/js        # 用户管理 (权限矩阵/审计/自登录/超时)
   ├── mapping.html/js     # 字段映射
   ├── layout.js           # 统一导航栏 (自动注入样式+链接)
   ├── authGuard.js        # 权限守卫 (查权限矩阵)
   ├── index.css           # 基础样式
   └── theme-light.css     # 主题
├── package.json
├── nodemon.json
├── modbus-parse-rules.json # 默认解析规则模板
├── icon.png
├── 开发清单.md
├── 操作手册说明.md
└── data/                   # 运行时数据 (安装后在 %APPDATA%)

已实现功能

Modbus 通讯

  • RTU 主机:连接/断开、FC03/FC04 读取、FC06 写入
  • TCP 主机:IP: 端口连接
  • RTU 从机:将内部变量映射为寄存器供 DCS 读写
  • 多数据类型:uint16/int16/uint32/int32/float32/float64
  • 字节序 BE/LE + 字序 ABCD/BADC/CDAB/DCBA
  • 报文帧 hex 调试(请求/响应)
  • 操作队列串行化(enqueue,防并发冲突)
  • PID 写入短超时队列路径(1500ms)
  • 连接健康心跳 + 自动重连
  • 冷启动自适应超时(3000ms)+ 退避保护

Modbus 从机

  • 解析规则表同时服务主机解析和从机映射
  • 从机帧捕获 + RS-485 回显过滤
  • 从机诊断统计(总帧数/成功/异常/断开)
  • 从机事件日志(最近 20 条)
  • 自定义寄存器映射(解析规则表即映射表)
  • 主/从模式可同时运行(不同串口)
  • 从机模式 UI 切换不停止后台轮询

后台轮询

  • 主进程定时轮询,页面切换后继续
  • 并发保护 + 连续失败检测 + 强制重连
  • 重连冷却期(10s,防健康检查重复触发)
  • 休眠唤醒后自动恢复
  • 前端实时数据刷新(setTimeout 链 + 变化检测)

通讯诊断

  • 总请求/成功/失败/成功率
  • 超时/连接断开/CRC 校验失败/异常响应
  • 连续错误数 + 健康标记
  • 主/从模式独立统计
  • 重置统计按钮

内部变量系统

  • internalVariables 全局数据中心
  • Modbus 字段自动注入 + PID 输出自动注入
  • 计算变量(vm 沙箱安全表达式求值)
  • 手动添加/删除/编辑变量
  • 变量元数据注册表(category/description/unit/writable)
  • 分类筛选:全部/Modbus/PID/手动/计算/系统
  • 搜索过滤(实时输入匹配)
  • 变量上限 500 防护
  • 系统健康指标 (_sys_*) 24 个变量

数据存储

  • SQLite (WAL 模式) — datastore.sqlite
  • 自动建列 (ALTER TABLE ADD COLUMN)
  • 保存变量过滤器
  • 自动保存 + 立即保存
  • 数据库列管理
  • 连续写入失败计数 + 健康告警
  • 每日自动备份(文件级 copy,保留 30 天)
  • 数据自动清理(保留 N 天,可配置)
  • 每周日完整性检查 (PRAGMA integrity_check)

数据查询与趋势

  • 时间范围过滤 + 预设快捷按钮
  • 聚合查询:分钟/小时/天均值
  • Excel 导出(独立查询,不受显示条数限制)
  • ECharts 趋势图(多字段/多 Y 轴/dataZoom)
  • 字段选择面板 + 轴分配 + 手动量程
  • 双 Y 轴模式(折线图/柱状图)
  • 时间窗口可配置 (15m/1h/6h/24h)

PID 控制

  • 多实例 PID 控制器(增删/Tab 切换)
  • 位置式 PID + 积分抗饱和 + 微分先行
  • PV 低通滤波/死区/输出变化率限制
  • 基准频率 + PID 修正 = 总输出
  • 输出钳位 + 字节序/字序配置
  • 补偿引擎积分冻结联动
  • 远程复位信号 (PID-1_reset_trigger, 边沿触发)
  • ECharts 实时趋势(SP/PV/总输出/修正 四曲线)
  • 偏差带虚线(SP ± X, 可配置)
  • 偏离阈值可调(决定 " 偏差正常 " 判断)
  • 健康指示灯(输出饱和 + 偏差状态)
  • 周期溢出检测 + 自适应历史 buffer
  • 启动延迟 3s(等 Modbus 连接就绪)

仪表盘

  • 7 种组件:数值卡片/状态灯/折线图/柱状图/环形仪表盘/进度条/图片
  • 组件注册表模式(dashboardWidgets.js, 新增组件只改一处)
  • 增量渲染(添加/删除不重建其他卡片)
  • 4 档尺寸(s/m/l/xl)+ 即时切换
  • 拖拽交换位置
  • 聚合模式:数值卡片/仪表盘支持均值查询
  • 双 Y 轴(多字段量级不同时)
  • 状态灯每行独立条件配置(6 种运算符)
  • 布局保存/加载(localStorage + 文件同步)
  • 统一卡片样式系统(三档比例协调)

仪表状态补偿

  • 补偿规则:进入/退出条件 + 补偿动作
  • 动作类型:保持/偏移/缩放/设值/取变量值
  • 条件支持变量比较(IF 出口 NOX > 入口 NOX)
  • 补偿伴生变量 XXX(补偿) + 原始值保留
  • 补偿状态变量 <规则名>_compensating
  • 全局活跃计数 _sys_compensation_active_count

数据过滤器

  • 按需新增模式(只显示已配置规则)
  • 过滤类型:范围钳位/变化率限制/移动平均/尖峰抑制
  • 过滤伴生变量 XXX(过滤)

报警管理

  • 看门狗心跳(递增计数 → 寄存器)
  • 阈值报警:多条件 AND/OR + 分级(预警/报警/严重)
  • 延时触发(倒计时显示)+ 滞后死区
  • 报警历史 SQLite 记录(最新在前,可设条数)
  • 通知寄存器写入(报警值/正常值)+ 写保护
  • 桌面通知 + 报警实时状态显示
  • 报警延时进度(剩余 N 秒)

用户管理与授权

  • 用户 CRUD + 三角色(admin/operator/viewer)
  • 可配置权限矩阵(按页面勾选)
  • 硬件指纹 + 授权码激活(AES-256-CBC)
  • 试用期(30 天)+ 自动激活遮罩
  • 登录审计 + 操作审计(可设条数)
  • 自动登录(无人值守,重启自动以 operator 运行)
  • 会话超时降级(超时 → 自动切 viewer,不清除会话)
  • 超时时长可配置(1-1440 分钟)
  • 切换账号(不先退出即可换号)
  • 权限守卫 (authGuard.js, 查权限矩阵)
  • 首页卡片按权限解锁/锁定

系统与安全

  • 统一配置管理器 (configManager.js, load/save/list/backupAll/restoreAll)
  • 配置原子写入(tmp + copyFile + unlink, 防断电损坏)
  • 配置备份与恢复(动态扫描,选择性恢复)
  • 每日数据备份(文件级,保留 30 天)
  • 数据自动清理(保留 N 天,可配置)
  • 数据库 WAL 模式 + 每周完整性检查
  • IPC 按模块拆分(7 个文件,91 个 handler,零重复)
  • 进程退出快照记录(error log)
  • 错误日志按天滚动 + 自动清理(30 天)
  • 全局异常守卫(uncaughtException/unhandledRejection)
  • 系统托盘 + 最小化到托盘
  • 电源休眠阻止 + 休眠唤醒恢复
  • 开机自启 (app.setLoginItemSettings)
  • 代码混淆保护 (javascript-obfuscator, 打包时自动)
  • 仪表盘/导航栏统一注入 (layout.js)
  • 变量元数据注册表

用户体验

  • 统一顶栏导航(12 链接 + 图标 + 当前页高亮)
  • 首页功能入口卡片 + Modbus 状态横幅
  • 原生对话框替代 alert/confirm
  • PID 参数全 tooltip 说明
  • 计算变量表达式示例
  • 趋势图 " 已选保存 " 提示
  • 解析规则行 ↑↓ 移动
  • 变量搜索过滤
  • 报警历史最新在前 + 条数可选
  • 操作审计条数可选
  • 主页时间显示修复(去 Z 时区 bug)
  • 数值卡片/环形仪表盘聚合模式
  • 日志预约时间人性化显示(X 天 X 小时 X 分钟后)
  • 补偿条件/设值支持取变量值

待开发功能

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

版本历史

版本 日期 主要变更
1.0.0 2026-06 初始发布:Modbus 主/从、PID、报警、补偿、仪表盘、用户管理、自登录、混淆保护
Licensed under CC BY-NC-SA 4.0