No description
Find a file
Harbor 93b440c914 feat: 初始提交 —— Vue3 组态设计器 + Go 网关 + 组态加载器
前端(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 开发环境一键启动
2026-09-21 00:16:52 +08:00
demo-run feat: 初始提交 —— Vue3 组态设计器 + Go 网关 + 组态加载器 2026-09-21 00:16:52 +08:00
docs feat: 初始提交 —— Vue3 组态设计器 + Go 网关 + 组态加载器 2026-09-21 00:16:52 +08:00
ds_api feat: 初始提交 —— Vue3 组态设计器 + Go 网关 + 组态加载器 2026-09-21 00:16:52 +08:00
loader feat: 初始提交 —— Vue3 组态设计器 + Go 网关 + 组态加载器 2026-09-21 00:16:52 +08:00
public feat: 初始提交 —— Vue3 组态设计器 + Go 网关 + 组态加载器 2026-09-21 00:16:52 +08:00
scada-gw feat: 初始提交 —— Vue3 组态设计器 + Go 网关 + 组态加载器 2026-09-21 00:16:52 +08:00
server feat: 初始提交 —— Vue3 组态设计器 + Go 网关 + 组态加载器 2026-09-21 00:16:52 +08:00
src feat: 初始提交 —— Vue3 组态设计器 + Go 网关 + 组态加载器 2026-09-21 00:16:52 +08:00
.env.kit feat: 初始提交 —— Vue3 组态设计器 + Go 网关 + 组态加载器 2026-09-21 00:16:52 +08:00
.env.run feat: 初始提交 —— Vue3 组态设计器 + Go 网关 + 组态加载器 2026-09-21 00:16:52 +08:00
.gitignore feat: 初始提交 —— Vue3 组态设计器 + Go 网关 + 组态加载器 2026-09-21 00:16:52 +08:00
build-loader.sh feat: 初始提交 —— Vue3 组态设计器 + Go 网关 + 组态加载器 2026-09-21 00:16:52 +08:00
index.html feat: 初始提交 —— Vue3 组态设计器 + Go 网关 + 组态加载器 2026-09-21 00:16:52 +08:00
package-lock.json feat: 初始提交 —— Vue3 组态设计器 + Go 网关 + 组态加载器 2026-09-21 00:16:52 +08:00
package.json feat: 初始提交 —— Vue3 组态设计器 + Go 网关 + 组态加载器 2026-09-21 00:16:52 +08:00
README.md feat: 初始提交 —— Vue3 组态设计器 + Go 网关 + 组态加载器 2026-09-21 00:16:52 +08:00
start.sh feat: 初始提交 —— Vue3 组态设计器 + Go 网关 + 组态加载器 2026-09-21 00:16:52 +08:00
tsconfig.json feat: 初始提交 —— Vue3 组态设计器 + Go 网关 + 组态加载器 2026-09-21 00:16:52 +08:00
vite.config.ts feat: 初始提交 —— Vue3 组态设计器 + Go 网关 + 组态加载器 2026-09-21 00:16:52 +08:00

电力系统 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 托管)