新版布局
This commit is contained in:
@@ -32,17 +32,18 @@ make -j4
|
||||
**19 条**报文(分类四标准帧 `DIDO/PWM/AI/BMS/MCU` 未实现)。所有报文均为 **29 位扩展帧、
|
||||
信号一律 Intel(小端)位序**。
|
||||
|
||||
串口是字节流,故线上帧统一为 **18 字节**,收发同一格式:
|
||||
一个 UDP 数据报里可能塞多条帧,故线上帧统一为 **16 字节**,收发同一格式:
|
||||
|
||||
| 偏移 | 长度 | 含义 |
|
||||
| --- | --- | --- |
|
||||
| 0 | 4 | 帧头 `0x5AA5FF00`(线上字节序 `00 FF A5 5A`,用于在字节流中定位报文起始) |
|
||||
| 4 | 4 | CAN ID(29 位扩展帧),直接用于分流 |
|
||||
| 8 | 1 | DLC,固定 `8` |
|
||||
| 9 | 8 | CAN 数据段 |
|
||||
| 17 | 1 | 校验和:canId 四字节 + DLC + 数据八字节求和取低 8 位 |
|
||||
| 0 | 1 | 帧头 `0xAA`(用于在数据报中定位报文起始) |
|
||||
| 1 | 4 | CAN ID(29 位扩展帧),直接用于分流 |
|
||||
| 5 | 1 | DLC,固定 `8` |
|
||||
| 6 | 8 | CAN 数据段 |
|
||||
| 14 | 1 | 校验和:帧头 + canId 四字节 + DLC + 数据八字节 + 帧尾求和取低 8 位 |
|
||||
| 15 | 1 | 帧尾 `0xBB` |
|
||||
|
||||
收包时逐字节找帧头、校验不过右移一字节继续找,容忍粘包、拆包与杂包。
|
||||
收包时逐字节找帧头,帧头/帧尾/校验任一不过就右移一字节继续找,容忍粘包、拆包与杂包。
|
||||
|
||||
**上行 7 条**(遥控器 → 车端)按协议「报文周期时间」列分三组重发:**50ms** 底盘 / 机械臂1 /
|
||||
机械臂2 / 急停,**100ms** 洗消指令 / 洗消调试,**1000ms** 气体检测仪。界面上层只更新控制状态,
|
||||
@@ -77,12 +78,26 @@ make -j4
|
||||
车速 0~5.00 km/h、发泡倍数 6~12 倍、泡沫比例 0~10%、空压机流量 0~340 L/min、柱塞泵流量
|
||||
0~24 L/min;调试维护页三泵转速上限各按协议(空压机 3000 / 柱塞泵 1450 / 叶片泵 2000 rpm)。
|
||||
|
||||
顶部「通信正常/异常」按收帧判定:连续 **2s** 未收到任何合法帧即判为异常(最慢的下行周期
|
||||
1000ms)。UDP 端口绑定失败(如 9000 已被占用)时不启动定时器、不崩溃,界面显示「通信异常」。
|
||||
顶部左区**固定**显示一行通信状态,不再轮播:`CarCommunication::updateCommText()` 按
|
||||
`All_Comm_FaultCode` 与链路状态渲染进 `Telemetry::commText`,`TitleBar` 只决定配色——
|
||||
正常为绿字「系统通信正常」,有码时用该码的文案(如「机械臂通信异常」),链路断且无码时为
|
||||
「通信异常」;异常时整条指示器红色闪烁。
|
||||
|
||||
车端 CAN 走 UDP,端口在 `comm/car.cpp` 中以常量固定:本机 **9000** 收、上行命令发往 **127.0.0.1:9001**。
|
||||
各项子系统故障的明细不在顶部,而是进对应卡片的**「故障」行**(`DataCard::setFaults`):
|
||||
底盘、洗消、气体检测仪三张卡各一行,**无故障时整行隐藏**,有故障时显示并红色闪烁,
|
||||
多条按 **1s** 轮流显示。机械臂卡没有这一行——协议里机械臂那四帧只有位置/姿态/关节角,
|
||||
没有故障信号。洗消卡那一行是「洗消系统 + 泵」;气体检测仪的告警单独一份
|
||||
(`Telemetry::detectorFaults`),不会再去点亮洗消页底栏的「系统故障」灯。
|
||||
|
||||
链路判定:连续 **2s** 未收到任何合法帧即判为异常(最慢的下行周期 1000ms),此时顶部那行
|
||||
显示不带故障码的「通信异常」。UDP 端口绑定失败(如 9000 已被占用)时不启动定时器、不崩溃,
|
||||
同样显示「通信异常」。
|
||||
|
||||
车端 CAN 走 UDP,地址在 `comm/car.cpp` 中以常量固定:本机绑 **AnyIPv4:9000** 收、上行命令发往
|
||||
车端 **192.168.1.224:3001**(`kCanTxHost`,改车端 IP 只动这一处)。
|
||||
遥控器仍走串口:`comm/uart.cpp` 打开 `rc/device`(默认 `/dev/ttyS7`)、`rc/baud`(默认 `115200`)。
|
||||
`config.ini`(程序目录)中与通信相关的配置还有 `net/selfcheck_fault`(自检故障演示)。
|
||||
`config.ini`(程序目录)中与通信相关的配置还有 `net/selfcheck_fault`(自检故障演示,作用于
|
||||
`清水液位` 这一项,默认开)。
|
||||
参数(车速、柱塞泵流量、发泡倍数、泡沫比例、空压机流量)与密码经 `QSettings` 持久化,上电自动读取。
|
||||
|
||||
`tools/can_sender.py` 是车端 CAN 的 UDP 联调工具(给 UI 发反馈时目标端口用 **9000**);
|
||||
@@ -90,8 +105,13 @@ make -j4
|
||||
|
||||
### 已知缺口
|
||||
|
||||
- **自检 10 项无对应 CAN 报文**,`sendSelfCheckStart()` 暂由本端跑完序列(见 `onSelfCheckTick`
|
||||
的 TODO),仅为维持 ④自检 → ⑤系统首页面 流程不中断;拿到真实报文后替换该本地驱动。
|
||||
- **自检 14 项里 0~9 项无对应 CAN 报文**(通信系统/各分系统通信取自 `All_Comm_FaultCode`,其余为
|
||||
清水液位),`sendSelfCheckStart()` 暂由本端计时直接判过(见 `onSelfCheckTick` 的 TODO),
|
||||
仅为维持 ④自检 → ⑤系统首页面 流程不中断;拿到真实报文后替换该本地驱动。
|
||||
- **自检的球阀 4 项(D1/D2 开启、关闭)是真检查**:`onSelfCheckTick` 会置 `Decontam_DebugCmd`
|
||||
的调试模式位并写目标阀位(命令帧由 100ms 周期定时器持续重发),再等 `MBV_D1_Sta` /
|
||||
`MBV_D2_Sta` 反馈与指令一致才算通过;`kValveWaitTicks`(默认 18 拍 ≈ 8s)内未到位、
|
||||
或车端根本没有反馈(通信异常)都判故障。自检结束后恢复原有的调试模式位。
|
||||
- **行车/机械臂模式**没有对应的下行信号:协议 12 条反馈里没有该字段,`telemetry.driveMode`
|
||||
无处可填,故模式只由遥控器报文决定(遥控器离线时保持上次值)。
|
||||
- **`Vehi_spd` 按协议取 8 位**(bit24、精度 0.01 → 0~2.55 km/h)。协议表里该信号与其后的
|
||||
|
||||
Reference in New Issue
Block a user