diff --git a/ChannelItem.cpp b/ChannelItem.cpp index aa8ae8b..3d26dea 100644 --- a/ChannelItem.cpp +++ b/ChannelItem.cpp @@ -11,6 +11,7 @@ ui->setupUi(this); QFont font("微软雅黑"); font.setPixelSize(16); + ui->delay->setFont(font); this->setProperty("form", "channel"); } @@ -20,6 +21,15 @@ delete ui; } +double ChannelItem::getChannelDelay() +{ + return channelDelay; +} +void ChannelItem::setChannelDelay(double value) +{ + channelDelay = value; + ui->delay->setValue(value); +} void ChannelItem::setIndex(int value) { @@ -29,21 +39,29 @@ void ChannelItem::updatePhaseMeasureData(PhaseDataDto * phaseData) { int size = phaseVector.at(index).size(); - double ps = phaseData->channelData.at(index) * 1e12; // 显示ps数据 -// ui->rawValue->setText(QString::number(ps, 'f', 3) + "ps"); // 原始数据显示单位为ps + double ps = phaseData->channelBeforeDelay.at(index) * 1e12; // 显示ps数据 + ui->rawValue->setText(QString::number(ps, 'f', 3) + "ps"); // 原始数据显示单位为ps + ui->channelValue->setText(QString::number(ps + channelDelay, 'f', 3) + "ps"); // 补偿值的单位也是ps, 补偿后也显示为ps ui->samplingOne->setText(QString::number(size)); ui->samplingTen->setText(QString::number((int)size/10)); ui->samplingHund->setText(QString::number((int)size/100)); ui->samplingThou->setText(QString::number((int)size/1000)); ui->samplingTT->setText(QString::number((int)size/10000)); - ui->stabilityOne->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(0), 'e', 4) : "0.0000"); // 科学计数法显示 - ui->stabilityTen->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(1), 'e', 4) : "0.0000"); - ui->stabilityHund->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(2), 'e', 4) : "0.0000"); - ui->stabilityThou->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(3), 'e', 4) : "0.0000"); - ui->stabilityTT->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(4), 'e', 4) : "0.0000"); + ui->stabilityOne->setText(QString::number(channelAllan.at(index).at(0), 'e', 4)); // 科学计数法显示 + ui->stabilityTen->setText(QString::number(channelAllan.at(index).at(1), 'e', 4)); + ui->stabilityHund->setText(QString::number(channelAllan.at(index).at(2), 'e', 4)); + ui->stabilityThou->setText(QString::number(channelAllan.at(index).at(3), 'e', 4)); + ui->stabilityTT->setText(QString::number(channelAllan.at(index).at(4), 'e', 4)); } +void ChannelItem::on_delay_valueChanged(int value) +{ + channelDelay = value; + SettingConfig::getInstance().DELAY_ARR.replace(index, QString("%1").arg(value)); + QString str = SettingConfig::getInstance().DELAY_ARR.join(","); + SettingConfig::getInstance().setConProperty("delay", "delayArr", str); +} void ChannelItem::on_clearDataButt_clicked() { diff --git a/ChannelItem.cpp b/ChannelItem.cpp index aa8ae8b..3d26dea 100644 --- a/ChannelItem.cpp +++ b/ChannelItem.cpp @@ -11,6 +11,7 @@ ui->setupUi(this); QFont font("微软雅黑"); font.setPixelSize(16); + ui->delay->setFont(font); this->setProperty("form", "channel"); } @@ -20,6 +21,15 @@ delete ui; } +double ChannelItem::getChannelDelay() +{ + return channelDelay; +} +void ChannelItem::setChannelDelay(double value) +{ + channelDelay = value; + ui->delay->setValue(value); +} void ChannelItem::setIndex(int value) { @@ -29,21 +39,29 @@ void ChannelItem::updatePhaseMeasureData(PhaseDataDto * phaseData) { int size = phaseVector.at(index).size(); - double ps = phaseData->channelData.at(index) * 1e12; // 显示ps数据 -// ui->rawValue->setText(QString::number(ps, 'f', 3) + "ps"); // 原始数据显示单位为ps + double ps = phaseData->channelBeforeDelay.at(index) * 1e12; // 显示ps数据 + ui->rawValue->setText(QString::number(ps, 'f', 3) + "ps"); // 原始数据显示单位为ps + ui->channelValue->setText(QString::number(ps + channelDelay, 'f', 3) + "ps"); // 补偿值的单位也是ps, 补偿后也显示为ps ui->samplingOne->setText(QString::number(size)); ui->samplingTen->setText(QString::number((int)size/10)); ui->samplingHund->setText(QString::number((int)size/100)); ui->samplingThou->setText(QString::number((int)size/1000)); ui->samplingTT->setText(QString::number((int)size/10000)); - ui->stabilityOne->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(0), 'e', 4) : "0.0000"); // 科学计数法显示 - ui->stabilityTen->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(1), 'e', 4) : "0.0000"); - ui->stabilityHund->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(2), 'e', 4) : "0.0000"); - ui->stabilityThou->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(3), 'e', 4) : "0.0000"); - ui->stabilityTT->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(4), 'e', 4) : "0.0000"); + ui->stabilityOne->setText(QString::number(channelAllan.at(index).at(0), 'e', 4)); // 科学计数法显示 + ui->stabilityTen->setText(QString::number(channelAllan.at(index).at(1), 'e', 4)); + ui->stabilityHund->setText(QString::number(channelAllan.at(index).at(2), 'e', 4)); + ui->stabilityThou->setText(QString::number(channelAllan.at(index).at(3), 'e', 4)); + ui->stabilityTT->setText(QString::number(channelAllan.at(index).at(4), 'e', 4)); } +void ChannelItem::on_delay_valueChanged(int value) +{ + channelDelay = value; + SettingConfig::getInstance().DELAY_ARR.replace(index, QString("%1").arg(value)); + QString str = SettingConfig::getInstance().DELAY_ARR.join(","); + SettingConfig::getInstance().setConProperty("delay", "delayArr", str); +} void ChannelItem::on_clearDataButt_clicked() { diff --git a/ChannelItem.h b/ChannelItem.h index 5366f53..592dc97 100644 --- a/ChannelItem.h +++ b/ChannelItem.h @@ -22,16 +22,20 @@ explicit ChannelItem(QWidget *parent = nullptr); ~ChannelItem(); + double getChannelDelay(); void setIndex(int value); void updatePhaseMeasureData(PhaseDataDto * phaseData); + void setChannelDelay(double value); private slots: + void on_delay_valueChanged(int value); void on_clearDataButt_clicked(); void on_chartViewButt_clicked(); private: Ui::ChannelItem *ui; int index; + double channelDelay = 0.0; }; #endif // CHANNELITEM_H diff --git a/ChannelItem.cpp b/ChannelItem.cpp index aa8ae8b..3d26dea 100644 --- a/ChannelItem.cpp +++ b/ChannelItem.cpp @@ -11,6 +11,7 @@ ui->setupUi(this); QFont font("微软雅黑"); font.setPixelSize(16); + ui->delay->setFont(font); this->setProperty("form", "channel"); } @@ -20,6 +21,15 @@ delete ui; } +double ChannelItem::getChannelDelay() +{ + return channelDelay; +} +void ChannelItem::setChannelDelay(double value) +{ + channelDelay = value; + ui->delay->setValue(value); +} void ChannelItem::setIndex(int value) { @@ -29,21 +39,29 @@ void ChannelItem::updatePhaseMeasureData(PhaseDataDto * phaseData) { int size = phaseVector.at(index).size(); - double ps = phaseData->channelData.at(index) * 1e12; // 显示ps数据 -// ui->rawValue->setText(QString::number(ps, 'f', 3) + "ps"); // 原始数据显示单位为ps + double ps = phaseData->channelBeforeDelay.at(index) * 1e12; // 显示ps数据 + ui->rawValue->setText(QString::number(ps, 'f', 3) + "ps"); // 原始数据显示单位为ps + ui->channelValue->setText(QString::number(ps + channelDelay, 'f', 3) + "ps"); // 补偿值的单位也是ps, 补偿后也显示为ps ui->samplingOne->setText(QString::number(size)); ui->samplingTen->setText(QString::number((int)size/10)); ui->samplingHund->setText(QString::number((int)size/100)); ui->samplingThou->setText(QString::number((int)size/1000)); ui->samplingTT->setText(QString::number((int)size/10000)); - ui->stabilityOne->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(0), 'e', 4) : "0.0000"); // 科学计数法显示 - ui->stabilityTen->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(1), 'e', 4) : "0.0000"); - ui->stabilityHund->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(2), 'e', 4) : "0.0000"); - ui->stabilityThou->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(3), 'e', 4) : "0.0000"); - ui->stabilityTT->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(4), 'e', 4) : "0.0000"); + ui->stabilityOne->setText(QString::number(channelAllan.at(index).at(0), 'e', 4)); // 科学计数法显示 + ui->stabilityTen->setText(QString::number(channelAllan.at(index).at(1), 'e', 4)); + ui->stabilityHund->setText(QString::number(channelAllan.at(index).at(2), 'e', 4)); + ui->stabilityThou->setText(QString::number(channelAllan.at(index).at(3), 'e', 4)); + ui->stabilityTT->setText(QString::number(channelAllan.at(index).at(4), 'e', 4)); } +void ChannelItem::on_delay_valueChanged(int value) +{ + channelDelay = value; + SettingConfig::getInstance().DELAY_ARR.replace(index, QString("%1").arg(value)); + QString str = SettingConfig::getInstance().DELAY_ARR.join(","); + SettingConfig::getInstance().setConProperty("delay", "delayArr", str); +} void ChannelItem::on_clearDataButt_clicked() { diff --git a/ChannelItem.h b/ChannelItem.h index 5366f53..592dc97 100644 --- a/ChannelItem.h +++ b/ChannelItem.h @@ -22,16 +22,20 @@ explicit ChannelItem(QWidget *parent = nullptr); ~ChannelItem(); + double getChannelDelay(); void setIndex(int value); void updatePhaseMeasureData(PhaseDataDto * phaseData); + void setChannelDelay(double value); private slots: + void on_delay_valueChanged(int value); void on_clearDataButt_clicked(); void on_chartViewButt_clicked(); private: Ui::ChannelItem *ui; int index; + double channelDelay = 0.0; }; #endif // CHANNELITEM_H diff --git a/ChannelItem.ui b/ChannelItem.ui index 2818586..3547b99 100644 --- a/ChannelItem.ui +++ b/ChannelItem.ui @@ -7,13 +7,13 @@ 0 0 1300 - 125 + 160 0 - 125 + 160 @@ -22,9 +22,9 @@ - 30 + 430 0 - 80 + 81 20 @@ -60,9 +60,9 @@ - 30 + 430 50 - 1050 + 681 35 @@ -137,12 +137,12 @@ - 100 + 1000 - + 微软雅黑 @@ -158,7 +158,7 @@ - + 微软雅黑 @@ -173,75 +173,14 @@ - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 80 - 20 - - - - - - - - - 微软雅黑 - 12 - - - - 10000 - - - - - - - - 微软雅黑 - 12 - - - - 0 - - - Qt::AlignCenter - - - - - - - - 微软雅黑 - 12 - - - - 0.00 - - - Qt::AlignCenter - - - - 30 + 430 85 - 1050 + 681 35 @@ -316,12 +255,12 @@ - 1000 + 10000 - + 微软雅黑 @@ -337,7 +276,64 @@ - + + + + 微软雅黑 + 12 + + + + 0 + + + Qt::AlignCenter + + + + + + + + + 430 + 120 + 681 + 35 + + + + + + + + 微软雅黑 + 12 + + + + 100 + + + + + + + + 微软雅黑 + 12 + + + + 0.00 + + + Qt::AlignCenter + + + + + 微软雅黑 @@ -369,19 +365,6 @@ - - - - 微软雅黑 - 12 - - - - - - - - @@ -395,7 +378,7 @@ - + 微软雅黑 @@ -405,6 +388,25 @@ + + Qt::AlignCenter + + + + + + + + 微软雅黑 + 12 + + + + + + + Qt::AlignCenter + @@ -471,12 +473,146 @@ + + + + 60 + 10 + 101 + 160 + + + + + + + + 微软雅黑 + 12 + + + + 测量数据: + + + + + + + + 微软雅黑 + 12 + + + + 时延补偿: + + + + + + + + 微软雅黑 + 12 + + + + 补偿后值: + + + + + + + + 微软雅黑 + 12 + + + + 准确度: + + + + + + + + + 190 + 10 + 200 + 160 + + + + + + + + 微软雅黑 + 12 + + + + 0 ps + + + + + + + + 微软雅黑 + 12 + + + + ps + + + -9999 + + + 99999 + + + + + + + + 微软雅黑 + 12 + + + + 0 ps + + + + + + + + 微软雅黑 + 12 + + + + 0.00 + + + + + - 30 + 430 20 - 1050 + 681 41 @@ -587,67 +723,6 @@ - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 80 - 20 - - - - - - - - - 微软雅黑 - 12 - - - - Tau(s) - - - - - - - - 微软雅黑 - 12 - - - - Allen方差 - - - Qt::AlignCenter - - - - - - - - 微软雅黑 - 12 - - - - 采样数 - - - Qt::AlignCenter - - - diff --git a/ChannelItem.cpp b/ChannelItem.cpp index aa8ae8b..3d26dea 100644 --- a/ChannelItem.cpp +++ b/ChannelItem.cpp @@ -11,6 +11,7 @@ ui->setupUi(this); QFont font("微软雅黑"); font.setPixelSize(16); + ui->delay->setFont(font); this->setProperty("form", "channel"); } @@ -20,6 +21,15 @@ delete ui; } +double ChannelItem::getChannelDelay() +{ + return channelDelay; +} +void ChannelItem::setChannelDelay(double value) +{ + channelDelay = value; + ui->delay->setValue(value); +} void ChannelItem::setIndex(int value) { @@ -29,21 +39,29 @@ void ChannelItem::updatePhaseMeasureData(PhaseDataDto * phaseData) { int size = phaseVector.at(index).size(); - double ps = phaseData->channelData.at(index) * 1e12; // 显示ps数据 -// ui->rawValue->setText(QString::number(ps, 'f', 3) + "ps"); // 原始数据显示单位为ps + double ps = phaseData->channelBeforeDelay.at(index) * 1e12; // 显示ps数据 + ui->rawValue->setText(QString::number(ps, 'f', 3) + "ps"); // 原始数据显示单位为ps + ui->channelValue->setText(QString::number(ps + channelDelay, 'f', 3) + "ps"); // 补偿值的单位也是ps, 补偿后也显示为ps ui->samplingOne->setText(QString::number(size)); ui->samplingTen->setText(QString::number((int)size/10)); ui->samplingHund->setText(QString::number((int)size/100)); ui->samplingThou->setText(QString::number((int)size/1000)); ui->samplingTT->setText(QString::number((int)size/10000)); - ui->stabilityOne->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(0), 'e', 4) : "0.0000"); // 科学计数法显示 - ui->stabilityTen->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(1), 'e', 4) : "0.0000"); - ui->stabilityHund->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(2), 'e', 4) : "0.0000"); - ui->stabilityThou->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(3), 'e', 4) : "0.0000"); - ui->stabilityTT->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(4), 'e', 4) : "0.0000"); + ui->stabilityOne->setText(QString::number(channelAllan.at(index).at(0), 'e', 4)); // 科学计数法显示 + ui->stabilityTen->setText(QString::number(channelAllan.at(index).at(1), 'e', 4)); + ui->stabilityHund->setText(QString::number(channelAllan.at(index).at(2), 'e', 4)); + ui->stabilityThou->setText(QString::number(channelAllan.at(index).at(3), 'e', 4)); + ui->stabilityTT->setText(QString::number(channelAllan.at(index).at(4), 'e', 4)); } +void ChannelItem::on_delay_valueChanged(int value) +{ + channelDelay = value; + SettingConfig::getInstance().DELAY_ARR.replace(index, QString("%1").arg(value)); + QString str = SettingConfig::getInstance().DELAY_ARR.join(","); + SettingConfig::getInstance().setConProperty("delay", "delayArr", str); +} void ChannelItem::on_clearDataButt_clicked() { diff --git a/ChannelItem.h b/ChannelItem.h index 5366f53..592dc97 100644 --- a/ChannelItem.h +++ b/ChannelItem.h @@ -22,16 +22,20 @@ explicit ChannelItem(QWidget *parent = nullptr); ~ChannelItem(); + double getChannelDelay(); void setIndex(int value); void updatePhaseMeasureData(PhaseDataDto * phaseData); + void setChannelDelay(double value); private slots: + void on_delay_valueChanged(int value); void on_clearDataButt_clicked(); void on_chartViewButt_clicked(); private: Ui::ChannelItem *ui; int index; + double channelDelay = 0.0; }; #endif // CHANNELITEM_H diff --git a/ChannelItem.ui b/ChannelItem.ui index 2818586..3547b99 100644 --- a/ChannelItem.ui +++ b/ChannelItem.ui @@ -7,13 +7,13 @@ 0 0 1300 - 125 + 160 0 - 125 + 160 @@ -22,9 +22,9 @@ - 30 + 430 0 - 80 + 81 20 @@ -60,9 +60,9 @@ - 30 + 430 50 - 1050 + 681 35 @@ -137,12 +137,12 @@ - 100 + 1000 - + 微软雅黑 @@ -158,7 +158,7 @@ - + 微软雅黑 @@ -173,75 +173,14 @@ - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 80 - 20 - - - - - - - - - 微软雅黑 - 12 - - - - 10000 - - - - - - - - 微软雅黑 - 12 - - - - 0 - - - Qt::AlignCenter - - - - - - - - 微软雅黑 - 12 - - - - 0.00 - - - Qt::AlignCenter - - - - 30 + 430 85 - 1050 + 681 35 @@ -316,12 +255,12 @@ - 1000 + 10000 - + 微软雅黑 @@ -337,7 +276,64 @@ - + + + + 微软雅黑 + 12 + + + + 0 + + + Qt::AlignCenter + + + + + + + + + 430 + 120 + 681 + 35 + + + + + + + + 微软雅黑 + 12 + + + + 100 + + + + + + + + 微软雅黑 + 12 + + + + 0.00 + + + Qt::AlignCenter + + + + + 微软雅黑 @@ -369,19 +365,6 @@ - - - - 微软雅黑 - 12 - - - - - - - - @@ -395,7 +378,7 @@ - + 微软雅黑 @@ -405,6 +388,25 @@ + + Qt::AlignCenter + + + + + + + + 微软雅黑 + 12 + + + + + + + Qt::AlignCenter + @@ -471,12 +473,146 @@ + + + + 60 + 10 + 101 + 160 + + + + + + + + 微软雅黑 + 12 + + + + 测量数据: + + + + + + + + 微软雅黑 + 12 + + + + 时延补偿: + + + + + + + + 微软雅黑 + 12 + + + + 补偿后值: + + + + + + + + 微软雅黑 + 12 + + + + 准确度: + + + + + + + + + 190 + 10 + 200 + 160 + + + + + + + + 微软雅黑 + 12 + + + + 0 ps + + + + + + + + 微软雅黑 + 12 + + + + ps + + + -9999 + + + 99999 + + + + + + + + 微软雅黑 + 12 + + + + 0 ps + + + + + + + + 微软雅黑 + 12 + + + + 0.00 + + + + + - 30 + 430 20 - 1050 + 681 41 @@ -587,67 +723,6 @@ - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 80 - 20 - - - - - - - - - 微软雅黑 - 12 - - - - Tau(s) - - - - - - - - 微软雅黑 - 12 - - - - Allen方差 - - - Qt::AlignCenter - - - - - - - - 微软雅黑 - 12 - - - - 采样数 - - - Qt::AlignCenter - - - diff --git a/PhaseDevice.cpp b/PhaseDevice.cpp index f8cda87..1bc0192 100644 --- a/PhaseDevice.cpp +++ b/PhaseDevice.cpp @@ -39,18 +39,26 @@ case 0: serialUtil = new QSerialPortUtil(this); - connect(serialUtil, &QSerialPortUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + QObject::connect(serialUtil, &QSerialPortUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); serialUtil->openSerialPort(SettingConfig::getInstance().PORT_NAME, SettingConfig::getInstance().BAUD_RATE); serialUtil->sendData(startCmd.toLocal8Bit()); return serialUtil->isOpen(); case 1: clientUtil = new UDPClientUtil(this); - connect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + QObject::connect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); clientUtil->sendData(startCmd.toLocal8Bit()); break; - default: - break; + + case 2: + clientUtil = new UDPClientUtil(this); + connect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + int len = clientUtil->sendData(startCmd.toLocal8Bit()); + if (len > 0) { + return true; + } else { + return false; + } } return false; @@ -69,6 +77,12 @@ clientUtil->sendData(stopCmd.toLocal8Bit()); disconnect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); break; + + case 2: + clientUtil->sendData(stopCmd.toLocal8Bit()); + disconnect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + break; + default: break; } @@ -93,8 +107,9 @@ { // 过滤前面几帧数据 frameCount++; - if (frameCount <= SettingConfig::getInstance().SKIP_HEADER) + if (frameCount < SettingConfig::getInstance().SKIP_HEADER) { + this->dataBuff.clear(); return ; } @@ -138,7 +153,7 @@ { // 3.1 计算补偿的值 phaseData->channelData[i] = phaseData->channelData.at(i); -// phaseData->channelDataStr[i] = QString::number(phaseData->channelData.at(i), 'f', 15); + phaseData->channelDataStr[i] = QString::number(phaseData->channelData.at(i), 'f', 15); // 3.2 将通道数据写日志 QString chFilename = QString("CH_%1.log").arg(i + 1, 2, 10, QLatin1Char('0')); diff --git a/ChannelItem.cpp b/ChannelItem.cpp index aa8ae8b..3d26dea 100644 --- a/ChannelItem.cpp +++ b/ChannelItem.cpp @@ -11,6 +11,7 @@ ui->setupUi(this); QFont font("微软雅黑"); font.setPixelSize(16); + ui->delay->setFont(font); this->setProperty("form", "channel"); } @@ -20,6 +21,15 @@ delete ui; } +double ChannelItem::getChannelDelay() +{ + return channelDelay; +} +void ChannelItem::setChannelDelay(double value) +{ + channelDelay = value; + ui->delay->setValue(value); +} void ChannelItem::setIndex(int value) { @@ -29,21 +39,29 @@ void ChannelItem::updatePhaseMeasureData(PhaseDataDto * phaseData) { int size = phaseVector.at(index).size(); - double ps = phaseData->channelData.at(index) * 1e12; // 显示ps数据 -// ui->rawValue->setText(QString::number(ps, 'f', 3) + "ps"); // 原始数据显示单位为ps + double ps = phaseData->channelBeforeDelay.at(index) * 1e12; // 显示ps数据 + ui->rawValue->setText(QString::number(ps, 'f', 3) + "ps"); // 原始数据显示单位为ps + ui->channelValue->setText(QString::number(ps + channelDelay, 'f', 3) + "ps"); // 补偿值的单位也是ps, 补偿后也显示为ps ui->samplingOne->setText(QString::number(size)); ui->samplingTen->setText(QString::number((int)size/10)); ui->samplingHund->setText(QString::number((int)size/100)); ui->samplingThou->setText(QString::number((int)size/1000)); ui->samplingTT->setText(QString::number((int)size/10000)); - ui->stabilityOne->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(0), 'e', 4) : "0.0000"); // 科学计数法显示 - ui->stabilityTen->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(1), 'e', 4) : "0.0000"); - ui->stabilityHund->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(2), 'e', 4) : "0.0000"); - ui->stabilityThou->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(3), 'e', 4) : "0.0000"); - ui->stabilityTT->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(4), 'e', 4) : "0.0000"); + ui->stabilityOne->setText(QString::number(channelAllan.at(index).at(0), 'e', 4)); // 科学计数法显示 + ui->stabilityTen->setText(QString::number(channelAllan.at(index).at(1), 'e', 4)); + ui->stabilityHund->setText(QString::number(channelAllan.at(index).at(2), 'e', 4)); + ui->stabilityThou->setText(QString::number(channelAllan.at(index).at(3), 'e', 4)); + ui->stabilityTT->setText(QString::number(channelAllan.at(index).at(4), 'e', 4)); } +void ChannelItem::on_delay_valueChanged(int value) +{ + channelDelay = value; + SettingConfig::getInstance().DELAY_ARR.replace(index, QString("%1").arg(value)); + QString str = SettingConfig::getInstance().DELAY_ARR.join(","); + SettingConfig::getInstance().setConProperty("delay", "delayArr", str); +} void ChannelItem::on_clearDataButt_clicked() { diff --git a/ChannelItem.h b/ChannelItem.h index 5366f53..592dc97 100644 --- a/ChannelItem.h +++ b/ChannelItem.h @@ -22,16 +22,20 @@ explicit ChannelItem(QWidget *parent = nullptr); ~ChannelItem(); + double getChannelDelay(); void setIndex(int value); void updatePhaseMeasureData(PhaseDataDto * phaseData); + void setChannelDelay(double value); private slots: + void on_delay_valueChanged(int value); void on_clearDataButt_clicked(); void on_chartViewButt_clicked(); private: Ui::ChannelItem *ui; int index; + double channelDelay = 0.0; }; #endif // CHANNELITEM_H diff --git a/ChannelItem.ui b/ChannelItem.ui index 2818586..3547b99 100644 --- a/ChannelItem.ui +++ b/ChannelItem.ui @@ -7,13 +7,13 @@ 0 0 1300 - 125 + 160 0 - 125 + 160 @@ -22,9 +22,9 @@ - 30 + 430 0 - 80 + 81 20 @@ -60,9 +60,9 @@ - 30 + 430 50 - 1050 + 681 35 @@ -137,12 +137,12 @@ - 100 + 1000 - + 微软雅黑 @@ -158,7 +158,7 @@ - + 微软雅黑 @@ -173,75 +173,14 @@ - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 80 - 20 - - - - - - - - - 微软雅黑 - 12 - - - - 10000 - - - - - - - - 微软雅黑 - 12 - - - - 0 - - - Qt::AlignCenter - - - - - - - - 微软雅黑 - 12 - - - - 0.00 - - - Qt::AlignCenter - - - - 30 + 430 85 - 1050 + 681 35 @@ -316,12 +255,12 @@ - 1000 + 10000 - + 微软雅黑 @@ -337,7 +276,64 @@ - + + + + 微软雅黑 + 12 + + + + 0 + + + Qt::AlignCenter + + + + + + + + + 430 + 120 + 681 + 35 + + + + + + + + 微软雅黑 + 12 + + + + 100 + + + + + + + + 微软雅黑 + 12 + + + + 0.00 + + + Qt::AlignCenter + + + + + 微软雅黑 @@ -369,19 +365,6 @@ - - - - 微软雅黑 - 12 - - - - - - - - @@ -395,7 +378,7 @@ - + 微软雅黑 @@ -405,6 +388,25 @@ + + Qt::AlignCenter + + + + + + + + 微软雅黑 + 12 + + + + + + + Qt::AlignCenter + @@ -471,12 +473,146 @@ + + + + 60 + 10 + 101 + 160 + + + + + + + + 微软雅黑 + 12 + + + + 测量数据: + + + + + + + + 微软雅黑 + 12 + + + + 时延补偿: + + + + + + + + 微软雅黑 + 12 + + + + 补偿后值: + + + + + + + + 微软雅黑 + 12 + + + + 准确度: + + + + + + + + + 190 + 10 + 200 + 160 + + + + + + + + 微软雅黑 + 12 + + + + 0 ps + + + + + + + + 微软雅黑 + 12 + + + + ps + + + -9999 + + + 99999 + + + + + + + + 微软雅黑 + 12 + + + + 0 ps + + + + + + + + 微软雅黑 + 12 + + + + 0.00 + + + + + - 30 + 430 20 - 1050 + 681 41 @@ -587,67 +723,6 @@ - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 80 - 20 - - - - - - - - - 微软雅黑 - 12 - - - - Tau(s) - - - - - - - - 微软雅黑 - 12 - - - - Allen方差 - - - Qt::AlignCenter - - - - - - - - 微软雅黑 - 12 - - - - 采样数 - - - Qt::AlignCenter - - - diff --git a/PhaseDevice.cpp b/PhaseDevice.cpp index f8cda87..1bc0192 100644 --- a/PhaseDevice.cpp +++ b/PhaseDevice.cpp @@ -39,18 +39,26 @@ case 0: serialUtil = new QSerialPortUtil(this); - connect(serialUtil, &QSerialPortUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + QObject::connect(serialUtil, &QSerialPortUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); serialUtil->openSerialPort(SettingConfig::getInstance().PORT_NAME, SettingConfig::getInstance().BAUD_RATE); serialUtil->sendData(startCmd.toLocal8Bit()); return serialUtil->isOpen(); case 1: clientUtil = new UDPClientUtil(this); - connect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + QObject::connect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); clientUtil->sendData(startCmd.toLocal8Bit()); break; - default: - break; + + case 2: + clientUtil = new UDPClientUtil(this); + connect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + int len = clientUtil->sendData(startCmd.toLocal8Bit()); + if (len > 0) { + return true; + } else { + return false; + } } return false; @@ -69,6 +77,12 @@ clientUtil->sendData(stopCmd.toLocal8Bit()); disconnect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); break; + + case 2: + clientUtil->sendData(stopCmd.toLocal8Bit()); + disconnect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + break; + default: break; } @@ -93,8 +107,9 @@ { // 过滤前面几帧数据 frameCount++; - if (frameCount <= SettingConfig::getInstance().SKIP_HEADER) + if (frameCount < SettingConfig::getInstance().SKIP_HEADER) { + this->dataBuff.clear(); return ; } @@ -138,7 +153,7 @@ { // 3.1 计算补偿的值 phaseData->channelData[i] = phaseData->channelData.at(i); -// phaseData->channelDataStr[i] = QString::number(phaseData->channelData.at(i), 'f', 15); + phaseData->channelDataStr[i] = QString::number(phaseData->channelData.at(i), 'f', 15); // 3.2 将通道数据写日志 QString chFilename = QString("CH_%1.log").arg(i + 1, 2, 10, QLatin1Char('0')); diff --git a/PhaseWindow.cpp b/PhaseWindow.cpp index 0c9134a..c7786a4 100644 --- a/PhaseWindow.cpp +++ b/PhaseWindow.cpp @@ -75,9 +75,8 @@ qint16 screenHeight = screenRect.height(); // 设置窗口位置和大小 - move(screenWidth / 2 - 688, 50); -// resize(screenWidth, screenHeight); - resize(1366, screenHeight - 100); + move(screenWidth / 2 - 688, 0); + resize(1366, 768); // 设置最小和关闭按钮的样式 IconHelper::Instance()->setIcon(ui->btnMenuMin, QChar(0xf068)); @@ -185,6 +184,7 @@ ChannelItem * channelItem = new ChannelItem(); channelItem->setGeometry(10, 0, screenRect.width() - 60, 160); channelItem->setIndex(i); + channelItem->setChannelDelay(SettingConfig::getInstance().DELAY_ARR.at(i).toInt()); this->channelItemList.append(channelItem); vbox->addWidget(channelItem); group->setLayout(vbox); diff --git a/ChannelItem.cpp b/ChannelItem.cpp index aa8ae8b..3d26dea 100644 --- a/ChannelItem.cpp +++ b/ChannelItem.cpp @@ -11,6 +11,7 @@ ui->setupUi(this); QFont font("微软雅黑"); font.setPixelSize(16); + ui->delay->setFont(font); this->setProperty("form", "channel"); } @@ -20,6 +21,15 @@ delete ui; } +double ChannelItem::getChannelDelay() +{ + return channelDelay; +} +void ChannelItem::setChannelDelay(double value) +{ + channelDelay = value; + ui->delay->setValue(value); +} void ChannelItem::setIndex(int value) { @@ -29,21 +39,29 @@ void ChannelItem::updatePhaseMeasureData(PhaseDataDto * phaseData) { int size = phaseVector.at(index).size(); - double ps = phaseData->channelData.at(index) * 1e12; // 显示ps数据 -// ui->rawValue->setText(QString::number(ps, 'f', 3) + "ps"); // 原始数据显示单位为ps + double ps = phaseData->channelBeforeDelay.at(index) * 1e12; // 显示ps数据 + ui->rawValue->setText(QString::number(ps, 'f', 3) + "ps"); // 原始数据显示单位为ps + ui->channelValue->setText(QString::number(ps + channelDelay, 'f', 3) + "ps"); // 补偿值的单位也是ps, 补偿后也显示为ps ui->samplingOne->setText(QString::number(size)); ui->samplingTen->setText(QString::number((int)size/10)); ui->samplingHund->setText(QString::number((int)size/100)); ui->samplingThou->setText(QString::number((int)size/1000)); ui->samplingTT->setText(QString::number((int)size/10000)); - ui->stabilityOne->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(0), 'e', 4) : "0.0000"); // 科学计数法显示 - ui->stabilityTen->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(1), 'e', 4) : "0.0000"); - ui->stabilityHund->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(2), 'e', 4) : "0.0000"); - ui->stabilityThou->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(3), 'e', 4) : "0.0000"); - ui->stabilityTT->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(4), 'e', 4) : "0.0000"); + ui->stabilityOne->setText(QString::number(channelAllan.at(index).at(0), 'e', 4)); // 科学计数法显示 + ui->stabilityTen->setText(QString::number(channelAllan.at(index).at(1), 'e', 4)); + ui->stabilityHund->setText(QString::number(channelAllan.at(index).at(2), 'e', 4)); + ui->stabilityThou->setText(QString::number(channelAllan.at(index).at(3), 'e', 4)); + ui->stabilityTT->setText(QString::number(channelAllan.at(index).at(4), 'e', 4)); } +void ChannelItem::on_delay_valueChanged(int value) +{ + channelDelay = value; + SettingConfig::getInstance().DELAY_ARR.replace(index, QString("%1").arg(value)); + QString str = SettingConfig::getInstance().DELAY_ARR.join(","); + SettingConfig::getInstance().setConProperty("delay", "delayArr", str); +} void ChannelItem::on_clearDataButt_clicked() { diff --git a/ChannelItem.h b/ChannelItem.h index 5366f53..592dc97 100644 --- a/ChannelItem.h +++ b/ChannelItem.h @@ -22,16 +22,20 @@ explicit ChannelItem(QWidget *parent = nullptr); ~ChannelItem(); + double getChannelDelay(); void setIndex(int value); void updatePhaseMeasureData(PhaseDataDto * phaseData); + void setChannelDelay(double value); private slots: + void on_delay_valueChanged(int value); void on_clearDataButt_clicked(); void on_chartViewButt_clicked(); private: Ui::ChannelItem *ui; int index; + double channelDelay = 0.0; }; #endif // CHANNELITEM_H diff --git a/ChannelItem.ui b/ChannelItem.ui index 2818586..3547b99 100644 --- a/ChannelItem.ui +++ b/ChannelItem.ui @@ -7,13 +7,13 @@ 0 0 1300 - 125 + 160 0 - 125 + 160 @@ -22,9 +22,9 @@ - 30 + 430 0 - 80 + 81 20 @@ -60,9 +60,9 @@ - 30 + 430 50 - 1050 + 681 35 @@ -137,12 +137,12 @@ - 100 + 1000 - + 微软雅黑 @@ -158,7 +158,7 @@ - + 微软雅黑 @@ -173,75 +173,14 @@ - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 80 - 20 - - - - - - - - - 微软雅黑 - 12 - - - - 10000 - - - - - - - - 微软雅黑 - 12 - - - - 0 - - - Qt::AlignCenter - - - - - - - - 微软雅黑 - 12 - - - - 0.00 - - - Qt::AlignCenter - - - - 30 + 430 85 - 1050 + 681 35 @@ -316,12 +255,12 @@ - 1000 + 10000 - + 微软雅黑 @@ -337,7 +276,64 @@ - + + + + 微软雅黑 + 12 + + + + 0 + + + Qt::AlignCenter + + + + + + + + + 430 + 120 + 681 + 35 + + + + + + + + 微软雅黑 + 12 + + + + 100 + + + + + + + + 微软雅黑 + 12 + + + + 0.00 + + + Qt::AlignCenter + + + + + 微软雅黑 @@ -369,19 +365,6 @@ - - - - 微软雅黑 - 12 - - - - - - - - @@ -395,7 +378,7 @@ - + 微软雅黑 @@ -405,6 +388,25 @@ + + Qt::AlignCenter + + + + + + + + 微软雅黑 + 12 + + + + + + + Qt::AlignCenter + @@ -471,12 +473,146 @@ + + + + 60 + 10 + 101 + 160 + + + + + + + + 微软雅黑 + 12 + + + + 测量数据: + + + + + + + + 微软雅黑 + 12 + + + + 时延补偿: + + + + + + + + 微软雅黑 + 12 + + + + 补偿后值: + + + + + + + + 微软雅黑 + 12 + + + + 准确度: + + + + + + + + + 190 + 10 + 200 + 160 + + + + + + + + 微软雅黑 + 12 + + + + 0 ps + + + + + + + + 微软雅黑 + 12 + + + + ps + + + -9999 + + + 99999 + + + + + + + + 微软雅黑 + 12 + + + + 0 ps + + + + + + + + 微软雅黑 + 12 + + + + 0.00 + + + + + - 30 + 430 20 - 1050 + 681 41 @@ -587,67 +723,6 @@ - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 80 - 20 - - - - - - - - - 微软雅黑 - 12 - - - - Tau(s) - - - - - - - - 微软雅黑 - 12 - - - - Allen方差 - - - Qt::AlignCenter - - - - - - - - 微软雅黑 - 12 - - - - 采样数 - - - Qt::AlignCenter - - - diff --git a/PhaseDevice.cpp b/PhaseDevice.cpp index f8cda87..1bc0192 100644 --- a/PhaseDevice.cpp +++ b/PhaseDevice.cpp @@ -39,18 +39,26 @@ case 0: serialUtil = new QSerialPortUtil(this); - connect(serialUtil, &QSerialPortUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + QObject::connect(serialUtil, &QSerialPortUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); serialUtil->openSerialPort(SettingConfig::getInstance().PORT_NAME, SettingConfig::getInstance().BAUD_RATE); serialUtil->sendData(startCmd.toLocal8Bit()); return serialUtil->isOpen(); case 1: clientUtil = new UDPClientUtil(this); - connect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + QObject::connect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); clientUtil->sendData(startCmd.toLocal8Bit()); break; - default: - break; + + case 2: + clientUtil = new UDPClientUtil(this); + connect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + int len = clientUtil->sendData(startCmd.toLocal8Bit()); + if (len > 0) { + return true; + } else { + return false; + } } return false; @@ -69,6 +77,12 @@ clientUtil->sendData(stopCmd.toLocal8Bit()); disconnect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); break; + + case 2: + clientUtil->sendData(stopCmd.toLocal8Bit()); + disconnect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + break; + default: break; } @@ -93,8 +107,9 @@ { // 过滤前面几帧数据 frameCount++; - if (frameCount <= SettingConfig::getInstance().SKIP_HEADER) + if (frameCount < SettingConfig::getInstance().SKIP_HEADER) { + this->dataBuff.clear(); return ; } @@ -138,7 +153,7 @@ { // 3.1 计算补偿的值 phaseData->channelData[i] = phaseData->channelData.at(i); -// phaseData->channelDataStr[i] = QString::number(phaseData->channelData.at(i), 'f', 15); + phaseData->channelDataStr[i] = QString::number(phaseData->channelData.at(i), 'f', 15); // 3.2 将通道数据写日志 QString chFilename = QString("CH_%1.log").arg(i + 1, 2, 10, QLatin1Char('0')); diff --git a/PhaseWindow.cpp b/PhaseWindow.cpp index 0c9134a..c7786a4 100644 --- a/PhaseWindow.cpp +++ b/PhaseWindow.cpp @@ -75,9 +75,8 @@ qint16 screenHeight = screenRect.height(); // 设置窗口位置和大小 - move(screenWidth / 2 - 688, 50); -// resize(screenWidth, screenHeight); - resize(1366, screenHeight - 100); + move(screenWidth / 2 - 688, 0); + resize(1366, 768); // 设置最小和关闭按钮的样式 IconHelper::Instance()->setIcon(ui->btnMenuMin, QChar(0xf068)); @@ -185,6 +184,7 @@ ChannelItem * channelItem = new ChannelItem(); channelItem->setGeometry(10, 0, screenRect.width() - 60, 160); channelItem->setIndex(i); + channelItem->setChannelDelay(SettingConfig::getInstance().DELAY_ARR.at(i).toInt()); this->channelItemList.append(channelItem); vbox->addWidget(channelItem); group->setLayout(vbox); diff --git a/SetConfig.cpp b/SetConfig.cpp index 2e5e9be..277b0e7 100644 --- a/SetConfig.cpp +++ b/SetConfig.cpp @@ -47,7 +47,8 @@ ui->buttonBox->button(QDialogButtonBox::Cancel)->setText("取消"); ui->comTypeSelect->addItem("串口", ENUM_NET_TYPE::SERIAL); -// ui->comTypeSelect->addItem("UDP Server", ENUM_NET_TYPE::UDPServer); + ui->comTypeSelect->addItem("UDP Server", ENUM_NET_TYPE::UDPServer); + ui->comTypeSelect->addItem("UDP Client", ENUM_NET_TYPE::UDPClient); // 设置下拉框的样式 QStandardItemModel * model = qobject_cast(ui->comTypeSelect->model()); @@ -95,9 +96,18 @@ SettingConfig::getInstance().setConProperty("com", "portName", ui->comNameInput->text()); SettingConfig::getInstance().setConProperty("com", "baudRate", ui->comBaudInput->text()); break; + case 1: SettingConfig::getInstance().setConProperty("net", "listenPort", ui->netListenPortInput->text()); break; + + case 2: + if (ui->netIpInput->text().toUpper() == "LOCALHOST") { + ui->netIpInput->setText("127.0.0.1"); + } + SettingConfig::getInstance().setConProperty("net", "deviceHost", ui->netIpInput->text()); + SettingConfig::getInstance().setConProperty("net", "devicePort", ui->netDevPortInput->text()); + break; } SettingConfig::getInstance().init(); @@ -126,31 +136,45 @@ int currentIndx = ui->comTypeSelect->currentIndex(); switch (currentIndx) { case 0: - ui->labelComName->show(); - ui->labelComBaud->show(); - ui->labelNetIp->hide(); - ui->labelNetListenPort->hide(); - ui->labelNetDevPort->hide(); + ui->labelComName->show(); // 显示串口号 + ui->labelComBaud->show(); // 显示波特率 + ui->labelNetIp->hide(); // 隐藏设备IP(client模式) + ui->labelNetDevPort->hide(); // 隐藏设备端口(client模式) + ui->labelNetListenPort->hide(); // 隐藏监听端口(server模式) ui->comNameInput->show(); ui->comBaudInput->show(); ui->netIpInput->hide(); - ui->netListenPortInput->hide(); ui->netDevPortInput->hide(); + ui->netListenPortInput->hide(); break; case 1: - ui->labelComName->hide(); - ui->labelComBaud->hide(); - ui->labelNetIp->hide(); - ui->labelNetListenPort->show(); - ui->labelNetDevPort->hide(); + ui->labelComName->hide(); // 隐藏串口号 + ui->labelComBaud->hide(); // 隐藏波特率 + ui->labelNetIp->hide(); // 隐藏设备IP(client模式) + ui->labelNetDevPort->hide(); // 隐藏设备端口(client模式) + ui->labelNetListenPort->show(); // 显示监听端口(server模式) ui->comNameInput->hide(); ui->comBaudInput->hide(); ui->netIpInput->hide(); - ui->netListenPortInput->show(); ui->netDevPortInput->hide(); + ui->netListenPortInput->show(); + break; + + case 2: + ui->labelComName->hide(); // 隐藏串口号 + ui->labelComBaud->hide(); // 隐藏波特率 + ui->labelNetIp->show(); // 显示设备IP(client模式) + ui->labelNetDevPort->show(); // 显示设备端口(client模式) + ui->labelNetListenPort->hide(); // 隐藏监听端口(server模式) + + ui->comNameInput->hide(); + ui->comBaudInput->hide(); + ui->netIpInput->show(); + ui->netDevPortInput->show(); + ui->netListenPortInput->hide(); break; default: diff --git a/ChannelItem.cpp b/ChannelItem.cpp index aa8ae8b..3d26dea 100644 --- a/ChannelItem.cpp +++ b/ChannelItem.cpp @@ -11,6 +11,7 @@ ui->setupUi(this); QFont font("微软雅黑"); font.setPixelSize(16); + ui->delay->setFont(font); this->setProperty("form", "channel"); } @@ -20,6 +21,15 @@ delete ui; } +double ChannelItem::getChannelDelay() +{ + return channelDelay; +} +void ChannelItem::setChannelDelay(double value) +{ + channelDelay = value; + ui->delay->setValue(value); +} void ChannelItem::setIndex(int value) { @@ -29,21 +39,29 @@ void ChannelItem::updatePhaseMeasureData(PhaseDataDto * phaseData) { int size = phaseVector.at(index).size(); - double ps = phaseData->channelData.at(index) * 1e12; // 显示ps数据 -// ui->rawValue->setText(QString::number(ps, 'f', 3) + "ps"); // 原始数据显示单位为ps + double ps = phaseData->channelBeforeDelay.at(index) * 1e12; // 显示ps数据 + ui->rawValue->setText(QString::number(ps, 'f', 3) + "ps"); // 原始数据显示单位为ps + ui->channelValue->setText(QString::number(ps + channelDelay, 'f', 3) + "ps"); // 补偿值的单位也是ps, 补偿后也显示为ps ui->samplingOne->setText(QString::number(size)); ui->samplingTen->setText(QString::number((int)size/10)); ui->samplingHund->setText(QString::number((int)size/100)); ui->samplingThou->setText(QString::number((int)size/1000)); ui->samplingTT->setText(QString::number((int)size/10000)); - ui->stabilityOne->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(0), 'e', 4) : "0.0000"); // 科学计数法显示 - ui->stabilityTen->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(1), 'e', 4) : "0.0000"); - ui->stabilityHund->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(2), 'e', 4) : "0.0000"); - ui->stabilityThou->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(3), 'e', 4) : "0.0000"); - ui->stabilityTT->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(4), 'e', 4) : "0.0000"); + ui->stabilityOne->setText(QString::number(channelAllan.at(index).at(0), 'e', 4)); // 科学计数法显示 + ui->stabilityTen->setText(QString::number(channelAllan.at(index).at(1), 'e', 4)); + ui->stabilityHund->setText(QString::number(channelAllan.at(index).at(2), 'e', 4)); + ui->stabilityThou->setText(QString::number(channelAllan.at(index).at(3), 'e', 4)); + ui->stabilityTT->setText(QString::number(channelAllan.at(index).at(4), 'e', 4)); } +void ChannelItem::on_delay_valueChanged(int value) +{ + channelDelay = value; + SettingConfig::getInstance().DELAY_ARR.replace(index, QString("%1").arg(value)); + QString str = SettingConfig::getInstance().DELAY_ARR.join(","); + SettingConfig::getInstance().setConProperty("delay", "delayArr", str); +} void ChannelItem::on_clearDataButt_clicked() { diff --git a/ChannelItem.h b/ChannelItem.h index 5366f53..592dc97 100644 --- a/ChannelItem.h +++ b/ChannelItem.h @@ -22,16 +22,20 @@ explicit ChannelItem(QWidget *parent = nullptr); ~ChannelItem(); + double getChannelDelay(); void setIndex(int value); void updatePhaseMeasureData(PhaseDataDto * phaseData); + void setChannelDelay(double value); private slots: + void on_delay_valueChanged(int value); void on_clearDataButt_clicked(); void on_chartViewButt_clicked(); private: Ui::ChannelItem *ui; int index; + double channelDelay = 0.0; }; #endif // CHANNELITEM_H diff --git a/ChannelItem.ui b/ChannelItem.ui index 2818586..3547b99 100644 --- a/ChannelItem.ui +++ b/ChannelItem.ui @@ -7,13 +7,13 @@ 0 0 1300 - 125 + 160 0 - 125 + 160 @@ -22,9 +22,9 @@ - 30 + 430 0 - 80 + 81 20 @@ -60,9 +60,9 @@ - 30 + 430 50 - 1050 + 681 35 @@ -137,12 +137,12 @@ - 100 + 1000 - + 微软雅黑 @@ -158,7 +158,7 @@ - + 微软雅黑 @@ -173,75 +173,14 @@ - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 80 - 20 - - - - - - - - - 微软雅黑 - 12 - - - - 10000 - - - - - - - - 微软雅黑 - 12 - - - - 0 - - - Qt::AlignCenter - - - - - - - - 微软雅黑 - 12 - - - - 0.00 - - - Qt::AlignCenter - - - - 30 + 430 85 - 1050 + 681 35 @@ -316,12 +255,12 @@ - 1000 + 10000 - + 微软雅黑 @@ -337,7 +276,64 @@ - + + + + 微软雅黑 + 12 + + + + 0 + + + Qt::AlignCenter + + + + + + + + + 430 + 120 + 681 + 35 + + + + + + + + 微软雅黑 + 12 + + + + 100 + + + + + + + + 微软雅黑 + 12 + + + + 0.00 + + + Qt::AlignCenter + + + + + 微软雅黑 @@ -369,19 +365,6 @@ - - - - 微软雅黑 - 12 - - - - - - - - @@ -395,7 +378,7 @@ - + 微软雅黑 @@ -405,6 +388,25 @@ + + Qt::AlignCenter + + + + + + + + 微软雅黑 + 12 + + + + + + + Qt::AlignCenter + @@ -471,12 +473,146 @@ + + + + 60 + 10 + 101 + 160 + + + + + + + + 微软雅黑 + 12 + + + + 测量数据: + + + + + + + + 微软雅黑 + 12 + + + + 时延补偿: + + + + + + + + 微软雅黑 + 12 + + + + 补偿后值: + + + + + + + + 微软雅黑 + 12 + + + + 准确度: + + + + + + + + + 190 + 10 + 200 + 160 + + + + + + + + 微软雅黑 + 12 + + + + 0 ps + + + + + + + + 微软雅黑 + 12 + + + + ps + + + -9999 + + + 99999 + + + + + + + + 微软雅黑 + 12 + + + + 0 ps + + + + + + + + 微软雅黑 + 12 + + + + 0.00 + + + + + - 30 + 430 20 - 1050 + 681 41 @@ -587,67 +723,6 @@ - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 80 - 20 - - - - - - - - - 微软雅黑 - 12 - - - - Tau(s) - - - - - - - - 微软雅黑 - 12 - - - - Allen方差 - - - Qt::AlignCenter - - - - - - - - 微软雅黑 - 12 - - - - 采样数 - - - Qt::AlignCenter - - - diff --git a/PhaseDevice.cpp b/PhaseDevice.cpp index f8cda87..1bc0192 100644 --- a/PhaseDevice.cpp +++ b/PhaseDevice.cpp @@ -39,18 +39,26 @@ case 0: serialUtil = new QSerialPortUtil(this); - connect(serialUtil, &QSerialPortUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + QObject::connect(serialUtil, &QSerialPortUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); serialUtil->openSerialPort(SettingConfig::getInstance().PORT_NAME, SettingConfig::getInstance().BAUD_RATE); serialUtil->sendData(startCmd.toLocal8Bit()); return serialUtil->isOpen(); case 1: clientUtil = new UDPClientUtil(this); - connect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + QObject::connect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); clientUtil->sendData(startCmd.toLocal8Bit()); break; - default: - break; + + case 2: + clientUtil = new UDPClientUtil(this); + connect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + int len = clientUtil->sendData(startCmd.toLocal8Bit()); + if (len > 0) { + return true; + } else { + return false; + } } return false; @@ -69,6 +77,12 @@ clientUtil->sendData(stopCmd.toLocal8Bit()); disconnect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); break; + + case 2: + clientUtil->sendData(stopCmd.toLocal8Bit()); + disconnect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + break; + default: break; } @@ -93,8 +107,9 @@ { // 过滤前面几帧数据 frameCount++; - if (frameCount <= SettingConfig::getInstance().SKIP_HEADER) + if (frameCount < SettingConfig::getInstance().SKIP_HEADER) { + this->dataBuff.clear(); return ; } @@ -138,7 +153,7 @@ { // 3.1 计算补偿的值 phaseData->channelData[i] = phaseData->channelData.at(i); -// phaseData->channelDataStr[i] = QString::number(phaseData->channelData.at(i), 'f', 15); + phaseData->channelDataStr[i] = QString::number(phaseData->channelData.at(i), 'f', 15); // 3.2 将通道数据写日志 QString chFilename = QString("CH_%1.log").arg(i + 1, 2, 10, QLatin1Char('0')); diff --git a/PhaseWindow.cpp b/PhaseWindow.cpp index 0c9134a..c7786a4 100644 --- a/PhaseWindow.cpp +++ b/PhaseWindow.cpp @@ -75,9 +75,8 @@ qint16 screenHeight = screenRect.height(); // 设置窗口位置和大小 - move(screenWidth / 2 - 688, 50); -// resize(screenWidth, screenHeight); - resize(1366, screenHeight - 100); + move(screenWidth / 2 - 688, 0); + resize(1366, 768); // 设置最小和关闭按钮的样式 IconHelper::Instance()->setIcon(ui->btnMenuMin, QChar(0xf068)); @@ -185,6 +184,7 @@ ChannelItem * channelItem = new ChannelItem(); channelItem->setGeometry(10, 0, screenRect.width() - 60, 160); channelItem->setIndex(i); + channelItem->setChannelDelay(SettingConfig::getInstance().DELAY_ARR.at(i).toInt()); this->channelItemList.append(channelItem); vbox->addWidget(channelItem); group->setLayout(vbox); diff --git a/SetConfig.cpp b/SetConfig.cpp index 2e5e9be..277b0e7 100644 --- a/SetConfig.cpp +++ b/SetConfig.cpp @@ -47,7 +47,8 @@ ui->buttonBox->button(QDialogButtonBox::Cancel)->setText("取消"); ui->comTypeSelect->addItem("串口", ENUM_NET_TYPE::SERIAL); -// ui->comTypeSelect->addItem("UDP Server", ENUM_NET_TYPE::UDPServer); + ui->comTypeSelect->addItem("UDP Server", ENUM_NET_TYPE::UDPServer); + ui->comTypeSelect->addItem("UDP Client", ENUM_NET_TYPE::UDPClient); // 设置下拉框的样式 QStandardItemModel * model = qobject_cast(ui->comTypeSelect->model()); @@ -95,9 +96,18 @@ SettingConfig::getInstance().setConProperty("com", "portName", ui->comNameInput->text()); SettingConfig::getInstance().setConProperty("com", "baudRate", ui->comBaudInput->text()); break; + case 1: SettingConfig::getInstance().setConProperty("net", "listenPort", ui->netListenPortInput->text()); break; + + case 2: + if (ui->netIpInput->text().toUpper() == "LOCALHOST") { + ui->netIpInput->setText("127.0.0.1"); + } + SettingConfig::getInstance().setConProperty("net", "deviceHost", ui->netIpInput->text()); + SettingConfig::getInstance().setConProperty("net", "devicePort", ui->netDevPortInput->text()); + break; } SettingConfig::getInstance().init(); @@ -126,31 +136,45 @@ int currentIndx = ui->comTypeSelect->currentIndex(); switch (currentIndx) { case 0: - ui->labelComName->show(); - ui->labelComBaud->show(); - ui->labelNetIp->hide(); - ui->labelNetListenPort->hide(); - ui->labelNetDevPort->hide(); + ui->labelComName->show(); // 显示串口号 + ui->labelComBaud->show(); // 显示波特率 + ui->labelNetIp->hide(); // 隐藏设备IP(client模式) + ui->labelNetDevPort->hide(); // 隐藏设备端口(client模式) + ui->labelNetListenPort->hide(); // 隐藏监听端口(server模式) ui->comNameInput->show(); ui->comBaudInput->show(); ui->netIpInput->hide(); - ui->netListenPortInput->hide(); ui->netDevPortInput->hide(); + ui->netListenPortInput->hide(); break; case 1: - ui->labelComName->hide(); - ui->labelComBaud->hide(); - ui->labelNetIp->hide(); - ui->labelNetListenPort->show(); - ui->labelNetDevPort->hide(); + ui->labelComName->hide(); // 隐藏串口号 + ui->labelComBaud->hide(); // 隐藏波特率 + ui->labelNetIp->hide(); // 隐藏设备IP(client模式) + ui->labelNetDevPort->hide(); // 隐藏设备端口(client模式) + ui->labelNetListenPort->show(); // 显示监听端口(server模式) ui->comNameInput->hide(); ui->comBaudInput->hide(); ui->netIpInput->hide(); - ui->netListenPortInput->show(); ui->netDevPortInput->hide(); + ui->netListenPortInput->show(); + break; + + case 2: + ui->labelComName->hide(); // 隐藏串口号 + ui->labelComBaud->hide(); // 隐藏波特率 + ui->labelNetIp->show(); // 显示设备IP(client模式) + ui->labelNetDevPort->show(); // 显示设备端口(client模式) + ui->labelNetListenPort->hide(); // 隐藏监听端口(server模式) + + ui->comNameInput->hide(); + ui->comBaudInput->hide(); + ui->netIpInput->show(); + ui->netDevPortInput->show(); + ui->netListenPortInput->hide(); break; default: diff --git a/common/utils/SettingConfig.cpp b/common/utils/SettingConfig.cpp index d4919b4..10722e5 100644 --- a/common/utils/SettingConfig.cpp +++ b/common/utils/SettingConfig.cpp @@ -30,4 +30,6 @@ SKIP_HEADER = getProperty("dev", "skipHeader").toUInt(); BASE_LOG_PATH = getProperty("log", "basePath").toString(); + + DELAY_ARR = getProperty("delay", "delayArr").toString().split(","); } diff --git a/ChannelItem.cpp b/ChannelItem.cpp index aa8ae8b..3d26dea 100644 --- a/ChannelItem.cpp +++ b/ChannelItem.cpp @@ -11,6 +11,7 @@ ui->setupUi(this); QFont font("微软雅黑"); font.setPixelSize(16); + ui->delay->setFont(font); this->setProperty("form", "channel"); } @@ -20,6 +21,15 @@ delete ui; } +double ChannelItem::getChannelDelay() +{ + return channelDelay; +} +void ChannelItem::setChannelDelay(double value) +{ + channelDelay = value; + ui->delay->setValue(value); +} void ChannelItem::setIndex(int value) { @@ -29,21 +39,29 @@ void ChannelItem::updatePhaseMeasureData(PhaseDataDto * phaseData) { int size = phaseVector.at(index).size(); - double ps = phaseData->channelData.at(index) * 1e12; // 显示ps数据 -// ui->rawValue->setText(QString::number(ps, 'f', 3) + "ps"); // 原始数据显示单位为ps + double ps = phaseData->channelBeforeDelay.at(index) * 1e12; // 显示ps数据 + ui->rawValue->setText(QString::number(ps, 'f', 3) + "ps"); // 原始数据显示单位为ps + ui->channelValue->setText(QString::number(ps + channelDelay, 'f', 3) + "ps"); // 补偿值的单位也是ps, 补偿后也显示为ps ui->samplingOne->setText(QString::number(size)); ui->samplingTen->setText(QString::number((int)size/10)); ui->samplingHund->setText(QString::number((int)size/100)); ui->samplingThou->setText(QString::number((int)size/1000)); ui->samplingTT->setText(QString::number((int)size/10000)); - ui->stabilityOne->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(0), 'e', 4) : "0.0000"); // 科学计数法显示 - ui->stabilityTen->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(1), 'e', 4) : "0.0000"); - ui->stabilityHund->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(2), 'e', 4) : "0.0000"); - ui->stabilityThou->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(3), 'e', 4) : "0.0000"); - ui->stabilityTT->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(4), 'e', 4) : "0.0000"); + ui->stabilityOne->setText(QString::number(channelAllan.at(index).at(0), 'e', 4)); // 科学计数法显示 + ui->stabilityTen->setText(QString::number(channelAllan.at(index).at(1), 'e', 4)); + ui->stabilityHund->setText(QString::number(channelAllan.at(index).at(2), 'e', 4)); + ui->stabilityThou->setText(QString::number(channelAllan.at(index).at(3), 'e', 4)); + ui->stabilityTT->setText(QString::number(channelAllan.at(index).at(4), 'e', 4)); } +void ChannelItem::on_delay_valueChanged(int value) +{ + channelDelay = value; + SettingConfig::getInstance().DELAY_ARR.replace(index, QString("%1").arg(value)); + QString str = SettingConfig::getInstance().DELAY_ARR.join(","); + SettingConfig::getInstance().setConProperty("delay", "delayArr", str); +} void ChannelItem::on_clearDataButt_clicked() { diff --git a/ChannelItem.h b/ChannelItem.h index 5366f53..592dc97 100644 --- a/ChannelItem.h +++ b/ChannelItem.h @@ -22,16 +22,20 @@ explicit ChannelItem(QWidget *parent = nullptr); ~ChannelItem(); + double getChannelDelay(); void setIndex(int value); void updatePhaseMeasureData(PhaseDataDto * phaseData); + void setChannelDelay(double value); private slots: + void on_delay_valueChanged(int value); void on_clearDataButt_clicked(); void on_chartViewButt_clicked(); private: Ui::ChannelItem *ui; int index; + double channelDelay = 0.0; }; #endif // CHANNELITEM_H diff --git a/ChannelItem.ui b/ChannelItem.ui index 2818586..3547b99 100644 --- a/ChannelItem.ui +++ b/ChannelItem.ui @@ -7,13 +7,13 @@ 0 0 1300 - 125 + 160 0 - 125 + 160 @@ -22,9 +22,9 @@ - 30 + 430 0 - 80 + 81 20 @@ -60,9 +60,9 @@ - 30 + 430 50 - 1050 + 681 35 @@ -137,12 +137,12 @@ - 100 + 1000 - + 微软雅黑 @@ -158,7 +158,7 @@ - + 微软雅黑 @@ -173,75 +173,14 @@ - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 80 - 20 - - - - - - - - - 微软雅黑 - 12 - - - - 10000 - - - - - - - - 微软雅黑 - 12 - - - - 0 - - - Qt::AlignCenter - - - - - - - - 微软雅黑 - 12 - - - - 0.00 - - - Qt::AlignCenter - - - - 30 + 430 85 - 1050 + 681 35 @@ -316,12 +255,12 @@ - 1000 + 10000 - + 微软雅黑 @@ -337,7 +276,64 @@ - + + + + 微软雅黑 + 12 + + + + 0 + + + Qt::AlignCenter + + + + + + + + + 430 + 120 + 681 + 35 + + + + + + + + 微软雅黑 + 12 + + + + 100 + + + + + + + + 微软雅黑 + 12 + + + + 0.00 + + + Qt::AlignCenter + + + + + 微软雅黑 @@ -369,19 +365,6 @@ - - - - 微软雅黑 - 12 - - - - - - - - @@ -395,7 +378,7 @@ - + 微软雅黑 @@ -405,6 +388,25 @@ + + Qt::AlignCenter + + + + + + + + 微软雅黑 + 12 + + + + + + + Qt::AlignCenter + @@ -471,12 +473,146 @@ + + + + 60 + 10 + 101 + 160 + + + + + + + + 微软雅黑 + 12 + + + + 测量数据: + + + + + + + + 微软雅黑 + 12 + + + + 时延补偿: + + + + + + + + 微软雅黑 + 12 + + + + 补偿后值: + + + + + + + + 微软雅黑 + 12 + + + + 准确度: + + + + + + + + + 190 + 10 + 200 + 160 + + + + + + + + 微软雅黑 + 12 + + + + 0 ps + + + + + + + + 微软雅黑 + 12 + + + + ps + + + -9999 + + + 99999 + + + + + + + + 微软雅黑 + 12 + + + + 0 ps + + + + + + + + 微软雅黑 + 12 + + + + 0.00 + + + + + - 30 + 430 20 - 1050 + 681 41 @@ -587,67 +723,6 @@ - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 80 - 20 - - - - - - - - - 微软雅黑 - 12 - - - - Tau(s) - - - - - - - - 微软雅黑 - 12 - - - - Allen方差 - - - Qt::AlignCenter - - - - - - - - 微软雅黑 - 12 - - - - 采样数 - - - Qt::AlignCenter - - - diff --git a/PhaseDevice.cpp b/PhaseDevice.cpp index f8cda87..1bc0192 100644 --- a/PhaseDevice.cpp +++ b/PhaseDevice.cpp @@ -39,18 +39,26 @@ case 0: serialUtil = new QSerialPortUtil(this); - connect(serialUtil, &QSerialPortUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + QObject::connect(serialUtil, &QSerialPortUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); serialUtil->openSerialPort(SettingConfig::getInstance().PORT_NAME, SettingConfig::getInstance().BAUD_RATE); serialUtil->sendData(startCmd.toLocal8Bit()); return serialUtil->isOpen(); case 1: clientUtil = new UDPClientUtil(this); - connect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + QObject::connect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); clientUtil->sendData(startCmd.toLocal8Bit()); break; - default: - break; + + case 2: + clientUtil = new UDPClientUtil(this); + connect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + int len = clientUtil->sendData(startCmd.toLocal8Bit()); + if (len > 0) { + return true; + } else { + return false; + } } return false; @@ -69,6 +77,12 @@ clientUtil->sendData(stopCmd.toLocal8Bit()); disconnect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); break; + + case 2: + clientUtil->sendData(stopCmd.toLocal8Bit()); + disconnect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + break; + default: break; } @@ -93,8 +107,9 @@ { // 过滤前面几帧数据 frameCount++; - if (frameCount <= SettingConfig::getInstance().SKIP_HEADER) + if (frameCount < SettingConfig::getInstance().SKIP_HEADER) { + this->dataBuff.clear(); return ; } @@ -138,7 +153,7 @@ { // 3.1 计算补偿的值 phaseData->channelData[i] = phaseData->channelData.at(i); -// phaseData->channelDataStr[i] = QString::number(phaseData->channelData.at(i), 'f', 15); + phaseData->channelDataStr[i] = QString::number(phaseData->channelData.at(i), 'f', 15); // 3.2 将通道数据写日志 QString chFilename = QString("CH_%1.log").arg(i + 1, 2, 10, QLatin1Char('0')); diff --git a/PhaseWindow.cpp b/PhaseWindow.cpp index 0c9134a..c7786a4 100644 --- a/PhaseWindow.cpp +++ b/PhaseWindow.cpp @@ -75,9 +75,8 @@ qint16 screenHeight = screenRect.height(); // 设置窗口位置和大小 - move(screenWidth / 2 - 688, 50); -// resize(screenWidth, screenHeight); - resize(1366, screenHeight - 100); + move(screenWidth / 2 - 688, 0); + resize(1366, 768); // 设置最小和关闭按钮的样式 IconHelper::Instance()->setIcon(ui->btnMenuMin, QChar(0xf068)); @@ -185,6 +184,7 @@ ChannelItem * channelItem = new ChannelItem(); channelItem->setGeometry(10, 0, screenRect.width() - 60, 160); channelItem->setIndex(i); + channelItem->setChannelDelay(SettingConfig::getInstance().DELAY_ARR.at(i).toInt()); this->channelItemList.append(channelItem); vbox->addWidget(channelItem); group->setLayout(vbox); diff --git a/SetConfig.cpp b/SetConfig.cpp index 2e5e9be..277b0e7 100644 --- a/SetConfig.cpp +++ b/SetConfig.cpp @@ -47,7 +47,8 @@ ui->buttonBox->button(QDialogButtonBox::Cancel)->setText("取消"); ui->comTypeSelect->addItem("串口", ENUM_NET_TYPE::SERIAL); -// ui->comTypeSelect->addItem("UDP Server", ENUM_NET_TYPE::UDPServer); + ui->comTypeSelect->addItem("UDP Server", ENUM_NET_TYPE::UDPServer); + ui->comTypeSelect->addItem("UDP Client", ENUM_NET_TYPE::UDPClient); // 设置下拉框的样式 QStandardItemModel * model = qobject_cast(ui->comTypeSelect->model()); @@ -95,9 +96,18 @@ SettingConfig::getInstance().setConProperty("com", "portName", ui->comNameInput->text()); SettingConfig::getInstance().setConProperty("com", "baudRate", ui->comBaudInput->text()); break; + case 1: SettingConfig::getInstance().setConProperty("net", "listenPort", ui->netListenPortInput->text()); break; + + case 2: + if (ui->netIpInput->text().toUpper() == "LOCALHOST") { + ui->netIpInput->setText("127.0.0.1"); + } + SettingConfig::getInstance().setConProperty("net", "deviceHost", ui->netIpInput->text()); + SettingConfig::getInstance().setConProperty("net", "devicePort", ui->netDevPortInput->text()); + break; } SettingConfig::getInstance().init(); @@ -126,31 +136,45 @@ int currentIndx = ui->comTypeSelect->currentIndex(); switch (currentIndx) { case 0: - ui->labelComName->show(); - ui->labelComBaud->show(); - ui->labelNetIp->hide(); - ui->labelNetListenPort->hide(); - ui->labelNetDevPort->hide(); + ui->labelComName->show(); // 显示串口号 + ui->labelComBaud->show(); // 显示波特率 + ui->labelNetIp->hide(); // 隐藏设备IP(client模式) + ui->labelNetDevPort->hide(); // 隐藏设备端口(client模式) + ui->labelNetListenPort->hide(); // 隐藏监听端口(server模式) ui->comNameInput->show(); ui->comBaudInput->show(); ui->netIpInput->hide(); - ui->netListenPortInput->hide(); ui->netDevPortInput->hide(); + ui->netListenPortInput->hide(); break; case 1: - ui->labelComName->hide(); - ui->labelComBaud->hide(); - ui->labelNetIp->hide(); - ui->labelNetListenPort->show(); - ui->labelNetDevPort->hide(); + ui->labelComName->hide(); // 隐藏串口号 + ui->labelComBaud->hide(); // 隐藏波特率 + ui->labelNetIp->hide(); // 隐藏设备IP(client模式) + ui->labelNetDevPort->hide(); // 隐藏设备端口(client模式) + ui->labelNetListenPort->show(); // 显示监听端口(server模式) ui->comNameInput->hide(); ui->comBaudInput->hide(); ui->netIpInput->hide(); - ui->netListenPortInput->show(); ui->netDevPortInput->hide(); + ui->netListenPortInput->show(); + break; + + case 2: + ui->labelComName->hide(); // 隐藏串口号 + ui->labelComBaud->hide(); // 隐藏波特率 + ui->labelNetIp->show(); // 显示设备IP(client模式) + ui->labelNetDevPort->show(); // 显示设备端口(client模式) + ui->labelNetListenPort->hide(); // 隐藏监听端口(server模式) + + ui->comNameInput->hide(); + ui->comBaudInput->hide(); + ui->netIpInput->show(); + ui->netDevPortInput->show(); + ui->netListenPortInput->hide(); break; default: diff --git a/common/utils/SettingConfig.cpp b/common/utils/SettingConfig.cpp index d4919b4..10722e5 100644 --- a/common/utils/SettingConfig.cpp +++ b/common/utils/SettingConfig.cpp @@ -30,4 +30,6 @@ SKIP_HEADER = getProperty("dev", "skipHeader").toUInt(); BASE_LOG_PATH = getProperty("log", "basePath").toString(); + + DELAY_ARR = getProperty("delay", "delayArr").toString().split(","); } diff --git a/common/utils/SettingConfig.h b/common/utils/SettingConfig.h index 3a74617..bd0bef2 100644 --- a/common/utils/SettingConfig.h +++ b/common/utils/SettingConfig.h @@ -30,8 +30,8 @@ /******** 以下为需要的各类参数 ********/ int NET_TYPE; QString DEVICE_HOST; - quint16 DEVICE_PORT; - quint16 LISTEN_PORT; + int DEVICE_PORT; + int LISTEN_PORT; QString PORT_NAME; int BAUD_RATE; @@ -41,6 +41,8 @@ QString BASE_LOG_PATH; + QStringList DELAY_ARR; + private: SettingConfig(); diff --git a/ChannelItem.cpp b/ChannelItem.cpp index aa8ae8b..3d26dea 100644 --- a/ChannelItem.cpp +++ b/ChannelItem.cpp @@ -11,6 +11,7 @@ ui->setupUi(this); QFont font("微软雅黑"); font.setPixelSize(16); + ui->delay->setFont(font); this->setProperty("form", "channel"); } @@ -20,6 +21,15 @@ delete ui; } +double ChannelItem::getChannelDelay() +{ + return channelDelay; +} +void ChannelItem::setChannelDelay(double value) +{ + channelDelay = value; + ui->delay->setValue(value); +} void ChannelItem::setIndex(int value) { @@ -29,21 +39,29 @@ void ChannelItem::updatePhaseMeasureData(PhaseDataDto * phaseData) { int size = phaseVector.at(index).size(); - double ps = phaseData->channelData.at(index) * 1e12; // 显示ps数据 -// ui->rawValue->setText(QString::number(ps, 'f', 3) + "ps"); // 原始数据显示单位为ps + double ps = phaseData->channelBeforeDelay.at(index) * 1e12; // 显示ps数据 + ui->rawValue->setText(QString::number(ps, 'f', 3) + "ps"); // 原始数据显示单位为ps + ui->channelValue->setText(QString::number(ps + channelDelay, 'f', 3) + "ps"); // 补偿值的单位也是ps, 补偿后也显示为ps ui->samplingOne->setText(QString::number(size)); ui->samplingTen->setText(QString::number((int)size/10)); ui->samplingHund->setText(QString::number((int)size/100)); ui->samplingThou->setText(QString::number((int)size/1000)); ui->samplingTT->setText(QString::number((int)size/10000)); - ui->stabilityOne->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(0), 'e', 4) : "0.0000"); // 科学计数法显示 - ui->stabilityTen->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(1), 'e', 4) : "0.0000"); - ui->stabilityHund->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(2), 'e', 4) : "0.0000"); - ui->stabilityThou->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(3), 'e', 4) : "0.0000"); - ui->stabilityTT->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(4), 'e', 4) : "0.0000"); + ui->stabilityOne->setText(QString::number(channelAllan.at(index).at(0), 'e', 4)); // 科学计数法显示 + ui->stabilityTen->setText(QString::number(channelAllan.at(index).at(1), 'e', 4)); + ui->stabilityHund->setText(QString::number(channelAllan.at(index).at(2), 'e', 4)); + ui->stabilityThou->setText(QString::number(channelAllan.at(index).at(3), 'e', 4)); + ui->stabilityTT->setText(QString::number(channelAllan.at(index).at(4), 'e', 4)); } +void ChannelItem::on_delay_valueChanged(int value) +{ + channelDelay = value; + SettingConfig::getInstance().DELAY_ARR.replace(index, QString("%1").arg(value)); + QString str = SettingConfig::getInstance().DELAY_ARR.join(","); + SettingConfig::getInstance().setConProperty("delay", "delayArr", str); +} void ChannelItem::on_clearDataButt_clicked() { diff --git a/ChannelItem.h b/ChannelItem.h index 5366f53..592dc97 100644 --- a/ChannelItem.h +++ b/ChannelItem.h @@ -22,16 +22,20 @@ explicit ChannelItem(QWidget *parent = nullptr); ~ChannelItem(); + double getChannelDelay(); void setIndex(int value); void updatePhaseMeasureData(PhaseDataDto * phaseData); + void setChannelDelay(double value); private slots: + void on_delay_valueChanged(int value); void on_clearDataButt_clicked(); void on_chartViewButt_clicked(); private: Ui::ChannelItem *ui; int index; + double channelDelay = 0.0; }; #endif // CHANNELITEM_H diff --git a/ChannelItem.ui b/ChannelItem.ui index 2818586..3547b99 100644 --- a/ChannelItem.ui +++ b/ChannelItem.ui @@ -7,13 +7,13 @@ 0 0 1300 - 125 + 160 0 - 125 + 160 @@ -22,9 +22,9 @@ - 30 + 430 0 - 80 + 81 20 @@ -60,9 +60,9 @@ - 30 + 430 50 - 1050 + 681 35 @@ -137,12 +137,12 @@ - 100 + 1000 - + 微软雅黑 @@ -158,7 +158,7 @@ - + 微软雅黑 @@ -173,75 +173,14 @@ - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 80 - 20 - - - - - - - - - 微软雅黑 - 12 - - - - 10000 - - - - - - - - 微软雅黑 - 12 - - - - 0 - - - Qt::AlignCenter - - - - - - - - 微软雅黑 - 12 - - - - 0.00 - - - Qt::AlignCenter - - - - 30 + 430 85 - 1050 + 681 35 @@ -316,12 +255,12 @@ - 1000 + 10000 - + 微软雅黑 @@ -337,7 +276,64 @@ - + + + + 微软雅黑 + 12 + + + + 0 + + + Qt::AlignCenter + + + + + + + + + 430 + 120 + 681 + 35 + + + + + + + + 微软雅黑 + 12 + + + + 100 + + + + + + + + 微软雅黑 + 12 + + + + 0.00 + + + Qt::AlignCenter + + + + + 微软雅黑 @@ -369,19 +365,6 @@ - - - - 微软雅黑 - 12 - - - - - - - - @@ -395,7 +378,7 @@ - + 微软雅黑 @@ -405,6 +388,25 @@ + + Qt::AlignCenter + + + + + + + + 微软雅黑 + 12 + + + + + + + Qt::AlignCenter + @@ -471,12 +473,146 @@ + + + + 60 + 10 + 101 + 160 + + + + + + + + 微软雅黑 + 12 + + + + 测量数据: + + + + + + + + 微软雅黑 + 12 + + + + 时延补偿: + + + + + + + + 微软雅黑 + 12 + + + + 补偿后值: + + + + + + + + 微软雅黑 + 12 + + + + 准确度: + + + + + + + + + 190 + 10 + 200 + 160 + + + + + + + + 微软雅黑 + 12 + + + + 0 ps + + + + + + + + 微软雅黑 + 12 + + + + ps + + + -9999 + + + 99999 + + + + + + + + 微软雅黑 + 12 + + + + 0 ps + + + + + + + + 微软雅黑 + 12 + + + + 0.00 + + + + + - 30 + 430 20 - 1050 + 681 41 @@ -587,67 +723,6 @@ - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 80 - 20 - - - - - - - - - 微软雅黑 - 12 - - - - Tau(s) - - - - - - - - 微软雅黑 - 12 - - - - Allen方差 - - - Qt::AlignCenter - - - - - - - - 微软雅黑 - 12 - - - - 采样数 - - - Qt::AlignCenter - - - diff --git a/PhaseDevice.cpp b/PhaseDevice.cpp index f8cda87..1bc0192 100644 --- a/PhaseDevice.cpp +++ b/PhaseDevice.cpp @@ -39,18 +39,26 @@ case 0: serialUtil = new QSerialPortUtil(this); - connect(serialUtil, &QSerialPortUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + QObject::connect(serialUtil, &QSerialPortUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); serialUtil->openSerialPort(SettingConfig::getInstance().PORT_NAME, SettingConfig::getInstance().BAUD_RATE); serialUtil->sendData(startCmd.toLocal8Bit()); return serialUtil->isOpen(); case 1: clientUtil = new UDPClientUtil(this); - connect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + QObject::connect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); clientUtil->sendData(startCmd.toLocal8Bit()); break; - default: - break; + + case 2: + clientUtil = new UDPClientUtil(this); + connect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + int len = clientUtil->sendData(startCmd.toLocal8Bit()); + if (len > 0) { + return true; + } else { + return false; + } } return false; @@ -69,6 +77,12 @@ clientUtil->sendData(stopCmd.toLocal8Bit()); disconnect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); break; + + case 2: + clientUtil->sendData(stopCmd.toLocal8Bit()); + disconnect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + break; + default: break; } @@ -93,8 +107,9 @@ { // 过滤前面几帧数据 frameCount++; - if (frameCount <= SettingConfig::getInstance().SKIP_HEADER) + if (frameCount < SettingConfig::getInstance().SKIP_HEADER) { + this->dataBuff.clear(); return ; } @@ -138,7 +153,7 @@ { // 3.1 计算补偿的值 phaseData->channelData[i] = phaseData->channelData.at(i); -// phaseData->channelDataStr[i] = QString::number(phaseData->channelData.at(i), 'f', 15); + phaseData->channelDataStr[i] = QString::number(phaseData->channelData.at(i), 'f', 15); // 3.2 将通道数据写日志 QString chFilename = QString("CH_%1.log").arg(i + 1, 2, 10, QLatin1Char('0')); diff --git a/PhaseWindow.cpp b/PhaseWindow.cpp index 0c9134a..c7786a4 100644 --- a/PhaseWindow.cpp +++ b/PhaseWindow.cpp @@ -75,9 +75,8 @@ qint16 screenHeight = screenRect.height(); // 设置窗口位置和大小 - move(screenWidth / 2 - 688, 50); -// resize(screenWidth, screenHeight); - resize(1366, screenHeight - 100); + move(screenWidth / 2 - 688, 0); + resize(1366, 768); // 设置最小和关闭按钮的样式 IconHelper::Instance()->setIcon(ui->btnMenuMin, QChar(0xf068)); @@ -185,6 +184,7 @@ ChannelItem * channelItem = new ChannelItem(); channelItem->setGeometry(10, 0, screenRect.width() - 60, 160); channelItem->setIndex(i); + channelItem->setChannelDelay(SettingConfig::getInstance().DELAY_ARR.at(i).toInt()); this->channelItemList.append(channelItem); vbox->addWidget(channelItem); group->setLayout(vbox); diff --git a/SetConfig.cpp b/SetConfig.cpp index 2e5e9be..277b0e7 100644 --- a/SetConfig.cpp +++ b/SetConfig.cpp @@ -47,7 +47,8 @@ ui->buttonBox->button(QDialogButtonBox::Cancel)->setText("取消"); ui->comTypeSelect->addItem("串口", ENUM_NET_TYPE::SERIAL); -// ui->comTypeSelect->addItem("UDP Server", ENUM_NET_TYPE::UDPServer); + ui->comTypeSelect->addItem("UDP Server", ENUM_NET_TYPE::UDPServer); + ui->comTypeSelect->addItem("UDP Client", ENUM_NET_TYPE::UDPClient); // 设置下拉框的样式 QStandardItemModel * model = qobject_cast(ui->comTypeSelect->model()); @@ -95,9 +96,18 @@ SettingConfig::getInstance().setConProperty("com", "portName", ui->comNameInput->text()); SettingConfig::getInstance().setConProperty("com", "baudRate", ui->comBaudInput->text()); break; + case 1: SettingConfig::getInstance().setConProperty("net", "listenPort", ui->netListenPortInput->text()); break; + + case 2: + if (ui->netIpInput->text().toUpper() == "LOCALHOST") { + ui->netIpInput->setText("127.0.0.1"); + } + SettingConfig::getInstance().setConProperty("net", "deviceHost", ui->netIpInput->text()); + SettingConfig::getInstance().setConProperty("net", "devicePort", ui->netDevPortInput->text()); + break; } SettingConfig::getInstance().init(); @@ -126,31 +136,45 @@ int currentIndx = ui->comTypeSelect->currentIndex(); switch (currentIndx) { case 0: - ui->labelComName->show(); - ui->labelComBaud->show(); - ui->labelNetIp->hide(); - ui->labelNetListenPort->hide(); - ui->labelNetDevPort->hide(); + ui->labelComName->show(); // 显示串口号 + ui->labelComBaud->show(); // 显示波特率 + ui->labelNetIp->hide(); // 隐藏设备IP(client模式) + ui->labelNetDevPort->hide(); // 隐藏设备端口(client模式) + ui->labelNetListenPort->hide(); // 隐藏监听端口(server模式) ui->comNameInput->show(); ui->comBaudInput->show(); ui->netIpInput->hide(); - ui->netListenPortInput->hide(); ui->netDevPortInput->hide(); + ui->netListenPortInput->hide(); break; case 1: - ui->labelComName->hide(); - ui->labelComBaud->hide(); - ui->labelNetIp->hide(); - ui->labelNetListenPort->show(); - ui->labelNetDevPort->hide(); + ui->labelComName->hide(); // 隐藏串口号 + ui->labelComBaud->hide(); // 隐藏波特率 + ui->labelNetIp->hide(); // 隐藏设备IP(client模式) + ui->labelNetDevPort->hide(); // 隐藏设备端口(client模式) + ui->labelNetListenPort->show(); // 显示监听端口(server模式) ui->comNameInput->hide(); ui->comBaudInput->hide(); ui->netIpInput->hide(); - ui->netListenPortInput->show(); ui->netDevPortInput->hide(); + ui->netListenPortInput->show(); + break; + + case 2: + ui->labelComName->hide(); // 隐藏串口号 + ui->labelComBaud->hide(); // 隐藏波特率 + ui->labelNetIp->show(); // 显示设备IP(client模式) + ui->labelNetDevPort->show(); // 显示设备端口(client模式) + ui->labelNetListenPort->hide(); // 隐藏监听端口(server模式) + + ui->comNameInput->hide(); + ui->comBaudInput->hide(); + ui->netIpInput->show(); + ui->netDevPortInput->show(); + ui->netListenPortInput->hide(); break; default: diff --git a/common/utils/SettingConfig.cpp b/common/utils/SettingConfig.cpp index d4919b4..10722e5 100644 --- a/common/utils/SettingConfig.cpp +++ b/common/utils/SettingConfig.cpp @@ -30,4 +30,6 @@ SKIP_HEADER = getProperty("dev", "skipHeader").toUInt(); BASE_LOG_PATH = getProperty("log", "basePath").toString(); + + DELAY_ARR = getProperty("delay", "delayArr").toString().split(","); } diff --git a/common/utils/SettingConfig.h b/common/utils/SettingConfig.h index 3a74617..bd0bef2 100644 --- a/common/utils/SettingConfig.h +++ b/common/utils/SettingConfig.h @@ -30,8 +30,8 @@ /******** 以下为需要的各类参数 ********/ int NET_TYPE; QString DEVICE_HOST; - quint16 DEVICE_PORT; - quint16 LISTEN_PORT; + int DEVICE_PORT; + int LISTEN_PORT; QString PORT_NAME; int BAUD_RATE; @@ -41,6 +41,8 @@ QString BASE_LOG_PATH; + QStringList DELAY_ARR; + private: SettingConfig(); diff --git a/common/utils/UDPClientUtil.cpp b/common/utils/UDPClientUtil.cpp index d772c3b..8eed638 100644 --- a/common/utils/UDPClientUtil.cpp +++ b/common/utils/UDPClientUtil.cpp @@ -5,7 +5,6 @@ UDPClientUtil::UDPClientUtil(QObject *parent) : QObject(parent) { client = new QUdpSocket(this); - connect(client, &QUdpSocket::readyRead, this, &UDPClientUtil::readData); } @@ -14,22 +13,22 @@ } -void UDPClientUtil::sendData(QByteArray data) +int UDPClientUtil::sendData(QByteArray data) { - client->writeDatagram(data, - QHostAddress(SettingConfig::getInstance().DEVICE_HOST), - SettingConfig::getInstance().DEVICE_PORT); - qDebug() << "[send]" << data; + qint64 len = client->writeDatagram(data.data(), data.size(), QHostAddress(SettingConfig::getInstance().DEVICE_HOST), SettingConfig::getInstance().DEVICE_PORT); + qDebug() << QString("[send][%1]").arg(len) << data; + return len; } void UDPClientUtil::readData() { +// qDebug() << "read data"; QByteArray ba; while(client->hasPendingDatagrams()) { ba.resize(client->pendingDatagramSize()); client->readDatagram(ba.data(), ba.size()); -// std::cout << "[recv]" << QByteUtil::binToHexString(ba).toStdString() << std::endl; +// qDebug() << QString("[recv][%1]").arg(ba.size()) << QByteUtil::binToHexString(ba); emit dataRecieved(ba); } diff --git a/ChannelItem.cpp b/ChannelItem.cpp index aa8ae8b..3d26dea 100644 --- a/ChannelItem.cpp +++ b/ChannelItem.cpp @@ -11,6 +11,7 @@ ui->setupUi(this); QFont font("微软雅黑"); font.setPixelSize(16); + ui->delay->setFont(font); this->setProperty("form", "channel"); } @@ -20,6 +21,15 @@ delete ui; } +double ChannelItem::getChannelDelay() +{ + return channelDelay; +} +void ChannelItem::setChannelDelay(double value) +{ + channelDelay = value; + ui->delay->setValue(value); +} void ChannelItem::setIndex(int value) { @@ -29,21 +39,29 @@ void ChannelItem::updatePhaseMeasureData(PhaseDataDto * phaseData) { int size = phaseVector.at(index).size(); - double ps = phaseData->channelData.at(index) * 1e12; // 显示ps数据 -// ui->rawValue->setText(QString::number(ps, 'f', 3) + "ps"); // 原始数据显示单位为ps + double ps = phaseData->channelBeforeDelay.at(index) * 1e12; // 显示ps数据 + ui->rawValue->setText(QString::number(ps, 'f', 3) + "ps"); // 原始数据显示单位为ps + ui->channelValue->setText(QString::number(ps + channelDelay, 'f', 3) + "ps"); // 补偿值的单位也是ps, 补偿后也显示为ps ui->samplingOne->setText(QString::number(size)); ui->samplingTen->setText(QString::number((int)size/10)); ui->samplingHund->setText(QString::number((int)size/100)); ui->samplingThou->setText(QString::number((int)size/1000)); ui->samplingTT->setText(QString::number((int)size/10000)); - ui->stabilityOne->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(0), 'e', 4) : "0.0000"); // 科学计数法显示 - ui->stabilityTen->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(1), 'e', 4) : "0.0000"); - ui->stabilityHund->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(2), 'e', 4) : "0.0000"); - ui->stabilityThou->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(3), 'e', 4) : "0.0000"); - ui->stabilityTT->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(4), 'e', 4) : "0.0000"); + ui->stabilityOne->setText(QString::number(channelAllan.at(index).at(0), 'e', 4)); // 科学计数法显示 + ui->stabilityTen->setText(QString::number(channelAllan.at(index).at(1), 'e', 4)); + ui->stabilityHund->setText(QString::number(channelAllan.at(index).at(2), 'e', 4)); + ui->stabilityThou->setText(QString::number(channelAllan.at(index).at(3), 'e', 4)); + ui->stabilityTT->setText(QString::number(channelAllan.at(index).at(4), 'e', 4)); } +void ChannelItem::on_delay_valueChanged(int value) +{ + channelDelay = value; + SettingConfig::getInstance().DELAY_ARR.replace(index, QString("%1").arg(value)); + QString str = SettingConfig::getInstance().DELAY_ARR.join(","); + SettingConfig::getInstance().setConProperty("delay", "delayArr", str); +} void ChannelItem::on_clearDataButt_clicked() { diff --git a/ChannelItem.h b/ChannelItem.h index 5366f53..592dc97 100644 --- a/ChannelItem.h +++ b/ChannelItem.h @@ -22,16 +22,20 @@ explicit ChannelItem(QWidget *parent = nullptr); ~ChannelItem(); + double getChannelDelay(); void setIndex(int value); void updatePhaseMeasureData(PhaseDataDto * phaseData); + void setChannelDelay(double value); private slots: + void on_delay_valueChanged(int value); void on_clearDataButt_clicked(); void on_chartViewButt_clicked(); private: Ui::ChannelItem *ui; int index; + double channelDelay = 0.0; }; #endif // CHANNELITEM_H diff --git a/ChannelItem.ui b/ChannelItem.ui index 2818586..3547b99 100644 --- a/ChannelItem.ui +++ b/ChannelItem.ui @@ -7,13 +7,13 @@ 0 0 1300 - 125 + 160 0 - 125 + 160 @@ -22,9 +22,9 @@ - 30 + 430 0 - 80 + 81 20 @@ -60,9 +60,9 @@ - 30 + 430 50 - 1050 + 681 35 @@ -137,12 +137,12 @@ - 100 + 1000 - + 微软雅黑 @@ -158,7 +158,7 @@ - + 微软雅黑 @@ -173,75 +173,14 @@ - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 80 - 20 - - - - - - - - - 微软雅黑 - 12 - - - - 10000 - - - - - - - - 微软雅黑 - 12 - - - - 0 - - - Qt::AlignCenter - - - - - - - - 微软雅黑 - 12 - - - - 0.00 - - - Qt::AlignCenter - - - - 30 + 430 85 - 1050 + 681 35 @@ -316,12 +255,12 @@ - 1000 + 10000 - + 微软雅黑 @@ -337,7 +276,64 @@ - + + + + 微软雅黑 + 12 + + + + 0 + + + Qt::AlignCenter + + + + + + + + + 430 + 120 + 681 + 35 + + + + + + + + 微软雅黑 + 12 + + + + 100 + + + + + + + + 微软雅黑 + 12 + + + + 0.00 + + + Qt::AlignCenter + + + + + 微软雅黑 @@ -369,19 +365,6 @@ - - - - 微软雅黑 - 12 - - - - - - - - @@ -395,7 +378,7 @@ - + 微软雅黑 @@ -405,6 +388,25 @@ + + Qt::AlignCenter + + + + + + + + 微软雅黑 + 12 + + + + + + + Qt::AlignCenter + @@ -471,12 +473,146 @@ + + + + 60 + 10 + 101 + 160 + + + + + + + + 微软雅黑 + 12 + + + + 测量数据: + + + + + + + + 微软雅黑 + 12 + + + + 时延补偿: + + + + + + + + 微软雅黑 + 12 + + + + 补偿后值: + + + + + + + + 微软雅黑 + 12 + + + + 准确度: + + + + + + + + + 190 + 10 + 200 + 160 + + + + + + + + 微软雅黑 + 12 + + + + 0 ps + + + + + + + + 微软雅黑 + 12 + + + + ps + + + -9999 + + + 99999 + + + + + + + + 微软雅黑 + 12 + + + + 0 ps + + + + + + + + 微软雅黑 + 12 + + + + 0.00 + + + + + - 30 + 430 20 - 1050 + 681 41 @@ -587,67 +723,6 @@ - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 80 - 20 - - - - - - - - - 微软雅黑 - 12 - - - - Tau(s) - - - - - - - - 微软雅黑 - 12 - - - - Allen方差 - - - Qt::AlignCenter - - - - - - - - 微软雅黑 - 12 - - - - 采样数 - - - Qt::AlignCenter - - - diff --git a/PhaseDevice.cpp b/PhaseDevice.cpp index f8cda87..1bc0192 100644 --- a/PhaseDevice.cpp +++ b/PhaseDevice.cpp @@ -39,18 +39,26 @@ case 0: serialUtil = new QSerialPortUtil(this); - connect(serialUtil, &QSerialPortUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + QObject::connect(serialUtil, &QSerialPortUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); serialUtil->openSerialPort(SettingConfig::getInstance().PORT_NAME, SettingConfig::getInstance().BAUD_RATE); serialUtil->sendData(startCmd.toLocal8Bit()); return serialUtil->isOpen(); case 1: clientUtil = new UDPClientUtil(this); - connect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + QObject::connect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); clientUtil->sendData(startCmd.toLocal8Bit()); break; - default: - break; + + case 2: + clientUtil = new UDPClientUtil(this); + connect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + int len = clientUtil->sendData(startCmd.toLocal8Bit()); + if (len > 0) { + return true; + } else { + return false; + } } return false; @@ -69,6 +77,12 @@ clientUtil->sendData(stopCmd.toLocal8Bit()); disconnect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); break; + + case 2: + clientUtil->sendData(stopCmd.toLocal8Bit()); + disconnect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + break; + default: break; } @@ -93,8 +107,9 @@ { // 过滤前面几帧数据 frameCount++; - if (frameCount <= SettingConfig::getInstance().SKIP_HEADER) + if (frameCount < SettingConfig::getInstance().SKIP_HEADER) { + this->dataBuff.clear(); return ; } @@ -138,7 +153,7 @@ { // 3.1 计算补偿的值 phaseData->channelData[i] = phaseData->channelData.at(i); -// phaseData->channelDataStr[i] = QString::number(phaseData->channelData.at(i), 'f', 15); + phaseData->channelDataStr[i] = QString::number(phaseData->channelData.at(i), 'f', 15); // 3.2 将通道数据写日志 QString chFilename = QString("CH_%1.log").arg(i + 1, 2, 10, QLatin1Char('0')); diff --git a/PhaseWindow.cpp b/PhaseWindow.cpp index 0c9134a..c7786a4 100644 --- a/PhaseWindow.cpp +++ b/PhaseWindow.cpp @@ -75,9 +75,8 @@ qint16 screenHeight = screenRect.height(); // 设置窗口位置和大小 - move(screenWidth / 2 - 688, 50); -// resize(screenWidth, screenHeight); - resize(1366, screenHeight - 100); + move(screenWidth / 2 - 688, 0); + resize(1366, 768); // 设置最小和关闭按钮的样式 IconHelper::Instance()->setIcon(ui->btnMenuMin, QChar(0xf068)); @@ -185,6 +184,7 @@ ChannelItem * channelItem = new ChannelItem(); channelItem->setGeometry(10, 0, screenRect.width() - 60, 160); channelItem->setIndex(i); + channelItem->setChannelDelay(SettingConfig::getInstance().DELAY_ARR.at(i).toInt()); this->channelItemList.append(channelItem); vbox->addWidget(channelItem); group->setLayout(vbox); diff --git a/SetConfig.cpp b/SetConfig.cpp index 2e5e9be..277b0e7 100644 --- a/SetConfig.cpp +++ b/SetConfig.cpp @@ -47,7 +47,8 @@ ui->buttonBox->button(QDialogButtonBox::Cancel)->setText("取消"); ui->comTypeSelect->addItem("串口", ENUM_NET_TYPE::SERIAL); -// ui->comTypeSelect->addItem("UDP Server", ENUM_NET_TYPE::UDPServer); + ui->comTypeSelect->addItem("UDP Server", ENUM_NET_TYPE::UDPServer); + ui->comTypeSelect->addItem("UDP Client", ENUM_NET_TYPE::UDPClient); // 设置下拉框的样式 QStandardItemModel * model = qobject_cast(ui->comTypeSelect->model()); @@ -95,9 +96,18 @@ SettingConfig::getInstance().setConProperty("com", "portName", ui->comNameInput->text()); SettingConfig::getInstance().setConProperty("com", "baudRate", ui->comBaudInput->text()); break; + case 1: SettingConfig::getInstance().setConProperty("net", "listenPort", ui->netListenPortInput->text()); break; + + case 2: + if (ui->netIpInput->text().toUpper() == "LOCALHOST") { + ui->netIpInput->setText("127.0.0.1"); + } + SettingConfig::getInstance().setConProperty("net", "deviceHost", ui->netIpInput->text()); + SettingConfig::getInstance().setConProperty("net", "devicePort", ui->netDevPortInput->text()); + break; } SettingConfig::getInstance().init(); @@ -126,31 +136,45 @@ int currentIndx = ui->comTypeSelect->currentIndex(); switch (currentIndx) { case 0: - ui->labelComName->show(); - ui->labelComBaud->show(); - ui->labelNetIp->hide(); - ui->labelNetListenPort->hide(); - ui->labelNetDevPort->hide(); + ui->labelComName->show(); // 显示串口号 + ui->labelComBaud->show(); // 显示波特率 + ui->labelNetIp->hide(); // 隐藏设备IP(client模式) + ui->labelNetDevPort->hide(); // 隐藏设备端口(client模式) + ui->labelNetListenPort->hide(); // 隐藏监听端口(server模式) ui->comNameInput->show(); ui->comBaudInput->show(); ui->netIpInput->hide(); - ui->netListenPortInput->hide(); ui->netDevPortInput->hide(); + ui->netListenPortInput->hide(); break; case 1: - ui->labelComName->hide(); - ui->labelComBaud->hide(); - ui->labelNetIp->hide(); - ui->labelNetListenPort->show(); - ui->labelNetDevPort->hide(); + ui->labelComName->hide(); // 隐藏串口号 + ui->labelComBaud->hide(); // 隐藏波特率 + ui->labelNetIp->hide(); // 隐藏设备IP(client模式) + ui->labelNetDevPort->hide(); // 隐藏设备端口(client模式) + ui->labelNetListenPort->show(); // 显示监听端口(server模式) ui->comNameInput->hide(); ui->comBaudInput->hide(); ui->netIpInput->hide(); - ui->netListenPortInput->show(); ui->netDevPortInput->hide(); + ui->netListenPortInput->show(); + break; + + case 2: + ui->labelComName->hide(); // 隐藏串口号 + ui->labelComBaud->hide(); // 隐藏波特率 + ui->labelNetIp->show(); // 显示设备IP(client模式) + ui->labelNetDevPort->show(); // 显示设备端口(client模式) + ui->labelNetListenPort->hide(); // 隐藏监听端口(server模式) + + ui->comNameInput->hide(); + ui->comBaudInput->hide(); + ui->netIpInput->show(); + ui->netDevPortInput->show(); + ui->netListenPortInput->hide(); break; default: diff --git a/common/utils/SettingConfig.cpp b/common/utils/SettingConfig.cpp index d4919b4..10722e5 100644 --- a/common/utils/SettingConfig.cpp +++ b/common/utils/SettingConfig.cpp @@ -30,4 +30,6 @@ SKIP_HEADER = getProperty("dev", "skipHeader").toUInt(); BASE_LOG_PATH = getProperty("log", "basePath").toString(); + + DELAY_ARR = getProperty("delay", "delayArr").toString().split(","); } diff --git a/common/utils/SettingConfig.h b/common/utils/SettingConfig.h index 3a74617..bd0bef2 100644 --- a/common/utils/SettingConfig.h +++ b/common/utils/SettingConfig.h @@ -30,8 +30,8 @@ /******** 以下为需要的各类参数 ********/ int NET_TYPE; QString DEVICE_HOST; - quint16 DEVICE_PORT; - quint16 LISTEN_PORT; + int DEVICE_PORT; + int LISTEN_PORT; QString PORT_NAME; int BAUD_RATE; @@ -41,6 +41,8 @@ QString BASE_LOG_PATH; + QStringList DELAY_ARR; + private: SettingConfig(); diff --git a/common/utils/UDPClientUtil.cpp b/common/utils/UDPClientUtil.cpp index d772c3b..8eed638 100644 --- a/common/utils/UDPClientUtil.cpp +++ b/common/utils/UDPClientUtil.cpp @@ -5,7 +5,6 @@ UDPClientUtil::UDPClientUtil(QObject *parent) : QObject(parent) { client = new QUdpSocket(this); - connect(client, &QUdpSocket::readyRead, this, &UDPClientUtil::readData); } @@ -14,22 +13,22 @@ } -void UDPClientUtil::sendData(QByteArray data) +int UDPClientUtil::sendData(QByteArray data) { - client->writeDatagram(data, - QHostAddress(SettingConfig::getInstance().DEVICE_HOST), - SettingConfig::getInstance().DEVICE_PORT); - qDebug() << "[send]" << data; + qint64 len = client->writeDatagram(data.data(), data.size(), QHostAddress(SettingConfig::getInstance().DEVICE_HOST), SettingConfig::getInstance().DEVICE_PORT); + qDebug() << QString("[send][%1]").arg(len) << data; + return len; } void UDPClientUtil::readData() { +// qDebug() << "read data"; QByteArray ba; while(client->hasPendingDatagrams()) { ba.resize(client->pendingDatagramSize()); client->readDatagram(ba.data(), ba.size()); -// std::cout << "[recv]" << QByteUtil::binToHexString(ba).toStdString() << std::endl; +// qDebug() << QString("[recv][%1]").arg(ba.size()) << QByteUtil::binToHexString(ba); emit dataRecieved(ba); } diff --git a/common/utils/UDPClientUtil.h b/common/utils/UDPClientUtil.h index cf87e9d..f574f18 100644 --- a/common/utils/UDPClientUtil.h +++ b/common/utils/UDPClientUtil.h @@ -11,7 +11,7 @@ explicit UDPClientUtil(QObject *parent = nullptr); ~UDPClientUtil(); - void sendData(QByteArray); + int sendData(QByteArray); private: QUdpSocket * client; diff --git a/ChannelItem.cpp b/ChannelItem.cpp index aa8ae8b..3d26dea 100644 --- a/ChannelItem.cpp +++ b/ChannelItem.cpp @@ -11,6 +11,7 @@ ui->setupUi(this); QFont font("微软雅黑"); font.setPixelSize(16); + ui->delay->setFont(font); this->setProperty("form", "channel"); } @@ -20,6 +21,15 @@ delete ui; } +double ChannelItem::getChannelDelay() +{ + return channelDelay; +} +void ChannelItem::setChannelDelay(double value) +{ + channelDelay = value; + ui->delay->setValue(value); +} void ChannelItem::setIndex(int value) { @@ -29,21 +39,29 @@ void ChannelItem::updatePhaseMeasureData(PhaseDataDto * phaseData) { int size = phaseVector.at(index).size(); - double ps = phaseData->channelData.at(index) * 1e12; // 显示ps数据 -// ui->rawValue->setText(QString::number(ps, 'f', 3) + "ps"); // 原始数据显示单位为ps + double ps = phaseData->channelBeforeDelay.at(index) * 1e12; // 显示ps数据 + ui->rawValue->setText(QString::number(ps, 'f', 3) + "ps"); // 原始数据显示单位为ps + ui->channelValue->setText(QString::number(ps + channelDelay, 'f', 3) + "ps"); // 补偿值的单位也是ps, 补偿后也显示为ps ui->samplingOne->setText(QString::number(size)); ui->samplingTen->setText(QString::number((int)size/10)); ui->samplingHund->setText(QString::number((int)size/100)); ui->samplingThou->setText(QString::number((int)size/1000)); ui->samplingTT->setText(QString::number((int)size/10000)); - ui->stabilityOne->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(0), 'e', 4) : "0.0000"); // 科学计数法显示 - ui->stabilityTen->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(1), 'e', 4) : "0.0000"); - ui->stabilityHund->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(2), 'e', 4) : "0.0000"); - ui->stabilityThou->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(3), 'e', 4) : "0.0000"); - ui->stabilityTT->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(4), 'e', 4) : "0.0000"); + ui->stabilityOne->setText(QString::number(channelAllan.at(index).at(0), 'e', 4)); // 科学计数法显示 + ui->stabilityTen->setText(QString::number(channelAllan.at(index).at(1), 'e', 4)); + ui->stabilityHund->setText(QString::number(channelAllan.at(index).at(2), 'e', 4)); + ui->stabilityThou->setText(QString::number(channelAllan.at(index).at(3), 'e', 4)); + ui->stabilityTT->setText(QString::number(channelAllan.at(index).at(4), 'e', 4)); } +void ChannelItem::on_delay_valueChanged(int value) +{ + channelDelay = value; + SettingConfig::getInstance().DELAY_ARR.replace(index, QString("%1").arg(value)); + QString str = SettingConfig::getInstance().DELAY_ARR.join(","); + SettingConfig::getInstance().setConProperty("delay", "delayArr", str); +} void ChannelItem::on_clearDataButt_clicked() { diff --git a/ChannelItem.h b/ChannelItem.h index 5366f53..592dc97 100644 --- a/ChannelItem.h +++ b/ChannelItem.h @@ -22,16 +22,20 @@ explicit ChannelItem(QWidget *parent = nullptr); ~ChannelItem(); + double getChannelDelay(); void setIndex(int value); void updatePhaseMeasureData(PhaseDataDto * phaseData); + void setChannelDelay(double value); private slots: + void on_delay_valueChanged(int value); void on_clearDataButt_clicked(); void on_chartViewButt_clicked(); private: Ui::ChannelItem *ui; int index; + double channelDelay = 0.0; }; #endif // CHANNELITEM_H diff --git a/ChannelItem.ui b/ChannelItem.ui index 2818586..3547b99 100644 --- a/ChannelItem.ui +++ b/ChannelItem.ui @@ -7,13 +7,13 @@ 0 0 1300 - 125 + 160 0 - 125 + 160 @@ -22,9 +22,9 @@ - 30 + 430 0 - 80 + 81 20 @@ -60,9 +60,9 @@ - 30 + 430 50 - 1050 + 681 35 @@ -137,12 +137,12 @@ - 100 + 1000 - + 微软雅黑 @@ -158,7 +158,7 @@ - + 微软雅黑 @@ -173,75 +173,14 @@ - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 80 - 20 - - - - - - - - - 微软雅黑 - 12 - - - - 10000 - - - - - - - - 微软雅黑 - 12 - - - - 0 - - - Qt::AlignCenter - - - - - - - - 微软雅黑 - 12 - - - - 0.00 - - - Qt::AlignCenter - - - - 30 + 430 85 - 1050 + 681 35 @@ -316,12 +255,12 @@ - 1000 + 10000 - + 微软雅黑 @@ -337,7 +276,64 @@ - + + + + 微软雅黑 + 12 + + + + 0 + + + Qt::AlignCenter + + + + + + + + + 430 + 120 + 681 + 35 + + + + + + + + 微软雅黑 + 12 + + + + 100 + + + + + + + + 微软雅黑 + 12 + + + + 0.00 + + + Qt::AlignCenter + + + + + 微软雅黑 @@ -369,19 +365,6 @@ - - - - 微软雅黑 - 12 - - - - - - - - @@ -395,7 +378,7 @@ - + 微软雅黑 @@ -405,6 +388,25 @@ + + Qt::AlignCenter + + + + + + + + 微软雅黑 + 12 + + + + + + + Qt::AlignCenter + @@ -471,12 +473,146 @@ + + + + 60 + 10 + 101 + 160 + + + + + + + + 微软雅黑 + 12 + + + + 测量数据: + + + + + + + + 微软雅黑 + 12 + + + + 时延补偿: + + + + + + + + 微软雅黑 + 12 + + + + 补偿后值: + + + + + + + + 微软雅黑 + 12 + + + + 准确度: + + + + + + + + + 190 + 10 + 200 + 160 + + + + + + + + 微软雅黑 + 12 + + + + 0 ps + + + + + + + + 微软雅黑 + 12 + + + + ps + + + -9999 + + + 99999 + + + + + + + + 微软雅黑 + 12 + + + + 0 ps + + + + + + + + 微软雅黑 + 12 + + + + 0.00 + + + + + - 30 + 430 20 - 1050 + 681 41 @@ -587,67 +723,6 @@ - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 80 - 20 - - - - - - - - - 微软雅黑 - 12 - - - - Tau(s) - - - - - - - - 微软雅黑 - 12 - - - - Allen方差 - - - Qt::AlignCenter - - - - - - - - 微软雅黑 - 12 - - - - 采样数 - - - Qt::AlignCenter - - - diff --git a/PhaseDevice.cpp b/PhaseDevice.cpp index f8cda87..1bc0192 100644 --- a/PhaseDevice.cpp +++ b/PhaseDevice.cpp @@ -39,18 +39,26 @@ case 0: serialUtil = new QSerialPortUtil(this); - connect(serialUtil, &QSerialPortUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + QObject::connect(serialUtil, &QSerialPortUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); serialUtil->openSerialPort(SettingConfig::getInstance().PORT_NAME, SettingConfig::getInstance().BAUD_RATE); serialUtil->sendData(startCmd.toLocal8Bit()); return serialUtil->isOpen(); case 1: clientUtil = new UDPClientUtil(this); - connect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + QObject::connect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); clientUtil->sendData(startCmd.toLocal8Bit()); break; - default: - break; + + case 2: + clientUtil = new UDPClientUtil(this); + connect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + int len = clientUtil->sendData(startCmd.toLocal8Bit()); + if (len > 0) { + return true; + } else { + return false; + } } return false; @@ -69,6 +77,12 @@ clientUtil->sendData(stopCmd.toLocal8Bit()); disconnect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); break; + + case 2: + clientUtil->sendData(stopCmd.toLocal8Bit()); + disconnect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + break; + default: break; } @@ -93,8 +107,9 @@ { // 过滤前面几帧数据 frameCount++; - if (frameCount <= SettingConfig::getInstance().SKIP_HEADER) + if (frameCount < SettingConfig::getInstance().SKIP_HEADER) { + this->dataBuff.clear(); return ; } @@ -138,7 +153,7 @@ { // 3.1 计算补偿的值 phaseData->channelData[i] = phaseData->channelData.at(i); -// phaseData->channelDataStr[i] = QString::number(phaseData->channelData.at(i), 'f', 15); + phaseData->channelDataStr[i] = QString::number(phaseData->channelData.at(i), 'f', 15); // 3.2 将通道数据写日志 QString chFilename = QString("CH_%1.log").arg(i + 1, 2, 10, QLatin1Char('0')); diff --git a/PhaseWindow.cpp b/PhaseWindow.cpp index 0c9134a..c7786a4 100644 --- a/PhaseWindow.cpp +++ b/PhaseWindow.cpp @@ -75,9 +75,8 @@ qint16 screenHeight = screenRect.height(); // 设置窗口位置和大小 - move(screenWidth / 2 - 688, 50); -// resize(screenWidth, screenHeight); - resize(1366, screenHeight - 100); + move(screenWidth / 2 - 688, 0); + resize(1366, 768); // 设置最小和关闭按钮的样式 IconHelper::Instance()->setIcon(ui->btnMenuMin, QChar(0xf068)); @@ -185,6 +184,7 @@ ChannelItem * channelItem = new ChannelItem(); channelItem->setGeometry(10, 0, screenRect.width() - 60, 160); channelItem->setIndex(i); + channelItem->setChannelDelay(SettingConfig::getInstance().DELAY_ARR.at(i).toInt()); this->channelItemList.append(channelItem); vbox->addWidget(channelItem); group->setLayout(vbox); diff --git a/SetConfig.cpp b/SetConfig.cpp index 2e5e9be..277b0e7 100644 --- a/SetConfig.cpp +++ b/SetConfig.cpp @@ -47,7 +47,8 @@ ui->buttonBox->button(QDialogButtonBox::Cancel)->setText("取消"); ui->comTypeSelect->addItem("串口", ENUM_NET_TYPE::SERIAL); -// ui->comTypeSelect->addItem("UDP Server", ENUM_NET_TYPE::UDPServer); + ui->comTypeSelect->addItem("UDP Server", ENUM_NET_TYPE::UDPServer); + ui->comTypeSelect->addItem("UDP Client", ENUM_NET_TYPE::UDPClient); // 设置下拉框的样式 QStandardItemModel * model = qobject_cast(ui->comTypeSelect->model()); @@ -95,9 +96,18 @@ SettingConfig::getInstance().setConProperty("com", "portName", ui->comNameInput->text()); SettingConfig::getInstance().setConProperty("com", "baudRate", ui->comBaudInput->text()); break; + case 1: SettingConfig::getInstance().setConProperty("net", "listenPort", ui->netListenPortInput->text()); break; + + case 2: + if (ui->netIpInput->text().toUpper() == "LOCALHOST") { + ui->netIpInput->setText("127.0.0.1"); + } + SettingConfig::getInstance().setConProperty("net", "deviceHost", ui->netIpInput->text()); + SettingConfig::getInstance().setConProperty("net", "devicePort", ui->netDevPortInput->text()); + break; } SettingConfig::getInstance().init(); @@ -126,31 +136,45 @@ int currentIndx = ui->comTypeSelect->currentIndex(); switch (currentIndx) { case 0: - ui->labelComName->show(); - ui->labelComBaud->show(); - ui->labelNetIp->hide(); - ui->labelNetListenPort->hide(); - ui->labelNetDevPort->hide(); + ui->labelComName->show(); // 显示串口号 + ui->labelComBaud->show(); // 显示波特率 + ui->labelNetIp->hide(); // 隐藏设备IP(client模式) + ui->labelNetDevPort->hide(); // 隐藏设备端口(client模式) + ui->labelNetListenPort->hide(); // 隐藏监听端口(server模式) ui->comNameInput->show(); ui->comBaudInput->show(); ui->netIpInput->hide(); - ui->netListenPortInput->hide(); ui->netDevPortInput->hide(); + ui->netListenPortInput->hide(); break; case 1: - ui->labelComName->hide(); - ui->labelComBaud->hide(); - ui->labelNetIp->hide(); - ui->labelNetListenPort->show(); - ui->labelNetDevPort->hide(); + ui->labelComName->hide(); // 隐藏串口号 + ui->labelComBaud->hide(); // 隐藏波特率 + ui->labelNetIp->hide(); // 隐藏设备IP(client模式) + ui->labelNetDevPort->hide(); // 隐藏设备端口(client模式) + ui->labelNetListenPort->show(); // 显示监听端口(server模式) ui->comNameInput->hide(); ui->comBaudInput->hide(); ui->netIpInput->hide(); - ui->netListenPortInput->show(); ui->netDevPortInput->hide(); + ui->netListenPortInput->show(); + break; + + case 2: + ui->labelComName->hide(); // 隐藏串口号 + ui->labelComBaud->hide(); // 隐藏波特率 + ui->labelNetIp->show(); // 显示设备IP(client模式) + ui->labelNetDevPort->show(); // 显示设备端口(client模式) + ui->labelNetListenPort->hide(); // 隐藏监听端口(server模式) + + ui->comNameInput->hide(); + ui->comBaudInput->hide(); + ui->netIpInput->show(); + ui->netDevPortInput->show(); + ui->netListenPortInput->hide(); break; default: diff --git a/common/utils/SettingConfig.cpp b/common/utils/SettingConfig.cpp index d4919b4..10722e5 100644 --- a/common/utils/SettingConfig.cpp +++ b/common/utils/SettingConfig.cpp @@ -30,4 +30,6 @@ SKIP_HEADER = getProperty("dev", "skipHeader").toUInt(); BASE_LOG_PATH = getProperty("log", "basePath").toString(); + + DELAY_ARR = getProperty("delay", "delayArr").toString().split(","); } diff --git a/common/utils/SettingConfig.h b/common/utils/SettingConfig.h index 3a74617..bd0bef2 100644 --- a/common/utils/SettingConfig.h +++ b/common/utils/SettingConfig.h @@ -30,8 +30,8 @@ /******** 以下为需要的各类参数 ********/ int NET_TYPE; QString DEVICE_HOST; - quint16 DEVICE_PORT; - quint16 LISTEN_PORT; + int DEVICE_PORT; + int LISTEN_PORT; QString PORT_NAME; int BAUD_RATE; @@ -41,6 +41,8 @@ QString BASE_LOG_PATH; + QStringList DELAY_ARR; + private: SettingConfig(); diff --git a/common/utils/UDPClientUtil.cpp b/common/utils/UDPClientUtil.cpp index d772c3b..8eed638 100644 --- a/common/utils/UDPClientUtil.cpp +++ b/common/utils/UDPClientUtil.cpp @@ -5,7 +5,6 @@ UDPClientUtil::UDPClientUtil(QObject *parent) : QObject(parent) { client = new QUdpSocket(this); - connect(client, &QUdpSocket::readyRead, this, &UDPClientUtil::readData); } @@ -14,22 +13,22 @@ } -void UDPClientUtil::sendData(QByteArray data) +int UDPClientUtil::sendData(QByteArray data) { - client->writeDatagram(data, - QHostAddress(SettingConfig::getInstance().DEVICE_HOST), - SettingConfig::getInstance().DEVICE_PORT); - qDebug() << "[send]" << data; + qint64 len = client->writeDatagram(data.data(), data.size(), QHostAddress(SettingConfig::getInstance().DEVICE_HOST), SettingConfig::getInstance().DEVICE_PORT); + qDebug() << QString("[send][%1]").arg(len) << data; + return len; } void UDPClientUtil::readData() { +// qDebug() << "read data"; QByteArray ba; while(client->hasPendingDatagrams()) { ba.resize(client->pendingDatagramSize()); client->readDatagram(ba.data(), ba.size()); -// std::cout << "[recv]" << QByteUtil::binToHexString(ba).toStdString() << std::endl; +// qDebug() << QString("[recv][%1]").arg(ba.size()) << QByteUtil::binToHexString(ba); emit dataRecieved(ba); } diff --git a/common/utils/UDPClientUtil.h b/common/utils/UDPClientUtil.h index cf87e9d..f574f18 100644 --- a/common/utils/UDPClientUtil.h +++ b/common/utils/UDPClientUtil.h @@ -11,7 +11,7 @@ explicit UDPClientUtil(QObject *parent = nullptr); ~UDPClientUtil(); - void sendData(QByteArray); + int sendData(QByteArray); private: QUdpSocket * client; diff --git a/conf/config.ini b/conf/config.ini index 3d60894..6bd4673 100644 --- a/conf/config.ini +++ b/conf/config.ini @@ -1,4 +1,4 @@ -[net] +[net] deviceHost=192.168.1.20 devicePort=233 listenPort=24331 @@ -14,3 +14,6 @@ [log] basePath=C:/casic/logs/ + +[delay] +delayArr="0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00" diff --git a/ChannelItem.cpp b/ChannelItem.cpp index aa8ae8b..3d26dea 100644 --- a/ChannelItem.cpp +++ b/ChannelItem.cpp @@ -11,6 +11,7 @@ ui->setupUi(this); QFont font("微软雅黑"); font.setPixelSize(16); + ui->delay->setFont(font); this->setProperty("form", "channel"); } @@ -20,6 +21,15 @@ delete ui; } +double ChannelItem::getChannelDelay() +{ + return channelDelay; +} +void ChannelItem::setChannelDelay(double value) +{ + channelDelay = value; + ui->delay->setValue(value); +} void ChannelItem::setIndex(int value) { @@ -29,21 +39,29 @@ void ChannelItem::updatePhaseMeasureData(PhaseDataDto * phaseData) { int size = phaseVector.at(index).size(); - double ps = phaseData->channelData.at(index) * 1e12; // 显示ps数据 -// ui->rawValue->setText(QString::number(ps, 'f', 3) + "ps"); // 原始数据显示单位为ps + double ps = phaseData->channelBeforeDelay.at(index) * 1e12; // 显示ps数据 + ui->rawValue->setText(QString::number(ps, 'f', 3) + "ps"); // 原始数据显示单位为ps + ui->channelValue->setText(QString::number(ps + channelDelay, 'f', 3) + "ps"); // 补偿值的单位也是ps, 补偿后也显示为ps ui->samplingOne->setText(QString::number(size)); ui->samplingTen->setText(QString::number((int)size/10)); ui->samplingHund->setText(QString::number((int)size/100)); ui->samplingThou->setText(QString::number((int)size/1000)); ui->samplingTT->setText(QString::number((int)size/10000)); - ui->stabilityOne->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(0), 'e', 4) : "0.0000"); // 科学计数法显示 - ui->stabilityTen->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(1), 'e', 4) : "0.0000"); - ui->stabilityHund->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(2), 'e', 4) : "0.0000"); - ui->stabilityThou->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(3), 'e', 4) : "0.0000"); - ui->stabilityTT->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(4), 'e', 4) : "0.0000"); + ui->stabilityOne->setText(QString::number(channelAllan.at(index).at(0), 'e', 4)); // 科学计数法显示 + ui->stabilityTen->setText(QString::number(channelAllan.at(index).at(1), 'e', 4)); + ui->stabilityHund->setText(QString::number(channelAllan.at(index).at(2), 'e', 4)); + ui->stabilityThou->setText(QString::number(channelAllan.at(index).at(3), 'e', 4)); + ui->stabilityTT->setText(QString::number(channelAllan.at(index).at(4), 'e', 4)); } +void ChannelItem::on_delay_valueChanged(int value) +{ + channelDelay = value; + SettingConfig::getInstance().DELAY_ARR.replace(index, QString("%1").arg(value)); + QString str = SettingConfig::getInstance().DELAY_ARR.join(","); + SettingConfig::getInstance().setConProperty("delay", "delayArr", str); +} void ChannelItem::on_clearDataButt_clicked() { diff --git a/ChannelItem.h b/ChannelItem.h index 5366f53..592dc97 100644 --- a/ChannelItem.h +++ b/ChannelItem.h @@ -22,16 +22,20 @@ explicit ChannelItem(QWidget *parent = nullptr); ~ChannelItem(); + double getChannelDelay(); void setIndex(int value); void updatePhaseMeasureData(PhaseDataDto * phaseData); + void setChannelDelay(double value); private slots: + void on_delay_valueChanged(int value); void on_clearDataButt_clicked(); void on_chartViewButt_clicked(); private: Ui::ChannelItem *ui; int index; + double channelDelay = 0.0; }; #endif // CHANNELITEM_H diff --git a/ChannelItem.ui b/ChannelItem.ui index 2818586..3547b99 100644 --- a/ChannelItem.ui +++ b/ChannelItem.ui @@ -7,13 +7,13 @@ 0 0 1300 - 125 + 160 0 - 125 + 160 @@ -22,9 +22,9 @@ - 30 + 430 0 - 80 + 81 20 @@ -60,9 +60,9 @@ - 30 + 430 50 - 1050 + 681 35 @@ -137,12 +137,12 @@ - 100 + 1000 - + 微软雅黑 @@ -158,7 +158,7 @@ - + 微软雅黑 @@ -173,75 +173,14 @@ - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 80 - 20 - - - - - - - - - 微软雅黑 - 12 - - - - 10000 - - - - - - - - 微软雅黑 - 12 - - - - 0 - - - Qt::AlignCenter - - - - - - - - 微软雅黑 - 12 - - - - 0.00 - - - Qt::AlignCenter - - - - 30 + 430 85 - 1050 + 681 35 @@ -316,12 +255,12 @@ - 1000 + 10000 - + 微软雅黑 @@ -337,7 +276,64 @@ - + + + + 微软雅黑 + 12 + + + + 0 + + + Qt::AlignCenter + + + + + + + + + 430 + 120 + 681 + 35 + + + + + + + + 微软雅黑 + 12 + + + + 100 + + + + + + + + 微软雅黑 + 12 + + + + 0.00 + + + Qt::AlignCenter + + + + + 微软雅黑 @@ -369,19 +365,6 @@ - - - - 微软雅黑 - 12 - - - - - - - - @@ -395,7 +378,7 @@ - + 微软雅黑 @@ -405,6 +388,25 @@ + + Qt::AlignCenter + + + + + + + + 微软雅黑 + 12 + + + + + + + Qt::AlignCenter + @@ -471,12 +473,146 @@ + + + + 60 + 10 + 101 + 160 + + + + + + + + 微软雅黑 + 12 + + + + 测量数据: + + + + + + + + 微软雅黑 + 12 + + + + 时延补偿: + + + + + + + + 微软雅黑 + 12 + + + + 补偿后值: + + + + + + + + 微软雅黑 + 12 + + + + 准确度: + + + + + + + + + 190 + 10 + 200 + 160 + + + + + + + + 微软雅黑 + 12 + + + + 0 ps + + + + + + + + 微软雅黑 + 12 + + + + ps + + + -9999 + + + 99999 + + + + + + + + 微软雅黑 + 12 + + + + 0 ps + + + + + + + + 微软雅黑 + 12 + + + + 0.00 + + + + + - 30 + 430 20 - 1050 + 681 41 @@ -587,67 +723,6 @@ - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 80 - 20 - - - - - - - - - 微软雅黑 - 12 - - - - Tau(s) - - - - - - - - 微软雅黑 - 12 - - - - Allen方差 - - - Qt::AlignCenter - - - - - - - - 微软雅黑 - 12 - - - - 采样数 - - - Qt::AlignCenter - - - diff --git a/PhaseDevice.cpp b/PhaseDevice.cpp index f8cda87..1bc0192 100644 --- a/PhaseDevice.cpp +++ b/PhaseDevice.cpp @@ -39,18 +39,26 @@ case 0: serialUtil = new QSerialPortUtil(this); - connect(serialUtil, &QSerialPortUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + QObject::connect(serialUtil, &QSerialPortUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); serialUtil->openSerialPort(SettingConfig::getInstance().PORT_NAME, SettingConfig::getInstance().BAUD_RATE); serialUtil->sendData(startCmd.toLocal8Bit()); return serialUtil->isOpen(); case 1: clientUtil = new UDPClientUtil(this); - connect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + QObject::connect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); clientUtil->sendData(startCmd.toLocal8Bit()); break; - default: - break; + + case 2: + clientUtil = new UDPClientUtil(this); + connect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + int len = clientUtil->sendData(startCmd.toLocal8Bit()); + if (len > 0) { + return true; + } else { + return false; + } } return false; @@ -69,6 +77,12 @@ clientUtil->sendData(stopCmd.toLocal8Bit()); disconnect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); break; + + case 2: + clientUtil->sendData(stopCmd.toLocal8Bit()); + disconnect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + break; + default: break; } @@ -93,8 +107,9 @@ { // 过滤前面几帧数据 frameCount++; - if (frameCount <= SettingConfig::getInstance().SKIP_HEADER) + if (frameCount < SettingConfig::getInstance().SKIP_HEADER) { + this->dataBuff.clear(); return ; } @@ -138,7 +153,7 @@ { // 3.1 计算补偿的值 phaseData->channelData[i] = phaseData->channelData.at(i); -// phaseData->channelDataStr[i] = QString::number(phaseData->channelData.at(i), 'f', 15); + phaseData->channelDataStr[i] = QString::number(phaseData->channelData.at(i), 'f', 15); // 3.2 将通道数据写日志 QString chFilename = QString("CH_%1.log").arg(i + 1, 2, 10, QLatin1Char('0')); diff --git a/PhaseWindow.cpp b/PhaseWindow.cpp index 0c9134a..c7786a4 100644 --- a/PhaseWindow.cpp +++ b/PhaseWindow.cpp @@ -75,9 +75,8 @@ qint16 screenHeight = screenRect.height(); // 设置窗口位置和大小 - move(screenWidth / 2 - 688, 50); -// resize(screenWidth, screenHeight); - resize(1366, screenHeight - 100); + move(screenWidth / 2 - 688, 0); + resize(1366, 768); // 设置最小和关闭按钮的样式 IconHelper::Instance()->setIcon(ui->btnMenuMin, QChar(0xf068)); @@ -185,6 +184,7 @@ ChannelItem * channelItem = new ChannelItem(); channelItem->setGeometry(10, 0, screenRect.width() - 60, 160); channelItem->setIndex(i); + channelItem->setChannelDelay(SettingConfig::getInstance().DELAY_ARR.at(i).toInt()); this->channelItemList.append(channelItem); vbox->addWidget(channelItem); group->setLayout(vbox); diff --git a/SetConfig.cpp b/SetConfig.cpp index 2e5e9be..277b0e7 100644 --- a/SetConfig.cpp +++ b/SetConfig.cpp @@ -47,7 +47,8 @@ ui->buttonBox->button(QDialogButtonBox::Cancel)->setText("取消"); ui->comTypeSelect->addItem("串口", ENUM_NET_TYPE::SERIAL); -// ui->comTypeSelect->addItem("UDP Server", ENUM_NET_TYPE::UDPServer); + ui->comTypeSelect->addItem("UDP Server", ENUM_NET_TYPE::UDPServer); + ui->comTypeSelect->addItem("UDP Client", ENUM_NET_TYPE::UDPClient); // 设置下拉框的样式 QStandardItemModel * model = qobject_cast(ui->comTypeSelect->model()); @@ -95,9 +96,18 @@ SettingConfig::getInstance().setConProperty("com", "portName", ui->comNameInput->text()); SettingConfig::getInstance().setConProperty("com", "baudRate", ui->comBaudInput->text()); break; + case 1: SettingConfig::getInstance().setConProperty("net", "listenPort", ui->netListenPortInput->text()); break; + + case 2: + if (ui->netIpInput->text().toUpper() == "LOCALHOST") { + ui->netIpInput->setText("127.0.0.1"); + } + SettingConfig::getInstance().setConProperty("net", "deviceHost", ui->netIpInput->text()); + SettingConfig::getInstance().setConProperty("net", "devicePort", ui->netDevPortInput->text()); + break; } SettingConfig::getInstance().init(); @@ -126,31 +136,45 @@ int currentIndx = ui->comTypeSelect->currentIndex(); switch (currentIndx) { case 0: - ui->labelComName->show(); - ui->labelComBaud->show(); - ui->labelNetIp->hide(); - ui->labelNetListenPort->hide(); - ui->labelNetDevPort->hide(); + ui->labelComName->show(); // 显示串口号 + ui->labelComBaud->show(); // 显示波特率 + ui->labelNetIp->hide(); // 隐藏设备IP(client模式) + ui->labelNetDevPort->hide(); // 隐藏设备端口(client模式) + ui->labelNetListenPort->hide(); // 隐藏监听端口(server模式) ui->comNameInput->show(); ui->comBaudInput->show(); ui->netIpInput->hide(); - ui->netListenPortInput->hide(); ui->netDevPortInput->hide(); + ui->netListenPortInput->hide(); break; case 1: - ui->labelComName->hide(); - ui->labelComBaud->hide(); - ui->labelNetIp->hide(); - ui->labelNetListenPort->show(); - ui->labelNetDevPort->hide(); + ui->labelComName->hide(); // 隐藏串口号 + ui->labelComBaud->hide(); // 隐藏波特率 + ui->labelNetIp->hide(); // 隐藏设备IP(client模式) + ui->labelNetDevPort->hide(); // 隐藏设备端口(client模式) + ui->labelNetListenPort->show(); // 显示监听端口(server模式) ui->comNameInput->hide(); ui->comBaudInput->hide(); ui->netIpInput->hide(); - ui->netListenPortInput->show(); ui->netDevPortInput->hide(); + ui->netListenPortInput->show(); + break; + + case 2: + ui->labelComName->hide(); // 隐藏串口号 + ui->labelComBaud->hide(); // 隐藏波特率 + ui->labelNetIp->show(); // 显示设备IP(client模式) + ui->labelNetDevPort->show(); // 显示设备端口(client模式) + ui->labelNetListenPort->hide(); // 隐藏监听端口(server模式) + + ui->comNameInput->hide(); + ui->comBaudInput->hide(); + ui->netIpInput->show(); + ui->netDevPortInput->show(); + ui->netListenPortInput->hide(); break; default: diff --git a/common/utils/SettingConfig.cpp b/common/utils/SettingConfig.cpp index d4919b4..10722e5 100644 --- a/common/utils/SettingConfig.cpp +++ b/common/utils/SettingConfig.cpp @@ -30,4 +30,6 @@ SKIP_HEADER = getProperty("dev", "skipHeader").toUInt(); BASE_LOG_PATH = getProperty("log", "basePath").toString(); + + DELAY_ARR = getProperty("delay", "delayArr").toString().split(","); } diff --git a/common/utils/SettingConfig.h b/common/utils/SettingConfig.h index 3a74617..bd0bef2 100644 --- a/common/utils/SettingConfig.h +++ b/common/utils/SettingConfig.h @@ -30,8 +30,8 @@ /******** 以下为需要的各类参数 ********/ int NET_TYPE; QString DEVICE_HOST; - quint16 DEVICE_PORT; - quint16 LISTEN_PORT; + int DEVICE_PORT; + int LISTEN_PORT; QString PORT_NAME; int BAUD_RATE; @@ -41,6 +41,8 @@ QString BASE_LOG_PATH; + QStringList DELAY_ARR; + private: SettingConfig(); diff --git a/common/utils/UDPClientUtil.cpp b/common/utils/UDPClientUtil.cpp index d772c3b..8eed638 100644 --- a/common/utils/UDPClientUtil.cpp +++ b/common/utils/UDPClientUtil.cpp @@ -5,7 +5,6 @@ UDPClientUtil::UDPClientUtil(QObject *parent) : QObject(parent) { client = new QUdpSocket(this); - connect(client, &QUdpSocket::readyRead, this, &UDPClientUtil::readData); } @@ -14,22 +13,22 @@ } -void UDPClientUtil::sendData(QByteArray data) +int UDPClientUtil::sendData(QByteArray data) { - client->writeDatagram(data, - QHostAddress(SettingConfig::getInstance().DEVICE_HOST), - SettingConfig::getInstance().DEVICE_PORT); - qDebug() << "[send]" << data; + qint64 len = client->writeDatagram(data.data(), data.size(), QHostAddress(SettingConfig::getInstance().DEVICE_HOST), SettingConfig::getInstance().DEVICE_PORT); + qDebug() << QString("[send][%1]").arg(len) << data; + return len; } void UDPClientUtil::readData() { +// qDebug() << "read data"; QByteArray ba; while(client->hasPendingDatagrams()) { ba.resize(client->pendingDatagramSize()); client->readDatagram(ba.data(), ba.size()); -// std::cout << "[recv]" << QByteUtil::binToHexString(ba).toStdString() << std::endl; +// qDebug() << QString("[recv][%1]").arg(ba.size()) << QByteUtil::binToHexString(ba); emit dataRecieved(ba); } diff --git a/common/utils/UDPClientUtil.h b/common/utils/UDPClientUtil.h index cf87e9d..f574f18 100644 --- a/common/utils/UDPClientUtil.h +++ b/common/utils/UDPClientUtil.h @@ -11,7 +11,7 @@ explicit UDPClientUtil(QObject *parent = nullptr); ~UDPClientUtil(); - void sendData(QByteArray); + int sendData(QByteArray); private: QUdpSocket * client; diff --git a/conf/config.ini b/conf/config.ini index 3d60894..6bd4673 100644 --- a/conf/config.ini +++ b/conf/config.ini @@ -1,4 +1,4 @@ -[net] +[net] deviceHost=192.168.1.20 devicePort=233 listenPort=24331 @@ -14,3 +14,6 @@ [log] basePath=C:/casic/logs/ + +[delay] +delayArr="0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00" diff --git a/protocol/PhaseProtocolBM.cpp b/protocol/PhaseProtocolBM.cpp index 3960f9a..07fdbf5 100644 --- a/protocol/PhaseProtocolBM.cpp +++ b/protocol/PhaseProtocolBM.cpp @@ -37,22 +37,25 @@ { dataObj->channelActive.append("0"); // dataObj->rawPhaseDiffData.append(0); + dataObj->channelBeforeDelay.append(0.00); dataObj->channelData.append(0.00); -// dataObj->channelDataStr.append("0.00"); + dataObj->channelDataStr.append("0.00"); } else if (channelRawData > CALCULATE_OFFSET) { double phase = (channelRawData - CALCULATE_OFFSET) * CALCULATE_FACTOR; dataObj->channelActive.append("1"); // dataObj->rawPhaseDiffData.append(channelRawData - CALCULATE_OFFSET); + dataObj->channelBeforeDelay.append(phase); dataObj->channelData.append(phase); // 暂时不加补偿值,界面显示时再计算补偿后的值 -// dataObj->channelDataStr.append(QString::number(phase, 'f', 15)); + dataObj->channelDataStr.append(QString::number(phase, 'f', 15)); } else { double phase = -1.0 * (CALCULATE_OFFSET - channelRawData) * CALCULATE_FACTOR; // rawData是无符号long 相位有正有负 小于CALCULATE_OFFSET时是负值 dataObj->channelActive.append("1"); // dataObj->rawPhaseDiffData.append(channelRawData - CALCULATE_OFFSET); + dataObj->channelBeforeDelay.append(phase); dataObj->channelData.append(phase); // 暂时不加补偿值,界面显示时再计算补偿后的值 -// dataObj->channelDataStr.append(QString::number(phase, 'f', 15)); + dataObj->channelDataStr.append(QString::number(phase, 'f', 15)); } } diff --git a/ChannelItem.cpp b/ChannelItem.cpp index aa8ae8b..3d26dea 100644 --- a/ChannelItem.cpp +++ b/ChannelItem.cpp @@ -11,6 +11,7 @@ ui->setupUi(this); QFont font("微软雅黑"); font.setPixelSize(16); + ui->delay->setFont(font); this->setProperty("form", "channel"); } @@ -20,6 +21,15 @@ delete ui; } +double ChannelItem::getChannelDelay() +{ + return channelDelay; +} +void ChannelItem::setChannelDelay(double value) +{ + channelDelay = value; + ui->delay->setValue(value); +} void ChannelItem::setIndex(int value) { @@ -29,21 +39,29 @@ void ChannelItem::updatePhaseMeasureData(PhaseDataDto * phaseData) { int size = phaseVector.at(index).size(); - double ps = phaseData->channelData.at(index) * 1e12; // 显示ps数据 -// ui->rawValue->setText(QString::number(ps, 'f', 3) + "ps"); // 原始数据显示单位为ps + double ps = phaseData->channelBeforeDelay.at(index) * 1e12; // 显示ps数据 + ui->rawValue->setText(QString::number(ps, 'f', 3) + "ps"); // 原始数据显示单位为ps + ui->channelValue->setText(QString::number(ps + channelDelay, 'f', 3) + "ps"); // 补偿值的单位也是ps, 补偿后也显示为ps ui->samplingOne->setText(QString::number(size)); ui->samplingTen->setText(QString::number((int)size/10)); ui->samplingHund->setText(QString::number((int)size/100)); ui->samplingThou->setText(QString::number((int)size/1000)); ui->samplingTT->setText(QString::number((int)size/10000)); - ui->stabilityOne->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(0), 'e', 4) : "0.0000"); // 科学计数法显示 - ui->stabilityTen->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(1), 'e', 4) : "0.0000"); - ui->stabilityHund->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(2), 'e', 4) : "0.0000"); - ui->stabilityThou->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(3), 'e', 4) : "0.0000"); - ui->stabilityTT->setText(channelAllan.at(index).isEmpty() == false ? QString::number(channelAllan.at(index).at(4), 'e', 4) : "0.0000"); + ui->stabilityOne->setText(QString::number(channelAllan.at(index).at(0), 'e', 4)); // 科学计数法显示 + ui->stabilityTen->setText(QString::number(channelAllan.at(index).at(1), 'e', 4)); + ui->stabilityHund->setText(QString::number(channelAllan.at(index).at(2), 'e', 4)); + ui->stabilityThou->setText(QString::number(channelAllan.at(index).at(3), 'e', 4)); + ui->stabilityTT->setText(QString::number(channelAllan.at(index).at(4), 'e', 4)); } +void ChannelItem::on_delay_valueChanged(int value) +{ + channelDelay = value; + SettingConfig::getInstance().DELAY_ARR.replace(index, QString("%1").arg(value)); + QString str = SettingConfig::getInstance().DELAY_ARR.join(","); + SettingConfig::getInstance().setConProperty("delay", "delayArr", str); +} void ChannelItem::on_clearDataButt_clicked() { diff --git a/ChannelItem.h b/ChannelItem.h index 5366f53..592dc97 100644 --- a/ChannelItem.h +++ b/ChannelItem.h @@ -22,16 +22,20 @@ explicit ChannelItem(QWidget *parent = nullptr); ~ChannelItem(); + double getChannelDelay(); void setIndex(int value); void updatePhaseMeasureData(PhaseDataDto * phaseData); + void setChannelDelay(double value); private slots: + void on_delay_valueChanged(int value); void on_clearDataButt_clicked(); void on_chartViewButt_clicked(); private: Ui::ChannelItem *ui; int index; + double channelDelay = 0.0; }; #endif // CHANNELITEM_H diff --git a/ChannelItem.ui b/ChannelItem.ui index 2818586..3547b99 100644 --- a/ChannelItem.ui +++ b/ChannelItem.ui @@ -7,13 +7,13 @@ 0 0 1300 - 125 + 160 0 - 125 + 160 @@ -22,9 +22,9 @@ - 30 + 430 0 - 80 + 81 20 @@ -60,9 +60,9 @@ - 30 + 430 50 - 1050 + 681 35 @@ -137,12 +137,12 @@ - 100 + 1000 - + 微软雅黑 @@ -158,7 +158,7 @@ - + 微软雅黑 @@ -173,75 +173,14 @@ - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 80 - 20 - - - - - - - - - 微软雅黑 - 12 - - - - 10000 - - - - - - - - 微软雅黑 - 12 - - - - 0 - - - Qt::AlignCenter - - - - - - - - 微软雅黑 - 12 - - - - 0.00 - - - Qt::AlignCenter - - - - 30 + 430 85 - 1050 + 681 35 @@ -316,12 +255,12 @@ - 1000 + 10000 - + 微软雅黑 @@ -337,7 +276,64 @@ - + + + + 微软雅黑 + 12 + + + + 0 + + + Qt::AlignCenter + + + + + + + + + 430 + 120 + 681 + 35 + + + + + + + + 微软雅黑 + 12 + + + + 100 + + + + + + + + 微软雅黑 + 12 + + + + 0.00 + + + Qt::AlignCenter + + + + + 微软雅黑 @@ -369,19 +365,6 @@ - - - - 微软雅黑 - 12 - - - - - - - - @@ -395,7 +378,7 @@ - + 微软雅黑 @@ -405,6 +388,25 @@ + + Qt::AlignCenter + + + + + + + + 微软雅黑 + 12 + + + + + + + Qt::AlignCenter + @@ -471,12 +473,146 @@ + + + + 60 + 10 + 101 + 160 + + + + + + + + 微软雅黑 + 12 + + + + 测量数据: + + + + + + + + 微软雅黑 + 12 + + + + 时延补偿: + + + + + + + + 微软雅黑 + 12 + + + + 补偿后值: + + + + + + + + 微软雅黑 + 12 + + + + 准确度: + + + + + + + + + 190 + 10 + 200 + 160 + + + + + + + + 微软雅黑 + 12 + + + + 0 ps + + + + + + + + 微软雅黑 + 12 + + + + ps + + + -9999 + + + 99999 + + + + + + + + 微软雅黑 + 12 + + + + 0 ps + + + + + + + + 微软雅黑 + 12 + + + + 0.00 + + + + + - 30 + 430 20 - 1050 + 681 41 @@ -587,67 +723,6 @@ - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 80 - 20 - - - - - - - - - 微软雅黑 - 12 - - - - Tau(s) - - - - - - - - 微软雅黑 - 12 - - - - Allen方差 - - - Qt::AlignCenter - - - - - - - - 微软雅黑 - 12 - - - - 采样数 - - - Qt::AlignCenter - - - diff --git a/PhaseDevice.cpp b/PhaseDevice.cpp index f8cda87..1bc0192 100644 --- a/PhaseDevice.cpp +++ b/PhaseDevice.cpp @@ -39,18 +39,26 @@ case 0: serialUtil = new QSerialPortUtil(this); - connect(serialUtil, &QSerialPortUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + QObject::connect(serialUtil, &QSerialPortUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); serialUtil->openSerialPort(SettingConfig::getInstance().PORT_NAME, SettingConfig::getInstance().BAUD_RATE); serialUtil->sendData(startCmd.toLocal8Bit()); return serialUtil->isOpen(); case 1: clientUtil = new UDPClientUtil(this); - connect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + QObject::connect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); clientUtil->sendData(startCmd.toLocal8Bit()); break; - default: - break; + + case 2: + clientUtil = new UDPClientUtil(this); + connect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + int len = clientUtil->sendData(startCmd.toLocal8Bit()); + if (len > 0) { + return true; + } else { + return false; + } } return false; @@ -69,6 +77,12 @@ clientUtil->sendData(stopCmd.toLocal8Bit()); disconnect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); break; + + case 2: + clientUtil->sendData(stopCmd.toLocal8Bit()); + disconnect(clientUtil, &UDPClientUtil::dataRecieved, this, &PhaseDevice::dataReceivedHandler); + break; + default: break; } @@ -93,8 +107,9 @@ { // 过滤前面几帧数据 frameCount++; - if (frameCount <= SettingConfig::getInstance().SKIP_HEADER) + if (frameCount < SettingConfig::getInstance().SKIP_HEADER) { + this->dataBuff.clear(); return ; } @@ -138,7 +153,7 @@ { // 3.1 计算补偿的值 phaseData->channelData[i] = phaseData->channelData.at(i); -// phaseData->channelDataStr[i] = QString::number(phaseData->channelData.at(i), 'f', 15); + phaseData->channelDataStr[i] = QString::number(phaseData->channelData.at(i), 'f', 15); // 3.2 将通道数据写日志 QString chFilename = QString("CH_%1.log").arg(i + 1, 2, 10, QLatin1Char('0')); diff --git a/PhaseWindow.cpp b/PhaseWindow.cpp index 0c9134a..c7786a4 100644 --- a/PhaseWindow.cpp +++ b/PhaseWindow.cpp @@ -75,9 +75,8 @@ qint16 screenHeight = screenRect.height(); // 设置窗口位置和大小 - move(screenWidth / 2 - 688, 50); -// resize(screenWidth, screenHeight); - resize(1366, screenHeight - 100); + move(screenWidth / 2 - 688, 0); + resize(1366, 768); // 设置最小和关闭按钮的样式 IconHelper::Instance()->setIcon(ui->btnMenuMin, QChar(0xf068)); @@ -185,6 +184,7 @@ ChannelItem * channelItem = new ChannelItem(); channelItem->setGeometry(10, 0, screenRect.width() - 60, 160); channelItem->setIndex(i); + channelItem->setChannelDelay(SettingConfig::getInstance().DELAY_ARR.at(i).toInt()); this->channelItemList.append(channelItem); vbox->addWidget(channelItem); group->setLayout(vbox); diff --git a/SetConfig.cpp b/SetConfig.cpp index 2e5e9be..277b0e7 100644 --- a/SetConfig.cpp +++ b/SetConfig.cpp @@ -47,7 +47,8 @@ ui->buttonBox->button(QDialogButtonBox::Cancel)->setText("取消"); ui->comTypeSelect->addItem("串口", ENUM_NET_TYPE::SERIAL); -// ui->comTypeSelect->addItem("UDP Server", ENUM_NET_TYPE::UDPServer); + ui->comTypeSelect->addItem("UDP Server", ENUM_NET_TYPE::UDPServer); + ui->comTypeSelect->addItem("UDP Client", ENUM_NET_TYPE::UDPClient); // 设置下拉框的样式 QStandardItemModel * model = qobject_cast(ui->comTypeSelect->model()); @@ -95,9 +96,18 @@ SettingConfig::getInstance().setConProperty("com", "portName", ui->comNameInput->text()); SettingConfig::getInstance().setConProperty("com", "baudRate", ui->comBaudInput->text()); break; + case 1: SettingConfig::getInstance().setConProperty("net", "listenPort", ui->netListenPortInput->text()); break; + + case 2: + if (ui->netIpInput->text().toUpper() == "LOCALHOST") { + ui->netIpInput->setText("127.0.0.1"); + } + SettingConfig::getInstance().setConProperty("net", "deviceHost", ui->netIpInput->text()); + SettingConfig::getInstance().setConProperty("net", "devicePort", ui->netDevPortInput->text()); + break; } SettingConfig::getInstance().init(); @@ -126,31 +136,45 @@ int currentIndx = ui->comTypeSelect->currentIndex(); switch (currentIndx) { case 0: - ui->labelComName->show(); - ui->labelComBaud->show(); - ui->labelNetIp->hide(); - ui->labelNetListenPort->hide(); - ui->labelNetDevPort->hide(); + ui->labelComName->show(); // 显示串口号 + ui->labelComBaud->show(); // 显示波特率 + ui->labelNetIp->hide(); // 隐藏设备IP(client模式) + ui->labelNetDevPort->hide(); // 隐藏设备端口(client模式) + ui->labelNetListenPort->hide(); // 隐藏监听端口(server模式) ui->comNameInput->show(); ui->comBaudInput->show(); ui->netIpInput->hide(); - ui->netListenPortInput->hide(); ui->netDevPortInput->hide(); + ui->netListenPortInput->hide(); break; case 1: - ui->labelComName->hide(); - ui->labelComBaud->hide(); - ui->labelNetIp->hide(); - ui->labelNetListenPort->show(); - ui->labelNetDevPort->hide(); + ui->labelComName->hide(); // 隐藏串口号 + ui->labelComBaud->hide(); // 隐藏波特率 + ui->labelNetIp->hide(); // 隐藏设备IP(client模式) + ui->labelNetDevPort->hide(); // 隐藏设备端口(client模式) + ui->labelNetListenPort->show(); // 显示监听端口(server模式) ui->comNameInput->hide(); ui->comBaudInput->hide(); ui->netIpInput->hide(); - ui->netListenPortInput->show(); ui->netDevPortInput->hide(); + ui->netListenPortInput->show(); + break; + + case 2: + ui->labelComName->hide(); // 隐藏串口号 + ui->labelComBaud->hide(); // 隐藏波特率 + ui->labelNetIp->show(); // 显示设备IP(client模式) + ui->labelNetDevPort->show(); // 显示设备端口(client模式) + ui->labelNetListenPort->hide(); // 隐藏监听端口(server模式) + + ui->comNameInput->hide(); + ui->comBaudInput->hide(); + ui->netIpInput->show(); + ui->netDevPortInput->show(); + ui->netListenPortInput->hide(); break; default: diff --git a/common/utils/SettingConfig.cpp b/common/utils/SettingConfig.cpp index d4919b4..10722e5 100644 --- a/common/utils/SettingConfig.cpp +++ b/common/utils/SettingConfig.cpp @@ -30,4 +30,6 @@ SKIP_HEADER = getProperty("dev", "skipHeader").toUInt(); BASE_LOG_PATH = getProperty("log", "basePath").toString(); + + DELAY_ARR = getProperty("delay", "delayArr").toString().split(","); } diff --git a/common/utils/SettingConfig.h b/common/utils/SettingConfig.h index 3a74617..bd0bef2 100644 --- a/common/utils/SettingConfig.h +++ b/common/utils/SettingConfig.h @@ -30,8 +30,8 @@ /******** 以下为需要的各类参数 ********/ int NET_TYPE; QString DEVICE_HOST; - quint16 DEVICE_PORT; - quint16 LISTEN_PORT; + int DEVICE_PORT; + int LISTEN_PORT; QString PORT_NAME; int BAUD_RATE; @@ -41,6 +41,8 @@ QString BASE_LOG_PATH; + QStringList DELAY_ARR; + private: SettingConfig(); diff --git a/common/utils/UDPClientUtil.cpp b/common/utils/UDPClientUtil.cpp index d772c3b..8eed638 100644 --- a/common/utils/UDPClientUtil.cpp +++ b/common/utils/UDPClientUtil.cpp @@ -5,7 +5,6 @@ UDPClientUtil::UDPClientUtil(QObject *parent) : QObject(parent) { client = new QUdpSocket(this); - connect(client, &QUdpSocket::readyRead, this, &UDPClientUtil::readData); } @@ -14,22 +13,22 @@ } -void UDPClientUtil::sendData(QByteArray data) +int UDPClientUtil::sendData(QByteArray data) { - client->writeDatagram(data, - QHostAddress(SettingConfig::getInstance().DEVICE_HOST), - SettingConfig::getInstance().DEVICE_PORT); - qDebug() << "[send]" << data; + qint64 len = client->writeDatagram(data.data(), data.size(), QHostAddress(SettingConfig::getInstance().DEVICE_HOST), SettingConfig::getInstance().DEVICE_PORT); + qDebug() << QString("[send][%1]").arg(len) << data; + return len; } void UDPClientUtil::readData() { +// qDebug() << "read data"; QByteArray ba; while(client->hasPendingDatagrams()) { ba.resize(client->pendingDatagramSize()); client->readDatagram(ba.data(), ba.size()); -// std::cout << "[recv]" << QByteUtil::binToHexString(ba).toStdString() << std::endl; +// qDebug() << QString("[recv][%1]").arg(ba.size()) << QByteUtil::binToHexString(ba); emit dataRecieved(ba); } diff --git a/common/utils/UDPClientUtil.h b/common/utils/UDPClientUtil.h index cf87e9d..f574f18 100644 --- a/common/utils/UDPClientUtil.h +++ b/common/utils/UDPClientUtil.h @@ -11,7 +11,7 @@ explicit UDPClientUtil(QObject *parent = nullptr); ~UDPClientUtil(); - void sendData(QByteArray); + int sendData(QByteArray); private: QUdpSocket * client; diff --git a/conf/config.ini b/conf/config.ini index 3d60894..6bd4673 100644 --- a/conf/config.ini +++ b/conf/config.ini @@ -1,4 +1,4 @@ -[net] +[net] deviceHost=192.168.1.20 devicePort=233 listenPort=24331 @@ -14,3 +14,6 @@ [log] basePath=C:/casic/logs/ + +[delay] +delayArr="0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00" diff --git a/protocol/PhaseProtocolBM.cpp b/protocol/PhaseProtocolBM.cpp index 3960f9a..07fdbf5 100644 --- a/protocol/PhaseProtocolBM.cpp +++ b/protocol/PhaseProtocolBM.cpp @@ -37,22 +37,25 @@ { dataObj->channelActive.append("0"); // dataObj->rawPhaseDiffData.append(0); + dataObj->channelBeforeDelay.append(0.00); dataObj->channelData.append(0.00); -// dataObj->channelDataStr.append("0.00"); + dataObj->channelDataStr.append("0.00"); } else if (channelRawData > CALCULATE_OFFSET) { double phase = (channelRawData - CALCULATE_OFFSET) * CALCULATE_FACTOR; dataObj->channelActive.append("1"); // dataObj->rawPhaseDiffData.append(channelRawData - CALCULATE_OFFSET); + dataObj->channelBeforeDelay.append(phase); dataObj->channelData.append(phase); // 暂时不加补偿值,界面显示时再计算补偿后的值 -// dataObj->channelDataStr.append(QString::number(phase, 'f', 15)); + dataObj->channelDataStr.append(QString::number(phase, 'f', 15)); } else { double phase = -1.0 * (CALCULATE_OFFSET - channelRawData) * CALCULATE_FACTOR; // rawData是无符号long 相位有正有负 小于CALCULATE_OFFSET时是负值 dataObj->channelActive.append("1"); // dataObj->rawPhaseDiffData.append(channelRawData - CALCULATE_OFFSET); + dataObj->channelBeforeDelay.append(phase); dataObj->channelData.append(phase); // 暂时不加补偿值,界面显示时再计算补偿后的值 -// dataObj->channelDataStr.append(QString::number(phase, 'f', 15)); + dataObj->channelDataStr.append(QString::number(phase, 'f', 15)); } } diff --git a/protocol/dto/PhaseDataDto.h b/protocol/dto/PhaseDataDto.h index 8bdbb0c..8258c66 100644 --- a/protocol/dto/PhaseDataDto.h +++ b/protocol/dto/PhaseDataDto.h @@ -21,8 +21,9 @@ QString devStatus; QList channelActive; // QList rawPhaseDiffData; // 原始相差数据 + QList channelBeforeDelay; // 补偿前的时差数据 QList channelData; // 补偿后的时差数据,用于计算 -// QList channelDataStr; // 补偿后的时差数据格式化显示字符串 + QList channelDataStr; // 补偿后的时差数据格式化显示字符串 signals: