阅读说明与结论摘要
0.1 文档范围
本文覆盖五个交付组件与三个数据引擎:
0.2 数据来源与口径
本文中所引用的性能数据来自以下三类来源,并在正文中标注口径:
bench_c*.csv 归档的 9 组 TCP 压测结果、CHMIMegaConfig 综合测试的实测报表、实时库补强方案中的单变量对比矩阵。此类数据为特定硬件上的实测样本,用于说明量级与优化效果,不构成性能承诺。0.3 结论摘要
| 维度 | 结论 |
|---|---|
| 体系完整性 | 组态(Designer)、桌面运行(Player)、数据网关(Server)、Web 运行(WebPlayer)与运行看护(HMICare)齐备,非拼接式集成 |
| 数据引擎 | 自研内存实时库(RESP 兼容)+ 自研压缩时序库 + 百万测点组态引擎,具备内存核算、容量上限、淘汰、持久化、复制、可观测的完整生产级能力 |
| 开放与自主 | 全栈源码交付(Qt 5.15 + C++17),无授权加密狗、无测点/节点数量授权限制,任一协议驱动、算法策略、界面元素均可替换重写 |
| 国产信创 | 提供麒麟/统信 + 鲲鹏/飞腾/龙芯(aarch64/loongarch64)的本地编译脚本与部署指引,支持达梦/人大金仓/MySQL/SQLite 数据源 |
| Web 免安装 | 同一套运行时内核编译为 WebAssembly,浏览器内运行完整运行站;固定 512 MiB 内存预算 + IDBFS 持久化 + SHA256 清单校验 |
| 大规模能力 | 1 426 002 测点组态实测:进程 RSS 577.7 MiB,有效数据 140 B/点,长稳稳态 RSS 漂移 0.230%(实测参考) |
| 实时库性能 | 单连接 GET 8 363 ops/s(p50 108.9 μs);4 并发 GET 13 561 ops/s;8 并发 GET 15 972~16 386 ops/s(实测参考) |
| 可观测性 | 实时库 INFO 全量指标、系统指标中心、SCADA 业务指标、运行监控面板 5 页签,对标 Redis 与 ISA-18.2 报警 KPI |
| 运行看护与自愈 | HMICare 对 SCADA 自身负责:进程崩溃/挂起/内存越限自动重启,重启前抓 minidump 与画面截图;「磁盘 → 链路 → 安全 → 可用性」四维运行自检专抓静默功能失效 |
下文将按「总体 → Designer → Player → Web WASM → HMICare → 对比与总结」的顺序展开。
第 1 章 总体介绍
1.1 产品定位与设计哲学
UCanCode SCADA/DCS/嵌入式 HMI 是一套面向工业现场的监控组态与运行平台。其目标不是做「一个能画画面、能连 PLC 的上位机」,而是提供一个从设备采集到数据治理、从桌面运行到浏览器运行、从单机到主备冗余的完整技术底座,并把该底座的全部源码、全部扩展点、全部数据格式交给用户。
平台的设计哲学可归纳为四条:
INFO 与监控面板对外暴露。1.2 系统组成与功能模块
平台由四个可独立部署的运行组件、一个旁路部署的运行看护组件(HMICare)以及三个数据引擎构成,通过工程文件与网络协议协同工作。总体架构见下图:自下而上分为现场设备层、通信驱动层、运行时内核、数据层、服务网关层与客户端层六个平面,HMICare 作为横切看护面旁路观测全部层次。

各层的职责与关键构件如下表所示。
| 层次 | 职责 | 关键构件 |
|---|---|---|
| 客户端 / HMI 层 | 人机交互、画面呈现、操作下发、报警呈现 | HMIDesigner、HMIPlayer、WebPlayer(WASM)、第三方 OPC UA/MQTT 客户端 |
| 服务 / 网关层 | 数据汇聚、协议转换、历史查询代理、工程分发 | ucchmiserver(WS/WSS)、Historian CTSP 桥、MQTT Broker/Bridge、OPC UA Server、HTTP 分发 |
| 数据层 | 实时数据、历史数据、组态配置、报警与事件留痕 | UCCRealDb、CHMITsdb、CHMIMegaConfig、报警/SOE 库、工程文件库 |
| 运行时内核 | 调度、评估、渲染、策略、权限、诊断(四个组件共享) | 数据块调度、脚本引擎、hmialarm、图元与动画、策略引擎、冗余同步、大规模实例策略 |
| 通信驱动层 | 现场协议适配、数据块组织、质量码映射 | CHMIDevice / CHMIDataBlock / CHMIUSCommand 统一驱动框架 + 协议族实现 |
| 现场设备层 | 被监控对象 | PLC、PAC、RTU/DTU、智能仪表、变频器、保护装置、传感器与网关 |
| 运维看护层(横切,旁路) | 对平台自身的运行质量负责:指标、告警、自愈、审计、可用性 | HMICare(hmicare 界面/服务/前台三形态 + SQLite WAL 历史库 + SHA-256 审计链) |
1.2.1 组件功能清单
| 组件 | 核心功能模块 |
|---|---|
| HMIDesigner | 工程树与工程治理、通道/设备/数据块/测点组态、画面与图元编辑器、动画与数据绑定、脚本与表达式、报表与曲线组态、3D 场景组态、运行服务配置(OPC UA / MQTT / RealDb / Historian)、操作策略配置(写联锁 / SBO / 双人复核 / 死区 / 报警分级 / RBAC)、ISA-95 设备树、边缘回路(Edge Loop)、安全策略、多用户协同与检出锁、通道诊断、在线调试与热更新 |
| HMIPlayer | 工程装载与运行、实时库(UCCRealDb)、历史库(CHMITsdb)、百万测点组态(CHMIMegaConfig)、报警引擎与 SOE、驱动采集与写回、画面渲染与动画、实时/历史曲线、报表、3D 可视化(OpenGL + assimp)、主备冗余、WebSocket/MQTT/OPC UA 服务、运行监控面板、系统指标与事件日志 |
| ucchmiserver | WebSocket/WSS 数据网关(默认 8030)、实时数据订阅与轮询服务(本地/远程实时库)、站级 Historian 只读桥(默认 9100)、UDP 实时与告警转发(45452/45454)、工程与媒体文件分发、客户端在线名册、实时库命令服务与运维控制台、MySQL/SQLite 数据源、MQTT 消息总线集成 |
| WebPlayer | 浏览器内完整运行站:画面渲染、实时/历史曲线、报警与 SOE 查询、报表、3D 渲染、脚本(受限沙箱)、IDBFS 工程缓存、SHA256 完整性校验、运维 HUD、断线重连与会话恢复、内存压力分级回收 |
| HMICare | SCADA 运行健康看护:进程/服务器指标采集(CPU、内存、句柄、线程、页错误、I/O)、崩溃/挂起/内存越限自动重启与重启前现场保护(minidump + 截图)、内存单向增长(泄漏)最小二乘斜率判定、磁盘与存储自检、网络与通信链路自检、运行安全与审计(进程白名单/SNTP 对时/哈希链审计)、可用性与关键功能健康度量、SQLite 历史库、HTML 巡检报告、服务化看护与自愈兜底 |
1.3 平台解决的问题
工业监控项目的失败原因往往不在「画面画得不好看」,而在数据链路的规模、稳定性与可维护性。下表列出典型痛点与平台的应对机制。
| 典型痛点 | 现场表现 | 平台应对 |
|---|---|---|
| 测点规模上不去 | 组态软件在 5~10 万点即出现组态卡顿、内存暴涨、运行期刷新掉帧 | CHMIMegaConfig 分段配置池 + 冷字符串去重池 + 有界内存索引;实测 1 426 002 点、有效数据 140 B/点 |
| 内存不可控 | 长期运行 RSS 单调上涨,最终 OOM 或被迫定期重启 | 键级/点级内存记账 + 容量硬上限 + 淘汰策略 + 内存压力分级回收;实测长稳漂移 0.230% |
| 历史数据丢失 | 掉电后最近若干分钟的历史数据永久缺失 | CHMITsdb WAL 预写日志,掉电可重放;分片段落 + 有界索引 |
| 实时数据双源歧义 | Web 端与站端显示不同的值,操作员无从判断哪个可信 | Web 端不持有本地权威库,所有历史/报警一律经网关回源站级 Historian,失败显式返回 remote_fail:* |
| UI 阻塞 | 历史查询、大数据量取数导致画面卡死数秒 | I/O 线程隔离 + 线程池异步取数 + 连接独占与防饿死排队;WASM 端强制异步、禁止嵌套事件循环 |
| 协议封闭 | 新增一种非标设备必须等厂商排期或购买驱动授权 | 统一驱动框架 + 源码交付,用户可自行实现 CHMIDevice 子类接入私有协议 |
| 授权成本 | 按测点、按客户端、按 Web 并发购买授权,扩容即增费 | 无授权限制,扩容只与硬件有关 |
| Web 需要装插件 | ActiveX / 浏览器插件在新版浏览器中被逐步禁用 | WebAssembly 方案,标准浏览器直接运行,无插件、无本地安装 |
| 静默功能失效 | 进程没崩,但已不再写历史库 / 不再发布报警,画面停在最后一帧却无人告警 | HMICare 关键功能探针(http / tcp / file / process)+ 数据新鲜度判定 + 历史库「静默停写」告警,专抓此类「进程活着但不干活」的失效 |
| 故障恢复靠人 | 运行站崩溃或挂起后需运维到场手工重启,夜间与远程站点恢复时间长 | HMICare 自动重启(含挂起检测、退避与风暴保护、放弃阈值与复位);服务化部署时 SCM 再为看护器本身兜底,两端都有兜底 |
| 磁盘写满导致数据丢失 | 历史库分区被日志/转储占满,归档无声停止,事后才发现数据缺口 | HMICare 逐卷容量(90%/95%)与 I/O 延迟监测、历史库可写性与「多久没写入」判定、陈旧文件清理(默认手动,避免误删现场资料) |
1.4 适应领域
平台的架构特征(大规模测点、强实时、可靠历史、可冗余、可在浏览器中运行)决定其适用范围如下表。
| 领域 | 典型场景 | 关键受益能力 |
|---|---|---|
| 流程工业 DCS 上位 | 化工、石化、制药、冶金的过程监控与操作站 | 百万测点组态、报警分级与 SOE、双人复核、操作审计 |
| 电力与能源 | 变电站监控、发电辅控、光伏/风电集中监控、储能 EMS | IEC 60870-5-104/DNP3/Modbus 驱动、SOE 毫秒级事件、主备冗余 |
| 市政与环保 | 水厂、污水厂、燃气、供热、管网的调度中心与大屏 | Web 免安装大屏、多站点组网、OPC UA/MQTT 上云 |
| 石油与天然气 | 井口 RTU、集输站、管道 SCADA、LNG 站控 | RTU 长连接、断线重连与数据补偿、历史压缩存储 |
| 智能制造与产线 | 产线监控、设备联网、OEE 看板、ANDON 报警 | 多协议并发采集、MQTT 总线、报警推送与移动端查看 |
| 轨道交通与机场 | 站台机电监控、环控、屏蔽门、行李系统 | 冗余切换、事件留痕、Web 集中监视 |
| 矿山与建材 | 井下监控、皮带集控、水泥窑 | 恶劣网络下的重连与质量码、边缘侧本地历史 |
| 数据中心与楼宇 | 动环监控、冷站群控、能耗管理 | BACnet/Modbus 集成、3D 可视化、Web 报表 |
| 嵌入式 / 边缘 | 边缘网关、专用设备前装 HMI | Linux aarch64/loongarch64 构建、可裁剪组件、Web 运行站 |
| 教学与科研 | 自动化实验室、数字孪生研究 | 源码开放、可改造内核、协议仿真与自定义驱动 |
1.5 与国内外专业 SCADA 软件的技术对比
为便于横向比较,下表选取国际主流 SCADA(WinCC、iFIX、InTouch、FactoryTalk View、Citect、Ignition)与国产主流组态软件(组态王/KingSCADA、力控、MCGS、紫金桥等)作为参照,从技术维度给出定性评估。

1.5.1 与国际主流 SCADA 的对比
| 对比维度 | 国际主流 SCADA | UCanCode 平台 | 差异说明 |
|---|---|---|---|
| 源码与可定制 | 闭源,仅提供脚本/插件级扩展 | 全栈源码交付,可替换内核、驱动、渲染、策略 | 用户可修改任意层级,不受厂商路线图约束 |
| 授权模式 | 按测点/客户端/服务器分级授权,扩容需增购 | 无授权限制 | 大规模项目的 TCO 差异显著 |
| Web 部署 | 多数需要专用 Web 服务器组件、插件或额外授权 | 同一内核编译为 WASM,标准浏览器直接运行 | 无插件、无本地安装、无 ActiveX 依赖 |
| 国产信创适配 | 依赖国外操作系统与 x86 平台,适配周期长 | 提供麒麟/统信 + 鲲鹏/飞腾/龙芯编译脚本 | 面向国产化替代场景的原生支持 |
| 协议驱动新增 | 由厂商排期开发,或购买第三方驱动包 | 用户可基于统一驱动框架自行实现 | 非标协议、专有协议接入不受限 |
| 3D 可视化 | 部分产品以选件形式提供,成本高 | 内置 OpenGL + assimp 3D,含 WASM 端渲染 | 3D 不作为额外授权项 |
| 可观测性 | 以厂商工具为主,指标粒度受产品约束 | 实时库 INFO 全量指标 + 系统/业务指标中心 + 5 页签监控面板 | 指标口径可读源码,可自行扩展 |
| 运行看护与自愈 | 通常仅提供进程级看门狗或完全不提供;「进程在但功能失效」类故障无从发现 | HMICare 内置:指标监控 + 故障自愈 + 内存治理 + 四维运行自检 + 巡检报告 | 自愈与看护是平台自带能力,不需要第三方 IT 监控系统拼装 |
| 生态与认证 | 生态庞大,行业认证与第三方库丰富 | 生态规模较小,以源码与开放接口弥补 | 客观差距项:第三方生态与全球服务网络较弱 |
1.5.2 与国产主流组态软件的对比
| 对比维度 | 国产主流组态 | UCanCode 平台 | 差异说明 |
|---|---|---|---|
| 测点规模 | 通常以万级为主,十万级以上需特殊配置 | 设计面向百万测点,1.43 M 点实测通过 | 分段配置池 + 冷池去重 + 有界索引 |
| 实时库形态 | 多为进程内变量表,缺少独立数据库语义 | 独立内存数据库,RESP 兼容命令面、持久化、复制、INFO | 可被外部客户端读写,可做灾备与二次开发 |
| 历史库 | 基于文件或商用关系库,压缩能力有限 | 自研时序库,Gorilla/Delta/SwingDoor 压缩 + WAL | 压缩比与容量可观测,掉电可重放 |
| Web 方案 | 早期以 ActiveX/插件为主,新版本多转 HTML5 看板 | WASM 内运行完整运行站,非看板子集 | 曲线、报警、报表、3D 均为完整功能 |
| 源码开放 | 闭源,或仅开放脚本层 | 全栈源码 + 跨平台构建脚本 | 可深度定制、可二次开发、可裁剪 |
| 国产化平台 | 部分产品支持国产 OS | 国产 OS + 国产 CPU 组合并按信创脚本构建 | 持平或略优 |
| 工程交付效率 | 组态效率较高,模板与图元库丰富 | 工程树功能分区清晰、在线调试闭环、热更新 | 客观说明:图元素材库规模仍在持续积累 |
| 运行看护与自愈 | 多数不含系统级看护,依赖运维人工巡检与手工重启 | HMICare 提供自动重启、内存治理、四维自检与 HTML 巡检报告 | 把「运维经验」固化为可交付、可追溯的软件能力 |
1.5.3 技术领先性小结
综合以上对比,平台在五个维度形成明确的技术领先性:
1.6 开源、国产信创与 100% 可定制
1.6.1 开源与源码交付
平台以 Qt 5.15.2(LGPL 授权,可商用)与 C++17 为技术底座,自研部分包括实时库、时序库、百万测点引擎、报警引擎、驱动框架、图形与渲染、WebAssembly 桥接等全部核心模块。源码交付意味着:
sql/concurrent/serialbus。HMICare 为 Windows 侧可选组件(Windows 7+ 64 位),纯 Linux 与嵌入式部署可不安装,由运行站自身的门禁与状态导出承担同类职责。1.6.2 国产信创适配
平台提供面向国产平台的本地编译脚本(scripts/build_xinchuang.sh),覆盖以下组合:
| 项目 | 说明 |
|---|---|
| 操作系统 | 银河麒麟 Kylin、统信 UOS、中标麒麟/Deepin 等国产 Linux 发行版 |
| CPU 架构 | 鲲鹏 920、飞腾(aarch64)、龙芯(loongarch64)、以及兆芯/海光等 x86 兼容平台 |
| 编译工具链 | Qt 5.15.x(widgets / sql / network / websockets / printsupport)、g++(C++17)、OpenSSL 开发包 |
| 数据库 | MySQL(可选 Qt QMYSQL 插件)、SQLite;并预留国产关系库(达梦、人大金仓)的适配路径 |
| 依赖裁剪 | MQTT 使用仓库内置源码编译(不依赖 Windows 预编译库),确保在国产平台上可完整重构建 |
| 配置编码 | 配置文件在 Windows 侧使用 GBK、信创 Linux 侧使用 UTF-8,由同一套加载逻辑自动识别 |
1.6.3 100% 可定制的具体含义
| 定制层级 | 可定制内容 | 定制方式 |
|---|---|---|
| 界面层 | 画面风格、图元外观、菜单与工具栏、HUD 面板、多语言 | 图元编辑器 + 样式表 + 脚本 + 源码修改 |
| 业务逻辑层 | 联锁规则、SBO 流程、双人复核策略、死区与量程处理、报警分级 | Designer 策略配置 + 脚本 + 源码扩展 |
| 数据层 | 数据模型、键空间组织、保留策略、压缩策略、索引结构 | 配置参数 + 环境变量 + 源码修改 |
| 协议层 | 新增协议、私有协议、报文编码、质量码映射 | 实现统一驱动框架接口 |
| 部署层 | 组件裁剪、角色划分、冗余拓扑、Web 资源路径 | 构建配置 + 部署脚本 + 配置文件 |
1.7 技术规格总览
下表汇总平台的关键技术规格,后续章节将逐项展开。
| 类别 | 项目 | 规格 |
|---|---|---|
| 开发技术 | 语言 / 框架 | C++17、Qt 5.15.2(Widgets/Network/WebSockets/OpenGL/Script/Sql) |
| 第三方组件 | open62541(OPC UA,含 TLS)、自研/内建 MQTT、miniz、assimp(3D) | |
| 运行平台 | 桌面端 | Windows 7/10/11、Windows Server、Linux(x86_64 / aarch64 / loongarch64) |
| Web 端 | WebAssembly(Emscripten),Chrome/Edge/Firefox 及国产浏览器 | |
| 工程规模 | 组态测点 | 设计上限百万级;实测 1 426 002 点通过(RSS 577.7 MiB) |
| 有效数据占用 | 140 B/点(实测参考,1.43 M 点样本) | |
| 落盘体积 | 约 320 B/点(单表全字段口径,实测参考) | |
| 实时库 | 接口协议 | RESP 兼容命令服务(默认端口 6389)+ 进程内 API |
| 读性能 | 单连接 GET 8 363 ops/s(p50 108.9 μs);8 并发 15 972~16 386 ops/s | |
| 写性能 | SET 20 万键 151.5k ops/s(6.6 μs/op,优化后) | |
| 可靠性 | AOF/RDB 持久化、PSYNC 复制与 backlog、TTL 过期、LRU/LFU 淘汰、异步惰性释放(lazyfree) | |
| 历史库 | 压缩编码 | Gorilla / Delta / SwingDoor(压缩比选优),压缩比可观测 |
| 持久化 | WAL 预写日志(掉电可重放)+ 分片段落 + 有界内存索引 | |
| 报警 | 能力 | 分级报警、延时与抖动抑制、确认/批量确认/搁置、双人复核、SOE、报警 KPI(ISA-18.2 口径) |
| 驱动 | 协议族 | Modbus RTU/TCP、Siemens S7、IEC 60870-5-104、DNP3、OPC UA/DA、MQTT、CAN/CANopen、EtherNet/IP、三菱/欧姆龙 FINS、BACnet、自定义 ASCII |
| 组网 | 冗余 | 主备运行站、实时库主从复制、心跳与角色协商、客户端多端接入 |
| 服务网关 | 接口 | WebSocket/WSS(默认 8030)、UDP(45452/45454)、Historian 桥(默认 9100)、HTTP 工程分发 |
| WebPlayer | 内存预算 | 固定 512 MiB 线性堆(ALLOW_MEMORY_GROWTH=0) |
| 持久化 | IDBFS 虚拟文件系统 + Service Worker 二次冷启动 | |
| 安全 | SHA256 工程清单校验、宿主脚本默认禁用、myObjInvoke 方法白名单、写操作要求操作员登录、WSS 对端校验 | |
| 运行看护 HMICare | 运行形态 | 界面自带看护 / Windows 服务(SCM 自启 + 失败自动重启)/ 前台守护三形态;单 exe,仅依赖 Qt 运行库与 SQLite 驱动 |
| 看护维度 | 第一组:进程与服务器指标、故障自愈、内存精细化、看护器自身体检;第二组:磁盘与存储、网络与通信链路、运行安全与审计、运行状态与可用性 | |
| 采样与保底 | 默认 2 s 采样;看护器自身开销告警线(工作集 256 MB、CPU 25%) | |
| 重启策略 | 窗口内 6 次/600 s 上限、指数退避、累计 24 次后放弃(F8 复位);挂起检测 3 连拍、启动宽限 60 s | |
| 历史与审计 | SQLite/WAL 逐卷与逐维分表;原始采样 7 天、聚合/事件 180 天;操作审计 SHA-256 哈希链(篡改即断链) | |
| 交付物 | 实时趋势与历史回放、事件与重启台账、运行自检四维页、自包含 HTML 运行健康巡检报告 | |
| 平台限制 | Windows 7+ 64 位(PDH / WER / 会话助手依赖 Win32 接口) |