增加通讯协议

This commit is contained in:
xu
2026-10-14 09:59:42 +08:00
parent 32878a9a80
commit 950e9e6c9e
102 changed files with 5538 additions and 2679 deletions
+58 -12
View File
@@ -12,9 +12,10 @@
class QApplication;
// ===================== 画布与全局常量 =====================
// 屏幕分辨率(1920×1080 横屏);若部署在更低分辨率屏,可按同一比例整体缩放
// 屏幕分辨率(1920×1200);窗口按此固定尺寸,页面布局靠 layout 自适应,
// 富余的垂直空间由各页的 addStretch 分配(控件像素尺寸与字号不随屏幕缩放)
static const int SCREEN_W = 1920;
static const int SCREEN_H = 1080;
static const int SCREEN_H = 1200;
// ===================== 工业风格配色体系(QSS 十六进制) =====================
namespace C {
@@ -44,25 +45,32 @@ enum PageId {
PageMgmt, // 密码管理
PageReset, // 密码重置
PageSelfCheck, // ④ 自检
PageJob, // ⑤ 作业选择
PageChassis, // ⑥ 机器人底盘
PageArm, // ⑦ 机械臂
PageGas, // ⑧ 气体检测仪
PageClean, // ⑨ 手动消除
PageDisinfect, // ⑩ 手动消毒
PageDebug, // ⑪ 调试维护
PageFault, // ⑫ 故障查询
PageHome, // ⑤ 系统首页面(自检完成后进入)
PageJob, // ⑥ 作业选择
PageChassis, // ⑦ 机器人底盘
PageArm, // ⑧ 机械臂
PageGas, // ⑨ 气体检测仪
PageClean, // ⑩ 消除作业
PageDisinfect, // ⑪ 消毒作业
PageDebug, // ⑫ 调试维护
PageFault, // ⑬ 故障查询
PageCount
};
// ===================== 遥测数据(车载端 → UI) =====================
// 由通信层解析 UDP 报文后填充,页面 500ms 定时读取刷新
// 由通信层解析车端反馈报文后填充,页面刷新时读取
struct Telemetry {
// 底盘
int soc = 85; // 电量 %
double volt = 360.0; // 电压 V
double speed = 3.45; // 车速 km/h
bool handbrake = true; // 手刹
int driveMode = 0; // 行车/机械臂模式:0=行车 1=机械臂(遥控器拨钮→串口→底盘报文 mode)
int rdyStatus = 0; // 底盘 ready:0=初始 1=高压上电完成 2=准备就绪
int gearPos = 0; // 挡位:0=N 1=D 2=R
int parking = 0; // 驻车:0=未驻车 1=左电机 2=右电机 3=完全驻车
int awdMode = 0; // 四驱模式:0=二驱 1=四驱 2=四驱锁定
double steerAngle = 0.0; // 方向盘角度
QStringList chassisFaults; // 底盘故障(多条 2s 轮换)
// 机械臂
@@ -74,13 +82,17 @@ struct Telemetry {
bool armHomed = false; // 是否已回位(用于底盘“机械臂未回位”告警)
// 洗消
QString washMode = "--"; // 手动消除 / 手动消毒
QString washMode = "--"; // 消除作业 / 消毒作业
bool washStart = false; // 洗消启停反馈
double flowA = 0.0; // A 药剂流量 L/min
double flowB = 0.0; // B 药剂流量 L/min
double gasFlow = 0.0; // 气体流量 L/min
double press = 0.0; // 管路压力 MPa
double airPress = 0.0; // 空压机压力 MPa
double foam = 0.0; // 发泡倍数
double flowPlungerFb = 0.0; // 柱塞泵流量反馈 L/min
double flowAirFb = 0.0; // 空压机流量反馈 L/min
double flowVaneFb = 0.0; // 叶片泵流量反馈 L/min
QStringList washFaults; // 洗消故障代码
// 液位
@@ -106,6 +118,23 @@ struct Telemetry {
bool leaf = false; // 叶片泵上电
QStringList pumpFaults; // 泵故障代码
// 遥控器(24 字节二进制帧,见 comm/uart.h)
bool rcLinkOk = false; // 遥控器链路是否在线
int rcBattery = 0; // 遥控器电量 %
bool rcDriveMode = false; // bit0 行车模式
bool rcArmMode = false; // bit1 机械臂模式
bool rcArmEnabled = false; // bit2 机械臂使能
bool rcChassisEnabled = false;// bit3 底盘使能
bool rcEstop = false; // bit4 急停
int rcGear = 2048; // 整车档位(底盘 Y)0~4096,中位 2048
int rcSteer = 2048; // 整车转向(底盘 X)
int rcPosZ = 2048; // 末端位置上下
int rcPosX = 2048; // 末端位置左右
int rcPosY = 2048; // 末端位置前后
int rcRoll = 2048; // 末端姿态横滚
int rcPitch = 2048; // 末端姿态俯仰
int rcYaw = 2048; // 末端姿态偏航
// 全局
bool commOk = true; // 通信状态
bool estop = false; // 急停触发
@@ -139,6 +168,23 @@ private:
// 为整个应用安装按钮焦点光圈
void installButtonFocusGlow(QApplication* app);
// ===================== 方向键(旋钮)隔离 =====================
// 方向键在本机是"旋钮"键位,只由 ParamControl 用来调值。但 QAbstractButton 会把
// 方向键当成沿焦点链换焦(等同 Tab/Shift+Tab),停在按钮上时按方向键焦点会乱跳。
// 这个全局过滤器把"焦点在按钮上时"的方向键吞掉,方向键只做调值、换焦只走 Tab。
class ArrowKeyGuard : public QObject
{
Q_OBJECT
public:
explicit ArrowKeyGuard(QObject* parent = nullptr);
protected:
bool eventFilter(QObject* obj, QEvent* ev) override;
};
// 为整个应用安装方向键隔离
void installArrowKeyGuard(QApplication* app);
// 全局 QSS 样式表
QString appStyleSheet();