第 6 章 总结

6.1 技术总结
平台的完整数据链路可归纳为三条并行的高速通道:实时链路(采集 → 质量码与死区 → 实时库 → 订阅推送 → 画面/浏览器)、历史链路(写入 → 环形缓冲 → WAL 与压缩归档 → 有界索引 → 日窗与区间查询)、报警链路(判定分级 → 队列 → 确认/搁置/复核 → 报警历史与 SOE → 查询与转发)。三条链路共享同一套组态模型与同一套内核,在桌面站与浏览器站上表现一致。
八个技术支柱支撑了这套体系:
6.2 价值总结
| 对谁 | 核心价值 |
|---|---|
| 最终用户(业主) | 无授权限制的规模化扩展;Web 免安装降低终端运维成本;报警与操作策略的强制约束降低误操作风险;完整审计满足合规要求 |
| 系统集成商 | 全栈源码支持深度定制与非标协议接入;一次组态覆盖桌面与 Web 两种交付形态;可基于平台构建行业解决方案而不受厂商授权约束 |
| 运维团队 | 内存与容量有明确口径,容量规划可计算;指标齐全、故障可解释;支持在线诊断与热更新,减少停机窗口;由 HMICare 承担「崩溃自动重启 + 静默失效告警 + 巡检报告」,把夜间与远程站点的恢复从「等人到场」变为「分钟级自愈」 |
| 信创合规部门 | 提供国产 OS + 国产 CPU 的构建脚本与部署指引;依赖源码内建,可完整重构建,满足自主可控要求 |
| 二次开发者 | 统一驱动框架、开放数据接口(实时库 RESP / OPC UA / MQTT)、完整源码,可把平台作为技术底座 |
6.3 客观差距与持续演进
为保证技术判断的客观性,以下差距需要明确说明:
| 差距项 | 现状 | 演进方向 |
|---|---|---|
| 第三方生态 | 图元素材库、行业套件、认证体系规模小于国际主流厂商 | 持续积累行业图元库与工程模板;通过 OPC UA/MQTT 标准接口接入第三方生态 |
| 全球服务网络 | 服务能力依赖集成商与合作伙伴 | 强化文档、示例工程与自助诊断工具,降低对现场服务的依赖 |
| Web 端资源上限 | 受固定 512 MiB 内存预算约束,单页点数与缓存低于桌面端 | 按场景提供「预算档位」配置,并结合增量渲染与按需装载进一步优化 |
| 历史库高级分析 | 以查询与统计为主,分析类功能(多变量相关性、异常检测)尚在演进 | 在时序库之上构建分析层,保持与现有查询接口兼容 |
| 运行看护的平台覆盖 | HMICare 当前为 Windows 7+ 64 位实现(依赖 PDH / WER / 会话助手等 Win32 能力) | Linux 侧以运行站自身的门禁与状态导出承担同类职责;后续按需评估 Linux 侧看护实现 |
| 看护器的单线程模型 | 采样、判定、重启、落库同在一个事件循环,慢盘上的大批量历史查询可能拖慢采样节拍 | 历史查询限定必要区间;必要时把重查询移出主循环或引入只读连接 |
演进路线建议按三条主线推进:能力线(更深的分析能力、更强的 3D 与仿真集成)、规模线(更高测点密度下的渲染与查询优化、更高压缩比)、生态线(行业图元库、工程模板、第三方协议与系统适配)。
6.4 结语
工业监控软件的价值最终由三件事决定:能不能接进来(协议与集成能力)、能不能扛住(规模、性能与长期稳定)、能不能改得动(开放性与可定制性)。UCanCode SCADA/DCS/嵌入式 HMI 平台在这三点上给出了一致的答案:以统一驱动框架解决接入,以可核算的数据引擎解决规模与稳定,以全栈源码与国产信创适配解决长期演进与自主可控。
更重要的是,平台把「Web 运行站」从概念做成了工程现实——同一套内核运行在浏览器中,并把内存、异步与安全三个难题以明确的机制(固定预算 + 分级回收、强制异步 + 游标取消、默认关闭 + 白名单 + 清单校验)逐一解决。这使平台能够同时适应传统 OT 现场与 IT 化、国产化的新一代交付要求。
同样值得强调的是,平台把「可靠运行」从运维经验变成了软件能力。传统做法是「让经验丰富的工程师多巡检、出事快重启」;而 HMICare 把这件事固化为可观测的指标、可自愈的流程与可交付的巡检报告——进程崩溃、消息循环卡死、内存单向增长、历史库静默停写、PLC 链路劣化、多机时钟不一致,这些过去要靠人盯的失效模式,现在都有明确的代码、阈值与处置路径。对一个要在无人值守站点上连续跑数年的系统而言,这项能力的价值往往高于任何单项性能指标。
附录 A 缩略语与术语
| 缩略语 / 术语 | 全称 / 含义 |
|---|---|
| SCADA | Supervisory Control and Data Acquisition,数据采集与监视控制系统 |
| DCS | Distributed Control System,集散控制系统 |
| HMI | Human Machine Interface,人机界面 |
| SOE | Sequence of Events,事件顺序记录(毫秒级) |
| SBO | Select-Before-Operate,选择-校验-执行型操作 |
| RBAC | Role-Based Access Control,基于角色的访问控制 |
| WASM | WebAssembly,浏览器可执行的二进制指令格式 |
| IDBFS | IndexedDB File System,浏览器持久化虚拟文件系统 |
| AOF / RDB | Append Only File / Redis Database,两种持久化方式 |
| PSYNC | Partial Synchronization,增量复制同步语义 |
| WAL | Write-Ahead Log,预写日志 |
| OOO | Out-Of-Order,乱序样本 |
| LRU / LFU | Least Recently Used / Least Frequently Used,淘汰算法 |
| CTSP | 站级 Historian 查询桥协议(本平台内部命名) |
| ISA-95 / ISA-18.2 | 企业控制系统层级标准 / 报警管理标准 |
| ISA-95 设备树 | 按企业-厂区-产线-设备层级组织资产结构的模型 |
| Edge Loop 边缘回路 | 边缘侧闭环控制与本地逻辑处理能力 |
| HUD | 运维诊断浮层(Web 端运行状态显示) |
| PDH | Windows Performance Data Helper,性能计数器采集接口 |
| WER / LocalDumps | Windows Error Reporting 及其本地转储策略(崩溃瞬间写 dump) |
| minidump | 进程内存转储文件,用于事后崩溃分析 |
| SNTP | 简单网络时间协议,用于对时偏差检测 |
| Session 0 | Windows 服务所在会话,不呈现交互桌面 |
| IEC 62443 | 工业自动化与控制系统网络安全国际标准 |
| 可用率 / 未观测时间 | 窗口内在线时间占比 / 看护自身不在岗、从可用率分母剔除的时段 |
| SHA-256 哈希链 | 逐条记录串联哈希的防篡改审计结构,篡改即断链 |
| TCO | Total Cost of Ownership,总体拥有成本 |
| 信创 | 信息技术应用创新(国产化替代) |
附录 B 端口、协议与配置清单
B.1 网络端口
| 端口 | 协议 | 用途 | 默认值来源 |
|---|---|---|---|
| 8030 | WebSocket / WSS | ucchmiserver 数据服务 | 配置项(默认 8030) |
| 6389 | TCP(RESP 兼容) | UCCRealDb 命令服务 / 复制 | 配置项(默认 6389) |
| 9100 | TCP | 站级 Historian 查询桥 | 配置项(默认 9100) |
| 45452 | UDP | 实时数据转发 | 代码常量 |
| 45454 | UDP | 告警转发 | 代码常量 |
| 1883 / 8883 | MQTT / MQTTS | 消息总线 | 配置默认值 |
| 4840 / 49320 | OPC UA(opc.tcp) | OPC UA 服务端 | 配置默认值(4840 标准;与其它服务共存时改用 49320 等) |
| 80 / 8080 | HTTP | 工程与媒体分发、HTTP 测试服务 | 部署时配置 |
| — | MySQL 默认端口 | 站点历史数据源(可选) | 部署时配置 |
| — | 本地命名管道 | HMICare 控制通道(引擎 ←→ 界面),不占用 TCP 端口 | 代码常量(\\.\pipe\...) |
| — | SNTP(UDP 123) | HMICare 对时偏差检测(出向) | 配置默认 time.windows.com |
B.2 支持的通信协议
| 分类 | 协议 |
|---|---|
| 通用与现场总线 | Modbus RTU、Modbus TCP、Modbus ASCII、自定义 ASCII |
| PLC 专有 | Siemens S7(S7comm)、Mitsubishi FINS、Omron FINS、EtherNet/IP(CIP) |
| 电力与公用 | IEC 60870-5-104、DNP3 |
| 标准互操作 | OPC UA(含安全策略、订阅与报警条件)、OPC DA |
| 消息总线 | MQTT(Broker / Bridge、TLS、Will、Topic 映射) |
| 总线与设备 | CAN / CANopen、BACnet |
| 数据交换 | SQL 数据源(SQLite / MySQL)、文件与媒体交换 |
B.3 关键配置文件与产物
| 文件 / 产物 | 用途 |
|---|---|
| 工程文件(画面、图元、脚本) | 组态结果主体 |
| 工程侧车文件(策略 / 诊断 / 安全 / 锁) | 与画面解耦的工程治理与运行策略 |
| 运行策略 / 安全策略 JSON | 联锁、SBO、报警分级、登录与授权策略 |
实时库配置(uccrealdb/* 段) | 监听地址与端口、客户端端点、容量与持久化参数 |
| 网关配置(数据源 / WebSocket / Historian / WSS) | ucchmiserver 运行参数 |
MQTT 运行配置(mqtt/* 段) | Broker 地址、端口、TLS、ClientID、Will 主题 |
| OPC UA 配置与证书目录 | 端点、安全策略、证书与信任列表 |
WebPlayer 构建产物(.js / .wasm / .data) | 浏览器端静态资源 |
工程分发目录 + manifest.json | 工程与媒体分发清单(含可选 SHA256) |
监控快照导出(hmi.monitor.snapshot/v1) | 运行指标快照导出,便于归档与外部分析 |
hmicare.ini(HMICare) | 看护配置:目标、看护与重启策略、阈值与内存保护、泄漏判定、现场保护、历史保留、服务、四维自检参数 |
var\hmicare.db、var\crash\、var\audit\、var\log\(HMICare) | 看护历史库(SQLite/WAL)、转储与截图、哈希链审计、看护日志 |
chmi_channel_diag.json、operator_journal.log(运行站产出) | 通道诊断快照与操作审计流水,供 HMICare 只读消费 |
附录 C 性能测试方法与复现建议
C.1 实时库压测
项目内提供 TCP 压测脚本,按阶段顺序执行各类命令并输出吞吐与延迟分位值。
# 示例:8 连接、value 1024 B、预热 200 次
python uccrealdb_tcp_bench.py --n 6000 --concurrency 8 --value-size 1024 \
--warmup 200 --csv out_c8_v1024.csv
# 与 Redis 对齐比较(单连接、无 pipeline)
redis-benchmark -h 127.0.0.1 -p 6379 -t set,get -n 6000 -c 1 -d 32 -P 1 -q
SET → GET → DEL → HSET(n/2)→ RPUSH(n/2)→ ZADD(n)。ops 为多线程合计操作数;吞吐为 ops / elapsed;延迟取 p50 / p95。ZADD 共用单键,最易形成热点,其对并发更敏感;比较不同产品时应关闭或统一持久化策略。C.2 大规模组态测试
--scale 参数切换测点规模(如 --scale=1 约 53.8 万点、--scale=4 约 142.6 万点),便于按比例复核结论。tag_id 唯一性、索引 ←→ 名称 ←→ 位置一致性、CRC/魔数自检。C.3 Web 端测试
C.4 验收建议指标
| 验收项 | 建议方法 | 关注点 |
|---|---|---|
| 实时刷新性能 | 在最大画面下逐级提升测点刷新密度 | 帧率稳定、无卡顿、CPU 占用线性增长 |
| 历史查询响应 | 查询最大时间跨度与最大点数 | 异步不阻塞 UI、可取消、失败有明确错误 |
| 报警风暴 | 人为触发大量报警 | 队列不丢关键报警、界面不冻结、KPI 统计正确 |
| 冗余切换 | 手动切换主备 | 数据连续、质量码与时间戳无空洞、切换时间可接受 |
| 长稳运行 | 连续运行 7×24 小时以上 | RSS 漂移在可接受范围、无句柄/线程泄漏 |
| Web 端长稳 | 浏览器标签页持续运行数十小时 | 内存占用稳定、无强制回收引发的可感知卡顿 |
| 信创环境 | 目标国产 OS + 国产 CPU 上完整构建与运行 | 可完整重构建、协议通信正常、性能满足要求 |
C.5 HMICare 看护自检与验收
看护能力的验收无法靠「看起来在跑」判断,平台提供了三条可复现的验证路径,全部不需要人工点击界面:
| 验收项 | 方法与命令 | 通过判据 |
|---|---|---|
| 看护角色与被监护对象 | hmicare.exe --status | 看护角色显示「已被占用(看护进程 pid=…)」或「由服务 … 看护中」;目标进程 pid 与运行时长正确;历史库可打开 |
| 采集 → 控制通道 → 界面 全链路 | hmicare.exe --ui-selftest(HMICARE_SELFTEST_SEC=15) | 输出界面角色、控制通道、状态栏文案、各趋势曲线数与点数、告警/事件/重启表行数,以及运行自检页四张卡片文案与四张明细表实际行数 |
| 界面渲染正确性(发版前) | --ui-selftest + python tools\ui_snapshot_check.py + python tools\gauge_needle_check.py | 结构体检全部 [OK](等级色、卡片成排、表盘个数、工具条图标归一);指针反解偏差 < 1.5 个百分点 |
| 自愈链路 | 在测试环境手动杀掉被监护进程(或制造挂起) | 看护按策略重新拉起;重启记录含原因、旧/新 PID、退出码、中断时长;非人工重启前生成 minidump 与画面截图 |
| 现场保护与 WER | 制造崩溃(非人工重启) | var\crash 出现转储;开启 werLocalDumps 时可回捞「崩溃瞬间」的转储 |
| 静默失效判定 | 暂停历史写入 / 停止写通道诊断快照 | 分别出现 storage-db-stale 与 link-diag-stale 告警,且不影响目标进程 |
| 审计链完整性 | 界面「查看审计日志」或校验入口 | 哈希链校验通过;人为篡改一行后校验应报断链(sec-audit-broken) |
| 巡检报告 | Ctrl+P 导出 HTML 运行健康报告 | 报告自包含、十章齐全,可直接交付或归档 |
附录 D 文档索引
本白皮书的技术细节可与仓库内以下工程文档互相印证(供技术评审与深入阅读使用):
| 文档类别 | 内容 |
|---|---|
| 安装调试说明书 | 产品架构、站点角色、硬件软件要求、安装步骤、可选组件、授权与安全部署、防火墙端口、调试与验收 |
| Designer 工程树功能操作说明 | 通道诊断、运行服务配置、操作策略、ISA-95 设备树、边缘回路、安全策略、多用户协同与检出锁、工程侧车 |
| 实时库补强方案 | 内存核算、容量与淘汰、过期、热缓存、lazyfree、持久化、复制、可观测、写路径复杂度与 P0~P2 问题清单 |
| 实时库压测样例 | 9 组 TCP 压测归档数据、与 Redis 对齐的测试方法、优化前后对比 |
| 实时库监控与运维面板 | INFO 字段口径、指标阈值、处置建议、监控面板页签设计 |
| 实时库对外接口定义 | 命令面与 INFO 字段的完整定义与新增字段清单 |
| 时序库补强与运维 | 存储架构、稳定性(崩溃恢复 / WAL)、容量与内存、性能优化、可观测指标与管理接口 |
| 百万测点综合测试与补强方案 | 容量、性能、冷池去重、内存占用、长稳漂移、并发、持久化、名称哈希碰撞与补强清单 |
| MQTT Bridge 说明 | 桥接配置、主题映射、Will 消息、入队与状态快照 |
| WebPlayer WASM 架构说明 | 网关契约、文本帧与二进制通道、安全边界、运维 HUD、二次冷启动 |
| WebPlayer 对外运维 API | 运行状态、事件、崩溃报告、安全策略、宿主脚本控制接口 |
| HMICare 功能操作说明 | HMICare 的能力模型、部署与三种运行形态、界面与操作详解、四维运行自检、告警代码速查、关键参数、命令行、日常运维作业、目录与文件、安全边界与已知限制 |
| 信创构建脚本 | 国产 OS + 国产 CPU 的本地构建流程与依赖说明 |