BodyBalanceEvaluation/document/串口遥控器遥控界面操作说明.md
2026-01-10 22:28:56 +08:00

71 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 串口遥控器遥控界面操作说明
## 概述
- 通过串口接收遥控器报文,解析键码并通过 WebSocket 推送到前端,实现对检测页面的远程控制。
- 后端设备名为 `remote`,事件名为 `remote_control`,命名空间为 `/devices`
## 串口配置
- 配置文件位置backend/config.ini
- 读取段与键:
- [REMOTE] port缺省 COM6
- [REMOTE] baudrate缺省 115200
- [REMOTE] timeout缺省 0.1 秒
- [DEVICES] remote_enable是否启用缺省 true
- 串口参数115200 bps8 数据位1 停止位无校验8N1
## 报文格式
- 参照 Modbus RTU 协议中功能码 0x04读输入寄存器的应答帧格式
- 帧结构:`01 04 02 00 [键码] crcL crcH`
- 固定头:`01 04 02 00`
- 第 5 字节为键码KeyCode
- CRC16Modbus RTU 小端crcL, crcH计算范围为前 5 个字节
- 报文由接收器主动上传,无需主机轮询
- 除键码与 CRC 外,前 4 字节保持不变
## 键码约定
- 左:`11`
- 右:`14`
- 上:`13`
- 下:`15`
- 中:`12`
- 电源:`0E`
- 抓屏:`0F`
## 后端实现
- 代码文件:`backend/devices/remote_control_manager.py`
- 主要逻辑:
- 打开串口并启动后台线程读取数据
- 在缓冲区中查找帧头 `01 04 02 00`,截取 7 字节帧
- 计算前 5 字节 Modbus CRC16多项式 0xA001初值 0xFFFF校验通过后解析键码
- 通过 Socket.IO 向 `/devices` 命名空间推送事件 `remote_control`,载荷示例:
- `{ "code": "0F", "name": "screenshot", "timestamp": 1731234567.89 }`
## 前端对接
- 页面:`frontend/src/renderer/src/views/Detection.vue`
- 统一设备命名空间 Socket`devicesSocket = io(BACKEND_URL + '/devices', ...)`
- 事件监听与映射:
- 监听:`devicesSocket.on('remote_control', handler)`
- 根据编码触发页面方法:
- `11``startVideoClick()`(开始录像)
- `14``stopVideoClick()`(结束录像)
- `0F``saveDetectionData()`(截图)
- 页面中相关按钮:
- 截图按钮:调用 `saveDetectionData`
- 开始录像按钮:调用 `startVideoClick`
- 结束录像按钮:调用 `stopVideoClick`
## 运行与验证
- 打包后 Electron 主进程会在窗口创建前启动后端服务
- 打开检测页面,确保设备命名空间连接成功
- 使用遥控器按键,观察页面动作对应触发
## 常见问题
- 无法接收到事件:
- 检查后端串口配置是否正确(端口被占用或不存在)
- 确认遥控器接收器已连接且在串口管理器线程持续读取
- 确认前端已连接到 `/devices` 命名空间并注册了事件监听
- CRC 错误:
- 检查物理连接和电气参数
- 若报文格式与约定不一致,请提供示例报文以调整解析逻辑