#ifndef PHASEDEVICE_H #define PHASEDEVICE_H #include <QObject> #include <QVector> #include <QMutex> #include "common/utils/QSerialPortUtil.h" #include "common/utils/QLogUtil.h" #include "common/utils/SettingConfig.h" #include "common/utils/QKafkaUtil.h" #include "protocol/PhaseProtocolBM.h" class PhaseDevice : public QObject { Q_OBJECT public: explicit PhaseDevice(QObject *parent = nullptr); ~PhaseDevice(); void initSerialPort(); void startWork(); void stopWork(); void afterFramePhase(PhaseDataDto * phaseData); void setComName(QString comName); void setBaudRate(int baudRate); QString getDevCode(); void setDevCode(QString devCode); QString getDeviceId(); void setDeviceId(QString deviceId); void clearChannelPhaseData(int channelNo); bool isSerialOpen(); private: QString deviceId; QString devCode; QString comName; int baudRate; QSerialPortUtil serialUtil; QKafkaUtil kafkaUtil; QByteArray dataBuff; // 原始数据 - 补偿之前的值 QVector<QVector<double>> phaseVector; // QVector<qulonglong> latestTsVector; // 不同维度的稳定度数据 1s - 10000s QVector<QVector<double>> channelAllen; // 各个通道的allen方差结果 QVector<QStringList> channelAllenResultStr; // 计算allen方差 double calAllan(int index, int d, int aN); signals: void sendDataToDraw(PhaseDataDto * phaseData); void calculateAllen(qlonglong milisecond); void sendAllenToDraw(QString devCode, QVector<QStringList> channelAllenResultStr); public slots: void dataReceivedHandler(QByteArray data); void onCalculateAllen(qlonglong milisecond); }; #endif // PHASEDEVICE_H