diff --git a/PhaseCompAcq/PhaseDevice.cpp b/PhaseCompAcq/PhaseDevice.cpp index 2b1bef1..c5f83d6 100644 --- a/PhaseCompAcq/PhaseDevice.cpp +++ b/PhaseCompAcq/PhaseDevice.cpp @@ -21,6 +21,9 @@ QVector> initPhase(PHASE_MESSURE_CHANNEL, QVector(0, 0)); phaseVector = initPhase; + QVector initTs(PHASE_MESSURE_CHANNEL); + latestTsVector = initTs; + QVector> initAllen(PHASE_MESSURE_CHANNEL, QVector(5, 0)); channelAllen = initAllen; @@ -173,6 +176,22 @@ // 2.2 各个通道的相差数据 for (int i = 1; i <= phaseData->channelActive.size(); i++) { + // 判断最近的数据与当前时间的差 + qulonglong nowTs = QDateTime::currentMSecsSinceEpoch(); + qulonglong latestTs = latestTsVector.at(i - 1); + qint32 tsDelta = nowTs - latestTs; + + // 如果超过通道离线的阈值 则清空数据栈 重新累计连续数据用于计算稳定度 + if (tsDelta > SettingConfig::getInstance().OFFLINE_THRE * 1000 && phaseVector[i - 1].size() > 0) { + QMutex mutex; + mutex.lock(); + + QVector initPhase(QVector(0)); + phaseVector[i - 1] = initPhase; + + mutex.unlock(); + } + if (phaseData->channelActive.at(i-1).toUInt() == 1) { // 存日志 @@ -191,6 +210,7 @@ QMutex mutex; mutex.lock(); phaseVector[i - 1].append(phaseData->channelData.at(i - 1)); + latestTsVector[i - 1] = phaseData->milisecond; if (phaseVector[i - 1].size() > SettingConfig::getInstance().MAX_DATA_SIZE) { phaseVector[i - 1] = phaseVector[i - 1].mid(phaseVector[i - 1].size() - SettingConfig::getInstance().MAX_DATA_SIZE); } diff --git a/PhaseCompAcq/PhaseDevice.cpp b/PhaseCompAcq/PhaseDevice.cpp index 2b1bef1..c5f83d6 100644 --- a/PhaseCompAcq/PhaseDevice.cpp +++ b/PhaseCompAcq/PhaseDevice.cpp @@ -21,6 +21,9 @@ QVector> initPhase(PHASE_MESSURE_CHANNEL, QVector(0, 0)); phaseVector = initPhase; + QVector initTs(PHASE_MESSURE_CHANNEL); + latestTsVector = initTs; + QVector> initAllen(PHASE_MESSURE_CHANNEL, QVector(5, 0)); channelAllen = initAllen; @@ -173,6 +176,22 @@ // 2.2 各个通道的相差数据 for (int i = 1; i <= phaseData->channelActive.size(); i++) { + // 判断最近的数据与当前时间的差 + qulonglong nowTs = QDateTime::currentMSecsSinceEpoch(); + qulonglong latestTs = latestTsVector.at(i - 1); + qint32 tsDelta = nowTs - latestTs; + + // 如果超过通道离线的阈值 则清空数据栈 重新累计连续数据用于计算稳定度 + if (tsDelta > SettingConfig::getInstance().OFFLINE_THRE * 1000 && phaseVector[i - 1].size() > 0) { + QMutex mutex; + mutex.lock(); + + QVector initPhase(QVector(0)); + phaseVector[i - 1] = initPhase; + + mutex.unlock(); + } + if (phaseData->channelActive.at(i-1).toUInt() == 1) { // 存日志 @@ -191,6 +210,7 @@ QMutex mutex; mutex.lock(); phaseVector[i - 1].append(phaseData->channelData.at(i - 1)); + latestTsVector[i - 1] = phaseData->milisecond; if (phaseVector[i - 1].size() > SettingConfig::getInstance().MAX_DATA_SIZE) { phaseVector[i - 1] = phaseVector[i - 1].mid(phaseVector[i - 1].size() - SettingConfig::getInstance().MAX_DATA_SIZE); } diff --git a/PhaseCompAcq/PhaseDevice.h b/PhaseCompAcq/PhaseDevice.h index 06a6b0f..78276ae 100644 --- a/PhaseCompAcq/PhaseDevice.h +++ b/PhaseCompAcq/PhaseDevice.h @@ -1,4 +1,4 @@ -#ifndef PHASEDEVICE_H +#ifndef PHASEDEVICE_H #define PHASEDEVICE_H #include @@ -46,6 +46,9 @@ // 原始数据 - 补偿之前的值 QVector> phaseVector; + // + QVector latestTsVector; + // 不同维度的稳定度数据 1s - 10000s QVector> channelAllen; diff --git a/PhaseCompAcq/PhaseDevice.cpp b/PhaseCompAcq/PhaseDevice.cpp index 2b1bef1..c5f83d6 100644 --- a/PhaseCompAcq/PhaseDevice.cpp +++ b/PhaseCompAcq/PhaseDevice.cpp @@ -21,6 +21,9 @@ QVector> initPhase(PHASE_MESSURE_CHANNEL, QVector(0, 0)); phaseVector = initPhase; + QVector initTs(PHASE_MESSURE_CHANNEL); + latestTsVector = initTs; + QVector> initAllen(PHASE_MESSURE_CHANNEL, QVector(5, 0)); channelAllen = initAllen; @@ -173,6 +176,22 @@ // 2.2 各个通道的相差数据 for (int i = 1; i <= phaseData->channelActive.size(); i++) { + // 判断最近的数据与当前时间的差 + qulonglong nowTs = QDateTime::currentMSecsSinceEpoch(); + qulonglong latestTs = latestTsVector.at(i - 1); + qint32 tsDelta = nowTs - latestTs; + + // 如果超过通道离线的阈值 则清空数据栈 重新累计连续数据用于计算稳定度 + if (tsDelta > SettingConfig::getInstance().OFFLINE_THRE * 1000 && phaseVector[i - 1].size() > 0) { + QMutex mutex; + mutex.lock(); + + QVector initPhase(QVector(0)); + phaseVector[i - 1] = initPhase; + + mutex.unlock(); + } + if (phaseData->channelActive.at(i-1).toUInt() == 1) { // 存日志 @@ -191,6 +210,7 @@ QMutex mutex; mutex.lock(); phaseVector[i - 1].append(phaseData->channelData.at(i - 1)); + latestTsVector[i - 1] = phaseData->milisecond; if (phaseVector[i - 1].size() > SettingConfig::getInstance().MAX_DATA_SIZE) { phaseVector[i - 1] = phaseVector[i - 1].mid(phaseVector[i - 1].size() - SettingConfig::getInstance().MAX_DATA_SIZE); } diff --git a/PhaseCompAcq/PhaseDevice.h b/PhaseCompAcq/PhaseDevice.h index 06a6b0f..78276ae 100644 --- a/PhaseCompAcq/PhaseDevice.h +++ b/PhaseCompAcq/PhaseDevice.h @@ -1,4 +1,4 @@ -#ifndef PHASEDEVICE_H +#ifndef PHASEDEVICE_H #define PHASEDEVICE_H #include @@ -46,6 +46,9 @@ // 原始数据 - 补偿之前的值 QVector> phaseVector; + // + QVector latestTsVector; + // 不同维度的稳定度数据 1s - 10000s QVector> channelAllen; diff --git a/PhaseCompAcq/common/utils/SettingConfig.cpp b/PhaseCompAcq/common/utils/SettingConfig.cpp index c6bc0d9..7a8c71f 100644 --- a/PhaseCompAcq/common/utils/SettingConfig.cpp +++ b/PhaseCompAcq/common/utils/SettingConfig.cpp @@ -27,7 +27,8 @@ MASTER_HOST = getProperty("client", "masterHost").toString(); MASTER_PORT = getProperty("client", "masterPort").toInt(); SERVER_PORT = getProperty("client", "serverPort").toInt(); - MAX_DATA_SIZE = getProperty("client", "maxDataSize").toUInt(); + MAX_DATA_SIZE = getProperty("client", "maxDataSize").toInt(); + OFFLINE_THRE = getProperty("client", "offlineThre").toInt(); CLIENT_TITLE = getProperty("client", "title").toString(); BASE_URL = getProperty("http", "baseUrl").toString(); diff --git a/PhaseCompAcq/PhaseDevice.cpp b/PhaseCompAcq/PhaseDevice.cpp index 2b1bef1..c5f83d6 100644 --- a/PhaseCompAcq/PhaseDevice.cpp +++ b/PhaseCompAcq/PhaseDevice.cpp @@ -21,6 +21,9 @@ QVector> initPhase(PHASE_MESSURE_CHANNEL, QVector(0, 0)); phaseVector = initPhase; + QVector initTs(PHASE_MESSURE_CHANNEL); + latestTsVector = initTs; + QVector> initAllen(PHASE_MESSURE_CHANNEL, QVector(5, 0)); channelAllen = initAllen; @@ -173,6 +176,22 @@ // 2.2 各个通道的相差数据 for (int i = 1; i <= phaseData->channelActive.size(); i++) { + // 判断最近的数据与当前时间的差 + qulonglong nowTs = QDateTime::currentMSecsSinceEpoch(); + qulonglong latestTs = latestTsVector.at(i - 1); + qint32 tsDelta = nowTs - latestTs; + + // 如果超过通道离线的阈值 则清空数据栈 重新累计连续数据用于计算稳定度 + if (tsDelta > SettingConfig::getInstance().OFFLINE_THRE * 1000 && phaseVector[i - 1].size() > 0) { + QMutex mutex; + mutex.lock(); + + QVector initPhase(QVector(0)); + phaseVector[i - 1] = initPhase; + + mutex.unlock(); + } + if (phaseData->channelActive.at(i-1).toUInt() == 1) { // 存日志 @@ -191,6 +210,7 @@ QMutex mutex; mutex.lock(); phaseVector[i - 1].append(phaseData->channelData.at(i - 1)); + latestTsVector[i - 1] = phaseData->milisecond; if (phaseVector[i - 1].size() > SettingConfig::getInstance().MAX_DATA_SIZE) { phaseVector[i - 1] = phaseVector[i - 1].mid(phaseVector[i - 1].size() - SettingConfig::getInstance().MAX_DATA_SIZE); } diff --git a/PhaseCompAcq/PhaseDevice.h b/PhaseCompAcq/PhaseDevice.h index 06a6b0f..78276ae 100644 --- a/PhaseCompAcq/PhaseDevice.h +++ b/PhaseCompAcq/PhaseDevice.h @@ -1,4 +1,4 @@ -#ifndef PHASEDEVICE_H +#ifndef PHASEDEVICE_H #define PHASEDEVICE_H #include @@ -46,6 +46,9 @@ // 原始数据 - 补偿之前的值 QVector> phaseVector; + // + QVector latestTsVector; + // 不同维度的稳定度数据 1s - 10000s QVector> channelAllen; diff --git a/PhaseCompAcq/common/utils/SettingConfig.cpp b/PhaseCompAcq/common/utils/SettingConfig.cpp index c6bc0d9..7a8c71f 100644 --- a/PhaseCompAcq/common/utils/SettingConfig.cpp +++ b/PhaseCompAcq/common/utils/SettingConfig.cpp @@ -27,7 +27,8 @@ MASTER_HOST = getProperty("client", "masterHost").toString(); MASTER_PORT = getProperty("client", "masterPort").toInt(); SERVER_PORT = getProperty("client", "serverPort").toInt(); - MAX_DATA_SIZE = getProperty("client", "maxDataSize").toUInt(); + MAX_DATA_SIZE = getProperty("client", "maxDataSize").toInt(); + OFFLINE_THRE = getProperty("client", "offlineThre").toInt(); CLIENT_TITLE = getProperty("client", "title").toString(); BASE_URL = getProperty("http", "baseUrl").toString(); diff --git a/PhaseCompAcq/common/utils/SettingConfig.h b/PhaseCompAcq/common/utils/SettingConfig.h index e3651cb..73dee92 100644 --- a/PhaseCompAcq/common/utils/SettingConfig.h +++ b/PhaseCompAcq/common/utils/SettingConfig.h @@ -48,7 +48,8 @@ QString MASTER_HOST; quint16 MASTER_PORT; quint16 SERVER_PORT; - quint32 MAX_DATA_SIZE; + qint32 MAX_DATA_SIZE; + qint32 OFFLINE_THRE; QString CLIENT_TITLE; QString BASE_URL;