No description
前端(Vue3 + Vite + Element Plus): - 组态画布设计器:组件库/图层树/属性面板/多画面/撤销重做/对齐分布 - HMI 组件:按钮/输入框/仪表盘/多段线(可交互编辑)/数值/表格/断路器/变压器/母线等 - 数据绑定与实时刷新(WebSocket);按钮支持动态取值(从其他组件或数据点) - 输入框运行态本地值(未绑定数据点时的"设定值"),供按钮 valueFrom 读取 - 仪表盘弧线修复:large-arc-flag 恒为 0(值>50% 时不再绕底偏移) - 运行套件纯净模式:隐藏工具栏/连接界面,右上角悬浮 适配/全屏 小按钮 Go 网关(scada-gw): - WebSocket 数据中枢:订阅管理/增量推送/snapshot/鉴权 - 多数据源:sim(内置模拟)/cgo(动态库)/proc(子进程)/rtdb(PhotoLink RTDB) - PhotoLink RTDB 接入(dlopen rtdb_capi C ABI):YC/YX 读写、YK/YT 状态回读 含 C 调用看门狗(超时保护)+ 原子快照 - 总线可用性以 rtdb_capi_bus_attached 判定,正确识别只读模式(写返回真实原因) - 控制指令通道:遥控 YK/遥调 YT 经 CONTROL_REQUEST 总线(hmi_sender)下发并回传结果 - 工程文件存储 API(/api/projects 增删查)+ CORS 组态加载器(loader): - Go 单文件,内嵌运行套件前端(go:embed),现场零运行时依赖 - 运行即自动查找当前目录 main.json 并加载运行 - 双模式:内置模拟数据源 / --ws 连接现场 scada-gw 网关 - 配置文件 loader.json(端口默认 8010、组态目录、网关、口令等),命令行可覆盖 文档与构建: - docs/LOADER-USAGE.md(加载器部署/配置/自启动) - docs/RTDB-USAGE.md(RTDB 接入说明) - build-loader.sh 一键构建(linux/windows/darwin) - start.sh 开发环境一键启动 |
||
|---|---|---|
| demo-run | ||
| docs | ||
| ds_api | ||
| loader | ||
| public | ||
| scada-gw | ||
| server | ||
| src | ||
| .env.kit | ||
| .env.run | ||
| .gitignore | ||
| build-loader.sh | ||
| index.html | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| start.sh | ||
| tsconfig.json | ||
| vite.config.ts | ||
电力系统 SCADA 组态系统
基于 Vue3 + Element Plus + Vite + TypeScript 的电力 SCADA 组态系统,由三部分组成:
| 部分 | 说明 | 启动 |
|---|---|---|
| 开发套件 devkit | 组态编辑(19 个组件,含电力符号库与页面组件)+ 数据模拟 + 模拟运行 | npm run dev:kit |
| 运行套件 runtime | 加载工程 JSON 忠实展示、多画面标签切换 + 遥控分合闸(带口令确认) | npm run dev:run |
| Go 网关 scada-gw | WebSocket 服务;数据源支持:内置模拟 / C/C++ 动态库 / C/C++ 命令行程序 | cd scada-gw && go run . |
快速开始(开发套件)
npm install
# 终端 1:启动 Go 网关(内置电力系统仿真,端口 8090)
cd scada-gw && go build -o scada-gw . && ./scada-gw
# 终端 2:启动开发套件
npm run dev:kit # http://localhost:5173
打开页面 → 工具栏 示例 载入"220kV 变电站主接线"→ 点击 连接(默认 ws://localhost:8090)→ 数据实时流动;切换 运行 模式可点击断路器/隔离开关进行遥控(模拟运行)。
快速开始(运行套件)
npm run dev:run # http://localhost:5173
自动加载 demo-power.json 忠实展示,连接 Go 网关后点击断路器会弹出遥控口令确认(默认口令 1234,见 scada-gw/config)。
接入你的 C/C++ 数据源(二选一)
- C/C++ 动态库:实现
ds_api/scada_ds.h的 5 个函数,编译为.so;网关配置datasource: "cgo"、lib.path指向它(参考实现ds_api/ds_sample.c)。 - C/C++ 命令行程序:遵循 stdin/stdout JSON 行协议(参考实现
ds_api/ds_proc_sample.cpp);网关配置datasource: "proc"、proc.command指向它。
文档
- docs/SCADA-ARCH.md — 系统架构、WebSocket 协议、C 数据源接口、遥控安全(接入必读)
- docs/DESIGN.md — 前端设计思路(注册表驱动、数据绑定、画布交互等)
页面类组件
- 容器:承载子组件的面板。从组件库把组件拖入容器即成为其子组件(坐标相对容器), 子组件随容器移动/缩放,图层树按层级缩进显示;
- 表格:遥测/遥信参数表。
rows(JSON)配置行:{"label":"母线电压","key":"bus1.voltage","unit":"kV","digits":1}, 数值经 WebSocket 实时刷新(行内数据点自动纳入订阅); - 多页标签:一个工程可包含多个画面(标签栏切换,开发套件可增删/双击重命名),
工程 JSON 格式:
{"project":{...},"screens":[画面1,画面2,...]},兼容旧的单画面格式。
目录结构
hmi-designer/
├── scada-gw/ # Go 网关(独立模块,sim/cgo/proc 三种数据源)
├── ds_api/ # C/C++ 数据源接口(scada_ds.h)与参考实现
├── public/
│ ├── demo-power.json # 示例:220kV 变电站主接线
│ └── demo.json # 示例:水处理监控
├── src/
│ ├── registry.ts # ★ 组件注册表(17 个组件)
│ ├── services/hub.ts # ★ WebSocket 中枢(按画面订阅/遥控)
│ ├── hmi/ # 10 通用 + 7 电力符号组件
│ └── components/ # 编辑器外壳 + 运行套件外壳
└── .env.kit / .env.run # 双模式构建配置
生产构建
npm run build:kit # 开发套件产物 dist/
npm run build:run # 运行套件产物 dist/(可配合网关 static_dir 托管)