first commit

This commit is contained in:
DESKTOP-4HD0KC3\ZhangZhuo
2024-10-30 15:04:53 +08:00
commit e7d6f4c57b
723 changed files with 7515585 additions and 0 deletions

View File

@ -0,0 +1,152 @@
#include "CCtrlNikiraPMA.h"
#include <QRegularExpression>
CtrlNikiraPMA::CtrlNikiraPMA()
{
m_iBaudRate = 115200;
m_pSerialPort = new QSerialPort;
}
CtrlNikiraPMA::~CtrlNikiraPMA()
{
delete m_pSerialPort;
}
double CtrlNikiraPMA::ConvertDateToEpoch(const QString& qstrDateTime)
{
QDateTime dateTime = QDateTime::fromString(qstrDateTime, "yyyyMMdd-hh:mm:ss.zzz");
if (!dateTime.isValid())
{
throw std::invalid_argument("Invalid date format");
}
return dateTime.toMSecsSinceEpoch() / 1000.0;
}
QVector<double> CtrlNikiraPMA::ParseData(const QString& qstrData)
{
return QVector<double>();
}
QString CtrlNikiraPMA::FindCompleteFrame()
{
int firstValidCharPos = -1;
for (int i = 0; i < m_qbRecv.size(); ++i)
{
if (m_qbRecv[i] != '\x00' && m_qbRecv[i] != '\r')
{
firstValidCharPos = i;
break;
}
}
if (firstValidCharPos == -1)
{
return QString();
}
QByteArray validData = m_qbRecv.mid(firstValidCharPos);
int endPos = validData.lastIndexOf("OK\r");
if (endPos == -1)
{
return QString();
}
// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ȷ<EFBFBD><C8B7><EFBFBD>Ǵ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC> OK\r <20><><EFBFBD><EFBFBD>
QRegularExpression timeStampRegex(R"(\d{8}-\d{2}:\d{2}:\d{2}\.\d{3})");
QRegularExpressionMatch match = timeStampRegex.match(QString::fromLatin1(validData));
int startPos = match.capturedStart();
if (!match.hasMatch() || startPos >= endPos)
{
return QString();
}
QString completeFrame = QString::fromLatin1(validData.mid(startPos, endPos - startPos + 3));
m_qbRecv.remove(0, firstValidCharPos + endPos + 3);
//qDebug() << m_qbRecv;
//qDebug() << completeFrame;
return completeFrame;
////QRegularExpression frameRegex(R"((\d{8}-\d{2}:\d{2}:\d{2}\.\d{3},(-?\d+(\.\d+)?)(,-?\d+(\.\d+)?)*,OK\r))");
//QRegularExpression frameRegex("(\\d{8}-\\d{2}:\\d{2}:\\d{2}\\.\\d{3}.*?OK)");
//qDebug() << m_qbRecv;
//QRegularExpressionMatch match = frameRegex.match(QString::fromUtf8(m_qbRecv));
//if (match.hasMatch())
//{
// QString completeFrame = match.captured(1);
// m_qbRecv.remove(0, match.capturedEnd(1));
// //qDebug() << "Removed"<< m_qbRecv <<endl;
// return completeFrame;
//}
//return QString();
}
int CtrlNikiraPMA::Initialize(std::string ucPortNumber)
{
QString qstrPortName = QString::fromStdString(ucPortNumber);
m_pSerialPort->setPortName(qstrPortName);
m_pSerialPort->setReadBufferSize(512);
bool bRes = m_pSerialPort->setBaudRate(m_iBaudRate);
if (!bRes)
{
qDebug() << "Err:setBaudRate Failed.Exit Code:1";
return 1;
}
bRes = m_pSerialPort->open(QIODevice::ReadWrite);
if (!bRes)
{
qDebug() << "nikira,Err:open Failed.Exit Code:2";
return 2;
}
m_qbRecv.clear();
return 0;
}
QString CtrlNikiraPMA::GetLastValidDataFrame(double& dCH4, double& dH2O)
{
m_qbRecv.clear();
int iFlag = 1;
//qDebug() << "enter GetLastValidDataFrame";
while (iFlag)
{
//qDebug() << "enter GetLastValidDataFrame while";
m_pSerialPort->waitForReadyRead(1000);
QByteArray data = m_pSerialPort->readAll();
m_qbRecv.append(data);
//qDebug() <<"Append:" << m_qbRecv << endl;
QString qstrFrame = FindCompleteFrame();
if (!qstrFrame.isEmpty())
{
//if (qstrFrame.endsWith("OK\\r"))
//{
QStringList values = qstrFrame.split(',');
if (values.size() >= 5)
{
QString methane = values[2];
QString waterVapor = values[3];
dCH4 = methane.toDouble();
dH2O = waterVapor.toDouble();
iFlag = 0;
}
//qDebug() <<"FULL:" << qstrFrame << endl;
return qstrFrame;
//}
}
}
return 0;
}

View File

@ -0,0 +1,26 @@
#include <stdexcept>
#include "pch.h"
#include "ZZ_Types.h"
#pragma once
class CtrlNikiraPMA
{
public:
CtrlNikiraPMA();
~CtrlNikiraPMA();
public:
private:
int m_iBaudRate;
QSerialPort* m_pSerialPort;
std::string m_sRecv;
QByteArray m_qbRecv;
private:
double ConvertDateToEpoch(const QString& qstrDateTime);
QVector<double> ParseData(const QString& qstrData);
QString FindCompleteFrame();
public:
int Initialize(std::string ucPortNumber);
QString GetLastValidDataFrame(double &dCH4,double &dH2O);
};