基于libmodbus的QT串口相关(一)——源代码解读——QT自带部分的头文件

对于源代码中涉及到的QT自带有#include <QtSerialPort/QSerialPort>和#include <QtSerialPort/QSerialPortInfo>

一.#include <QtSerialPort/QSerialPort>

提供访问串行端口的功能。

可以使用qserialPortInfo帮助程序类获取有关可用串行端口的信息,允许枚举系统中的所有串行端口。这对于获得要使用的串行端口的正确名称很有用。可以将helper类的对象作为参数传递给setport()或setportname()方法,以分配所需的串行设备。

设置端口后,可以使用open()方法以只读(r/o)、只写(w/o)或读写(r/w)模式打开它。

注意:串行端口总是以独占访问方式打开(即,没有其他进程或线程可以访问已经打开的串行端口)。

使用close()方法关闭端口并取消I/O操作。

成功打开后,qserialport尝试确定端口的当前配置并初始化自身。可以使用setBaudRate()、setDataBits()、setParity()、setTopBits()和setFlowControl()方法将端口重新配置为所需的设置。

这有一组用于引出信号工作的属性,即:QSerialPort::dataTerminalReady,QSerialPort::dataTerminalReady,

QSerialPort::dataTerminalReady,也可以使用pinout signals()方法查询当前的pinout信号集。

一旦知道端口已准备好读或写,就可以使用read()或write()方法。或者,也可以调用readline()和readall()方便方法。如果不是一次读取所有数据,其余数据将在稍后可用,因为新的传入数据将附加到qserialport的内部读取缓冲区。可以使用setReadBufferSize()限制读取缓冲区的大小。

qserialport提供一组函数,这些函数在发出某些信号之前挂起调用线程。这些功能可用于实现阻塞串行端口:

waitForReadyRead()阻止调用,直到新数据可供读取。

waitForBytesWritten()阻止调用,直到一个有效负载的数据写入串行端口。

如果waitForReadyRead()返回false,则表明连接已关闭或发生错误。

 int numRead = 0, numReadTotal = 0;
 char buffer[50];
 for (;;) 
 {
   numRead  = serial.read(buffer, 50);

   // Do whatever with the array

   numReadTotal += numRead;
   if (numRead == 0 && !serial.waitForReadyRead())
   {
        break;
   }        
}

如果在任何时间点发生错误,qserialport将发出erroroccured()信号。您还可以调用error()来查找上次发生的错误类型。

使用阻塞串行端口编程与使用非阻塞串行端口编程截然不同。阻塞串行端口不需要事件循环,通常会导致代码更简单。但是,在GUI应用程序中,阻塞串行端口只能用于非GUI线程,以避免冻结用户界面。

qserialPort类还可以与qtextstream和qdatastream的流运算符(operator<()和operator>>())一起使用。但是,有一个问题需要注意:在使用操作符>>()重载的操作符尝试读取之前,请确保有足够的数据可用。

二.#include <QtSerialPort/QSerialPortInfo>

提供有关现有串行端口的信息。

使用静态函数生成qserialPortInfo对象列表。列表中的每个qserialPortInfo对象表示单个串行端口,可以查询端口名、系统位置、说明和制造商。qserialPortInfo类也可以用作qserialPort类的setport()方法的输入参数。

构造空的qserialPortInfo对象。

QSerialPortInfo::QSerialPortInfo(const QSerialPort &port)

从串行端口构造qserialPortInfo对象。 

QSerialPortInfo::QSerialPortInfo(const QString &name)

从串行端口名构造qserialPortInfo对象。此构造函数根据端口名在可用端口中查找相关的串行端口,并构造该端口的串行端口信息实例。

 

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值