int
thread_stop =
param_Cutpp.thread_shutup;
int
data_wrap =
0
;
int
angle3 =
0
;
//
文档缺角标志
double
ruihua=
4.2
;
//
锐化参数
Letscut cutp;
while
(!thread_stop)
//
不结束线程
msleep(
100
);
mutex
->
lock
();
thread_stop
= param_Cutpp.thread_shutup;
//
获得线程运行标值
data_wrap = param_Cutpp.data_wrap;
//
获得外部校正标志
angle3 =
param_Cutpp.angle_3;
ruihua
= param_Cutpp.Ruihua;
//
获得锐化参数
mutex->
unlock();
try
{
if
(cap.isOpened())
cap
>>
img;
if
(!img.empty())
//
采集成功
//
一系列操作
cap.release();
if
(!
cap.isOpened())
//
cap.release();
VideoCapture cap1(
0
);
if
(cap1.isOpened())cap =
cap1;
catch
(
int
)
//
这里弹出错误提示
catch
(std::exception&
e)
;
//
弹出对话错误提示框
连接串口:根据串口的名字、序列号可以打开串口
获得串口数据:QT提供了监测串口发送数据的信号函数,与自己的槽函数连接即可实时监测串口传输进来的数据
串口掉线监测:QT提供了串口错误信号函数,连接自己的错误处理槽函数可以自动处理掉线事件(我在槽函数中主要实现串口的重连操作,一旦出现错误就启动重连计时器,实时监测是否有合适串口连接在机器上)
串口重连:串口重连与第一步连接串口使用的同一个函数,随着计时器不断调用该槽函数,直到串口连接成功,串口重新连接成功后,关闭计时器。
串口连接函数
void Cutpaper::GetSerialPortNames()//获取串口相关的信息,并重连串口
QSerialPortInfo com_info;
foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) {
if (info.serialNumber() == "")//串口序列号,或者串口的名字作为串口的标识符
com_info = info;
break;
serial->setPort(com_info);
if (serial->open(QIODevice::ReadWrite)) {
qDebug() << "serial open";
timer_serl.stop();//结束重连触发计时器
serial->setPortName("srl");
serial->setBaudRate(QSerialPort::Baud115200);
serial->setDataBits(QSerialPort::Data8);//设置数据位8
serial->setParity(QSerialPort::NoParity); //校验位设置为0
serial->setStopBits(QSerialPort::OneStop);//停止位设置为1
serial->setFlowControl(QSerialPort::NoFlowControl);//设置为无流控制
QObject::connect(serial, &QSerialPort::readyRead, this, &Cutpaper::serial_clot);
QObject::connect(serial, static_cast<void (QSerialPort::*)
(QSerialPort::SerialPortError)>(&QSerialPort::error),
this, &Cutpaper::handleSerialError);
else {
qDebug() << "serial not openned";
获取串口数据
void Cutpaper::serial_clot()
QByteArray buf;
buf = serial->readAll();
if (!buf.isEmpty())
qDebug() << buf;
buf.clear();
串口出错监测
void Cutpaper::handleSerialError(QSerialPort::SerialPortError error)//检测串口连接错误
if (error == QSerialPort::ResourceError||error== QSerialPort::PermissionError) {//包括串口被拔出来的错误
char buf_err[100];
sprintf(buf_err, "串口连接中断,请检查是否正确连接!");
QString str_Err = QString::fromLocal8Bit(buf_err);
QMessageBox::critical(this, tr("Error"), str_Err);
//serial->clear();
serial->close();
//serial->deleteLater();//串口出错,释放串口内容
timer_serl.start(500);//打开串口重连请求
说明
timer_serl是一个计时器,在界面建立的时候就与GetSerialPortNames()函数connect,然后启动计时器,连接到串口之后,关闭计时器。
当串口出现错误时,该计时器重新被打开,也就是会调用GetSerialPortNames()函数,直到串口被重新连接
————————————————
版权声明:本文为CSDN博主「VeraWin」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/TiffanyXYf/article/details/109369195