# PXCP_Master **Repository Path**: tom-embedded/pxcp_-master ## Basic Information - **Project Name**: PXCP_Master - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-09-19 - **Last Updated**: 2026-09-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PXCP Recorder v3.5 (优化版) XCP 数据采集工具 - 全面优化版本 ## 🚀 优化内容 ### 🔴 高优先级 (已完成) | 优化项 | 说明 | 文件 | |--------|------|------| | ✅ 移除 eval() | 安全性修复,使用显式常量映射 | `main_window.py` | | ✅ 修复空异常 | 所有异常现在都有日志记录 | `main_window.py` | | ✅ 拆分主窗口 | 模块化设计,便于维护 | `gui/` 目录 | ### 🟡 中优先级 (已完成) | 优化项 | 说明 | 文件 | |--------|------|------| | ✅ 样式系统统一 | 完整的浅色/深色主题 | `styles.py` | | ✅ 批量数据处理 | 减少信号发射,提升性能 | `gui/workers/__init__.py` | | ✅ 异步MF4写入 | 后台线程写入,不阻塞采集 | `core/mf4_writer.py` | ### 🟢 功能增强 (已完成) | 优化项 | 说明 | 文件 | |--------|------|------| | ✅ 数据导出 | 支持 CSV 和 Excel | `core/data_exporter.py` | | ✅ 暂停/恢复 | 采集过程可暂停 | `gui/workers/__init__.py` | | ✅ 深色主题 | 完整的深色主题支持 | `styles.py` | ## 📁 项目结构 ``` pxcp_optimized/ ├── main_window.py # 主窗口 (优化后) ├── styles.py # 样式系统 (完善深色主题) ├── gui/ │ ├── __init__.py │ ├── dialogs/ │ │ └── __init__.py # 所有对话框 │ └── workers/ │ └── __init__.py # 工作线程 (批量处理/暂停恢复) ├── core/ │ ├── __init__.py │ ├── mf4_writer.py # MF4写入器 (同步/异步) │ └── data_exporter.py # 数据导出 (CSV/Excel) ├── tests/ │ └── test_all.py # 单元测试 ├── logger.py # 日志模块 (原) ├── exceptions.py # 异常处理 (原) ├── config_manager.py # 配置管理 (原) ├── a2l_parser.py # A2L解析器 (原) ├── xcp_connection.py # XCP连接 (原) ├── daq_manager.py # DAQ管理 (原) ├── xcp_master_tool.py # XCP主工具 (原) ├── plot_window.py # 曲线窗口 (原) ├── PCANBasic.py # PCAN API (原) └── PXCP.py # PXCP API (原) ``` ## 🔧 关键代码变更 ### 1. 安全性修复 - 移除 eval() ```python # ❌ 旧代码 (不安全) PCAN_CHANNELS = {f'PCAN_USBBUS{i}': eval(f'PCAN_USBBUS{i}') for i in range(1, 9)} # ✅ 新代码 (安全) PCAN_CHANNELS = { 'PCAN_USBBUS1': PCAN_USBBUS1, 'PCAN_USBBUS2': PCAN_USBBUS2, # ... } ``` ### 2. 异常捕获修复 ```python # ❌ 旧代码 except: pass # ✅ 新代码 except Exception as e: logger.warning(f"加载A2L文件失败: {e}") ``` ### 3. 批量数据处理 ```python class AcquisitionWorker(QThread): data_batch_received = pyqtSignal(list) # 批量信号 BATCH_SIZE = 10 BATCH_INTERVAL = 0.05 # 50ms def _run_batch_mode(self): # 累积数据后批量发送 if len(data_batch) >= self.BATCH_SIZE: self.data_batch_received.emit(data_batch.copy()) ``` ### 4. 暂停/恢复功能 ```python def pause(self): with self._pause_condition: self._paused = True self.state_changed.emit('paused') def resume(self): with self._pause_condition: self._paused = False self._pause_condition.notify_all() self.state_changed.emit('running') ``` ### 5. 异步MF4写入 ```python class AsyncMF4Writer: def __init__(self, filename, queue_size=10000): self._queue = queue.Queue(maxsize=queue_size) self._thread = threading.Thread(target=self._write_loop) def write_data(self, timestamp, data): self._queue.put_nowait((timestamp, data)) # 非阻塞 ``` ## 🎨 深色主题 主题切换: 视图 → 🌙 深色主题 ```python from styles import get_theme_manager, Theme tm = get_theme_manager() tm.set_theme(Theme.DARK) stylesheet = tm.get_stylesheet() ``` ## 📤 数据导出 ```python from core.data_exporter import DataBuffer, DataExporter # 采集时自动缓冲 buffer = DataBuffer() buffer.add(timestamp, data) # 导出 buffer.export('data.csv', 'csv', variables) buffer.export('data.xlsx', 'xlsx', variables) ``` ## 🧪 运行测试 ```bash cd pxcp_optimized python -m tests.test_all ``` ## 📋 使用方法 ```bash # 运行优化后的程序 python main_window.py ``` ## ⚙️ 依赖 - Python 3.8+ - PyQt5 - pyqtgraph (可选,用于曲线显示) - openpyxl (可选,用于Excel导出) - numpy ```bash pip install PyQt5 pyqtgraph numpy openpyxl ``` ## 📝 版本历史 - **v3.5**: 全面优化版 - 安全性修复 - 模块化重构 - 性能优化 - 功能增强 - **v3.4**: 原版本 - 基础功能完整