更新自动重连串口功能,若人为点击“打开串口”,则只要串口连接失败,就会在10秒后重新尝试连接;直到连接成功或人为点击“关闭串口”
This commit is contained in:
parent
6e6113c48a
commit
920f3fa341
|
@ -73,6 +73,7 @@ bool ConfigUtil::readSocketServerConfig(const QString &configFile, QString &erro
|
|||
mset->beginGroup("socket_server");
|
||||
config.server_ip = mset->value("server_ip", "").toString();
|
||||
config.server_port = mset->value("server_port", "").toInt();
|
||||
config.delayed_upload = mset->value("delayed_upload", "").toInt();
|
||||
|
||||
mset->endGroup();
|
||||
} catch (const std::exception &e) {
|
||||
|
|
|
@ -46,6 +46,8 @@ namespace ai_matrix {
|
|||
QString server_ip;
|
||||
// server_port
|
||||
int server_port;
|
||||
// 识别结果延后X节上传,以等待Socket反馈火车运行方向
|
||||
int delayed_upload;
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -29,6 +29,15 @@ namespace ai_matrix {
|
|||
std::string strRfidInfo;
|
||||
};
|
||||
|
||||
struct ComeTrain {
|
||||
QString trainTime;
|
||||
bool needUpLoad;
|
||||
ComeTrain () {
|
||||
this->trainTime = "";
|
||||
this->needUpLoad = false;
|
||||
};
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -142,7 +142,7 @@ MainWindow::MainWindow(QWidget *parent)
|
|||
}
|
||||
});
|
||||
connect(this->tcpClient, &TcpClient::getDirectionSignals, this, [=](int direction) {
|
||||
if (this->iDirection != direction)
|
||||
if (this->iDirection == 0)
|
||||
{
|
||||
this->logInfo("获得方向判定:" + QString(direction > -1 ? (direction > 0 ? "需识别" : "待定") : "无需上传"));
|
||||
this->iDirection = direction;
|
||||
|
@ -451,6 +451,33 @@ void MainWindow::on_activatedSysTrayIcon(QSystemTrayIcon::ActivationReason reaso
|
|||
}
|
||||
|
||||
/********************************串口操作*************************************/
|
||||
bool MainWindow::connectCom()
|
||||
{
|
||||
this->serial_ = this->comDetect_.openCom(ui->comBox->currentText(), ui->BTBox->currentText().toInt());
|
||||
|
||||
if (this->serial_ != nullptr) {
|
||||
QString logs;
|
||||
logs.append("串口打开成功\n");
|
||||
logs.append("串口号:" + ui->comBox->currentText() + "\n");
|
||||
logs.append("波特率:" + ui->BTBox->currentText() + "\n");
|
||||
if (this->baseConfig_.havaMagnetSteel)
|
||||
logs.append("磁钢顺序:" + this->baseConfig_.magnetSteelOrder);
|
||||
this->isOpenCom = true;
|
||||
this->logInfo(logs);
|
||||
this->ui->LEDlabel->setStyleSheet("border-radius: 16px;\ "
|
||||
"background-color: rgba(74, 221, 108, 225);\ "
|
||||
"border:1px solid rgba(168, 168, 168, 105);");
|
||||
connect(this->serial_, &QSerialPort::readyRead, this, &MainWindow::readCom); //
|
||||
|
||||
connect(this->serial_, &QSerialPort::errorOccurred, this, &MainWindow::serialPort_error);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 打开串口
|
||||
*/
|
||||
|
@ -458,52 +485,89 @@ void MainWindow::openComClicked()
|
|||
{
|
||||
if (ui->openComButton->text() == "打开串口")
|
||||
{
|
||||
this->serial_ = this->comDetect_.openCom(ui->comBox->currentText(), ui->BTBox->currentIndex());
|
||||
if (this->serial_ != nullptr)
|
||||
{
|
||||
QString logs;
|
||||
logs.append("串口打开成功\n");
|
||||
logs.append("串口号:" + ui->comBox->currentText() + "\n");
|
||||
logs.append("波特率:" + ui->BTBox->currentText() + "\n");
|
||||
if (this->baseConfig_.havaMagnetSteel)
|
||||
logs.append("磁钢顺序:" + this->baseConfig_.magnetSteelOrder);
|
||||
this->isOpenCom = true;
|
||||
this->logInfo(logs);
|
||||
this->ui->openComButton->setText("关闭串口");
|
||||
this->ui->LEDlabel->setStyleSheet("border-radius: 16px;\ "
|
||||
"background-color: rgba(74, 221, 108, 225);\ "
|
||||
"border:1px solid rgba(168, 168, 168, 105);");
|
||||
connect(this->serial_,&QSerialPort::readyRead,this,&MainWindow::readCom); //
|
||||
this->auto_reconnect_serial_ = true;
|
||||
this->ui->openComButton->setText("关闭串口");
|
||||
QtConcurrent::run([=](){
|
||||
while (this->auto_reconnect_serial_ && !this->isOpenCom) {
|
||||
if (!this->connectCom())
|
||||
{
|
||||
this->isOpenCom = false;
|
||||
this->comDetect_.closeCom();
|
||||
this->logInfo("串口打开失败!10秒钟后将会重连...");
|
||||
} else {
|
||||
return ;
|
||||
}
|
||||
QThread::sleep(10);
|
||||
}
|
||||
});
|
||||
|
||||
connect(this->serial_, &QSerialPort::errorOccurred, this, &MainWindow::serialPort_error);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
this->isOpenCom = false;
|
||||
this->logInfo("串口打开失败!");
|
||||
}
|
||||
|
||||
// this->serial_ = this->comDetect_.openCom(ui->comBox->currentText(), ui->BTBox->currentText().toInt());
|
||||
//
|
||||
// if (this->serial_ != nullptr)
|
||||
// {
|
||||
// QString logs;
|
||||
// logs.append("串口打开成功\n");
|
||||
// logs.append("串口号:" + ui->comBox->currentText() + "\n");
|
||||
// logs.append("波特率:" + ui->BTBox->currentText() + "\n");
|
||||
// if (this->baseConfig_.havaMagnetSteel)
|
||||
// logs.append("磁钢顺序:" + this->baseConfig_.magnetSteelOrder);
|
||||
// this->isOpenCom = true;
|
||||
// this->logInfo(logs);
|
||||
//// this->ui->openComButton->setText("关闭串口");
|
||||
// this->ui->LEDlabel->setStyleSheet("border-radius: 16px;\ "
|
||||
// "background-color: rgba(74, 221, 108, 225);\ "
|
||||
// "border:1px solid rgba(168, 168, 168, 105);");
|
||||
// connect(this->serial_,&QSerialPort::readyRead,this,&MainWindow::readCom); //
|
||||
//
|
||||
// connect(this->serial_, &QSerialPort::errorOccurred, this, &MainWindow::serialPort_error);
|
||||
//
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// this->isOpenCom = false;
|
||||
// this->comDetect_.closeCom();
|
||||
// this->logInfo("串口打开失败!10秒钟后将会重连...");
|
||||
// this->ui->openComButton->setText("关闭串口");
|
||||
//
|
||||
// QtConcurrent::run([=](){
|
||||
// QThread::sleep(10);
|
||||
// if (this->auto_reconnect_serial_ && !this->isOpenCom) {
|
||||
// ui->openComButton->click();
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
}
|
||||
else
|
||||
{
|
||||
// 弹出对话框要求用户输入密码
|
||||
QString password = QInputDialog::getText(this, "密码验证", "请输入密码:", QLineEdit::Password);
|
||||
this->auto_reconnect_serial_ = false;
|
||||
if (this->isOpenCom)
|
||||
{
|
||||
// 弹出对话框要求用户输入密码
|
||||
QString password = QInputDialog::getText(this, "密码验证", "请输入密码:", QLineEdit::Password);
|
||||
|
||||
// 验证账号和密码是否正确
|
||||
if (password == "matrix") {
|
||||
if (this->comDetect_.closeCom())
|
||||
{
|
||||
if (this->needIdentify == true) this->needIdentify = false;
|
||||
this->isOpenCom = false;
|
||||
this->logInfo("串口已关闭!");
|
||||
this->initParam();
|
||||
this->ui->openComButton->setText("打开串口");
|
||||
this->ui->LEDlabel->setStyleSheet("border-radius: 16px;\ "
|
||||
"background-color: red;\ "
|
||||
"border:1px solid rgba(168, 168, 168, 105);");
|
||||
// 验证账号和密码是否正确
|
||||
if (password == "matrix") {
|
||||
if (this->comDetect_.closeCom())
|
||||
{
|
||||
if (this->needIdentify == true) this->needIdentify = false;
|
||||
this->isOpenCom = false;
|
||||
this->logInfo("串口已关闭!");
|
||||
this->initParam();
|
||||
this->ui->openComButton->setText("打开串口");
|
||||
this->ui->LEDlabel->setStyleSheet("border-radius: 16px;\ "
|
||||
"background-color: red;\ "
|
||||
"border:1px solid rgba(168, 168, 168, 105);");
|
||||
}
|
||||
} else {
|
||||
QMessageBox::warning(this, "验证失败", "密码不正确!");
|
||||
}
|
||||
} else {
|
||||
QMessageBox::warning(this, "验证失败", "密码不正确!");
|
||||
}
|
||||
else
|
||||
{
|
||||
this->logInfo("串口已停止访问!");
|
||||
this->ui->openComButton->setText("打开串口");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -523,6 +587,12 @@ void MainWindow::serialPort_error(QSerialPort::SerialPortError error)
|
|||
this->ui->LEDlabel->setStyleSheet("border-radius: 16px; \ "
|
||||
"background-color: red;\ "
|
||||
"border:1px solid rgba(168, 168, 168, 105);");
|
||||
QtConcurrent::run([=](){
|
||||
QThread::sleep(10);
|
||||
if (this->auto_reconnect_serial_ && !this->isOpenCom) {
|
||||
this->connectCom();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -666,6 +736,12 @@ void MainWindow::upRfid(QString rfidInfo)
|
|||
QString info = this->vecTrain.back();
|
||||
int order = this->vecTrain.size();
|
||||
|
||||
if (order > this->socketServerConfig_.delayed_upload && this->iDirection == 0)
|
||||
{
|
||||
this->iDirection = 1;
|
||||
}
|
||||
if (!this->baseConfig_.useSocketServer) this->iDirection = 1;
|
||||
|
||||
info = info.mid(1,info.size() - 1);
|
||||
|
||||
TrainInfo trainInfo;
|
||||
|
@ -676,7 +752,20 @@ void MainWindow::upRfid(QString rfidInfo)
|
|||
trainInfo.collectTime = QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss.zzz").toStdString();
|
||||
trainInfo.strRfidInfo = rfidInfo.toStdString();
|
||||
|
||||
this->queueTrainInfo_.push(trainInfo);
|
||||
this->queueTmpTrainInfo_.push(trainInfo);
|
||||
|
||||
if (this->iDirection < 0)
|
||||
{
|
||||
this->queueTmpTrainInfo_.clear();
|
||||
return;
|
||||
}
|
||||
if (this->iDirection > 0)
|
||||
{
|
||||
while (!this->queueTmpTrainInfo_.isEmpty())
|
||||
{
|
||||
this->queueTrainInfo_.push(this->queueTmpTrainInfo_.pop());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::IdentifyTypeUpdate() {
|
||||
|
@ -721,7 +810,7 @@ void MainWindow::ErrorSlots(const QString &info) {
|
|||
void MainWindow::readTestInfo()
|
||||
{
|
||||
|
||||
if (this->isOpenCom)
|
||||
if (this->isOpenCom || ui->openComButton->text() == "关闭串口")
|
||||
{
|
||||
logWarn("请先关闭串口后进行测试操作!");
|
||||
return;
|
||||
|
|
|
@ -78,6 +78,7 @@ public:
|
|||
void deleteOldFiles(const QString &path, int days);
|
||||
bool rnameRfidLog();
|
||||
void saveRfidLog(const QString &value);
|
||||
bool connectCom();
|
||||
|
||||
void initParam();
|
||||
|
||||
|
@ -98,6 +99,7 @@ private:
|
|||
|
||||
UpResultThread *upResultThread;
|
||||
QString trainTime;
|
||||
bool auto_reconnect_serial_ = false;
|
||||
|
||||
QString logRfidRecvName;
|
||||
QFile recvLog;
|
||||
|
@ -122,6 +124,7 @@ private:
|
|||
QStringList vecTrain;
|
||||
MQueue<QString> queue_{}; // RFID读取的数据队列
|
||||
MQueue<TrainInfo> queueTrainInfo_{}; // RFID读取的磁钢信息队列
|
||||
MQueue<TrainInfo> queueTmpTrainInfo_{}; // RFID临时信息队列
|
||||
QString rfidSourceInfo;
|
||||
QString tmpRfid; //临时存储的RFID原始数据,用于防止接收的数据不完整
|
||||
|
||||
|
|
|
@ -19,6 +19,7 @@ QSerialPort* ComDetect::openCom(const QString &com, int baud)
|
|||
{
|
||||
try
|
||||
{
|
||||
this->serial_ = new QSerialPort;
|
||||
this->serial_->setPortName(com);
|
||||
|
||||
if (baud == 9600)
|
||||
|
@ -53,7 +54,7 @@ QSerialPort* ComDetect::openCom(const QString &com, int baud)
|
|||
}
|
||||
catch (const std::exception &e)
|
||||
{
|
||||
std::cout << e.what() << std::endl;
|
||||
LogError << e.what();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
#include <QtSerialPort/QSerialPortInfo>
|
||||
#include <QtSerialPort/QSerialPort>
|
||||
#include "MQueue.h"
|
||||
#include "common.h"
|
||||
|
||||
class ComDetect {
|
||||
public:
|
||||
|
|
|
@ -27,7 +27,7 @@ void UpResultThread::run()
|
|||
{
|
||||
while (true)
|
||||
{
|
||||
// if ((*this->iDirection == 0 && this->queueTrainInfo_->size() <= 4) || *this->iDirection < 0) continue;
|
||||
QThread::sleep(1);
|
||||
|
||||
while (!this->queueTrainInfo_->isEmpty())
|
||||
{
|
||||
|
@ -37,7 +37,7 @@ void UpResultThread::run()
|
|||
//this->logError("第" + QString::fromStdString(trainInfo.strOrder) + "节,识别结果上传失败!");
|
||||
}
|
||||
}
|
||||
QThread::sleep(1);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -73,7 +73,7 @@ bool UpResultThread::upWeb(TrainInfo &trainInfo)
|
|||
httplib::Client cli(this->interfaceConfig_.httpIp.toStdString(), this->interfaceConfig_.httpPort);
|
||||
|
||||
cli.set_connection_timeout(3, 0);
|
||||
cli.set_read_timeout(3, 0);
|
||||
cli.set_read_timeout(2, 0);
|
||||
httplib::Headers header;
|
||||
httplib::Params params;
|
||||
header.emplace("blade-auth", this->webToken);
|
||||
|
|
Loading…
Reference in New Issue