调整通讯协议udp+uart

This commit is contained in:
xu
2026-10-14 10:33:58 +08:00
parent 950e9e6c9e
commit 124e92b95f
7 changed files with 61 additions and 69 deletions
+5 -8
View File
@@ -9,7 +9,7 @@
#include <QVector>
#include "global.h"
class QSerialPort;
class QUdpSocket;
// 摇杆量协议范围 0~4096,中位 2048(分类一各轴、Vehi_gear/Vehi_turning 通用)
static const int kRcAxisMid = 2048;
@@ -30,7 +30,8 @@ struct CanFault {
// 下行 分类二/三 12 条(车端 → 遥控器):底盘 4 条、机械臂 4 条、洗消 2 条、气体检测仪 2 条,
// 按 canId 分流转 handleFrame() 写入 Telemetry。
// 全部为 29 位扩展帧、信号一律 Intel(小端)位序。
// 串口是字节流,故线上帧统一为 18 字节:帧头 0x5AA5FF00 + canId + DLC + 8 字节数据 + 校验和。
// 传输走 UDP:bind 本机 9000 端口收下行反馈,上行命令发往 127.0.0.1:9001。
// UDP 载荷统一为 18 字节:帧头 0x5AA5FF00 + canId + DLC + 8 字节数据 + 校验和。
// 通信超时判定:连续 2s 未收到任何合法帧则判为通信异常(最慢的下行周期 1000ms)。
class CarCommunication : public QObject
{
@@ -41,7 +42,6 @@ public:
bool start();
void stop();
QString deviceName() const { return m_device; }
// 行车/机械臂模式(面板旋钮或遥控器报文)→ Arm_ControlCmd1 的 Arm_modeCmd / Arm_enable
void setArmMode(bool arm) { m_armMode = arm; }
@@ -73,7 +73,7 @@ signals:
void faultAppended(const QString& system, const QString& code, const QString& desc);
private slots:
void onReadyRead();
void onDatagram();
void onSendFast(); // 50ms 组:底盘 / 机械臂 / 急停
void onSendMid(); // 100ms 组:洗消指令 / 洗消调试
void onSendSlow(); // 1000ms 组:气体检测仪
@@ -88,16 +88,13 @@ private:
void setCommOk(bool ok);
Telemetry* m_tel = nullptr;
QSerialPort* m_serial = nullptr;
QByteArray m_buf; // 串口字节流缓冲:帧头滑窗重同步用
QUdpSocket* m_sock = nullptr;
QTimer* m_hbTimer = nullptr;
QTimer* m_fastTimer = nullptr;
QTimer* m_midTimer = nullptr;
QTimer* m_slowTimer = nullptr;
QTimer* m_selfCheckTimer = nullptr;
QString m_device = "/dev/ttyS7";
int m_baud = 500000;
bool m_lastCommOk = true;
bool m_armMode = false;