Qt 下位机串口模拟器

news/2025/1/8 3:36:27/

使用 vspd 创建虚拟配对串口,Qt 实现下位机串口模拟器,便于上位机开发及实时调试,适用字符串格式上下位机串口通信,数据包格式需增加自定义解析处理。

通过以下链接下载 vspd 安装包,进行 dll 破解。

链接: https://pan.baidu.com/s/1vMgZKbdx9TF1ZB1QD1vQhg 提取码: 6is9

通过 Add pair 增加一对虚拟串口,vspd 内部已实现串口数据双向关联,直接当成已物理连接的串口使用即可,Add pair 后 vspd 可以关掉,以后使用虚拟串口无需再打开 vspd。

上位机连接配对串口的其中一个,下位机串口模拟器连接另一个。搭建 Qt 环境的基本串口工程,串口模拟器收到上位机命令后,模拟实际业务执行返回对应响应消息。

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QDateTime>
#include <QTimer>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);QFont font;font.setPixelSize(16);setFont(font);setWindowTitle(QStringLiteral("下位机串口模拟器"));const QList<QSerialPortInfo> ports = QSerialPortInfo::availablePorts();for (const QSerialPortInfo &portInfo : ports){ui->comboBox->addItem(portInfo.portName());}ui->comboBox->setCurrentText("COM12");ui->label->setText(QStringLiteral("<font color=black>●</font>"));QTimer::singleShot(0, this, SLOT(on_pushButton_clicked()));
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::receiveData()
{mReceivedData.append(mSerial.readAll());QString tmp = mReceivedData;mReceivedData.clear();ui->textBrowser->append(QStringLiteral("%1 接收:%2").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz")).arg(tmp));if (tmp == "cmd\r\n"){sendData("cmd--\r\n");}else if (tmp == "cmd2\r\n"){sendData("cmd2--\r\n");}
}void MainWindow::sendData(QString txt)
{QtSleepSec(1);mSerial.write(txt.toUtf8().data());ui->textBrowser->append(QStringLiteral("%1 回复:%2").arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz")).arg(txt));
}void MainWindow::on_pushButton_clicked()
{mSerial.setPortName(ui->comboBox->currentText());mSerial.setBaudRate(115200);mSerial.setDataBits(QSerialPort::Data8);mSerial.setParity(QSerialPort::NoParity);mSerial.setStopBits(QSerialPort::OneStop);mSerial.setFlowControl(QSerialPort::NoFlowControl);if (mSerial.open(QIODevice::ReadWrite)){ui->label->setText(QStringLiteral("<font color=green>●</font>"));connect(&mSerial, SIGNAL(readyRead()), this, SLOT(receiveData()));ui->pushButton->setEnabled(false);}else{ui->label->setText(QStringLiteral("<font color=red>●</font>"));}
}void MainWindow::on_pushButton_2_clicked()
{if (mSerial.isOpen()){mSerial.close();}ui->pushButton->setEnabled(true);ui->label->setText(QStringLiteral("<font color=black>●</font>"));
}void MainWindow::on_pushButton_3_clicked()
{ui->textBrowser->clear();
}void MainWindow::QtSleepSec(unsigned int sec)
{QTime dieTime = QTime::currentTime().addSecs(sec);while (QTime::currentTime() < dieTime){QCoreApplication::processEvents(QEventLoop::AllEvents, 100);}
}

http://www.ppmy.cn/news/1561158.html

相关文章

Selenium 自动化,如何下载正确的 ChromeDriver

在 Python 的 Selenium 自动化操作中&#xff0c;chromedriver 是不可或缺的驱动程序。没有正确安装对应版本的驱动&#xff0c;运行代码时常常会遇到报错问题&#xff0c;比如 “session not created: This version of ChromeDriver only supports Chrome version XX”。 今天…

[Qt] 信号和槽(2) | 多对多 | disconnect | 结合lambda | sum

目录 1. 带参数的信号和槽 重载信号槽 参数列表匹配规则 信号参数多于槽的情况 2. 信号与槽的连接方式 ⭕ 信号槽 的意义 3. 信号和槽的其他说明 1. 信号与槽的断开 2. Qt4 版本信号与槽的连接 Qt4 优缺点 3.Lambda 定义槽函数 语法格式 槽函数使用 Lambda 信号与…

利用webworker解决性能瓶颈案例

目录 js单线程的问题webworker的基本使用webworker的常见应用可视化优化导出Excel js单线程的问题 众所周知&#xff0c;js不擅长计算&#xff0c;计算是同步的&#xff0c;大规模的计算会让js主线程阻塞&#xff0c;导致界面完成卡死。比如有一个600多亿次的计算&#xff0c;…

Jenkins(持续集成与自动化部署)

Jenkins 是一个开源软件项目&#xff0c;是基于Java开发的一种持续集成工具。 官网&#xff1a;https://www.jenkins.io/ GitLab安装使用 安装前提&#xff1a;内存至少需要4G 官方网站&#xff1a;https://about.gitlab.com/ 安装文档&#xff1a;https://docs.gitlab.c…

流程图(三)利用python绘制桑基图

流程图&#xff08;三&#xff09;利用python绘制桑基图 桑基图&#xff08;Sankey diagram&#xff09;简介 桑基图经常用于能源、金融行业&#xff0c;对材料、成本的流动进行可视化分析。现在很多互联网行业还使用桑基图做用户流动性分析&#xff0c;能很好地观察数据成分的…

在不到 5 分钟的时间内将威胁情报 PDF 添加为 AI 助手的自定义知识

作者&#xff1a;来自 Elastic jamesspi 安全运营团队通常会维护威胁情报报告的存储库&#xff0c;这些报告包含由报告提供商生成的大量知识。然而&#xff0c;挑战在于&#xff0c;这些报告的内容通常以 PDF 格式存在&#xff0c;使得在处理安全事件或调查时难以检索和引用相关…

F.interpolate函数

F.interpolate 是 PyTorch 中用于对张量&#xff08;通常是图像数据&#xff09;进行插值操作的函数&#xff0c;常用于调整张量的大小&#xff0c;例如改变图像的分辨率。它支持多种插值方法&#xff0c;包括最近邻插值、双线性插值和三次插值等。 语法 torch.nn.functional…

【杂谈】-DeepSeek如何以560万美元突破成本障碍

DeepSeek如何以560万美元突破成本障碍 文章目录 DeepSeek如何以560万美元突破成本障碍1、高效人工智能的经济学2、实现不可能的工程3、人工智能生态系统的连锁反应 传统的人工智能观点认为&#xff0c;构建大型语言模型 (LLM)需要大量资金——通常需要数十亿美元的投资。但中国…