# scada-lite **Repository Path**: phoenix_legend/scada-lite ## Basic Information - **Project Name**: scada-lite - **Description**: scada-lite:轻量化组态软件 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-04-05 - **Last Updated**: 2026-04-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 通用 Web SCADA 系统 ## 项目简介 基于公司现有的 IoT 平台开发的通用 Web SCADA 系统,支持低代码组态、实时监视、闭环控制、报警管理和历史追溯功能。 ## 技术栈 ### 后端 - Java 17+ - Spring Boot 3.2+ - Netty (WebSocket 服务) - Redis 7+ (Pub/Sub 模式) - MySQL 8.0+ (关系型数据库) - TDengine / InfluxDB (时序数据库,预留接口) - MyBatis-Plus - Lombok, Hutool, Jackson - Maven ### 前端 - Vue 3.4+ (Composition API) - TypeScript 5+ - Pinia (状态管理) - Konva.js / vue-konva (2D 组态渲染) - Element Plus (UI 组件库) - Axios (HTTP 客户端) - Vite 5+ (构建工具) - SCSS ## 项目结构 ``` scada/ ├── scada-backend/ # 后端服务 │ ├── src/ │ │ ├── main/ │ │ │ ├── java/com/scada/ │ │ │ │ ├── common/ # 通用类 │ │ │ │ ├── config/ # 配置类 │ │ │ │ ├── controller/ # 控制器 │ │ │ │ ├── entity/ # 实体类 │ │ │ │ ├── mapper/ # MyBatis Mapper │ │ │ │ ├── service/ # 服务层 │ │ │ │ ├── websocket/ # WebSocket 服务 │ │ │ │ └── ScadaApplication.java │ │ │ └── resources/ │ │ │ ├── application.yml │ │ │ └── db/migration/ │ │ └── pom.xml │ └── docs/ │ └── tdengine-init.sql ├── scada-frontend/ # 前端应用 │ ├── src/ │ │ ├── api/ # API 接口 │ │ ├── router/ # 路由配置 │ │ ├── stores/ # Pinia Store │ │ ├── types/ # TypeScript 类型定义 │ │ ├── utils/ # 工具函数 │ │ ├── views/ # 页面组件 │ │ ├── App.vue │ │ └── main.ts │ ├── index.html │ ├── package.json │ ├── tsconfig.json │ └── vite.config.ts └── README.md ``` ## 快速开始 ### 环境要求 - JDK 17+ - Node.js 18+ - MySQL 8.0+ - Redis 7+ - Maven 3.8+ ### 后端启动 1. 创建 MySQL 数据库: ```sql CREATE DATABASE scada_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` 2. 执行数据库迁移脚本: ``` scada-backend/src/main/resources/db/migration/V1__init_schema.sql ``` 3. 配置数据库和 Redis 连接: 编辑 `scada-backend/src/main/resources/application.yml` 4. 启动后端服务: ```bash cd scada-backend mvn spring-boot:run ``` 后端服务将在 http://localhost:8080 启动,WebSocket 服务在端口 9090。 ### 前端启动 1. 安装依赖: ```bash cd scada-frontend npm install ``` 2. 启动开发服务器: ```bash npm run dev ``` 前端应用将在 http://localhost:3000 启动。 ## 核心功能 ### 1. 组态编辑器 (Designer) - 拖拽式图元添加 - 图元属性配置(位置、颜色、大小、旋转) - 数据绑定配置(设备 ID、属性键、绑定属性) - 页面保存与发布 ### 2. 实时运行器 (Runner) - 只读模式渲染组态画面 - WebSocket 实时数据订阅 - 图元属性动态更新 - 指令下发功能 ### 3. 报警管理 - 报警规则配置 - 实时报警推送 - 报警记录查询 - 报警确认 ### 4. 历史数据 - 历史趋势查询 - 时序数据存储接口(预留) ## API 文档 ### 项目管理 - `GET /api/v1/projects` - 获取所有项目 - `POST /api/v1/projects` - 创建项目 - `PUT /api/v1/projects/{id}` - 更新项目 - `DELETE /api/v1/projects/{id}` - 删除项目 ### 页面管理 - `GET /api/v1/projects/{projectId}/pages` - 获取项目页面列表 - `GET /api/v1/pages/{id}` - 获取页面详情 - `GET /api/v1/pages/code/{pageCode}` - 通过编码获取页面 - `POST /api/v1/pages` - 保存页面 - `PUT /api/v1/pages/{id}/publish` - 发布页面 - `DELETE /api/v1/pages/{id}` - 删除页面 ### 设备控制 - `POST /api/v1/devices/command` - 下发设备指令 ### 历史数据 - `GET /api/v1/history/trend` - 查询历史趋势数据 ### 报警管理 - `GET /api/v1/alarms` - 查询报警记录 - `POST /api/v1/alarms/{id}/ack` - 确认报警 - `GET /api/v1/alarms/rules` - 获取报警规则 - `POST /api/v1/alarms/rules` - 创建报警规则 - `PUT /api/v1/alarms/rules/{id}` - 更新报警规则 - `DELETE /api/v1/alarms/rules/{id}` - 删除报警规则 ## WebSocket 协议 ### 连接 URL ``` ws://{host}/scada/ws?token={jwt}&projectId={id} ``` ### 上行消息 (Client -> Server) ```json { "type": "SUBSCRIBE", "projectId": 1, "payload": ["dev_001:temp", "dev_002:status"] } ``` ```json { "type": "COMMAND", "payload": { "deviceId": "dev_001", "cmd": "START", "params": {} } } ``` ### 下行消息 (Server -> Client) ```json { "type": "DATA_UPDATE", "timestamp": 1710000000000, "projectId": 1, "data": [ { "deviceId": "dev_001", "key": "temp", "value": 45.6, "ts": 1710000000000 } ] } ``` ```json { "type": "COMMAND_RESULT", "timestamp": 1710000000000, "payload": { "taskId": "xxx", "status": "SUCCESS", "msg": "OK" } } ``` ## Redis 规范 ### 实时值缓存 - Key: `scada:realtime:{projectId}:{deviceId}:{property}` - Value: JSON `{"val": value, "ts": timestamp}` - TTL: 24h ### 消息通道 - Channel: `scada:pubsub:{projectId}` ## 数据库设计 ### MySQL 表 - scada_project - 项目表 - scada_page - 组态页面表 - scada_page_binding - 页面数据绑定表 - scada_alarm_record - 报警记录表 - scada_alarm_rule - 报警规则表 ### TDengine 超级表 ```sql CREATE STABLE IF NOT EXISTS scada_data_raw ( ts TIMESTAMP, device_id NCHAR(64), prop_key NCHAR(64), value DOUBLE, str_value NCHAR(255) ) TAGS (project_id INT); ``` ## 开发说明 ### 后端开发 - 使用 MyBatis-Plus 简化数据库操作 - WebSocket 服务基于 Netty 实现 - 使用 Redis Pub/Sub 进行实时数据广播 ### 前端开发 - 使用 Vue 3 Composition API - 使用 Pinia 进行状态管理 - 使用 Konva.js 进行 2D 图形渲染 ## 许可证 MIT License