#include "widget.h"
#include "ui_widget.h"
#include <QMessageBox>
#include <QDebug>
#include <QFile>
#include <QFileDialog>
#include <QTimer>
#include <QStringList>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
resize(800,600); //窗口限制
setWindowTitle("Serial_Port");
SendByte=0;ReceByte=0;
serial = new QSerialPort(this);
ui->comboBox_2->setCurrentIndex(5); //初始化
ui->comboBox_3->setCurrentIndex(3);
ui->comboBox_4->setCurrentIndex(2);
ui->comboBox_5->setCurrentIndex(0);
ui->lineEdit->setText("1000");
ui->checkBox->setCheckState(Qt::Checked);
ui->checkBox_4->setCheckState(Qt::Checked);
ui->pushButton_7->setEnabled(false);
ui->checkBox_7->setEnabled(false);
connect(serial,SIGNAL(readyRead()), //信号与槽函数
this,SLOT(serialPort_readyRead()));
Times=0;portTime=0;
lineEditData=1000;
timer = new QTimer;
timer->start(1);
//connect(timer,&QTimer::timeout,this,&Widget::TimerEvent);
connect(timer,SIGNAL(timeout()),this,SLOT(TimerEvent())); //信号与槽函数
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_2_clicked()
{
if(ui->pushButton_2->text()==QString("打开串口"))
{
//设置串口名
serial->setPortName(ui->comboBox->currentText());
//设置波特率
serial->setBaudRate(ui->comboBox_2->currentText().toInt());
//设置数据位
switch(ui->comboBox_3->currentText().toInt())
{
case 5:serial->setDataBits(QSerialPort::Data5);break;
case 6:serial->setDataBits(QSerialPort::Data6);break;
case 7:serial->setDataBits(QSerialPort::Data7);break;
case 8:serial->setDataBits(QSerialPort::Data8);break;
default:serial->setDataBits(QSerialPort::UnknownDataBits);break;
}
//设置奇偶校验位
switch(ui->comboBox_4->currentIndex())
{
case 0:serial->setParity(QSerialPort::EvenParity);break;
case 1:serial->setParity(QSerialPort::MarkParity);break;
case 2:serial->setParity(QSerialPort::NoParity);break;
case 3:serial->setParity(QSerialPort::OddParity);break;
default:serial->setParity(QSerialPort::UnknownParity);break;
}
//设置停止位
switch (ui->comboBox_5->currentIndex())
{
case 0:serial->setStopBits(QSerialPort::OneStop);break;
case 1:serial->setStopBits(QSerialPort::OneAndHalfStop);break;
case 2:serial->setStopBits(QSerialPort::TwoStop);break;
default:serial->setStopBits(QSerialPort::UnknownStopBits);break;
}
//设置流控制
serial->setFlowControl(QSerialPort::NoFlowControl);
//打开串口
if(!serial->open(QIODevice::ReadWrite))
{
QMessageBox::about(NULL,"提示","无法打开串口");
return;
}
//下拉控件失能
ui->comboBox->setEnabled(false);
ui->comboBox_2->setEnabled(false);
ui->comboBox_3->setEnabled(false);
ui->comboBox_4->setEnabled(false);
ui->comboBox_5->setEnabled(false);
ui->pushButton->setEnabled(false);
ui->checkBox_7->setEnabled(true);
ui->pushButton_2->setText(tr("关闭串口"));
ui->pushButton_7->setEnabled(true);
}
else
{
//关闭串口
serial->close();
//下拉按键使能
ui->comboBox->setEnabled(true);
ui->comboBox_2->setEnabled(true);
ui->comboBox_3->setEnabled(true);
ui->comboBox_4->setEnabled(true);
ui->comboBox_5->setEnabled(true);
ui->pushButton->setEnabled(true);
ui->checkBox_7->setEnabled(false);
ui->pushButton_2->setText(tr("打开串口"));
//发送失能
ui->pushButton_7->setEnabled(false);
}
}
void Widget::on_pushButton_clicked() //扫描串口
{
int i,n;
ui->comboBox->clear();
portStringLine.clear();
foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts())
portStringLine +=info.portName();
n=portStringLine.size();
for(i=0;i<n;i++)
{
serial->setPortName(portStringLine[i]);
if(!serial->open(QIODevice::ReadWrite))
{
portStringLine[i]+="(不可用)";
QVariant v(0); //禁用
ui->comboBox->setItemData(1, v, Qt::UserRole - 1);
}
else
{
QVariant v(1|32); //可用
ui->comboBox->setItemData(1, v, Qt::UserRole - 1);
}
serial->close();
}
ui->comboBox->addItems(portStringLine);
}
void Widget::serialPort_readyRead() //串口接收
{
int i,length;
QString lasttext;
if(ui->checkBox_3->checkState()!=Qt::Checked)
{
lasttext=ui->textEdit->toPlainText();
Receivetext = serial->readAll();
ReceByte+=Receivetext.length();
ui->label_10->setText(QString::number(ReceByte));
if(ui->checkBox_2->checkState()==Qt::Checked)
{
Receivetext=Receivetext.toLatin1().toHex(); //字符串转十六进制
length=Receivetext.length();
for(i=0;i<=length/2;i++)
{
Receivetext.insert((2+3*i),' '); //插入空格字符串
}
}
else
Receivetext=Receivetext.toLatin1();
lasttext=lasttext.append(Receivetext);
ui->textEdit->setText(lasttext);
}
}
void Widget::on_pushButton_7_clicked() //串口发送
{
QByteArray bytearray;
Sendtext=ui->textEdit_2->toPlainText();
if(ui->checkBox_6->checkState()==Qt::Checked)
Sendtext += '\n';
if(ui->checkBox_5->checkState()!=Qt::Checked)
bytearray = Sendtext.toLatin1();
else
bytearray = QByteArray::fromHex(Sendtext.toUtf8()); //十六进制转字符串
serial->write(bytearray);
//定长发送
//serial->write((const char *)param_data,16);
SendByte+=Sendtext.length();
ui->label_9->setText(QString::number(SendByte));
ui->textEdit_2->moveCursor(QTextCursor::End);
}
void Widget::TimerEvent() //定时事件,1ms
{
int t=500; //扫描串口时间
Times++;portTime++;
if(Times>=lineEditData) //定时发送
{
if(ui->checkBox_7->checkState()==Qt::Checked)
Widget::on_pushButton_7_clicked();
Times=0;
}
if(portTime==t) //定时扫描串口
{
QStringList newPortStringList;
newPortStringList.clear();
foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts())
newPortStringList += info.portName();
if(newPortStringList.size() != portStringLine.size())
{
portStringLine = newPortStringList;
ui->comboBox->clear();
ui->comboBox->addItems(portStringLine);
}
portTime=0;
}
}
void Widget::on_pushButton_8_clicked() //清除计数
{
SendByte=0;
ReceByte=0;
ui->label_9->setText(QString::number(SendByte));
ui->label_10->setText(QString::number(ReceByte));
}
void Widget::on_pushButton_4_clicked() //清除接收区
{
ui->textEdit->clear();
}
void Widget::on_pushButton_6_clicked() //清除发送区
{
ui->textEdit_2->clear();
}
void Widget::on_checkBox_clicked() //文本接收
{
ui->checkBox->setCheckState(Qt::Checked);
m0_51294753
- 粉丝: 101
- 资源: 3
最新资源
- 7次b样条多目标轨迹规划,实现时间能量冲击最优,基于NSGA2多目标轨迹规划,遗传算法 代码带注释
- 麻雀优化算法优化随机森林回归预测(SSA-RF) 麻雀优化算法2020最新算法 matlab 代码 同时还有哈里斯鹰,狼群算法,粒子群优化算法,麻雀优化算法,秃鹰优化算法,龙格库塔优化算法,EO优化算
- 基于STM32指纹密码锁设计 程序、仿真、原文 本设计主要由stm32f103rct6单片机、AS608指纹模块、LCD1602显示屏、AT24C02存储模块、继电器和指示灯组成,该指纹密码锁是以st
- 多微网优化模型matlab 采用yalmip编程,考虑三个微网间的交互功率、和电网的交互功率以及风光、微燃机等主体出力,以成本最优作为目标函数,程序运行稳定
- omron欧姆龙NX程序NX1P2-1040DT,搭载思勤EtherCAT远程输入输出IO模块 全自动电池焊接检测机 涵盖人机配方一键型功能,故障记录功能,产量统计及OEE功能,TCP,视觉通信控制
- 逆变器重复控制 采用simulink仿真嵌入C语言实现了逆变器重复控制模型的搭建,整个仿真没有任何模块,全是用C语言写的代码 重复控制算法,陷波器,二阶低通滤波器,都是用C代码实现,且重复控制算法
- ruoyi-v3-node-module
- 采用simulink仿真嵌入C语言实现了逆变器的搭建,整个仿真没有一个模块,所有算法均用C语言实现,并对C语言代码给出了详尽的注释 逆变器输出的电压THD仅有0.4% 可以根据这个例子写自己的算法
- 逆变器仿真 在simulink中搭建了逆变器仿真模型,采用电压电流双闭环控制,采用LC滤波器,输出电压完美的跟随给定,且THD仅1% 整个仿真全部离散化,采用离散解析器,控制与采样环节全部自己手工
- 在simulink中搭建了PWM整流电路 直流测电压采用软启动的方式,使直流测电压逐渐上升,达到给定值时再加入负载 在s-function中编写软启动程序,实现软启动,直流测电容电压在软启动过程中
- 在simulink中搭建了两电平PWM整流器,采用电压电流双闭环控制,采用基于双二阶广义积分器的锁相环锁电网相位 实现了单位功率因数,且并网电流THD小于5%,符合并网要求 整个仿真全部离散化
- MMC模块化多电平流器pscad电磁暂态仿真模型 交流系统对称与不对称MMC-HVDC MMC-MTDC 双端 四端直流电网的都有
- 基于粒子群算法的综合能源优化问题 建立包含冷热电气的综合能源系统,以综合能源运行成本最优为目标,建立优化运行模型 采用粒子群算法进行优化求解 得到各个冷热电设备的最优运行计划 里面包含一篇参考的资料
- 基于遗传算法的最优潮流 以IEEE30节点的输电网为研究对象 以系统发电成本最小为目标函数 以机组出力为优化变量 其中出力与成本的关系是经典的二次函数关系 通过优化求解得到最佳机组出力
- 基于多目标粒子群算法的微电网优化 首先构建了含风光柴储的微电网模型,之后以风光柴储运行成本最低和风光消纳最大为目标,建立了多目标优化模型,模型考虑功率平衡 储能SOC等约束 通过模型求解 得到帕累托
- 蜂鸟e203系统移植,可以移植到其他开发板 现有移植到 arty a7开发板的
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈