first commit
This commit is contained in:
152
source/GasDetector/CCtrlNikiraPMA.cpp
Normal file
152
source/GasDetector/CCtrlNikiraPMA.cpp
Normal 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;
|
||||
}
|
Reference in New Issue
Block a user