Files
QT_wuhan_YT/comm/mockvehicle.h
T
2026-09-09 17:00:37 +08:00

59 lines
1.7 KiB
C++

#ifndef MOCKVEHICLE_H
#define MOCKVEHICLE_H
#include <QObject>
#include <QUdpSocket>
#include <QTimer>
#include <QVector>
// ===================== 内置模拟车载端(离线演示) =====================
// 以独立 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<double> 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