#ifndef MOCKVEHICLE_H #define MOCKVEHICLE_H #include #include #include #include // ===================== 内置模拟车载端(离线演示) ===================== // 以独立 UDP 套接字在回环地址上与遥控端通信:向 UI 端口周期发送遥测, // 接收并响应 UI 下发的控制命令(行驶/机械臂/球阀/泵/洗消/自检/急停等)。 class MockVehicle : public QObject { Q_OBJECT public: explicit MockVehicle(QObject* parent = nullptr); bool enabled() const { return m_enabled; } private slots: void onReadyRead(); void onSendTick(); void onSelfCheckTick(); private: void sendJson(const QJsonObject& obj); void sendTelemetry(); void sendHeartbeat(); void handleCommand(const QJsonObject& o); QUdpSocket* m_socket = nullptr; QTimer* m_sendTimer = nullptr; QTimer* m_selfCheckTimer = nullptr; int m_localPort = 9000; // 遥控端收包端口(本端发送目标) int m_remotePort = 9001; // 本端绑定端口(遥控端发包目标) bool m_enabled = true; bool m_plantSelfCheckFault = false; // 模拟车辆状态 bool m_estop = false; bool m_gasRunning = false; bool m_washRunning = false; QString m_washMode = "手动消除"; bool m_valve1Open = false; // D1 控制状态(开/关) bool m_valve2Open = false; bool m_pPlunger = false, m_pAir = false, m_pLeaf = false; double m_speed = 3.45; int m_airRpm = 300, m_plungerRpm = 200, m_leafRpm = 200; QVector m_js{30, 20, 0, 90, 45, 0}; bool m_armHomed = true; QString m_armReturn = "idle"; // 自检序列 bool m_selfCheckActive = false; int m_selfCheckIndex = 0; }; #endif // MOCKVEHICLE_H