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