# PMC_OEE **Repository Path**: weloveut1/pmc_oee ## Basic Information - **Project Name**: PMC_OEE - **Description**: AI的项目 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-19 - **Last Updated**: 2025-10-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 项目名称:基于OPCUA协议的设备性能指标统计软件 ## 产品概述 本产品是一款专为工业设备监控和性能分析设计的软件解决方案,基于OPC-UA协议实现设备数据的采集、传输、存储和可视化展示。系统通过MQTT协议实现数据的实时传输,利用InfluxDB进行时序数据的高效存储,同时提供直观的Web界面进行数据监控和性能指标分析。该软件旨在帮助企业提高设备管理效率,降低故障率,优化生产流程,实现数字化转型。 ## 项目背景 随着工业4.0和智能制造的快速发展,工业设备的智能化管理和性能监控成为企业提升竞争力的关键因素。然而,传统的设备监控系统往往存在数据采集不及时、分析手段落后、可视化效果不佳等问题。此外,不同厂商的设备采用不同的通信协议,导致数据孤岛现象严重,难以实现统一管理和分析。 OPC-UA(OPC Unified Architecture)作为工业自动化领域的通用通信协议,具有跨平台、高安全性、可靠性强等特点,已成为工业物联网的重要标准。本项目基于OPC-UA协议开发设备性能指标统计软件,旨在解决传统设备监控系统的不足,为企业提供全面、高效的设备管理解决方案。 ## 软件优势 1. **标准化协议支持**:基于OPC-UA标准协议,确保与各种工业设备的兼容性和数据互通性。 2. **实时数据采集**:支持高频数据采集和传输,确保监控数据的实时性和准确性。 3. **高效时序存储**:采用InfluxDB作为时序数据库,高效存储和查询海量设备运行数据。 4. **直观数据可视化**:提供丰富的图表和仪表盘,直观展示设备性能指标和运行趋势。 5. **灵活部署方案**:支持本地部署和远程访问,适应不同企业的网络环境和安全需求。 6. **模拟数据支持**:在无真实数据时自动生成模拟数据,确保系统功能完整性和演示效果。 7. **响应式界面设计**:适配不同屏幕尺寸,支持PC端和移动设备访问。 8. **易于扩展定制**:模块化设计,便于功能扩展和定制开发,满足不同行业和场景需求。 ## 运行环境 ### 硬件环境 - CPU:Intel Core i3或更高配置 - 内存:4GB或更高 - 硬盘空间:至少10GB可用空间 - 网络:支持以太网或Wi-Fi连接 ### 软件环境 - 操作系统:Windows 7/10/11,Linux(Ubuntu 18.04+,CentOS 7+) - Web浏览器:Chrome 90+,Firefox 88+,Safari 14+,Edge 90+ - Python版本:3.6及以上 - MQTT服务器:Eclipse Mosquitto 2.0及以上 - InfluxDB:v2.x版本 - OPC-UA服务器:兼容OPC-UA 1.04规范的服务器 ## 总体设计 ### 系统架构 本系统采用多层架构设计,主要包括: 1. **数据采集层**:通过OPC-UA客户端(opcua_client1.py)从OPC-UA服务器采集设备数据。 2. **数据传输层**:使用MQTT协议将采集到的数据实时传输到前端应用。 3. **数据存储层**:利用InfluxDB存储历史数据,支持时序数据的高效查询和分析。 4. **数据处理层**:通过Flask后端服务(backen.py)处理数据查询、聚合和分析请求。 5. **数据展示层**:提供Web界面(mqtt_data_display.html和dashboard.html)进行实时监控和历史数据分析。 ### 核心组件 1. **OPC-UA客户端**:负责与OPC-UA服务器建立连接,读取设备数据并发布到MQTT。 2. **MQTT服务器**:作为数据传输的中间件,实现客户端和服务器之间的消息传递。 3. **Flask后端**:提供RESTful API,处理前端的数据请求,与InfluxDB交互。 4. **InfluxDB数据库**:存储时序数据,支持高效的数据查询和分析。 5. **Web前端应用**:提供用户界面,展示实时数据和历史数据图表。 ## 软件程序流程图 ``` 设备数据 → OPC-UA服务器 → OPC-UA客户端(opcua_client1.py) → MQTT服务器 ↓ Web浏览器 → Web前端应用(mqtt_data_display.html) ←──────┘ ↓ Web前端应用(dashboard.html) → Flask后端(backen.py) → InfluxDB数据库 ``` ## 软件启动步骤 ### 1. 启动MQTT服务器 使用项目中的mosquitto.conf配置文件启动Mosquitto MQTT服务器: ```bash # Windows系统 mosquitto -c mosquitto.conf # Linux系统 sudo mosquitto -c mosquitto.conf ``` ### 2. 启动InfluxDB服务器 按照InfluxDB的安装指南启动InfluxDB服务: ```bash # Windows系统(通过服务管理器启动或使用命令行) net start influxdb # Linux系统 sudo systemctl start influxdb ``` ### 3. 启动OPC-UA客户端 运行Python脚本连接到OPC-UA服务器并开始采集数据: ```bash python opcua_client1.py ``` ### 4. 启动Flask后端服务 运行Flask后端服务以提供数据API: ```bash cd dashboard python backen.py ``` ### 5. 打开Web应用 - 双击打开`mqtt_data_display.html`文件,访问实时数据监控页面 - 双击打开`dashboard/dashboard.html`文件,访问数据可视化仪表盘 ## 项目描述 本项目是基于OPCUA协议的设备性能指标统计软件,通过MQTT协议接收和展示OPC-UA数据,并利用InfluxDB进行数据存储和分析。系统提供实时数据监控、历史数据查询、设备性能指标分析和数据可视化功能,帮助用户直观地了解设备运行状态和各项关键指标。 ## 软件功能 ### 1. 实时数据采集与传输 - 通过OPC-UA协议从设备采集实时运行数据 - 支持MQTT协议进行数据的实时传输 - 数据采集频率可配置,满足不同场景需求 ### 2. 数据存储与管理 - 使用InfluxDB时序数据库存储历史数据 - 支持数据的长期保存和高效查询 - 提供数据聚合功能,优化存储和查询性能 ### 3. 实时数据监控 - 实时显示设备运行状态和关键指标 - 提供连接状态指示和错误处理机制 - 支持断线重连和模拟数据生成 ### 4. 历史数据分析与可视化 - 提供多时间范围的数据查询功能(今天、本周、本月、本年) - 生成设备性能指标趋势图表(开动率、设备利用率、设备停机率、MTBF、MTTR) - 支持图表的缩放、平移和数据提示功能 ### 5. 设备性能指标统计 - 自动计算设备开动率、利用率和停机率 - 统计MTBF(平均故障间隔时间)和MTTR(平均修复时间) - 支持多种模式和状态的累计运行时间统计 ### 6. 用户界面功能 - 响应式设计,适配不同屏幕尺寸 - 美观的深色主题,提高长时间使用的舒适度 - 数据更新时的平滑动画效果,提升用户体验 ## 项目结构 ``` c:\python\ ├── app.js # 主应用逻辑文件,包含MQTT连接和数据处理功能 ├── dashboard\ # 仪表盘相关文件 │ ├── backen.py # Flask后端服务,提供数据API和InfluxDB查询功能 │ └── dashboard.html # 数据可视化仪表盘页面 ├── lib\ # 第三方库文件 │ ├── echarts.min.js # ECharts图表库(本地版本) │ └── font-awesome.min.css # Font Awesome图标库 ├── mosquitto.conf # MQTT服务器配置文件 ├── mqtt.min.js # Paho MQTT JavaScript客户端库(本地版本) ├── mqtt_data_display.html # 实时数据监控页面 ├── opcua_client1.py # OPC-UA客户端脚本 ├── styles.css # 样式文件,定义页面外观 └── README.md # 项目说明文档 ``` ## 系统要求 - Web浏览器(支持HTML5和JavaScript) - Python 3.6+(用于运行后端服务) - 运行中的MQTT服务器(推荐使用Mosquitto) - 运行中的InfluxDB服务器(用于数据存储和查询) - OPC-UA服务器(提供数据来源) ## 关闭软件步骤 ### 1. 关闭Web浏览器 关闭打开的Web浏览器窗口,退出所有Web应用页面。 ### 2. 停止Flask后端服务 在运行Flask后端服务的终端窗口中,按Ctrl+C组合键停止服务。 ### 3. 停止OPC-UA客户端 在运行OPC-UA客户端的终端窗口中,按Ctrl+C组合键停止客户端。 ### 4. 停止InfluxDB服务器 ```bash # Windows系统 net stop influxdb # Linux系统 sudo systemctl stop influxdb ``` ### 5. 停止MQTT服务器 在运行MQTT服务器的终端窗口中,按Ctrl+C组合键停止服务器,或使用以下命令: ```bash # Windows系统 net stop mosquitto # Linux系统 sudo systemctl stop mosquitto ``` ## 安装指南 ### 1. 安装并配置MQTT服务器 1. 下载并安装Mosquitto MQTT服务器 2. 使用项目中的`mosquitto.conf`配置文件启动服务器,确保开启了WebSocket支持(端口9001) ### 2. 安装并配置InfluxDB 1. 下载并安装InfluxDB(推荐使用v2.x版本) 2. 创建组织(org)、桶(bucket)和访问令牌(token) 3. 确保InfluxDB配置与`backen.py`中的设置匹配 ### 3. 安装Python依赖 1. 确保已安装Python 3.6或更高版本 2. 安装所需的Python库: ``` pip install flask influxdb-client ``` ### 4. 部署项目 1. 将项目文件放置在本地目录中 2. 启动Flask后端服务: ``` python dashboard/backen.py ``` 3. 直接双击`mqtt_data_display.html`打开实时监控页面 4. 直接双击`dashboard/dashboard.html`打开数据可视化仪表盘 ## 使用说明 ### 实时数据监控(mqtt_data_display.html) 1. 确保MQTT服务器正在运行(端口1883用于MQTT,端口9001用于WebSocket) 2. 打开`mqtt_data_display.html`文件 3. 系统会自动尝试连接到本地MQTT服务器(ws://127.0.0.1:9001) 4. 成功连接后,页面将显示实时接收到的数据 5. 如果连接失败,系统会自动切换到模拟数据模式 ### 数据可视化仪表盘(dashboard/dashboard.html) 1. 确保Flask后端服务正在运行(端口5000) 2. 确保InfluxDB服务器正在运行并已存储历史数据 3. 打开`dashboard/dashboard.html`文件 4. 页面会自动连接到后端服务获取历史数据 5. 可以通过时间范围选择器(今天、本周、本月、本年)查看不同时间段的数据 6. 点击"刷新数据"按钮可以手动更新图表数据 7. 所有图表均支持响应式布局,可适应不同屏幕尺寸 ### 数据聚合查询 1. 后端服务`backen.py`已配置为每分钟聚合查询数据 2. 当选择不同时间范围时,系统会根据范围采用合适的采样率 - 今天:每5分钟一个数据点 - 本周:每30分钟一个数据点 - 本月:每2小时一个数据点 3. 如果InfluxDB中没有数据,系统会自动生成模拟数据以确保良好的用户体验 ## 主要功能 ### 实时数据监控功能 - 实时显示当前模式时间、状态时间和总时间 - 展示各模式(模式0-3)的累计运行时间 - 详细显示模式1的17种状态累计时间 - 提供连接状态指示和错误处理 - 支持断线重连和模拟数据生成 - 响应式设计,适配不同屏幕尺寸 - 数据更新时的动画效果 ### 数据可视化仪表盘功能 - 设备性能指标趋势图表(开动率、设备利用率、设备停机率、MTBF、MTTR) - 多时间范围数据查询(今天、本周、本月、本年) - 每分钟数据聚合计算平均值 - 根据时间范围自动调整数据采样率 - 图表支持缩放、平移和数据提示 - 完整的错误处理和模拟数据生成 - 美观的深色主题设计 - 完全本地引用的ECharts库支持离线使用 ## 配置说明 ### MQTT连接配置 在`app.js`文件中可以修改以下配置: - `mqttBroker`: MQTT服务器WebSocket地址 - `clientId`: 客户端ID(自动生成随机ID) - `reconnectInterval`: 重连间隔时间(毫秒) - `topics`: 要订阅的MQTT主题列表 ### Mosquitto服务器配置 `mosquitto.conf`文件包含MQTT服务器的配置,主要包括: - 监听器配置(端口1883用于MQTT,端口9001用于WebSocket) - 匿名访问设置 - 其他高级配置选项 ### InfluxDB服务器配置 在`backen.py`文件中可以修改以下InfluxDB配置: ```python # InfluxDB连接配置 INFLUXDB_URL = "http://127.0.0.1:8086" INFLUXDB_TOKEN = "kUkD07jJNMNQbjW4Bd2McanlQKl-jXpjr5TtO7gJNP-90gOjoB-J2NJLEjPRoaauSkap2LgjUjRiNyw0WykxWw==" INFLUXDB_ORG = "lee" INFLUXDB_BUCKET = "pmc" ``` ### Flask后端服务配置 在`backen.py`文件中可以修改以下配置: - 数据聚合间隔(默认为每分钟聚合) - 不同时间范围的数据采样率 - Flask服务器运行端口(默认5000) - 日志级别和输出方式 ### 数据聚合和采样率配置 在`backen.py`文件中的`generate_mock_data`函数可以调整不同时间范围的采样率: ```python # 采样率设置(根据时间范围调整数据点密度) sample_rates = { "day": 5, # 每5分钟一个点 "week": 30, # 每30分钟一个点 "month": 120,# 每2小时一个点 "year": 720 # 每12小时一个点 } ``` ## 开发说明 ### 实时监控页面开发 如需扩展或修改实时监控页面,可以: 1. 在`app.js`中添加更多数据处理逻辑 2. 在`styles.css`中修改页面样式 3. 在`mqtt_data_display.html`中调整页面布局或添加新的数据展示区域 4. 根据需要添加更多的MQTT主题订阅 ### 后端服务开发 如需扩展或修改Flask后端服务,可以: 1. 在`backen.py`中添加新的API端点 2. 调整InfluxDB查询逻辑和数据聚合方式 3. 修改模拟数据生成算法以更好地模拟真实场景 4. 添加新的错误处理和日志记录功能 ### 仪表盘开发 如需扩展或修改数据可视化仪表盘,可以: 1. 在`dashboard.html`中添加新的图表或数据展示组件 2. 使用ECharts配置更多类型的图表 3. 修改图表样式以匹配整体设计风格 4. 添加新的交互功能,如数据筛选、导出等 ### API接口说明 Flask后端服务提供以下主要API接口: #### `/api/performance-data` 获取设备性能指标的历史数据 - **参数**:`time_range`(可选,默认为"day")- 时间范围,可选值:"day", "week", "month", "year" - **返回**:JSON格式的性能数据,包含时间戳和各项指标值 #### `/api/latest-metrics` 获取最新的设备性能指标 - **参数**:无 - **返回**:JSON格式的最新指标数据 #### `/api/health` 检查后端服务和数据库连接健康状态 - **参数**:无 - **返回**:JSON格式的健康状态信息 #### `/` 根路径,返回简单的服务状态信息 - **参数**:无 - **返回**:文本格式的服务状态信息 ## 算法说明 总时间 =生产总时间+维修总时间+手动操作总时间 生产总时间=状态UNDEFINED+状态CLEARING+状态STOPPED+状态STARTING+状态IDLE+状态SUSPENDED+状态EXECUTE+状态STOPPING+状态ABORTING+状态ABORTED+状态HOLDING+停线时间+状态UNHOLDING+状态SUSPENDING+状态UNSUSPENDING+状态RESETTING+状态COMPLETING+状态COMPLETED 开动率=状态EXECUTE/生产总时间*100% 设备利用率=状态EXECUTE/总时间*100% 设备停机率=1-设备利用率 MTBF=状态EXECUTE/停线次数 MTTR=停线时间/停线次数 ## 状态清单 状态0:状态UNDEFINED 状态1:状态CLEARING 状态2:状态STOPPED 状态3:状态STARTING 状态4:状态IDLE 状态5:状态SUSPENDED 状态6:状态EXECUTE 状态7:状态STOPPING 状态8:状态ABORTING 状态9:状态ABORTED 状态10:状态HOLDING 状态11:停线时间 状态12:状态UNHOLDING 状态13:状态SUSPENDING 状态14:状态UNSUSPENDING 状态15:状态RESETTING 状态16:状态COMPLETING 状态17:状态COMPLETED ## 许可证 本项目采用MIT许可证。