# IoT多协议采集 **Repository Path**: bobsongforever/IoTDataIO ## Basic Information - **Project Name**: IoT多协议采集 - **Description**: IoTdataIO 是一个功能强大的工业物联网数据采集与管理系统,支持多种工业协议的数据采集、处理和转发。系统采用前后端分离架构,提供可视化的 Web 管理界面,方便用户配置和管理数据采集任务。 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-04-17 - **Last Updated**: 2026-04-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # IoTdataIO - 工业物联网数据采集与管理系统 [![Java](https://img.shields.io/badge/Java-17-orange.svg)](https://www.oracle.com/java/) [![Spring Boot](https://img.shields.io/badge/Spring%20Boot-4.0.5-brightgreen.svg)](https://spring.io/projects/spring-boot) [![Vue](https://img.shields.io/badge/Vue-3.x-blue.svg)](https://vuejs.org/) [![TypeScript](https://img.shields.io/badge/TypeScript-5.x-blue.svg)](https://www.typescriptlang.org/) [![License](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) ## 📖 项目简介 IoTdataIO 是一个功能强大的工业物联网数据采集与管理系统,支持多种工业协议的数据采集、处理和转发。系统采用前后端分离架构,提供可视化的 Web 管理界面,方便用户配置和管理数据采集任务。 ### 核心特性 - 🔄 **多协议支持**:OPC UA、S7 PLC、Modbus TCP、MQTT - ⚙️ **灵活配置**:协议级采集开关,可独立控制连接和采集 - 🌐 **Web 管理界面**:基于 Vue 3 + TypeScript + Element Plus 的现代化前端 - 📊 **实时监控**:实时查看协议连接状态和采集任务运行情况 - 🎯 **数据点管理**:可视化管理数据采集点配置 - 🚀 **高并发架构**:多线程并发采集,支持大规模数据点 - 🔧 **易于扩展**:模块化设计,易于添加新的协议支持 ## 🏗️ 项目结构 ``` IoTdataIO/ ├── iot-backend/ # 后端服务(Spring Boot) │ ├── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── com/oldquan/iotdataio/ │ │ │ │ ├── collector/ # 数据采集器 │ │ │ │ │ ├── OpcUaCollector.java │ │ │ │ │ ├── S7Collector.java │ │ │ │ │ ├── ModbusCollector.java │ │ │ │ │ └── MqttPublisher.java │ │ │ │ ├── config/ # 配置类 │ │ │ │ │ ├── ProtocolProperties.java │ │ │ │ │ └── CollectionScheduler.java │ │ │ │ ├── model/ # 数据模型 │ │ │ │ │ ├── DataPoint.java │ │ │ │ │ └── CollectedData.java │ │ │ │ └── IoTdataIoApplication.java │ │ │ └── resources/ │ │ │ └── application.yml # 应用配置 │ │ └── test/ │ ├── pom.xml # Maven 配置 │ ├── mvnw / mvnw.cmd # Maven Wrapper │ └── .mvn/ │ ├── iot-frontend/ # 前端应用(Vue 3) │ ├── src/ │ │ ├── api/ # API 接口 │ │ │ └── index.ts │ │ ├── components/ # 组件 │ │ │ ├── ProtocolConfig.vue # 协议配置 │ │ │ ├── DataPointManager.vue # 数据点管理 │ │ │ └── StatusMonitor.vue # 状态监控 │ │ ├── types/ # 类型定义 │ │ │ └── index.ts │ │ ├── App.vue │ │ └── main.ts │ ├── package.json │ ├── vite.config.ts │ └── tsconfig.json │ ├── .idea/ # IDE 配置 ├── .gitignore └── HELP.md ``` ## 🛠️ 技术栈 ### 后端技术 - **Java 17** - 编程语言 - **Spring Boot 4.0.5** - Web 框架 - **Maven** - 项目管理 - **Lombok** - 简化 Java 代码 - **工业协议库**: - Eclipse Milo 0.6.15 - OPC UA - s7connector 2.1 - S7 PLC - jamod 1.2 - Modbus TCP - Eclipse Paho 1.2.5 - MQTT ### 前端技术 - **Vue 3** - 渐进式 JavaScript 框架 - **TypeScript 5** - 类型安全的 JavaScript - **Element Plus** - Vue 3 组件库 - **Vite** - 前端构建工具 - **Axios** - HTTP 客户端 ## 🚀 快速开始 ### 环境要求 - Java 17 或更高版本 - Node.js 16 或更高版本 - Maven 3.6+(或使用项目自带的 Maven Wrapper) ### 后端启动 1. **进入后端目录** ```bash cd iot-backend ``` 2. **编译项目** ```bash .\mvnw.cmd clean install -DskipTests ``` 3. **运行应用** ```bash .\mvnw.cmd spring-boot:run ``` 或者运行打包后的 JAR: ```bash .\mvnw.cmd package -DskipTests java -jar target/IoTdataIO-0.0.1-SNAPSHOT.jar ``` 4. **访问后端** - 默认端口:`http://localhost:8080` - API 文档:`http://localhost:8080/api` ### 前端启动 1. **进入前端目录** ```bash cd iot-frontend ``` 2. **安装依赖** ```bash npm install ``` 3. **启动开发服务器** ```bash npm run dev ``` 4. **访问前端** - 默认地址:`http://localhost:5173` - 管理界面:`http://localhost:5173` ## ⚙️ 配置说明 ### 后端配置 编辑 `iot-backend/src/main/resources/application.yml`: ```yaml # OPC UA 配置 opcua: enabled: true # 协议启用开关 collection-enabled: true # 采集开关 endpoint-url: opc.tcp://localhost:4840 application-name: IoTdataIO OPC UA Client session-timeout: 60000 # S7 PLC 配置 s7: enabled: true collection-enabled: true host: 192.168.1.10 rack: 0 slot: 1 timeout: 5000 # Modbus TCP 配置 modbus: enabled: true collection-enabled: true host: 192.168.1.20 port: 502 unit-id: 1 timeout: 5000 # MQTT 配置 mqtt: enabled: true broker-url: tcp://localhost:1883 client-id: IoTdataIO username: password: topic: iot/data # 采集调度配置 collection: scheduler: enabled: true interval: 1000 # 采集间隔(毫秒) thread-pool-size: 10 # 线程池大小 ``` ### 配置说明 - `enabled`:协议连接开关,控制是否建立与设备的连接 - `collection-enabled`:数据采集开关,控制是否执行数据采集 - 两个开关可以独立控制,实现灵活的管理策略 ## 📱 前端功能 ### 1. 状态监控(Status Monitor) - 实时显示系统运行状态 - 显示各协议连接状态 - 启动/停止采集任务 - 显示数据点总数和活跃任务数 - 自动刷新(每 5 秒) ### 2. 协议配置(Protocol Config) - 配置 OPC UA 连接参数 - 配置 S7 PLC 连接参数 - 配置 Modbus TCP 连接参数 - 启用/禁用协议连接 - 启用/禁用数据采集 - 保存和重置配置 ### 3. 数据点管理(Data Point Manager) - 查看数据点列表 - 添加新数据点 - 编辑数据点配置 - 删除数据点 - 快速启用/禁用数据点 - 数据验证 ## 🔌 API 接口 > ⚠️ 注意:以下 API 接口需要在后端实现后才能使用 ### 协议配置 ```typescript GET /api/protocol/config # 获取协议配置 PUT /api/protocol/config # 更新协议配置 PUT /api/protocol/config/{protocol} # 更新单个协议配置 ``` ### 数据点管理 ```typescript GET /api/datapoints # 获取所有数据点 POST /api/datapoints # 创建数据点 PUT /api/datapoints/{id} # 更新数据点 DELETE /api/datapoints/{id} # 删除数据点 PATCH /api/datapoints/{id}/toggle # 切换数据点状态 ``` ### 采集控制 ```typescript GET /api/collection/status # 获取采集状态 POST /api/collection/start # 启动采集 POST /api/collection/stop # 停止采集 ``` ## 📊 数据模型 ### DataPoint(数据点) ```typescript { id: string; // 数据点 ID name: string; // 数据点名称 deviceId: string; // 设备 ID protocolType: string; // 协议类型(OPCUA/S7/MODBUS) address: string; // 寄存器地址 dataType: string; // 数据类型(INT/FLOAT/BOOL/STRING) enabled: boolean; // 是否启用 intervalMs: number; // 采集间隔(毫秒) description?: string; // 描述 } ``` ### CollectedData(采集数据) ```java { dataPoint: DataPoint; // 数据点信息 value: Object; // 采集值 timestamp: Instant; // 时间戳 quality: String; // 数据质量 error: String; // 错误信息(如果有) } ``` ## 🔧 开发指南 ### 添加新的协议支持 1. 在 `ProtocolProperties` 中添加协议配置类 2. 实现 `DataCollector` 接口创建新的采集器 3. 在 `CollectionScheduler` 中注册采集器 4. 在前端 `ProtocolConfig.vue` 中添加配置界面 ### 自定义数据输出 1. 实现 `DataPublisher` 接口 2. 在配置文件中添加输出配置 3. 在采集器中调用发布器 ## 🐛 常见问题 ### Q1: 后端启动失败? **A**: 检查以下几点: - Java 版本是否为 17 或更高 - 端口 8080 是否被占用 - 配置文件格式是否正确 ### Q2: 前端无法连接后端? **A**: 检查: - 后端是否正常启动 - 前端 API 配置中的 baseURL 是否正确 - 是否存在 CORS 跨域问题 ### Q3: 协议连接失败? **A**: 检查: - 设备 IP 地址和端口是否正确 - 网络是否可达 - 设备是否支持相应的协议 - 配置中的 `enabled` 是否设置为 `true` ### Q4: 采集不到数据? **A**: 检查: - `collection-enabled` 是否设置为 `true` - 数据点地址是否正确 - 数据类型是否匹配 - 数据点是否启用 ## 📝 更新日志 ### v1.0.0 (2026-04-16) - ✨ 初始版本发布 - 🔄 支持 OPC UA、S7 PLC、Modbus TCP 协议 - 📡 MQTT 数据发布 - 🌐 Vue 3 前端管理界面 - ⚙️ 协议级采集开关 - 📊 实时监控功能 - 🎯 数据点管理 ## 🤝 贡献指南 欢迎提交 Issue 和 Pull Request! 1. Fork 本仓库 2. 创建特性分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 提交 Pull Request ## 📄 许可证 本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情 ## 👤 作者 - **oldquan** - [GitHub](https://github.com/oldquan) ## 🙏 致谢 - [Eclipse Milo](https://github.com/eclipse/milo) - OPC UA 实现 - [s7connector](https://github.com/s7connector/s7connector) - S7 PLC 通信 - [jamod](https://github.com/jeichler/jamod) - Modbus TCP 实现 - [Eclipse Paho](https://github.com/eclipse/paho.mqtt.java) - MQTT 客户端 - [Vue.js](https://vuejs.org/) - 前端框架 - [Element Plus](https://element-plus.org/) - UI 组件库 --- ⭐ 如果这个项目对你有帮助,请给个 Star!