1、更新串口读取缓冲区大小1024
2、优化读取数据丢失问题 3、对识别结果上传使用异步处理,避免接口阻塞导致的界面卡顿
This commit is contained in:
parent
9f90d5c2c1
commit
5abb482d0c
|
|
@ -1,20 +0,0 @@
|
||||||
[base]
|
|
||||||
com_name=COM2
|
|
||||||
baud=19200
|
|
||||||
track_name=2
|
|
||||||
have_magnet_steel=true
|
|
||||||
magnet_steel_order=8421
|
|
||||||
up_result=false
|
|
||||||
use_socket_server=true
|
|
||||||
|
|
||||||
[interface]
|
|
||||||
http_ip=192.168.137.104
|
|
||||||
http_port=20004
|
|
||||||
token_path=/api/token_path
|
|
||||||
up_result_path=/api/train-carriage/identification/rfid-save
|
|
||||||
username=guest_01
|
|
||||||
password=d55b0f642e817eea24725d2f2a31dd08
|
|
||||||
|
|
||||||
[socket_server]
|
|
||||||
server_ip=172.24.192.1
|
|
||||||
server_port=60001
|
|
||||||
|
|
@ -4,11 +4,11 @@ baud=19200
|
||||||
track_name=2
|
track_name=2
|
||||||
have_magnet_steel=true
|
have_magnet_steel=true
|
||||||
magnet_steel_order=8421
|
magnet_steel_order=8421
|
||||||
up_result=false
|
up_result=true
|
||||||
use_socket_server=true
|
use_socket_server=false
|
||||||
|
|
||||||
[interface]
|
[interface]
|
||||||
http_ip=192.168.137.104
|
http_ip=192.168.2.108
|
||||||
http_port=20004
|
http_port=20004
|
||||||
token_path=/api/token_path
|
token_path=/api/token_path
|
||||||
up_result_path=/api/train-carriage/identification/rfid-save
|
up_result_path=/api/train-carriage/identification/rfid-save
|
||||||
|
|
@ -16,5 +16,5 @@ username=guest_01
|
||||||
password=d55b0f642e817eea24725d2f2a31dd08
|
password=d55b0f642e817eea24725d2f2a31dd08
|
||||||
|
|
||||||
[socket_server]
|
[socket_server]
|
||||||
server_ip=172.24.192.1
|
server_ip=172.18.160.1
|
||||||
server_port=60001
|
server_port=7000
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ find_package(Qt5 COMPONENTS
|
||||||
Widgets
|
Widgets
|
||||||
Network
|
Network
|
||||||
SerialPort
|
SerialPort
|
||||||
|
Concurrent
|
||||||
REQUIRED)
|
REQUIRED)
|
||||||
|
|
||||||
#导入Qt的Network配置和在pro文件里面添加QT+=network是一样的
|
#导入Qt的Network配置和在pro文件里面添加QT+=network是一样的
|
||||||
|
|
@ -122,6 +123,7 @@ target_link_libraries(Train_RFID
|
||||||
Qt5::Widgets
|
Qt5::Widgets
|
||||||
Qt5::Network
|
Qt5::Network
|
||||||
Qt5::SerialPort
|
Qt5::SerialPort
|
||||||
|
Qt5::Concurrent
|
||||||
)
|
)
|
||||||
|
|
||||||
if (WIN32 AND NOT DEFINED CMAKE_TOOLCHAIN_FILE)
|
if (WIN32 AND NOT DEFINED CMAKE_TOOLCHAIN_FILE)
|
||||||
|
|
|
||||||
|
|
@ -1,19 +0,0 @@
|
||||||
//
|
|
||||||
// Created by Mr.V on 2024/3/16.
|
|
||||||
//
|
|
||||||
|
|
||||||
#include "DeleteOldLog.h"
|
|
||||||
|
|
||||||
void DeleteOldLog::deleteFile() {
|
|
||||||
QDir dir("./Logs");
|
|
||||||
QStringList fileList;
|
|
||||||
QFileInfoList fileInfoList = dir.entryInfoList(fileList, QDir::Files);
|
|
||||||
|
|
||||||
for (int i = 0; i < fileInfoList.size(); i++) {
|
|
||||||
QFileInfo info = fileInfoList.at(i);
|
|
||||||
if (info.birthTime() < QDateTime::currentDateTime().addDays(-10))
|
|
||||||
{
|
|
||||||
QFile::remove(info.absoluteFilePath());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,20 +0,0 @@
|
||||||
//
|
|
||||||
// Created by Mr.V on 2024/3/16.
|
|
||||||
//
|
|
||||||
|
|
||||||
#ifndef TRAIN_RFID_DELETEOLDLOG_H
|
|
||||||
#define TRAIN_RFID_DELETEOLDLOG_H
|
|
||||||
#include <QDir>
|
|
||||||
#include <Qobject>
|
|
||||||
#include <QDateTime>
|
|
||||||
|
|
||||||
class DeleteOldLog {
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
bool readDeleteConfig();
|
|
||||||
public slots:
|
|
||||||
void deleteFile();
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
#endif //TRAIN_RFID_DELETEOLDLOG_H
|
|
||||||
|
|
@ -42,10 +42,6 @@ MainWindow::MainWindow(QWidget *parent)
|
||||||
{
|
{
|
||||||
this->logError(errorMessage);
|
this->logError(errorMessage);
|
||||||
}
|
}
|
||||||
// 创建菜单栏
|
|
||||||
// this->initMenu();
|
|
||||||
|
|
||||||
// this->ui->testButton->setHidden(true);
|
|
||||||
|
|
||||||
// 获取本机串口列表
|
// 获取本机串口列表
|
||||||
this->getComList();
|
this->getComList();
|
||||||
|
|
@ -71,8 +67,8 @@ MainWindow::MainWindow(QWidget *parent)
|
||||||
connect(m_pSystemTray,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this,SLOT(on_activatedSysTrayIcon(QSystemTrayIcon::ActivationReason)));
|
connect(m_pSystemTray,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this,SLOT(on_activatedSysTrayIcon(QSystemTrayIcon::ActivationReason)));
|
||||||
|
|
||||||
this->logRfidRecvName = "./Logs/rfid_data.txt";
|
this->logRfidRecvName = "./Logs/rfid_data.txt";
|
||||||
recvLog.setFileName(logRfidRecvName);
|
this->recvLog.setFileName(logRfidRecvName);
|
||||||
recvLog.open(QIODevice::ReadWrite | QIODevice::Append);
|
this->recvLog.open(QIODevice::ReadWrite | QIODevice::Append);
|
||||||
|
|
||||||
//初始最小化
|
//初始最小化
|
||||||
//this->showMinimized();//最小化
|
//this->showMinimized();//最小化
|
||||||
|
|
@ -147,6 +143,7 @@ MainWindow::MainWindow(QWidget *parent)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ui->openComButton->click();
|
||||||
}
|
}
|
||||||
|
|
||||||
MainWindow::~MainWindow()
|
MainWindow::~MainWindow()
|
||||||
|
|
@ -174,8 +171,9 @@ void MainWindow::logError(const QString& message) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::initParam() {
|
void MainWindow::initParam() {
|
||||||
|
this->rfidSourceInfo = "";
|
||||||
this->trainTime = "";
|
this->trainTime = "";
|
||||||
this->recvLog.close();
|
if (this->recvLog.isOpen()) this->recvLog.close();
|
||||||
this->vecTrain.clear();
|
this->vecTrain.clear();
|
||||||
this->needIdentify = false;
|
this->needIdentify = false;
|
||||||
this->rnameRfidLog();
|
this->rnameRfidLog();
|
||||||
|
|
@ -219,12 +217,25 @@ bool MainWindow::mkRfidLog()
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::deleteOldFiles(const QString &path, int days)
|
||||||
|
{
|
||||||
|
QDir dir(path);
|
||||||
|
foreach(QFileInfo fi, dir.entryInfoList(QDir::Files | QDir::NoDotAndDotDot))
|
||||||
|
{
|
||||||
|
if((fi.lastModified().addDays(days) < QDateTime::currentDateTime()))
|
||||||
|
{
|
||||||
|
QFile::remove(fi.absoluteFilePath());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool MainWindow::rnameRfidLog()
|
bool MainWindow::rnameRfidLog()
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
this->recvLog.close();
|
this->recvLog.close();
|
||||||
QFile logFile(this->logRfidRecvName);
|
QFile logFile(this->logRfidRecvName);
|
||||||
QFileInfo fileInfo(logFile);
|
QFileInfo fileInfo(logFile);
|
||||||
|
if (fileInfo.size() == 0) return false;
|
||||||
|
|
||||||
QString newLogFileName = fileInfo.path() + "/";
|
QString newLogFileName = fileInfo.path() + "/";
|
||||||
newLogFileName.append(QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss"));
|
newLogFileName.append(QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss"));
|
||||||
|
|
@ -235,6 +246,8 @@ bool MainWindow::rnameRfidLog()
|
||||||
this->logError("读取RFID原始数据,存储重命名失败!");
|
this->logError("读取RFID原始数据,存储重命名失败!");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this->deleteOldFiles(fileInfo.path(), 3);
|
||||||
} catch (const std::exception &e) {
|
} catch (const std::exception &e) {
|
||||||
this->logError("读取RFID原始数据,存储重命名失败!");
|
this->logError("读取RFID原始数据,存储重命名失败!");
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -245,7 +258,6 @@ bool MainWindow::rnameRfidLog()
|
||||||
void MainWindow::saveRfidLog(const QString &value)
|
void MainWindow::saveRfidLog(const QString &value)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
// QString logValue = "[" + QDateTime::currentDateTime().toString("hh:mm::ss") + "] " + value + "\n";
|
|
||||||
QString logValue = value + "\n";
|
QString logValue = value + "\n";
|
||||||
if (!this->recvLog.isOpen())
|
if (!this->recvLog.isOpen())
|
||||||
{
|
{
|
||||||
|
|
@ -334,33 +346,32 @@ QStandardItem* MainWindow::getStandardItem(const QString &value)
|
||||||
|
|
||||||
|
|
||||||
/******************************同 web 交互****************************************/
|
/******************************同 web 交互****************************************/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief:Http发送RFID数据
|
* @brief:Http发送RFID数据
|
||||||
* @param:carriageType:车型
|
* @param:carriageType:车型
|
||||||
* @param:carriageNumber:车号
|
* @param:carriageNumber:车号
|
||||||
* @param:carriageOrder:车节号
|
* @param:carriageOrder:车节号
|
||||||
* @param:time:当前时间
|
* @param:time:当前时间
|
||||||
|
* @param:rfidSourceInfo:RFID的原始数据(过滤掉了重复磁条信息)
|
||||||
* @return: 成功:true
|
* @return: 成功:true
|
||||||
* 失败:false
|
* 失败:false
|
||||||
*/
|
*/
|
||||||
bool MainWindow::upWeb(std::string &carriageType, std::string &carriageNumber, std::string &carriageOrder, std::string &time)
|
bool MainWindow::upWeb(std::string &carriageType,
|
||||||
|
std::string &carriageNumber,
|
||||||
|
std::string &carriageOrder,
|
||||||
|
std::string &time,
|
||||||
|
std::string &strRfidInfo)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
httplib::Client cli(this->interfaceConfig_.httpIp.toStdString(), this->interfaceConfig_.httpPort);
|
|
||||||
cli.set_connection_timeout(0, 300 * 1000);
|
|
||||||
cli.set_read_timeout(1,0);
|
|
||||||
httplib::Headers header;
|
|
||||||
httplib::Params params;
|
|
||||||
Json::Value arrayObj; //构建对象
|
Json::Value arrayObj; //构建对象
|
||||||
|
|
||||||
header.emplace("blade-auth", this->webToken);
|
|
||||||
//header.emplace("Content-Type", "application/json");
|
|
||||||
|
|
||||||
arrayObj["comeTime"] = time;
|
arrayObj["comeTime"] = time;
|
||||||
arrayObj["collectTime"] = QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz").toStdString();
|
arrayObj["collectTime"] = QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz").toStdString();
|
||||||
arrayObj["carriageNumber"] = carriageNumber;
|
arrayObj["carriageNumber"] = carriageNumber;
|
||||||
arrayObj["carriageType"] = carriageType;
|
arrayObj["carriageType"] = carriageType;
|
||||||
arrayObj["carriageOrder"] = carriageOrder;
|
arrayObj["carriageOrder"] = carriageOrder;
|
||||||
|
arrayObj["steel"] = strRfidInfo;
|
||||||
|
|
||||||
Json::Value trainParams;
|
Json::Value trainParams;
|
||||||
trainParams["poundNo"] = std::to_string(this->baseConfig_.trackName);
|
trainParams["poundNo"] = std::to_string(this->baseConfig_.trackName);
|
||||||
|
|
@ -370,6 +381,14 @@ bool MainWindow::upWeb(std::string &carriageType, std::string &carriageNumber, s
|
||||||
|
|
||||||
this->logInfo("第" + QString::fromStdString(carriageOrder) + "节,发送web: " + QString::fromStdString(str));
|
this->logInfo("第" + QString::fromStdString(carriageOrder) + "节,发送web: " + QString::fromStdString(str));
|
||||||
|
|
||||||
|
httplib::Client cli(this->interfaceConfig_.httpIp.toStdString(), this->interfaceConfig_.httpPort);
|
||||||
|
cli.set_connection_timeout(0, 300 * 1000);
|
||||||
|
cli.set_read_timeout(1,0);
|
||||||
|
httplib::Headers header;
|
||||||
|
httplib::Params params;
|
||||||
|
header.emplace("blade-auth", this->webToken);
|
||||||
|
//header.emplace("Content-Type", "application/json");
|
||||||
|
|
||||||
auto res = cli.Post(this->interfaceConfig_.upResultPath.toStdString(), header, str, "application/json");
|
auto res = cli.Post(this->interfaceConfig_.upResultPath.toStdString(), header, str, "application/json");
|
||||||
if (res)
|
if (res)
|
||||||
{
|
{
|
||||||
|
|
@ -393,9 +412,10 @@ bool MainWindow::upWeb(std::string &carriageType, std::string &carriageNumber, s
|
||||||
if (root["msg"].asString() == "请求未授权") {
|
if (root["msg"].asString() == "请求未授权") {
|
||||||
this->logWarn("第" + QString::fromStdString(carriageOrder) + "节,因请求未授权,而上传识别结果失败!重新请求token。");
|
this->logWarn("第" + QString::fromStdString(carriageOrder) + "节,因请求未授权,而上传识别结果失败!重新请求token。");
|
||||||
if (!this->getToken()) return false;
|
if (!this->getToken()) return false;
|
||||||
return this->upWeb(carriageType, carriageNumber, carriageOrder, time);
|
return this->upWeb(carriageType, carriageNumber, carriageOrder, time, strRfidInfo);
|
||||||
}
|
}
|
||||||
this->logError("第" + QString::fromStdString(carriageOrder) + "节,识别结果上传失败,原因:" + QString::fromStdString(root.asString()));
|
this->logError("---");
|
||||||
|
this->logError("第" + QString::fromStdString(carriageOrder) + "节,识别结果上传失败,原因:" + QString::fromStdString(root["msg"].asString()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -409,7 +429,7 @@ bool MainWindow::upWeb(std::string &carriageType, std::string &carriageNumber, s
|
||||||
if (res->status == 401) {
|
if (res->status == 401) {
|
||||||
this->logWarn("因请求未授权,而上传识别结果失败!重新请求token。");
|
this->logWarn("因请求未授权,而上传识别结果失败!重新请求token。");
|
||||||
this->getToken();
|
this->getToken();
|
||||||
return this->upWeb(carriageType, carriageNumber, carriageOrder, time);
|
return this->upWeb(carriageType, carriageNumber, carriageOrder, time, strRfidInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -437,7 +457,7 @@ bool MainWindow::getToken()
|
||||||
{
|
{
|
||||||
httplib::Client cli(this->interfaceConfig_.httpIp.toStdString(), this->interfaceConfig_.httpPort);
|
httplib::Client cli(this->interfaceConfig_.httpIp.toStdString(), this->interfaceConfig_.httpPort);
|
||||||
cli.set_connection_timeout(0, 300 * 1000);
|
cli.set_connection_timeout(0, 300 * 1000);
|
||||||
cli.set_read_timeout(1,0);
|
cli.set_read_timeout(0,300*1000);
|
||||||
httplib::Headers header;
|
httplib::Headers header;
|
||||||
httplib::Params params;
|
httplib::Params params;
|
||||||
|
|
||||||
|
|
@ -470,7 +490,7 @@ bool MainWindow::getToken()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
this->logError("获取web token失败,原因:" + QString::fromStdString(root.asString()));
|
this->logError("获取web token失败,原因:" + QString::fromStdString(res->body));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -576,7 +596,7 @@ void MainWindow::on_ShowMainAction()
|
||||||
*/
|
*/
|
||||||
void MainWindow::on_ExitAppAction()
|
void MainWindow::on_ExitAppAction()
|
||||||
{
|
{
|
||||||
// 弹出对话框要求用户输入账号和密码
|
// 弹出对话框要求用户输入密码
|
||||||
QString password = QInputDialog::getText(this, "密码验证", "请输入密码:", QLineEdit::Password);
|
QString password = QInputDialog::getText(this, "密码验证", "请输入密码:", QLineEdit::Password);
|
||||||
|
|
||||||
// 验证账号和密码是否正确
|
// 验证账号和密码是否正确
|
||||||
|
|
@ -586,7 +606,6 @@ void MainWindow::on_ExitAppAction()
|
||||||
exit(0);
|
exit(0);
|
||||||
} else {
|
} else {
|
||||||
QMessageBox::warning(this, "验证失败", "密码不正确!");
|
QMessageBox::warning(this, "验证失败", "密码不正确!");
|
||||||
//event->ignore(); // 阻止关闭窗口
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -631,9 +650,7 @@ void MainWindow::openComClicked()
|
||||||
"background-color: rgba(74, 221, 108, 225);\ "
|
"background-color: rgba(74, 221, 108, 225);\ "
|
||||||
"border:1px solid rgba(168, 168, 168, 105);");
|
"border:1px solid rgba(168, 168, 168, 105);");
|
||||||
connect(this->serial_,&QSerialPort::readyRead,this,&MainWindow::readCom);
|
connect(this->serial_,&QSerialPort::readyRead,this,&MainWindow::readCom);
|
||||||
// QTimer* timer = new QTimer(this);
|
|
||||||
// connect(timer, &QTimer::timeout, this, &MainWindow::readCom);
|
|
||||||
// timer->start(10);
|
|
||||||
connect(this->serial_, &QSerialPort::errorOccurred, this, &MainWindow::serialPort_error);
|
connect(this->serial_, &QSerialPort::errorOccurred, this, &MainWindow::serialPort_error);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -645,6 +662,11 @@ void MainWindow::openComClicked()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// 弹出对话框要求用户输入密码
|
||||||
|
QString password = QInputDialog::getText(this, "密码验证", "请输入密码:", QLineEdit::Password);
|
||||||
|
|
||||||
|
// 验证账号和密码是否正确
|
||||||
|
if (password == "matrix") {
|
||||||
if (this->comDetect_.closeCom())
|
if (this->comDetect_.closeCom())
|
||||||
{
|
{
|
||||||
if (this->needIdentify == true) this->needIdentify = false;
|
if (this->needIdentify == true) this->needIdentify = false;
|
||||||
|
|
@ -656,6 +678,9 @@ void MainWindow::openComClicked()
|
||||||
"background-color: red;\ "
|
"background-color: red;\ "
|
||||||
"border:1px solid rgba(168, 168, 168, 105);");
|
"border:1px solid rgba(168, 168, 168, 105);");
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
QMessageBox::warning(this, "验证失败", "密码不正确!");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -680,7 +705,7 @@ void MainWindow::serialPort_error(QSerialPort::SerialPortError error)
|
||||||
void MainWindow::readCom()
|
void MainWindow::readCom()
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
if (this->serial_->waitForReadyRead(5)) {
|
if (this->serial_->waitForReadyRead(10)) {
|
||||||
QByteArray data = this->serial_->readAll(); // 读取数据
|
QByteArray data = this->serial_->readAll(); // 读取数据
|
||||||
if(!data.isEmpty())
|
if(!data.isEmpty())
|
||||||
{
|
{
|
||||||
|
|
@ -710,10 +735,9 @@ void MainWindow::getQueueDataThread()
|
||||||
this->tmpRfid.append(strRfidInfo);
|
this->tmpRfid.append(strRfidInfo);
|
||||||
if (this->tmpRfid.right(1) != "&")
|
if (this->tmpRfid.right(1) != "&")
|
||||||
{
|
{
|
||||||
// this->logDebug("--" + this->tmpRfid + " " + this->tmpRfid.right(1));
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// this->logDebug("--" + this->tmpRfid);
|
|
||||||
this->tmpRfid = this->tmpRfid.replace("&", "");
|
this->tmpRfid = this->tmpRfid.replace("&", "");
|
||||||
QStringList rfidSubList = this->tmpRfid.split("@");
|
QStringList rfidSubList = this->tmpRfid.split("@");
|
||||||
this->tmpRfid = "";
|
this->tmpRfid = "";
|
||||||
|
|
@ -761,30 +785,42 @@ void MainWindow::getQueueDataThread()
|
||||||
int train_order = vecTrain.size();
|
int train_order = vecTrain.size();
|
||||||
this->resultTableModel_->setItem(train_order - 1, 0, new QStandardItem(strTrainInfo));
|
this->resultTableModel_->setItem(train_order - 1, 0, new QStandardItem(strTrainInfo));
|
||||||
this->logInfo(QString("第%1节 %2").arg(train_order).arg(strTrainInfo));
|
this->logInfo(QString("第%1节 %2").arg(train_order).arg(strTrainInfo));
|
||||||
emit upRfid_signals();
|
// 将接收到的RFID使用@符拼接起来,以待后续上传web
|
||||||
|
this->rfidSourceInfo.append("@" + i);
|
||||||
|
QString rfidinfo = this->rfidSourceInfo;
|
||||||
|
this->rfidSourceInfo = "";
|
||||||
|
emit upRfid_signals(rfidinfo);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (i.size() == 7)
|
else if (i.size() == 7)
|
||||||
{
|
{
|
||||||
|
// 不使用磁钢的情况下 过滤掉磁钢信号
|
||||||
|
if (!this->baseConfig_.havaMagnetSteel) continue;
|
||||||
// 磁钢信号
|
// 磁钢信号
|
||||||
QString strFirst = i.left(1);
|
QString strFirst = i.left(1);
|
||||||
QString strOther = i.mid(1, i.size() - 1);
|
QString strOther = i.mid(1, i.size() - 1);
|
||||||
|
// 将接收到的RFID使用@符拼接起来,以待后续上传web
|
||||||
|
this->rfidSourceInfo.append("@" + i);
|
||||||
split_lambda(strFirst, strOther);
|
split_lambda(strFirst, strOther);
|
||||||
}
|
}
|
||||||
else if (i.size() == 14) // 特殊情况,来车信号少了&符
|
else if (i.size() == 14) // 特殊情况,来车信号少了&符
|
||||||
{
|
{
|
||||||
|
// 不使用磁钢的情况下 过滤掉磁钢信号
|
||||||
|
if (!this->baseConfig_.havaMagnetSteel) continue;
|
||||||
for (int j = 0; j < i.size(); j+=7) {
|
for (int j = 0; j < i.size(); j+=7) {
|
||||||
QString rfid_cg = i.mid(j, 7);
|
QString rfid_cg = i.mid(j, 7);
|
||||||
QString strFirst = rfid_cg.left(1);
|
QString strFirst = rfid_cg.left(1);
|
||||||
QString strOther = rfid_cg.mid(1, 6);
|
QString strOther = rfid_cg.mid(1, 6);
|
||||||
|
// 将接收到的RFID使用@符拼接起来,以待后续上传web
|
||||||
|
this->rfidSourceInfo.append("@" + rfid_cg);
|
||||||
split_lambda(strFirst, strOther);
|
split_lambda(strFirst, strOther);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::upRfid()
|
void MainWindow::upRfid(QString rfidInfo)
|
||||||
{
|
{
|
||||||
if (!this->baseConfig_.upResult) return;
|
if (!this->baseConfig_.upResult) return;
|
||||||
if (!this->needIdentify && this->baseConfig_.havaMagnetSteel)
|
if (!this->needIdentify && this->baseConfig_.havaMagnetSteel)
|
||||||
|
|
@ -804,15 +840,30 @@ void MainWindow::upRfid()
|
||||||
|
|
||||||
info = info.mid(1,info.size() - 1);
|
info = info.mid(1,info.size() - 1);
|
||||||
|
|
||||||
std::string carriageType = info.left(6).simplified().toStdString();
|
TrainInfo trainInfo;
|
||||||
std::string carriageNum = info.mid(6, info.size() - 6).simplified().toStdString();
|
trainInfo.carriageType = info.left(6).simplified().toStdString();
|
||||||
std::string nowTime = this->trainTime.toStdString();
|
trainInfo.carriageNum = info.mid(6, info.size() - 6).simplified().toStdString();
|
||||||
std::string strOrder = QString::number(order).toStdString();
|
trainInfo.strOrder = QString::number(order).toStdString();
|
||||||
if (!this->upWeb(carriageType, carriageNum, strOrder, nowTime))
|
trainInfo.nowTime = this->trainTime.toStdString();
|
||||||
|
trainInfo.strRfidInfo = rfidInfo.toStdString();
|
||||||
|
|
||||||
|
this->queueTrainInfo_.push(trainInfo);
|
||||||
|
auto up = QtConcurrent::run([=](){
|
||||||
|
while (!this->queueTrainInfo_.isEmpty())
|
||||||
{
|
{
|
||||||
this->logError("第" + QString::fromStdString(strOrder) + "节,识别结果上传失败!");
|
TrainInfo trainInfo = this->queueTrainInfo_.pop();
|
||||||
|
if (!this->upWeb(trainInfo.carriageType,
|
||||||
|
trainInfo.carriageNum,
|
||||||
|
trainInfo.strOrder,
|
||||||
|
trainInfo.nowTime,
|
||||||
|
trainInfo.strRfidInfo))
|
||||||
|
{
|
||||||
|
this->logError("第" + QString::fromStdString(trainInfo.strOrder) + "节,识别结果上传失败!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
void MainWindow::IdentifyTypeUpdate() {
|
void MainWindow::IdentifyTypeUpdate() {
|
||||||
if (this->rfidHasTrain || this->videoHasTrain)
|
if (this->rfidHasTrain || this->videoHasTrain)
|
||||||
|
|
@ -821,6 +872,7 @@ void MainWindow::IdentifyTypeUpdate() {
|
||||||
{
|
{
|
||||||
this->logInfo("来车了");
|
this->logInfo("来车了");
|
||||||
this->mkRfidLog();
|
this->mkRfidLog();
|
||||||
|
this->vecTrain.clear();
|
||||||
this->needIdentify = true;
|
this->needIdentify = true;
|
||||||
this->trainTime = this->getSystemTime();
|
this->trainTime = this->getSystemTime();
|
||||||
this->resultTableModel_->clear();
|
this->resultTableModel_->clear();
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,7 @@
|
||||||
#include <QListView>
|
#include <QListView>
|
||||||
#include <QMenuBar>
|
#include <QMenuBar>
|
||||||
#include <QStatusBar>
|
#include <QStatusBar>
|
||||||
|
#include <QtConcurrent>
|
||||||
#include <queue>
|
#include <queue>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
|
|
@ -52,6 +53,7 @@
|
||||||
#include "ComDetect.h"
|
#include "ComDetect.h"
|
||||||
#include "TcpClient.h"
|
#include "TcpClient.h"
|
||||||
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
namespace Ui { class MainWindow; }
|
namespace Ui { class MainWindow; }
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
@ -63,18 +65,24 @@ class MainWindow : public QWidget
|
||||||
public:
|
public:
|
||||||
MainWindow(QWidget *parent = nullptr);
|
MainWindow(QWidget *parent = nullptr);
|
||||||
~MainWindow();
|
~MainWindow();
|
||||||
|
|
||||||
void logDebug(const QString& message);
|
void logDebug(const QString& message);
|
||||||
void logInfo(const QString& message);
|
void logInfo(const QString& message);
|
||||||
void logWarn(const QString& message);
|
void logWarn(const QString& message);
|
||||||
void logError(const QString& message);
|
void logError(const QString& message);
|
||||||
|
|
||||||
bool mkRfidLog();
|
bool mkRfidLog();
|
||||||
|
void deleteOldFiles(const QString &path, int days);
|
||||||
bool rnameRfidLog();
|
bool rnameRfidLog();
|
||||||
void saveRfidLog(const QString &value);
|
void saveRfidLog(const QString &value);
|
||||||
|
|
||||||
void initParam();
|
void initParam();
|
||||||
|
|
||||||
bool upWeb(std::string &carriageType, std::string &carriageNumber, std::string &carriageOrder, std::string &time);
|
bool upWeb(std::string &carriageType,
|
||||||
|
std::string &carriageNumber,
|
||||||
|
std::string &carriageOrder,
|
||||||
|
std::string &time,
|
||||||
|
std::string &rfidSourceInfo);
|
||||||
bool getToken();
|
bool getToken();
|
||||||
|
|
||||||
QString getSystemTime();
|
QString getSystemTime();
|
||||||
|
|
@ -83,8 +91,6 @@ public:
|
||||||
QList<QString> getComList();
|
QList<QString> getComList();
|
||||||
// 将所有串口const 展示在下&拉列表
|
// 将所有串口const 展示在下&拉列表
|
||||||
void initComboBox();
|
void initComboBox();
|
||||||
// 设置菜单项
|
|
||||||
void initMenu();
|
|
||||||
// 创建日志目录
|
// 创建日志目录
|
||||||
static bool mkLogDir();
|
static bool mkLogDir();
|
||||||
// 获取QStandardItem
|
// 获取QStandardItem
|
||||||
|
|
@ -92,6 +98,13 @@ public:
|
||||||
QStandardItem* getStandardItem(const QString &value);
|
QStandardItem* getStandardItem(const QString &value);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
struct TrainInfo {
|
||||||
|
std::string carriageType;
|
||||||
|
std::string carriageNum;
|
||||||
|
std::string strOrder;
|
||||||
|
std::string nowTime;
|
||||||
|
std::string strRfidInfo;
|
||||||
|
};
|
||||||
QString trainTime;
|
QString trainTime;
|
||||||
|
|
||||||
QString logRfidRecvName;
|
QString logRfidRecvName;
|
||||||
|
|
@ -116,6 +129,8 @@ private:
|
||||||
// 整列车识别结果存储
|
// 整列车识别结果存储
|
||||||
QStringList vecTrain;
|
QStringList vecTrain;
|
||||||
MQueue<QString> queue_{}; // RFID读取的数据队列
|
MQueue<QString> queue_{}; // RFID读取的数据队列
|
||||||
|
MQueue<TrainInfo> queueTrainInfo_{}; // RFID读取的磁钢信息队列
|
||||||
|
QString rfidSourceInfo;
|
||||||
QString tmpRfid; //临时存储的RFID原始数据,用于防止接收的数据不完整
|
QString tmpRfid; //临时存储的RFID原始数据,用于防止接收的数据不完整
|
||||||
|
|
||||||
// 识别方向正确标志
|
// 识别方向正确标志
|
||||||
|
|
@ -149,14 +164,14 @@ private:
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void getRfid_signals();
|
void getRfid_signals();
|
||||||
void upRfid_signals();
|
void upRfid_signals(QString rfidInfo);
|
||||||
void connect_socket(QString ip, int port);
|
void connect_socket(QString ip, int port);
|
||||||
void IdentifyType();
|
void IdentifyType();
|
||||||
private slots:
|
private slots:
|
||||||
void openComClicked();
|
void openComClicked();
|
||||||
void readCom();
|
void readCom();
|
||||||
void getQueueDataThread();
|
void getQueueDataThread();
|
||||||
void upRfid();
|
void upRfid(QString rfidInfo);
|
||||||
void serialPort_error(QSerialPort::SerialPortError error);
|
void serialPort_error(QSerialPort::SerialPortError error);
|
||||||
void on_activatedSysTrayIcon(QSystemTrayIcon::ActivationReason reason);
|
void on_activatedSysTrayIcon(QSystemTrayIcon::ActivationReason reason);
|
||||||
void readTestInfo();
|
void readTestInfo();
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,8 @@ QSerialPort* ComDetect::openCom(const QString &com, int baud)
|
||||||
this->serial_->setDataBits(QSerialPort::Data8); //数据位
|
this->serial_->setDataBits(QSerialPort::Data8); //数据位
|
||||||
this->serial_->setStopBits(QSerialPort::OneStop);//停止位,停止位默认选择1位
|
this->serial_->setStopBits(QSerialPort::OneStop);//停止位,停止位默认选择1位
|
||||||
this->serial_->setFlowControl(QSerialPort::NoFlowControl);// 控制流,默认选择无
|
this->serial_->setFlowControl(QSerialPort::NoFlowControl);// 控制流,默认选择无
|
||||||
|
this->serial_->setReadBufferSize(1024); // 设置读取的缓冲区1024字节
|
||||||
|
|
||||||
if (this->serial_->open(QSerialPort::ReadWrite))
|
if (this->serial_->open(QSerialPort::ReadWrite))
|
||||||
{
|
{
|
||||||
this->serial_->clear(QSerialPort::AllDirections);
|
this->serial_->clear(QSerialPort::AllDirections);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue