# scada-engine
**Repository Path**: zl_java/scada-engine
## Basic Information
- **Project Name**: scada-engine
- **Description**: **Scada Engine** 专为工业物联网 (IIoT) 场景设计,提供从**可视化编辑**到**运行时渲染**的一站式解决方案。它帮助开发者以低代码的方式,快速构建专业的 SCADA 监控画面、HMI 人机交互界面以及数字孪生大屏。
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2026-07-01
- **Last Updated**: 2026-07-01
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# @nywqs/scada-engine
基于 AntV X6 + Vue 3 的自研 SCADA 组态引擎。旨在为工业物联网(IIoT)提供高性能、可扩展的可视化组态解决方案,支持拖拽式界面设计、实时数据绑定及复杂的流程编排。
## 特性
- 🛠 **可视化编辑器**:基于 AntV X6 构建的专业级图形编辑能力,支持节点拖拽、连线编排、框选复制等操作。
- 📦 **丰富组件库**:
- **基础组件**:矩形、圆形、文本等基础矢量图形。
- **IoT 组件**:支持 ECharts 图表(仪表盘、折线图)、3D 设备模型(电机、管道、阀门、储罐等)、指示灯、开关等工业控件。
- 🔗 **多源数据集成**:内置服务层,支持 WebSocket、MQTT、HTTP 请求及 SSE(Server-Sent Events)等多种实时数据接入方式。
- 🎨 **动画引擎**:内置独立的动画调度器(AnimationScheduler)与动画引擎(AnimationEngine),支持脉冲、闪烁、旋转等节点特效。
- ⚙️ **流程编排**:内置可视化工作流编辑器(Workflow Editor),支持通过逻辑节点(条件判断、定时器、HTTP 请求、自定义代码)编排复杂业务流程。
- 🔐 **授权与安全**:基于 ECDSA P-256 + SHA-256 的数字签名授权机制,保障软件使用安全。
- 🚀 **性能优化**:支持视口裁剪(Viewport Culling)技术,在保证视觉效果的同时优化大数据量场景下的渲染性能。
## 安装
### 环境要求
确保你的项目中已安装以下依赖:
```bash
npm install vue@^3.4.0 vue-router@^4.6.0 @antv/x6@^2.18.0 echarts@^5.5.0 pinia@^2.1.0
```
### 安装引擎
```bash
npm install @nywqs/scada-engine
# 或
pnpm add @nywqs/scada-engine
# 或
yarn add @nywqs/scada-engine
```
## 快速开始
### 1. 全局注册
在你的应用入口文件(如 `main.ts`)中引入并注册组件:
```typescript
import { createApp } from 'vue'
import ScadaEngine from '@nywqs/scada-engine'
import '@nywqs/scada-engine/dist/scada-engine.css' // 引入样式
import App from './App.vue'
const app = createApp(App)
app.use(ScadaEngine)
app.mount('#app')
```
### 2. 在组件中使用
最核心的组件是 `ScadaCanvas`,它承载了画布编辑器和预览功能。
```vue
```
## 目录结构
项目采用了清晰的模块划分:
```
src/
├── components/ # 核心 UI 组件
│ ├── Header.vue # 顶部工具栏
│ ├── Footer.vue # 底部版权栏
│ ├── ScadaCanvas.vue # 核心画布组件
│ └── ...
├── scada-components/ # 业务组件库
│ ├── basic/ # 基础图形组件 (rect, circle, text)
│ ├── iot/ # IoT 设备组件 (gauge, motor, tank...)
│ ├── canvas/ # 画布配置管理
│ └── registry.ts # 组件注册表
├── views/workflow/ # 流程编排模块
├── services/ # 数据服务层
│ ├── websocketService.ts
│ ├── mqttService.ts
│ └── ...
├── utils/ # 工具函数与引擎核心
│ ├── animationEngine.ts # 动画引擎
│ ├── authCrypto.ts # 授权加密模块
│ └── viewportCulling.ts # 视口优化
└── styles/ # 样式文件
```
## 核心概念
### 画布 (ScadaCanvas)
画布是整个系统的核心,提供以下能力:
- **编辑模式**:用于设计组态画面。
- **预览模式**:用于运行展示,隐藏编辑 UI。
- **数据绑定**:支持将设备点位(Point)绑定到组件属性,实时更新显示。
### 组件注册系统 (ComponentRegistry)
引擎使用了懒加载注册机制来优化性能。
- 支持按分类(`basic`, `iot`)获取组件列表。
- 支持动态注册新组件。
### 数据服务 (Data Services)
引擎不强制绑定特定后端,提供了灵活的数据接入适配器:
- **WebSocket**:适用于高频实时数据。
- **MQTT**:适用于物联网消息订阅。
- **HTTP**:适用于请求-响应式查询。
- **SSE**:适用于服务器推送事件。
### 流程引擎 (Workflow Engine)
内置的可视化脚本系统,允许用户在画布上通过图形化节点编写逻辑,无需编写大量代码即可实现:
- 定时触发任务
- 条件判断分支
- HTTP 外部请求
- 自定义 JavaScript 代码执行
## API 参考
### ScadaCanvas 方法
通过 `ref` 可以直接调用画布的操作方法:
| 方法 | 说明 |
|------|------|
| `save()` | 保存当前画布数据到 LocalStorage |
| `export()` | 导出当前画布为 JSON 文件 |
| `import()` | 触发文件选择器导入 JSON |
| `getCanvasData()` | 获取画布完整数据对象(包含节点、连线和配置) |
| `zoomIn()` / `zoomOut()` | 放大/缩小画布 |
| `clearAll()` | 清空画布 |
### 数据结构示例
`getCanvasData()` 返回的结构大致如下:
```json
{
"version": "1.0",
"config": {
"width": 1920,
"height": 1080,
"grid": true
},
"cells": [
{
"id": "node-1",
"type": "rect",
"x": 100,
"y": 100,
"label": "电机",
"data": { "binding": "device_01_status" }
}
]
}
```
## 许可证
本项目采用 MIT 许可证。内置的组件库和引擎功能可以免费用于学习和非商业项目。
**商业授权**:如需将本引擎用于商业产品并隐藏底部版权标识,请联系作者获取数字签名授权。
## 作者
- **nywqs**
如有问题或建议,欢迎提交 Issue 或联系作者。