BodyBalanceEvaluation/document/串口遥控器遥控界面操作说明.md

71 lines
2.8 KiB
Markdown
Raw Permalink Normal View History

2026-01-09 09:40:00 +08:00
# 串口遥控器遥控界面操作说明
## 概述
- 通过串口接收遥控器报文,解析键码并通过 WebSocket 推送到前端,实现对检测页面的远程控制。
- 后端设备名为 `remote`,事件名为 `remote_control`,命名空间为 `/devices`
## 串口配置
- 配置文件位置backend/config.ini
- 读取段与键:
- [REMOTE] port缺省 COM6
- [REMOTE] baudrate缺省 115200
- [REMOTE] timeout缺省 0.1 秒
2026-01-10 22:28:56 +08:00
- [DEVICES] remote_enable是否启用缺省 true
2026-01-09 09:40:00 +08:00
- 串口参数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 错误:
- 检查物理连接和电气参数
- 若报文格式与约定不一致,请提供示例报文以调整解析逻辑