diff --git a/README.md b/README.md index 4dd1ccb..7f8e11e 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ > 基于 Electron + React + Vite 开发的传感器监测应用程序 ![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20macOS%20%7C%20Linux-lightgrey.svg) -![Version](https://img.shields.io/badge/version-1.0.0-green.svg) +![Version](https://img.shields.io/badge/version-1.0.8-green.svg) --- @@ -48,11 +48,25 @@ - 图像发送时间间隔 - 零点计数设置 - 数据帧率调节 + - 视频帧率调节 - 阈值参数配置 + - 无效数据计数 - **系统功能**: - 系统清零使能 - 图像发送控制(开始/停止) -- **存储设置**: 自定义数据存储路径 +- **重连功能**: + - 断线自动重连 + - 可配置重连间隔(5-60秒) + - 重连状态实时显示 +- **报警功能**: + - 可配置X/Y轴上下限阈值 + - 超阈值自动报警 + - 报警状态实时显示 +- **数据记录**: + - 实时数据记录(CSV格式) + - 报警数据记录(CSV格式) + - 自定义存储路径 + - 按日期和设备IP分类存储 #### 🔧 测量点管理 @@ -74,9 +88,16 @@ - 在"系统设置"页面可调整各项参数 - 修改参数后点击"设置"按钮保存 -4. **数据存储** - - 应用会自动记录实时数据和报警数据 - - 可在存储设置中自定义保存路径 +4. **数据记录与存储** + - 在"系统设置"页面配置存储路径 + - 启用"实时数据"记录功能可保存所有传感器数据 + - 启用"报警功能"并勾选"报警数据"可记录超阈值数据 + - 数据文件按日期自动分类:`存储路径/设备IP/实时数据(或报警数据)/YYYYMMDD.csv` + +5. **报警监控** + - 在"系统设置"中配置X/Y轴上下限阈值 + - 启用报警功能后,超阈值数据会触发报警 + - 报警数据自动记录到单独的CSV文件中 ### 故障排除 @@ -86,12 +107,30 @@ - 确认设备 IP 地址和端口号正确 - 重启应用和设备后重试 +**自动重连功能** + +- 在"系统设置"中启用重连功能 +- 可设置重连间隔(5-60秒) +- 重连状态会实时显示在界面上 + **数据显示异常** - 检查设备连接状态 - 确认传感器配置是否正确 - 查看日志文件排查问题 +**数据记录问题** + +- 确认存储路径是否有写入权限 +- 检查磁盘空间是否充足 +- 验证实时数据或报警数据开关是否已启用 + +**报警功能异常** + +- 检查报警功能是否已启用 +- 确认阈值设置是否合理 +- 验证报警数据记录开关是否已勾选 + **应用崩溃或无响应** - 重启应用 @@ -128,7 +167,9 @@ electron-app/ ├── src/ │ ├── main/ # 主进程代码 │ │ ├── index.js # 主进程入口 -│ │ └── ipcRouter.js # IPC 路由处理 +│ │ ├── ipcRouter.js # IPC 路由处理 +│ │ ├── autoUpdaterManager.js # 自动更新管理 +│ │ └── reconnectManager.js # 重连管理 │ ├── preload/ # 预加载脚本 │ │ └── index.js │ └── renderer/ # 渲染进程代码 @@ -137,8 +178,20 @@ electron-app/ │ ├── App.jsx # 应用主组件 │ ├── main.jsx # 渲染进程入口 │ ├── components/ # React 组件 +│ │ ├── AutoUpdater/ # 自动更新组件 +│ │ ├── DeflectionCollection/ # 挠度数据采集 +│ │ ├── ImageCollection/ # 图像采集 +│ │ ├── MeasurementPointSetting/ # 测量点设置 +│ │ ├── SiderHeader/ # 侧边栏头部 +│ │ └── SystemSettings/ # 系统设置 │ ├── stores/ # Zustand 状态管理 -│ └── common/ # 公共模块 +│ │ ├── deviceStore.js # 设备状态管理 +│ │ └── rectangleStore.js # 矩形选择状态 +│ ├── common/ # 公共模块 +│ │ └── ipcEvents.js # IPC事件常量 +│ ├── hooks/ # 自定义Hook +│ └── assets/ # 静态资源 +├── logs/ # 日志文件目录 ├── dist/ # 构建输出目录 ├── electron-builder.yml # 打包配置 ├── electron.vite.config.mjs # Vite 配置 @@ -206,18 +259,42 @@ npm run build:linux ```javascript // 设备管理 -DEVICE_SEARCH // 设备搜索 -DEVICE_CONNECT // 设备连接 -DEVICE_DISCONNECT // 设备断开 +DEVICE_SEARCH // 设备搜索 +DEVICE_CONNECT // 设备连接 +DEVICE_DISCONNECT // 设备断开 // 数据传输 -RESULT_REPLY // 传感器数据 -IMAGE_REPLY // 图像数据 - -// 参数配置 -SENSORS_GET / SET // 传感器配置 -IMAGE_SEND_TIME_GET / SET // 图像发送间隔 -// ... 其他参数 +RESULT_REPLY // 传感器数据 +IMAGE_REPLY // 图像数据 +HEARTBEAT_REPLY // 心跳包 + +// 传感器管理 +SENSORS_GET / SET // 传感器配置 + +// 基本参数配置 +IMAGE_SEND_TIME_GET / SET // 图像发送间隔 +ZERO_COUNT_GET / SET // 零点计数 +RESULT_COUNT_GET / SET // 结果计数 +DATA_FPS_GET / SET // 数据帧率 +VIDEO_FPS_GET / SET // 视频帧率 +THRESHOLD_GET / SET // 阈值 +INVALID_DATA_COUNT_GET / SET // 无效数据计数 + +// 系统功能 +IMAGE_SEND_ENABLED // 图像发送使能 +IS_CLEAR_ZERO // 系统清零使能 + +// 重连功能 +RECONNECT_CONFIG // 重连配置 +RECONNECT_STATUS // 重连状态 + +// 文件操作 +OPEN_DIRECTORY // 打开目录 +SELECT_DIRECTORY // 选择目录 +ENSURE_DIRECTORY // 确保目录存在 +APPEND_TO_FILE // 追加文件内容 +CHECK_FILE_EXISTS // 检查文件是否存在 +WRITE_CSV_HEADER // 写入CSV文件头 ``` #### 状态管理 (`stores/`) @@ -231,12 +308,37 @@ IMAGE_SEND_TIME_GET / SET // 图像发送间隔 主要组件模块: +- `AutoUpdater/`: 自动更新组件 - `DeflectionCollection/`: 挠度数据采集和可视化 - `ImageCollection/`: 图像采集显示 - `MeasurementPointSetting/`: 测量点配置 -- `SystemSettings/`: 系统参数设置 +- `SystemSettings/`: 系统参数设置和数据记录配置 - `SiderHeader/`: 侧边栏头部 +#### 数据记录系统 + +**实时数据记录** + +- 格式:CSV文件,包含UTF-8 BOM确保中文正确显示 +- 存储路径:`存储路径/设备IP/实时数据/YYYYMMDD.csv` +- 表头格式:`数据记录时间,测点1基准标靶,测点1计算系数,测点1xReal坐标,测点1yReal坐标,...` +- 记录条件:勾选"实时数据"开关且设备已连接 + +**报警数据记录** + +- 格式:CSV文件,专门记录超阈值数据 +- 存储路径:`存储路径/设备IP/报警数据/YYYYMMDD.csv` +- 表头格式:`报警记录时间,测点位置,基准标靶,计算系数,xReal坐标,yReal坐标,报警类型,阈值范围,超出值` +- 记录条件:同时勾选"报警功能"和"报警数据"开关 +- 报警类型:X轴上限超出、X轴下限超出、Y轴上限超出、Y轴下限超出 + +**报警检测逻辑** + +- 检测X/Y轴坐标是否超出设定的上下限阈值 +- null或undefined值不参与报警检测 +- 每个测点可同时触发X轴和Y轴报警 +- 超出值计算:实际值与阈值的差值 + ### 日志系统 使用 `electron-log` 记录应用日志: @@ -251,13 +353,23 @@ IMAGE_SEND_TIME_GET / SET // 图像发送间隔 - 端口: 2230 - 广播地址: 255.255.255.255 -- 超时: 1s [1s内如果有设备继续响应则重置超时计时器] +- 超时机制: 5秒全局超时,收到响应后1秒延迟等待更多设备 +- 命令格式: `{"command": "name", "type": "get"}` #### TCP 数据传输 - 默认端口: 2233 - 协议: JSON over TCP - 消息格式: `{"command": "xxx", "type": "xxx", "values": "xxx"}\n\n` +- 心跳机制: 设备每2秒发送心跳包,应用5秒检测一次,10秒无心跳则认为断开 + +#### 自动重连机制 + +- 可配置是否启用自动重连 +- 重连间隔可设置(5-60秒) +- 连接超时时间为重连间隔的80%,最小3秒 +- 重连状态实时通知渲染进程 +- 支持心跳超时后自动重连 ### 构建和部署 @@ -310,6 +422,19 @@ nsis: - 组件文件使用 PascalCase 命名 - 样式文件使用 CSS Modules +#### IPC 事件规范 + +- 所有IPC事件名称统一定义在 `common/ipcEvents.js` 中 +- 事件名称使用 `模块:操作` 格式,如 `device:connect` +- 主进程和渲染进程必须使用 `IPC_EVENT` 常量,禁止硬编码字符串 +- 文件操作事件统一使用 `file:` 前缀 + +#### 状态管理规范 + +- 使用 `useRef` 避免回调函数中的闭包问题 +- 长期状态使用 Zustand 全局状态管理 +- 组件内部状态优先使用 `useState` + #### 提交规范 使用语义化提交信息: @@ -338,3 +463,5 @@ chore: 构建或工具相关 3. 提交更改 (`git commit -m 'feat: add amazing feature'`) 4. 推送到分支 (`git push origin feature/amazing-feature`) 5. 创建 Pull Request + +---