添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
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