文章目录
- Qt编程技巧小知识点(6)根据 *IDN? 对程控仪器连接状态进行确认
- 小结
Qt编程技巧小知识点(6)根据 *IDN? 对程控仪器连接状态进行确认
确定仪器连接问题,常用的是监测仪器的连接状态,如下代码所示:
void onconnected(QAbstractSocket::SocketState socketStatue)
{
qDebug()<<socketStatue;
switch (socketStatue)
{
case QAbstractSocket::ConnectingState:
{
ui->label_Text->setText("QAbstractSocket::ConnectingState");
break;
}
case QAbstractSocket::UnconnectedState:
{
ui->label_Text->setText("QAbstractSocket::UnconnectedState");
break;
}
case QAbstractSocket::ConnectedState:
{
ui->label_Text->setText("QAbstractSocket::ConnectedState");
break;
}
case QAbstractSocket::HostLookupState:
{
ui->label_Text->setText("QAbstractSocket::HostLookupState");
break;
}
case QAbstractSocket::BoundState:
{
ui->label_Text->setText("QAbstractSocket::BoundState");
break;
}
case QAbstractSocket::ClosingState:
{
ui->label_Text->setText("QAbstractSocket::ClosingState");
break;
}
case QAbstractSocket::ListeningState:
{
ui->label_Text->setText("QAbstractSocket::ListeningState");
break;
}
default:
{
ui->label_Text->setText("Don't have normal QAbstractSocket");
}
}
}
-
但实际上,这种方式并不是特别好用,这里可以用 程控的通用命令 *IDN? 以及其返回信息进行确认,比如我们连接 santec 激光器。
-
创建 socket ;
socket = new QTcpSocket(this);
- 发送 IDN? 命令;
// 连接仪器
socket->abort();
socket->connectToHost(ip,qint16(port));
// 发送资讯信息
QThread::msleep(100);
QString str = "*IDN?\r\n"
socket->write(str.toLatin1());
- 接收返回信息,并确定返回信息中是否有关键字符。
QByteArray read;
read.clear();
while(socket->waitForReadyRead(100))//需要等待所有的数据传输完成
{
read += socket->readAll();
}
if(read.contains("SANTEC"))
{
qDebug()<<"SANTEC 已连接。";
}
- 另外,记录一个问题即解决办法。
19: error: 'ABCThread' does not name a type;
did you mean 'ABC'?
ABCThread*ABCThreadEvent;
^~~~~~~~~~~~~~~~~~
ABC
解决办法,不要头文件互相引用。
小结
学习,加油,共勉。