Red de conocimiento informático - Material del sitio web - Cómo leer datos del puerto serie en QT

Cómo leer datos del puerto serie en QT

1. Descarga del archivo

Dirección de descarga:

También puedes descargar el disco que subí a Internet:

2 Introducción al contenido del archivo

<. p>1. El archivo descargado es qextserialport-1.2win-alpha. Descomprímalo y ábralo.

(Haga clic en la imagen para verla más grande)

La siguiente es una introducción:

(1) El contenido del archivo en la carpeta doc es la clase QextSerialPort y QextBaseType. En pocas palabras, podemos abrirlos con el programa Bloc de notas.

(2) Hay varios programas de muestra en la carpeta de ejemplos. Puede consultar el código fuente, pero parece haber muchos problemas al intentar ejecutarlos.

(3) En la carpeta html está el documento de la clase QextSerialPort.

(4) Luego el resto de archivos. La clase QextSerialEnumerator definida en los archivos qextserialenumerator.cpp y qextserialenumerator.h

se utiliza para obtener información sobre los puertos serie disponibles en la plataforma. Sin embargo, esta clase no parece funcionar muy bien y no es nuestro enfoque, por lo que no la cubriremos más.

(5) Los archivos qextserialbase.cpp y qextserialbase.h definen una clase QextSerialBase

, y los archivos win_qextserialport.cpp y win_qextserialport.h definen un Win_QextSerialPort

clases, los archivos posix_qextserialport.cpp y posix_qextserialport.h definen una clase

Posix_QextSerialPort, y los archivos qextserialport.cpp y qextserialport.h definen una clase

QextSerialPort. Esta clase QextSerialPort es la clase que mencionamos anteriormente. Es una subclase de todas estas clases y la clase abstracta de más alto nivel. Protege las características de la plataforma y la hace utilizable en cualquier plataforma.

2. Presente brevemente varias categorías.

El siguiente es un diagrama de la relación entre estas clases.

Como puedes ver, todos heredan de la clase QIODevice, por lo que puedes usar algunas funciones de esta clase directamente. También hay una clase QextBaseType en la imagen. De hecho, es solo un conocimiento estándar sin contenido específico. Se usa para representar una de las clases de Win_QextSerialPort o Posix_QextSerialPort, porque en la clase QextSerialPort se usa compilación condicional. se llama clase QextSerialPort. Por lo tanto, la clase QextSerialPort puede heredar de la clase

Win_QextSerialPort o de la clase Posix_QextSerialPort, por lo que se utiliza QextBaseType para representar esto.

Esto lo podemos ver en el archivo qextserialport.h. De manera similar, la clase QextSerialPort en realidad solo sirve para facilitar la compilación de programas multiplataforma. Con esta clase, puede compilar y heredar diferentes clases en diferentes plataformas en diferentes condiciones. Por tanto, es sólo un concepto abstracto que proporciona varios constructores y no es concreto.

h"

#define QextBaseTypeWin_QextSerialPort

#endif

Entonces, en realidad no hay necesidad de usar esta clase, solo use Win_QextSerialPort o Posix_QextSerialPort. Por supuesto, si

Si desea utilizar esta clase para compilar y ejecutar el mismo programa fuente directamente en Windows y Linux, asegúrese de agregar #define _TTY_POSIX_ en Linux. Para que el programa sea más claro, tenemos. Se agregó en Linux. Esta clase no se utiliza, por lo que no se describirá a continuación.

La clase QextSerialBase hereda de la clase QIODevice, que proporciona las variables y funciones necesarias para operar el puerto serie. p>

Win_QextSerialPort y Posix_QextSerialPort heredan de la clase QextSerialBase

. La clase Win_QextSerialPort agrega algunas funciones para operar puertos serie en la plataforma Windows, mientras que la clase Posix_QextSerialPort opera en la plataforma Linux. Agrega algunas funciones. Por lo tanto, en Windows usamos la clase Win_QextSerialPort y en Linux usamos la clase

Posix_QextSerialPort

3. También participa en la clase QextSerialBase.

Tiene dos valores Polling y EventDriven

QueryMode se refiere a la forma en que se lee el puerto serie, al que nos referiremos como consulta a continuación, y Polling es. se llama QueryMode Polling y EventDriven se llama EventDriven.

El modo EventDriven EventDriven utiliza eventos para manejar la lectura del puerto serie, una vez que llegan los datos, se emite la señal readyRead(), podemos asociar esta señal para leer. datos del puerto serie En el modo controlado por eventos, la lectura y escritura del puerto serie son asincrónicas, y las llamadas a las funciones de lectura y escritura regresarán inmediatamente y no congelarán el hilo de llamada /p>A diferencia del modo de consulta "sondeo", que ejecuta funciones de lectura y escritura sincrónicamente, las señales no funcionan en este modo y algunas funciones no se pueden implementar, pero este modo requiere menos sobrecarga para leer datos del puerto serie.

Windows admite los dos modos anteriores, Linux solo admite el modo de sondeo.

III.

Habiendo dicho todo lo anterior, lo último que quiero decir es que usamos esta clase para escribir un programa de puerto serie en Qt. Dependiendo de la plataforma, solo necesitamos usar cuatro archivos respectivamente.