HANDLE hCom;void Sensor_v1slot5 打开串口 查看所有串口信息 vectorstring vecCom; char strCom255 tempCom255; for int i = 0; i 20; i++ strComFormatCOMd i + 1; sprintf_sstrCom COMd i + 1; sprintf_stempCom COMd i
在关闭串口的slot7函数中,需要添加一个判断语句来判断是否成功关闭了串口。如果成功关闭串口,再去打开串口。修改后的代码如下所示:
void Sensor_v1::slot7() //关闭串口
{
CloseHandle(hCom);
QString labeltext3 = QStringLiteral("串口状态:关闭");
ui.label_3->setText(labeltext3);
QString text = QStringLiteral("串口关闭成功!");
emit sendtext(text); //传出子窗体信号
newW->show();
// 打开串口
hCom = CreateFile(L"\\\\.\\COM5", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hCom == INVALID_HANDLE_VALUE)
{
QString text = QStringLiteral("串口打开失败!");
emit sendtext(text); //传出子窗体信号
newW->show();
}
else
{
QString labeltext3 = QStringLiteral("串口状态:打开"), labeltext4 = QStringLiteral("COM5");
ui.label_3->setText(labeltext3);
ui.label_4->setText(labeltext4);
QString text = QStringLiteral("串口打开成功!");
emit sendtext(text); //传出子窗体信号
newW->show();
}
//设备属性值 获取+修改+设置
DCB mDCB;
GetCommState(hCom, &mDCB);
mDCB.Parity = NOPARITY;
mDCB.ByteSize = 8;
mDCB.StopBits = ONESTOPBIT;
mDCB.BaudRate = CBR_9600;
SetCommState(hCom, &mDCB);
//设置串口写和读的缓冲区大小
SetupComm(&mDCB, 1024, 1024);
//设置超时时间
COMMTIMEOUTS TimeOuts;
//设定读超时
TimeOuts.ReadIntervalTimeout = MAXDWORD;//读间隔超时
TimeOuts.ReadTotalTimeoutMultiplier = 0;//读时间系数
TimeOuts.ReadTotalTimeoutConstant = 0;//读时间常量
//设定写超时
TimeOuts.WriteTotalTimeoutMultiplier = 1;//写时间系数
TimeOuts.WriteTotalTimeoutConstant = 1;//写时间常量
SetCommTimeouts(hCom, &TimeOuts); //设置超时
//在发送和接收前,清空读和写的缓冲区域
PurgeComm(&mDCB, PURGE_TXCLEAR | PURGE_RXCLEAR);
}
这样就可以在关闭串口后重新打开串口了
原文地址: https://www.cveoy.top/t/topic/iBtY 著作权归作者所有。请勿转载和采集!