258 lines
7.7 KiB
C
Raw Normal View History

2022-07-30 11:50:01 +08:00
#ifndef CHILDFORM_H
#define CHILDFORM_H
#include <QWidget>
#include "BaseWgt.h"
#include <QtCharts>
#include <QChartView>
#include <QVector>
#include <QTableWidgetItem>
#include <QTimerEvent>
#include "ChartView.h"
#include "global.h"
#include <qmath.h>
#include "Calculation.hpp"
#include "qcustomplot.h"
#include "SetScalesform.h"
#include "FilterForm.h"
#include "Mqttclient.h"
#include "PlayWaveSound.h"
enum FormType
{
TimeDomainPlot, //时域图
FrequencyDomainPlot, //频域图
TrendChartPlot, //趋势图
SpecChartPlot, //频谱图
EnvChartPlot, //包络图
WaterFallPlot, //瀑布图
OrbitPlot, //轴心轨迹
PolarPlot, //极坐标
BodePlot, //伯德图
ShaftCenterline, //轴心位置图
2022-11-07 14:02:09 +08:00
AllWavePlot , //全谱图
TimeWavePlot //时域长波形
2022-07-30 11:50:01 +08:00
};
typedef struct {
int key1;
int key2;
float fSpeed;
}RPM;
typedef struct _ChannelData
{
QString ChannelId;
}ChannelData;
class ChartView;
class Chart;
class QAbstractAxis;
class LegendForm;
namespace Ui {
class ChildForm;
}
class ChildForm : public BaseWgt
{
Q_OBJECT
public:
2022-11-07 14:02:09 +08:00
explicit ChildForm(FormType iType,QString m_strName = "",DEVICE_INFO* DeviceInfo = NULL,int iCurCount = 0, QWidget *parent = nullptr);
2022-07-30 11:50:01 +08:00
~ChildForm();
void SetName(QString strName)
{
m_strName = strName;
}
QString GetName()
{
return m_strName;
}
QHBoxLayout *pLayout;
Calculation *pCalculation;
QMetaObject::Connection dismove;
QMetaObject::Connection disDoubleclick;
QMetaObject::Connection disPress;
QMetaObject::Connection dis1;
WAVE_DATA m_waveData;
FormType m_iFormType;
void InitDisPaly();
void InitRpmDisPaly();
void ShowCharts();
void SetFormType(FormType iType) {m_iFormType = iType;}
FormType GetFormType() { return m_iFormType;}
void SetWaveData(QString strID, QVector<WAVE_DATA>& waveData);
void SetDataIDs(const QStringList &strIDList, QString strTitle,const QStringList& strChannleTypeList,\
const QStringList& strChannleNameList);
void handlePlayWave(double position = 0,double size = 131072); //
void AddOrbitSeries(QString strID, const QVector<WAVE_DATA>& wavexData,const QVector<WAVE_DATA>& waveyData,\
const QVector<WAVE_DATA>& waveSpeedData);
void AddBodeSeries(QString strID, const QVector<WAVE_DATA>& wavexData,const QVector<WAVE_DATA>& waveSpeedData);
void AddShaftCenterlineSeries(QString strID, const QVector<WAVE_DATA>& wavexData,const QVector<WAVE_DATA>& waveData);
void AddPolarPlotSeries(QString strID, const QVector<WAVE_DATA>& wavexData,const QVector<WAVE_DATA>& waveSpeedData);
void UpdateEnvSerises(QString Start,QString End);
QPixmap GetSerise(QString& strImagePath);
void AddSeries(QString strID, QVector<WAVE_DATA>& waveData);
QCPGraph* MultiyAxis(QString strID,QString sensorType,QString sensorEngineeringUnit);
void SecondData(const QString& strID,WAVE_DATA& waveData,WAVE_DISPALYDATA& waveShowData);
void CalculateRPM();
void CalculateIntegration(bool isDoubleIntegration = false);
void CalculateDifferentiation(bool isDoubleDifferentiation = false);
void EnableBtn();
void UpdateDiffMenu();
2022-08-05 19:46:35 +08:00
void InitIntegration();
2022-11-07 14:02:09 +08:00
void UpdateTracerLabel();
2022-07-30 11:50:01 +08:00
QVector<WAVE_DATA> childWave;
QVector<WAVE_DATA> OrbitXWave,OrbitYWave;
QVector<KeyPhasor> vecKeyPhasor;
QList<QString> listChannelID;
QCPGraph *mainGraph1,*mainGraph2,*keyPhasor;
QCPCurve *fermatSpiral1;
QCPAxisRect *wideAxisRect1;
QCPAxisRect *wideAxisRect2;
QCPAxisRect *wideAxisRectOrbit;
QMap<QString,QVector<WAVE_DATA>> mapBodeData;
PlayWaveSound *m_pPlaySound;
QThread *m_pThread;
signals:
void ItemCheckStateSignal(QString strID, bool bChecked);
void OutSig();
void ReturnSig();
void PlayWaveSig();
void InitWaveSig();
protected:
public slots:
2022-11-07 14:02:09 +08:00
void ScalesBtnSlot_X();
void ScalesBtnSlot_Y();
void ScalesBtnSlot_XY();
void ScalesBtnSlot_Hand();
2022-07-30 11:50:01 +08:00
void ToRpm();
2022-11-07 14:02:09 +08:00
void Btn_ScalesSlot();
2022-07-30 11:50:01 +08:00
void IntegrationSlot();
void DoubleIntegrationSlot();
void DifferentiationSlot();
void DoubleDifferentiationSlot();
2022-11-07 14:02:09 +08:00
void ZoomBox();
void ZoomX();
void ZoomY();
void ZoomXY();
2022-07-30 11:50:01 +08:00
void Cursor();
void SetScales();
void SetFilter();
void SetDC();
void realTimeData();
void mouseMoveEvent(QMouseEvent *event);
void mouseDoubleClickEvent(QMouseEvent *event);
void mouseWheelEvent(QWheelEvent *event);
void ChannelBtnSlot();
void ItemChangedSlot(QTableWidgetItem *item);
void ItemPressSlot(QTableWidgetItem *item);
void slotSetScales(QString str);
void slotSetFilter(QString str);
void OnPlotClick(QCPAbstractPlottable *plottable, int dataIndex, QMouseEvent *event);
void RealTimeWave(QByteArray payLoad);
void OnPlayWaveSound();
void PlaySoundThread();
private:
bool m_bDC;
bool m_bRpm;
bool m_bIntegration;
bool m_bDifferentiation;
bool m_bDoubleIntegration;
bool m_bDoubleDifferentiation;
bool m_isPause;
bool m_isStop;
std::condition_variable m_cv;
std::mutex mu;
WAVE_CSVDATA m_vecCsvData[32];
2022-11-07 14:02:09 +08:00
QString m_strFilter;
QString m_strSacles;
2022-07-30 11:50:01 +08:00
int m_nStart;
int m_nEnd;
QMenu *remove_menu;
QAction *remove_selected_action;
QAction *remove_all_action;
QAction *Hz;
QAction *Ord;
QAction *Rad;
2022-11-07 14:02:09 +08:00
2022-07-30 11:50:01 +08:00
QCPAxis *yAxis3;
2022-08-05 19:46:35 +08:00
QList<QCPAxis*> Axis;
2022-07-30 11:50:01 +08:00
QCPItemTracer *tracer; //游标
QCPItemTracer *tracer2; //游标
QMap<QString,QCPItemText*> maptracerLabel;
QCPItemText *tracerLabel; //游标标签
QCPItemText *tracerLabel2; //游标标签
QCPItemText *tracerLabel3; //游标标签
QCPItemText *tracerLabel4; //游标标签
QCPItemText *tracerLabel5; //游标标签
QCPItemText *tracerLabel6; //游标标签
QCPItemText *tracerLabel7; //游标标签
QCPItemText *tracerLabel8; //游标标签
QMap<QString,WAVE_DISPALYDATA> mapWaveDisplayData;
QMap<QString,WAVE_DISPALYDATA> mapWaveDisplayData_RPM;
QMap<QString,QVector<WAVE_DATA>> mapWaveData;
QMap<QString,QVector<double>> waveTrendData;
QMap<QString,QVector<QVector<double>>> waveDataDC;
QMap<QString,QCPGraph*> waveGraph;
QMap<QString,QCPAxis*> waveYAxis;
QList<QString> listChannelType;
QMap<QString,QMap<QString,QCPAxis*>> mapMultiGraph; //<通道类型,<通道IDY轴>>
RotatingSpeed _rotatingSpeed;
QVector<double> x,y;
SetScalesForm *pSetScales;
FilterForm *pSetFilter;
MqttClient *mqttclient;
void InitWidget();
void ClearAllSerise();
void ClearTable();
void RemoveSeries(QString strID);
int m_position;
QTableWidgetItem * AddTableWgtItem(QString strText, QString clolor, QString strID);
QMenu *differentiationMenu;
QAction *Integration;
QAction *doubleIntegration;
QAction *differentiation;
QAction *doubleDifferentiation;
private:
Ui::ChildForm *ui;
int line ;
QString m_strName;
ChartView *m_pChartView;
QChart *m_pChart;
QLineSeries *series;
QStringList m_listChannelID;
QMap<QString, QTableWidgetItem *> m_mapChannelIDtoLabel;
bool m_bAttach;
DEVICE_INFO *m_DeviceInfo;
LegendForm *m_pLegendForm;
QTimer *m_pTimer;
int m_iRealTimer; //实时数据定时器ID
QString m_sServer; // 服务器地址
QString m_sEquipNo; // 终端号
//QMqttClient *m_client;
bool m_isconnect; // 是否已连接服务器
bool m_bRealTime;
};
#endif // CHILDFORM_H