怎样提高网站的排名,网络营销定价的特点有,佛山网站优化方法软件,软件需求分析目录
0.简介
1.展示结果
1#xff09;UI界面#xff1a;
2#xff09;SSCOM#xff08;模拟下位机收发#xff09;#xff1a;
3#xff09;VSPD虚拟串口驱动#xff08;连接上位机和下位机的串口#xff09;#xff1a;
4#xff09;实际收发消息效果及视频演…目录
0.简介
1.展示结果
1UI界面
2SSCOM模拟下位机收发
3VSPD虚拟串口驱动连接上位机和下位机的串口
4实际收发消息效果及视频演示 2.详细实现
1代码实现
①界面搭建如下控件拖拉即可
②mainwindow.h
③mainwindow.cpp
3.用SSCOM模拟下位机传输需注意 0.简介 最近在研究串口通信我们用的是RS485通信传输的是字节然后需要用串口通信连接上位机和下位机为此写个小demo做练习。需求就是通过设置串口号、波特率等信息连接两个串口能够实现数据的发送和接收。我是基于qt的QSerialPort这个库实现的在UI界面上可以输入发送的数据、接收发来的数据、清空log的操作。我用了SSCOM软件来模拟下位机的收发信息用虚拟串口驱动软件VSPD将两个串口连接在一起。 1.展示结果
1UI界面 2SSCOM模拟下位机收发 3VSPD虚拟串口驱动连接上位机和下位机的串口 4实际收发消息效果及视频演示
①UI界面发送数据SSCOM模拟下位机接收消息 ②SSCOM模拟下位机发送消息UI界面作为上位机接受消息 视频中依次演示了上位机收数据SSCOM模拟下位机发送数据以及上位机发送数据SSCOM接收的过程。 QSerialPort传输过程演示 2.详细实现
1代码实现
QT项目首先需要建一个带有图形界面的项目此处不做赘述 项目目录如下 ①界面搭建如下控件拖拉即可
主要使用控件QTextBrowser日志打印显示控件、QLabel、QLineEdit上位机消息输入框、两个QPushButton点击可以清空log和发送消息。 ②mainwindow.h
主要就是3个槽函数的实现接收消息、发送消息、清空文本框 完整代码
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include QMainWindow#include QSerialPort
#include QSerialPortInfo#include QList
#include QDateTimeQT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent nullptr);~MainWindow();public slots:void recvMsg();//接收消息的槽private slots:void on_btn_send_clicked();//槽函数点击发送消息按钮void on_btn_clear_clicked();//槽函数点击清空log文本框private:Ui::MainWindow *ui;QSerialPort *serialPort;
};
#endif // MAINWINDOW_H
③mainwindow.cpp 主要思路是 new一个QSerialPort对象设置串口名打开串口配置串口读写串口关闭串口。 newQSerialPort设置串口名 打开串口 配置串口 读写串口 析构函数关闭串口 完整代码
#include mainwindow.h
#include ui_mainwindow.h
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui-setupUi(this);this-serialPort new QSerialPort;//申请内存this-serialPort-setPortName(COM3);//设置串口名COM3//判断串口是否打开if(this-serialPort-open(QIODevice::ReadWrite) true){//用open函数打开串口打开成功后将成功的消息打印在log控件上ui-comLog-insertPlainText(Open Success\n);}else {QString str QString(\n错误代码:%2\n%3).arg(serialPort-error()).arg(serialPort-errorString());//串口打开失败ui-comLog-insertPlainText(Open Fail);ui-comLog-insertPlainText(str);}this-serialPort-setBaudRate(115200);//设置波特率this-serialPort-setDataBits(QSerialPort::Data8);//设置数据位this-serialPort-setStopBits(QSerialPort::OneStop);//设置停止位this-serialPort-setParity(QSerialPort::NoParity);//设置是否有奇偶校验connect(this-serialPort, SIGNAL(readyRead()), this, SLOT(recvMsg()));//若下位机发送数据用recvMsg槽接收
}MainWindow::~MainWindow()
{delete ui;this-serialPort-close();
}void MainWindow::recvMsg()
{QByteArray msg this-serialPort-readAll();//读取数据//接到下位机发送的数据后加时间打印在log控件上ui-comLog-insertPlainText(QDateTime::currentDateTime().toString(yyyy-MM-dd hh:mm:ss) [recieve] msg.toHex().data() \n);
}void MainWindow::on_btn_clear_clicked()
{//清空log控件ui-comLog-clear();
}void MainWindow::on_btn_send_clicked()
{//发送数据QString msg1 ui-lineEdit-text();//获取界面上QLineEdit控件中的数据this-serialPort-write(QByteArray::fromHex(msg1.toLatin1()));//用write()接口写数据ui-comLog-insertPlainText(QDateTime::currentDateTime().toString(yyyy-MM-dd hh:mm:ss) [send] msg1 \n);//加时间打印在log控件上
}3.用SSCOM模拟下位机传输需注意
1SSCOM中的端口号应该与项目中的不同然后两者用VSPD连接起来
我这边SSCOM的端口用的是【COM1】项目中设置的端口是【COM3】所以我在VSPD中连接的是【COM1和COM3】此时上位机的端口就是COM3下位机端口是COM1。 2需要注意项目中的波特率需要与SSCOM中相同我这里用的都是【115200】。 至此串口的上下位机通信就完成了只是一个简单的小demo可能有描述不清楚的地方有任何问题都可以留言~ --END--