# data-simulation-manager **Repository Path**: tankedr/data-simulation-manager ## Basic Information - **Project Name**: data-simulation-manager - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-03 - **Last Updated**: 2025-07-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 数据模拟管理系统 基于Spring Boot的实时数据模拟与管理平台,支持多任务管理、JavaScript脚本执行、OPC UA数据服务。 ## 功能特性 ### 核心功能 - **多任务管理**:支持创建、启动、停止、删除多个数据模拟任务 - **脚本驱动**:使用JavaScript编写数据模拟算法,支持动态函数和异常模拟 - **OPC UA服务**:通过OPC UA协议对外提供数据访问服务 - **实时监控**:Web界面实时显示任务状态、运行时间、数据值 - **模式切换**:支持正常/异常模拟模式的快速切换 ### 技术特性 - **高性能**:基于线程池的并发执行,支持100+并发任务 - **灵活配置**:JSON配置文件管理数据点、脚本、周期等参数 - **脚本互通**:脚本中可获取同一模板内其他数据点的值 - **精度控制**:支持不同数据类型和精度配置 - **异常处理**:完善的错误处理和日志记录 ## 快速开始 ### 环境要求 - Java 17+ - Maven 3.6+ ### 安装和运行 1. **克隆项目** ```bash git clone cd data-simulation-manager ``` 2. **编译项目** ```bash mvn clean package ``` 3. **运行应用** ```bash java -jar target/data-simulation-manager-1.0.0.jar ``` 4. **访问界面** 打开浏览器访问:http://localhost:8080 ## 配置文件说明 ### 基本结构 ```json { "opcuaServer": { "endpoint": "opc.tcp://localhost:4840", "namespaceUri": "urn:simulation:server", "rootPath": "Simulation" }, "simulationTemplates": [ { "templateId": "template_001", "templateName": "温度传感器模拟", "description": "模拟温度传感器数据", "opcuaPath": "Sensors/Temperature", "dataPoints": [...] } ], "globalSettings": { "defaultCycle": 1000, "maxConcurrentTasks": 100, "logLevel": "INFO", "enableMetrics": true } } ``` ### 数据点配置 ```json { "pointName": "temperature", "dataType": "DOUBLE", "precision": 2, "description": "环境温度", "unit": "°C", "normalRange": { "min": 15.0, "max": 35.0 }, "initialValue": 25.0, "simulationScript": { "language": "JavaScript", "normalScript": "Math.sin(Date.now() / 60000) * 5 + 25 + Math.random() * 2 - 1", "abnormalScript": "getValue('temperature') + (Math.random() > 0.5 ? 10 : -10)" }, "simulationCycle": 1000 } ``` ## 脚本编写指南 ### JavaScript脚本语法 **正常模拟脚本示例**: ```javascript // 正弦波模拟 + 随机噪声 Math.sin(Date.now() / 60000) * 5 + 25 + Math.random() * 2 - 1 // 时间序列模拟 20 + Math.sin(Date.now() / 30000) * 10 + Math.random() * 2 ``` **异常模拟脚本示例**: ```javascript // 突发异常值 Math.random() > 0.5 ? 100 : -50 // 基于当前值的异常 getValue('temperature') + (Math.random() > 0.5 ? 20 : -20) ``` ### 内置函数 - `Date.now()` - 获取当前时间戳 - `Math.*` - 数学函数库 - `getValue(pointName)` - 获取同一模板中其他数据点的当前值 ## API接口 ### 任务管理 - `POST /api/simulation/tasks` - 创建任务 - `GET /api/simulation/tasks` - 获取任务列表 - `POST /api/simulation/tasks/{taskId}/start` - 启动任务 - `POST /api/simulation/tasks/{taskId}/stop` - 停止任务 - `DELETE /api/simulation/tasks/{taskId}` - 删除任务 - `POST /api/simulation/tasks/{taskId}/toggle-mode` - 切换模拟模式 ### 数据调整 - `POST /api/simulation/tasks/{taskId}/adjust-value` - 调整数据点值 ### 系统管理 - `GET /api/simulation/statistics` - 获取统计信息 - `POST /api/simulation/opcua/start` - 启动OPC UA服务 - `POST /api/simulation/opcua/stop` - 停止OPC UA服务 ## 使用示例 ### 1. 创建温度传感器模拟任务 **通过Web界面**: 1. 在模板下拉菜单中选择"温度传感器模拟" 2. 输入任务名称,如"车间温度监测" 3. 点击"创建任务" 4. 点击"启动"开始模拟 **通过API**: ```bash curl -X POST http://localhost:8080/api/simulation/tasks \ -H "Content-Type: application/json" \ -d '{ "templateId": "template_001", "taskName": "车间温度监测" }' ``` ### 2. 切换异常模拟模式 ```bash curl -X POST http://localhost:8080/api/simulation/tasks/{taskId}/toggle-mode ``` ### 3. 调整数据点值 ```bash curl -X POST http://localhost:8080/api/simulation/tasks/{taskId}/adjust-value \ -H "Content-Type: application/json" \ -d '{ "pointName": "temperature", "value": 35.5 }' ``` ## 架构设计 ### 系统架构 ``` ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ Web前端界面 │ │ REST API层 │ │ 业务服务层 │ │ │ │ │ │ │ │ - 任务管理界面 │◄──►│ - 任务管理API │◄──►│ - 任务管理器 │ │ - 实时监控 │ │ - 配置管理API │ │ - 脚本执行引擎 │ │ - 状态统计 │ │ - OPC UA API │ │ - 配置服务 │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ ▼ ┌─────────────────┐ │ OPC UA服务 │ │ │ │ - 数据节点管理 │ │ - 实时数据发布 │ │ - 客户端连接 │ └─────────────────┘ ``` ### 关键组件 - **SimulationTaskManager**: 任务生命周期管理 - **ScriptEngine**: JavaScript脚本执行引擎 - **ConfigurationService**: 配置文件管理 - **OpcuaServerService**: OPC UA数据服务 - **SimulationController**: REST API控制器 ## 配置说明 ### 应用配置 (application.yml) ```yaml server: port: 8080 simulation: config: file: simulation-config.json logging: level: com.simulation: DEBUG ``` ### 系统配置 - **最大并发任务数**: 100(可在globalSettings中调整) - **默认模拟周期**: 1000ms - **脚本超时时间**: 5秒 - **日志保存路径**: logs/simulation.log ## 监控和运维 ### 健康检查 - 访问 http://localhost:8080/actuator/health 查看系统健康状态 ### 日志监控 - 应用日志:logs/simulation.log - 日志级别:INFO(生产环境),DEBUG(开发环境) ### 性能指标 - 任务并发数:通过/api/simulation/statistics获取 - 内存使用率:通过JVM监控 - OPC UA连接数:通过/api/simulation/opcua/status获取 ## 故障排除 ### 常见问题 **1. 任务启动失败** - 检查配置文件格式是否正确 - 确认脚本语法无误 - 查看日志中的错误信息 **2. OPC UA服务无法启动** - 确认端口4840未被占用 - 检查防火墙设置 - 验证网络配置 **3. 脚本执行错误** - 检查JavaScript语法 - 确认使用的函数在GraalVM中支持 - 查看ScriptEngine的错误日志 ### 日志级别调整 ```yaml logging: level: com.simulation.engine.ScriptEngine: DEBUG com.simulation.service.SimulationTaskManager: DEBUG ``` ## 扩展开发 ### 添加新的数据类型 1. 在DataPoint.java中添加新的数据类型枚举 2. 在ScriptEngine.java的convertValue方法中添加转换逻辑 3. 更新OpcuaServerService中的类型映射 ### 自定义脚本函数 ```java // 在ScriptEngine中注入自定义函数 context.getBindings("js").putMember("customFunction", (Value.ProxyExecutable) arguments -> { // 自定义逻辑 return result; }); ``` ### 添加新的API接口 ```java @RestController @RequestMapping("/api/simulation") public class CustomController { // 添加新的接口方法 } ``` ## 许可证 本项目基于MIT许可证开源。