16,216
社区成员
发帖
与我相关
我的任务
分享
void MotorController::connect_serial() // 槽函数,对应的signal是connect_device按钮的click()
{
foreach (const QSerialPortInfo &sinfo, QSerialPortInfo::availablePorts()) {
mcsp->setPort(sinfo); // mcsp是指向QSerialPort类的指针
mcsp->open(QIODevice::ReadWrite);
QByteArray checkDevice;
QString2Hex("02504D50312F313030300D0A", checkDevice); //将字符串转换成十六进制字符组
mcsp->write(checkDevice);
if(check_serial())
break;
}
}
bool MotorController::check_serial() // 检查是否连接到目标设备
{
bool check_link = 0;
QByteArray wished_reply;
QString2Hex("43 09 50 4D 50 31 0D 0A ", wished_reply);
QByteArray readAnswer;
readAnswer = *buf; // buf的定义是:QByteArray *buf = new QByteArray;用来保存从串口接收到的数据
showLinkStatus->setText(readAnswer); // showLinkStatus是一个QLabel,最初状态什么文字都没有
if(readAnswer != wished_reply)
mcsp->close();
else{
check_link = 1;
connect_device->hide();
}
return check_link;
}
void MotorController::read_data() // 这是readyRead()信号连接的slot
{
*buf = mcsp->readAll();
}
if(readAnswer != wished_reply)
/*mcsp->close()*/;
else{
check_link = 1;
connect_device->hide();
}
QByteArray MotorController::read_data()
{
QByteArray buf1;
buf1 = mcsp->readAll();
return buf1;
}
void MotorController::connect_serial()
{
foreach (const QSerialPortInfo &sinfo, QSerialPortInfo::availablePorts()) {
mcsp->setPort(sinfo);
mcsp->open(QIODevice::ReadWrite);
QByteArray checkDevice;
QString2Hex("02504D50312F313030300D0A", checkDevice);
mcsp->write(checkDevice);
if(check_serial())
break;
}
}
bool MotorController::check_serial()
{
bool check_link = 0;
QByteArray wished_reply;
QString2Hex("43 09 50 4D 50 31 0D 0A ", wished_reply);
QByteArray readAnswer;
readAnswer = read_data();
showLinkStatus->setText(readAnswer);
if(readAnswer != wished_reply)
/*mcsp->close()*/;
else{
check_link = 1;
connect_device->hide();
}
return check_link;
}