71 lines
2.8 KiB
Markdown
71 lines
2.8 KiB
Markdown
# 串口遥控器遥控界面操作说明
|
||
|
||
## 概述
|
||
- 通过串口接收遥控器报文,解析键码并通过 WebSocket 推送到前端,实现对检测页面的远程控制。
|
||
- 后端设备名为 `remote`,事件名为 `remote_control`,命名空间为 `/devices`。
|
||
|
||
## 串口配置
|
||
- 配置文件位置:backend/config.ini
|
||
- 读取段与键:
|
||
- [REMOTE] port,缺省 COM6
|
||
- [REMOTE] baudrate,缺省 115200
|
||
- [REMOTE] timeout,缺省 0.1 秒
|
||
- [DEVICES] remote_enable(是否启用),缺省 true
|
||
- 串口参数:115200 bps,8 数据位,1 停止位,无校验(8N1)。
|
||
|
||
## 报文格式
|
||
- 参照 Modbus RTU 协议中功能码 0x04(读输入寄存器)的应答帧格式:
|
||
- 帧结构:`01 04 02 00 [键码] crcL crcH`
|
||
- 固定头:`01 04 02 00`
|
||
- 第 5 字节为键码(KeyCode)
|
||
- CRC16:Modbus 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 错误:
|
||
- 检查物理连接和电气参数
|
||
- 若报文格式与约定不一致,请提供示例报文以调整解析逻辑
|
||
|