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

2.8 KiB
Raw Blame History

串口遥控器遥控界面操作说明

概述

  • 通过串口接收遥控器报文,解析键码并通过 WebSocket 推送到前端,实现对检测页面的远程控制。
  • 后端设备名为 remote,事件名为 remote_control,命名空间为 /devices

串口配置

  • 配置文件位置backend/config.ini
  • 读取段与键:
    • [REMOTE] port缺省 COM6
    • [REMOTE] baudrate缺省 115200
    • [REMOTE] timeout缺省 0.1 秒
    • [DEVICES] remote_enabled是否启用缺省 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
  • 统一设备命名空间 SocketdevicesSocket = io(BACKEND_URL + '/devices', ...)
  • 事件监听与映射:
    • 监听:devicesSocket.on('remote_control', handler)
    • 根据编码触发页面方法:
      • 11startVideoClick()(开始录像)
      • 14stopVideoClick()(结束录像)
      • 0FsaveDetectionData()(截图)
  • 页面中相关按钮:
    • 截图按钮:调用 saveDetectionData
    • 开始录像按钮:调用 startVideoClick
    • 结束录像按钮:调用 stopVideoClick

运行与验证

  • 打包后 Electron 主进程会在窗口创建前启动后端服务
  • 打开检测页面,确保设备命名空间连接成功
  • 使用遥控器按键,观察页面动作对应触发

常见问题

  • 无法接收到事件:
    • 检查后端串口配置是否正确(端口被占用或不存在)
    • 确认遥控器接收器已连接且在串口管理器线程持续读取
    • 确认前端已连接到 /devices 命名空间并注册了事件监听
  • CRC 错误:
    • 检查物理连接和电气参数
    • 若报文格式与约定不一致,请提供示例报文以调整解析逻辑