En esta página

QCanBusDevice Class

La clase QCanBusDevice es la clase de interfaz para el bus CAN. Más...

Cabecera: #include <QCanBusDevice>
CMake: find_package(Qt6 REQUIRED COMPONENTS SerialBus)
target_link_libraries(mytarget PRIVATE Qt6::SerialBus)
qmake: QT += serialbus
Hereda: QObject

Tipos Públicos

struct Filter
enum CanBusDeviceState { UnconnectedState, ConnectingState, ConnectedState, ClosingState }
enum CanBusError { NoError, ReadError, WriteError, ConnectionError, ConfigurationError, …, TimeoutError }
enum class CanBusStatus { Unknown, Good, Warning, Error, BusOff }
enum ConfigurationKey { RawFilterKey, ErrorFilterKey, LoopbackKey, ReceiveOwnKey, BitRateKey, …, UserKey }
enum Direction { Input, Output, AllDirections }
flags Directions

Funciones Públicas

QCanBusDevice(QObject *parent = nullptr)
virtual QCanBusDevice::CanBusStatus busStatus()
void clear(QCanBusDevice::Directions direction = Direction::AllDirections)
QList<QCanBusDevice::ConfigurationKey> configurationKeys() const
QVariant configurationParameter(QCanBusDevice::ConfigurationKey key) const
bool connectDevice()
(since 6.2) virtual QCanBusDeviceInfo deviceInfo() const
void disconnectDevice()
QCanBusDevice::CanBusError error() const
QString errorString() const
qint64 framesAvailable() const
qint64 framesToWrite() const
virtual bool hasBusStatus() const
virtual QString interpretErrorFrame(const QCanBusFrame &frame) = 0
QList<QCanBusFrame> readAllFrames()
QCanBusFrame readFrame()
virtual void resetController()
virtual void setConfigurationParameter(QCanBusDevice::ConfigurationKey key, const QVariant &value)
QCanBusDevice::CanBusDeviceState state() const
virtual bool waitForFramesReceived(int msecs)
virtual bool waitForFramesWritten(int msecs)
virtual bool writeFrame(const QCanBusFrame &frame) = 0

Señales

void errorOccurred(QCanBusDevice::CanBusError)
void framesReceived()
void framesWritten(qint64 framesCount)
void stateChanged(QCanBusDevice::CanBusDeviceState state)

Funciones protegidas

void clearError()
virtual void close() = 0
QCanBusFrame dequeueOutgoingFrame()
void enqueueOutgoingFrame(const QCanBusFrame &newFrame)
void enqueueReceivedFrames(const QList<QCanBusFrame> &newFrames)
bool hasOutgoingFrames() const
virtual bool open() = 0
void setError(const QString &errorText, QCanBusDevice::CanBusError errorId)
void setState(QCanBusDevice::CanBusDeviceState newState)

Descripción Detallada

QCanBusDevice se comunica con un plugin CAN proporcionando a los usuarios una API conveniente. El plugin CAN debe ser especificado durante la creación del objeto.

Documentación de tipos de miembros

enum QCanBusDevice::CanBusDeviceState

Este enum describe todos los estados posibles del dispositivo.

ConstanteValorDescripción
QCanBusDevice::UnconnectedState0El dispositivo está desconectado.
QCanBusDevice::ConnectingState1El dispositivo se está conectando.
QCanBusDevice::ConnectedState2El aparato está conectado al bus CAN.
QCanBusDevice::ClosingState3El dispositivo se está cerrando.

enum QCanBusDevice::CanBusError

Este enum describe todas las condiciones de error posibles.

ConstanteValorDescripción
QCanBusDevice::NoError0No se ha producido ningún error.
QCanBusDevice::ReadError1Se ha producido un error durante una operación de lectura.
QCanBusDevice::WriteError2Se ha producido un error durante una operación de escritura.
QCanBusDevice::ConnectionError3Se ha producido un error al intentar abrir el plugin.
QCanBusDevice::ConfigurationError4Se ha producido un error al intentar establecer un parámetro de configuración.
QCanBusDevice::UnknownError5Se ha producido un error desconocido.
QCanBusDevice::OperationError6Se ha intentado realizar una operación mientras el dispositivo se encontraba en un estado que no lo permitía. Este enum se introdujo en Qt 5.14.
QCanBusDevice::TimeoutError7Se ha producido un timeout mientras se esperaban tramas escritas o recibidas. Este enum se introdujo en Qt 5.14.

enum class QCanBusDevice::CanBusStatus

Este enum describe los posibles valores de estado del bus CAN.

ConstanteValorDescripción
QCanBusDevice::CanBusStatus::Unknown0El estado del bus CAN es desconocido (por ejemplo, no es compatible con el plugin CAN).
QCanBusDevice::CanBusStatus::Good1El controlador CAN está totalmente operativo
QCanBusDevice::CanBusStatus::Warning2El controlador CAN se encuentra en estado de advertencia
QCanBusDevice::CanBusStatus::Error3El controlador CAN se encuentra en estado de error (ya no envía tramas CAN)
QCanBusDevice::CanBusStatus::BusOff4El controlador CAN se encuentra en estado bus off (desconectado del bus CAN)

enum QCanBusDevice::ConfigurationKey

Este enum describe las posibles opciones de configuración para la conexión de bus CAN.

ConstanteValorDescripción
QCanBusDevice::RawFilterKey0Esta configuración determina el tipo de tramas de bus CAN que acepta el dispositivo actual. El valor esperado es QList<QCanBusDevice::Filter>. Si se pasa una lista vacía, se borran todos los filtros configurados previamente, incluidos los filtros predeterminados. Para más detalles, consulte QCanBusDevice::Filter.
QCanBusDevice::ErrorFilterKey1Esta clave define el tipo de error que debe reenviarse a través de la conexión actual. El valor asociado debe ser del tipo QCanBusFrame::FrameErrors.
QCanBusDevice::LoopbackKey2Esta tecla define si el dispositivo de bus CAN debe funcionar en modo loopback. Loopback significa que, cada vez que se transmite una trama CAN en el bus CAN, se envía un eco local de esta trama a todas las aplicaciones conectadas a este dispositivo CAN. El valor esperado para esta tecla es bool.
QCanBusDevice::ReceiveOwnKey3Esta clave define si este dispositivo CAN recibe sus propias tramas de envío. Puede utilizarse para comprobar si la transmisión se ha realizado correctamente. El valor esperado para esta clave es bool.
QCanBusDevice::BitRateKey4Esta clave define la tasa de bits CAN en bits por segundo. Con CAN FD, la carga útil se puede transmitir a una velocidad de bits de datos más alta, si QCanBusFrame::hasBitrateSwitch() está ajustado. En este caso, QCanBusDevice::BitRateKey sólo se utiliza para la fase de arbitraje de ID de CAN. Véase también QCanBusDevice::DataBitRateKey
QCanBusDevice::CanFdKey5Esta clave define si debe activarse el envío y la recepción de tramas CAN FD. El valor esperado para esta clave es bool.
QCanBusDevice::DataBitRateKey6Esta clave define la tasa de bits de la carga útil de CAN FD en bits por segundo. CAN FD permite transmitir la carga útil de las tramas con el indicador QCanBusFrame::hasBitrateSwitch() a una velocidad de bits de datos superior, una vez finalizada la fase de arbitraje a la velocidad de bits nominal. Este valor enum se introdujo en Qt 5.9. Véase también QCanBusDevice::BitRateKey
QCanBusDevice::ProtocolKey7Esta clave permite especificar otro protocolo. Por ahora, este parámetro sólo puede establecerse y usarse en el plugin SocketCAN. Este valor enum se introdujo en Qt 5.14.
QCanBusDevice::UserKey30Esta clave define el rango donde comienzan las claves personalizadas. Su propósito más común es permitir opciones de configuración específicas de la plataforma.

Ver también configurationParameter().

enum QCanBusDevice::Dirección
flags QCanBusDevice::Direcciones

Este enum describe las posibles direcciones de transmisión de datos.

ConstanteValorDescripción
QCanBusDevice::Input1Dirección de entrada.
QCanBusDevice::Output2Dirección de salida.
QCanBusDevice::AllDirectionsInput | OutputAmbas direcciones, entrada y salida.

El tipo Directions es un typedef para QFlags<Direction>. Almacena una combinación OR de valores de Dirección.

Documentación de las funciones miembro

[explicit] QCanBusDevice::QCanBusDevice(QObject *parent = nullptr)

Construye un dispositivo de bus serie con la dirección parent especificada.

[virtual] QCanBusDevice::CanBusStatus QCanBusDevice::busStatus()

Devuelve el estado actual del bus CAN. Si no se puede solicitar el estado, se devuelve QCanBusDevice::UnknownStatus.

Nota: Esta función puede no estar implementada en todos los plugins CAN. Consulte las páginas de ayuda de los plugins para obtener más información. La función hasBusStatus() puede utilizarse en tiempo de ejecución para comprobar si el plugin CAN utilizado tiene soporte para solicitar el estado del bus CAN.

Véase también hasBusStatus() y resetController().

void QCanBusDevice::clear(QCanBusDevice::Directions direction = Direction::AllDirections)

Borra los búferes de entrada o salida de los dispositivos, dependiendo de direction.

Esta función sólo opera en las memorias intermedias de QCanBusDevice. Las tramas que ya se han escrito en el controlador CAN o en la capa de hardware CAN, o que aún no se han leído desde estas capas, no se borran con esta función.

Nota: El borrado de los búferes de salida sólo es posible para dispositivos con búfer.

Véase también framesAvailable(), readFrame(), framesToWrite() y writeFrame().

[protected] void QCanBusDevice::clearError()

Borra el id de error y la descripción legible por humanos del último error del dispositivo.

Las implementaciones de bus CAN deben utilizar esta función para actualizar el estado de error del dispositivo.

Véase también error(), errorOccurred() y setError().

[pure virtual protected] void QCanBusDevice::close()

Esta función se encarga de cerrar la conexión del bus CAN. La implementación debe asegurarse de que state() de la instancia se establece en QCanBusDevice::UnconnectedState.

La tarea más importante de esta función es cerrar el socket al dispositivo CAN y llamar a QCanBusDevice::setState().

Véase también disconnectDevice().

QList<QCanBusDevice::ConfigurationKey> QCanBusDevice::configurationKeys() const

Devuelve la lista de claves utilizadas por la conexión de bus CAN.

El significado de las claves es equivalente a ConfigurationKey. Si una clave no se menciona explícitamente, se utiliza la configuración predeterminada de la plataforma para la clave correspondiente.

QVariant QCanBusDevice::configurationParameter(QCanBusDevice::ConfigurationKey key) const

Devuelve el valor actual asignado a ConfigurationKey key ; en caso contrario, un valor inválido QVariant.

Véase también setConfigurationParameter() y configurationKeys().

bool QCanBusDevice::connectDevice()

Conecta el dispositivo al bus CAN. Devuelve true en caso de éxito; en caso contrario false.

Esta función llama a open() como parte de su implementación.

Véase también disconnectDevice().

[protected] QCanBusFrame QCanBusDevice::dequeueOutgoingFrame()

Devuelve la siguiente QCanBusFrame de la lista interna de tramas salientes; en caso contrario, devuelve una QCanBusFrame no válida. La trama devuelta se elimina de la lista interna.

[virtual, since 6.2] QCanBusDeviceInfo QCanBusDevice::deviceInfo() const

Devuelve un QCanBusDeviceInfo para el QCanBusDevice actual. Si la función no está implementada por una subclase de QCanBusDevice, se devuelve un objeto construido por defecto.

Esta función se introdujo en Qt 6.2.

void QCanBusDevice::disconnectDevice()

Desconecta el dispositivo del bus CAN.

Esta función llama a close() como parte de su implementación.

Nota: Esta función sólo debe llamarse si connectDevice() devuelve true.

Véase también connectDevice().

[protected] void QCanBusDevice::enqueueOutgoingFrame(const QCanBusFrame &newFrame)

Añade newFrame a la lista interna de tramas salientes a la que se puede acceder mediante writeFrame().

Las subclases deben llamar a esta función cuando escriben un nuevo marco.

[protected] void QCanBusDevice::enqueueReceivedFrames(const QList<QCanBusFrame> &newFrames)

Añade newFrames a la lista interna de tramas a las que se puede acceder mediante readFrame() y emite la señal framesReceived().

Las subclases deben llamar a esta función cuando reciben tramas.

QCanBusDevice::CanBusError QCanBusDevice::error() const

Devuelve el último error que se ha producido. El valor del error siempre se establece en el último error que se ha producido y nunca se restablece.

Véase también setError() y errorString().

[signal] void QCanBusDevice::errorOccurred(QCanBusDevice::CanBusError)

Esta señal se emite cuando se produce un error.

QString QCanBusDevice::errorString() const

Devuelve una descripción legible por humanos del último error de dispositivo que se ha producido.

Véase también error().

qint64 QCanBusDevice::framesAvailable() const

Devuelve el número de fotogramas disponibles. Si no hay fotogramas disponibles, esta función devuelve 0.

Véase también clear(), readFrame() y readAllFrames().

[signal] void QCanBusDevice::framesReceived()

Esta señal se emite cuando se han recibido una o varias tramas. Las tramas deben leerse utilizando readFrame() y framesAvailable().

qint64 QCanBusDevice::framesToWrite() const

Para dispositivos con buffer, esta función devuelve el número de tramas en espera de ser escritas. Para dispositivos sin búfer, esta función siempre devuelve cero.

Nota: Puede haber almacenamiento en búfer adicional en el controlador CAN y en la capa de hardware CAN. Por lo tanto, si esta función devuelve cero, eso no significa que todas las tramas CAN ya estén escritas en el bus CAN.

Véase también clear() y writeFrame().

[signal] void QCanBusDevice::framesWritten(qint64 framesCount)

Esta señal se emite cada vez que se ha escrito una carga útil de tramas en el bus CAN. El argumento framesCount se establece en el número de tramas que se han escrito en esta carga útil.

[virtual] bool QCanBusDevice::hasBusStatus() const

Devuelve true, si el plugin CAN soporta solicitar el estado del bus CAN.

Véase también busStatus().

[protected] bool QCanBusDevice::hasOutgoingFrames() const

Devuelve true si la lista interna de tramas salientes no está vacía; en caso contrario devuelve false.

[pure virtual] QString QCanBusDevice::interpretErrorFrame(const QCanBusFrame &frame)

Interpreta frame como marco de error y devuelve una descripción legible del error.

Si frame no es una trama de error, la cadena devuelta está vacía.

[pure virtual protected] bool QCanBusDevice::open()

Esta función es llamada por connectDevice(). Las subclases deben proporcionar una implementación que devuelva true si se ha podido establecer la conexión de bus CAN; en caso contrario, false. La implementación de QCanBusDevice garantiza que, al entrar en esta función, el valor de state() del dispositivo ya sea QCanBusDevice::ConnectingState.

La implementación debe garantizar que, en caso de éxito, el valor de state() de la instancia sea QCanBusDevice::ConnectedState; en caso contrario, QCanBusDevice::UnconnectedState. setState() para establecer el nuevo estado del dispositivo.

La implementación personalizada es responsable de la apertura del socket, la instanciación de un QSocketNotifier potencialmente necesario y la aplicación de QCanBusDevice::configurationParameter() personalizado y predeterminado.

Véase también connectDevice().

QList<QCanBusFrame> QCanBusDevice::readAllFrames()

Devuelve todas las QCanBusFrames de la cola; en caso contrario, devuelve una QList vacía. Las tramas devueltas se eliminan de la cola.

La cola funciona según el principio FIFO.

Véase también clear(), framesAvailable() y readFrame().

QCanBusFrame QCanBusDevice::readFrame()

Devuelve la siguiente QCanBusFrame de la cola; en caso contrario, devuelve una QCanBusFrame vacía. La trama devuelta se elimina de la cola.

La cola funciona según el principio FIFO.

Véase también clear(), framesAvailable() y readAllFrames().

[virtual] void QCanBusDevice::resetController()

Realiza un reinicio del controlador CAN para liberar el controlador CAN del estado de bus apagado, si es posible.

Nota: Los reinicios del controlador CAN perturban la comunicación en curso y pueden tardar hasta un segundo en completarse. Llame a esta función sólo para recuperarse de errores de bus.

Nota: Es posible que esta función no esté implementada en todos los plugins CAN. Consulte las páginas de ayuda de los plugins para obtener más información.

Véase también busStatus().

[virtual] void QCanBusDevice::setConfigurationParameter(QCanBusDevice::ConfigurationKey key, const QVariant &value)

Establece el parámetro de configuración key para la conexión de bus CAN en value. Las claves potenciales están representadas por ConfigurationKey.

Un parámetro se puede desajustar estableciendo un valor no válido QVariant. Desajustar un parámetro implica que la configuración se restablece a su valor predeterminado.

Nota: En la mayoría de los casos, los cambios de configuración sólo surten efecto tras una reconexión.

Véase también configurationParameter().

[protected] void QCanBusDevice::setError(const QString &errorText, QCanBusDevice::CanBusError errorId)

Establece la descripción legible por humanos del último error del dispositivo en errorText. errorId categoriza el tipo de error.

Las implementaciones de bus CAN deben utilizar esta función para actualizar el estado de error del dispositivo.

Véase también error(), errorOccurred() y clearError().

[protected] void QCanBusDevice::setState(QCanBusDevice::CanBusDeviceState newState)

Establece el estado del dispositivo en newState. Las implementaciones de bus CAN deben utilizar esta función para actualizar el estado del dispositivo.

Véase también state().

QCanBusDevice::CanBusDeviceState QCanBusDevice::state() const

Devuelve el estado actual del dispositivo.

Véase también setState() y stateChanged().

[signal] void QCanBusDevice::stateChanged(QCanBusDevice::CanBusDeviceState state)

Esta señal se emite cada vez que cambia el estado del dispositivo. El nuevo estado se representa mediante state.

Véase también setState() y state().

[virtual] bool QCanBusDevice::waitForFramesReceived(int msecs)

Se bloquea hasta que haya nuevos fotogramas disponibles para lectura y se haya emitido la señal framesReceived(), o hasta que hayan transcurrido msecs milisegundos. Si msecs es -1, esta función no agotará el tiempo de espera.

Devuelve true si hay nuevos fotogramas disponibles para la lectura y se emite la señal framesReceived(); en caso contrario, devuelve false (si la operación ha expirado o si se ha producido un error).

Nota: Esta función iniciará un bucle de eventos local. Esto puede llevar a escenarios en los que otras ranuras de la aplicación pueden ser llamadas mientras la ejecución de este ámbito de función se está bloqueando. Para evitar problemas, las señales de esta clase no deben estar conectadas a ranuras. Del mismo modo, esta función nunca debe ser llamada en respuesta a las señales framesReceived() o errorOccurred().

Véase también waitForFramesWritten().

[virtual] bool QCanBusDevice::waitForFramesWritten(int msecs)

Para dispositivos con buffer, esta función espera hasta que todas las tramas con buffer han sido escritas en el dispositivo y la señal framesWritten() ha sido emitida, o hasta que msecs milisegundos han pasado. Si msecs es -1, esta función no agotará el tiempo de espera. Para dispositivos sin buffer, retorna inmediatamente con false ya que writeFrame() no requiere un buffer de escritura.

Devuelve true si se emite la señal framesWritten(); en caso contrario, devuelve false (es decir, si la operación ha expirado o si se ha producido un error).

Nota: Esta función iniciará un bucle de eventos local. Esto puede llevar a escenarios en los que otras ranuras de la aplicación pueden ser llamadas mientras la ejecución de este ámbito de función se está bloqueando. Para evitar problemas, las señales de esta clase no deben estar conectadas a ranuras. Del mismo modo, esta función nunca debe ser llamada en respuesta a las señales framesWritten() o errorOccurred().

Véase también waitForFramesReceived().

[pure virtual] bool QCanBusDevice::writeFrame(const QCanBusFrame &frame)

Escribe frame en el bus CAN y devuelve true en caso de éxito; en caso contrario false.

En algunas plataformas, es posible que la trama se coloque en una cola y que el valor de retorno sólo indique una inserción correcta en la cola. La trama real se enviará más tarde. Por lo tanto, la señal framesWritten() es la confirmación final de que la trama ha sido entregada a la capa de transporte. Si se produce un error, se emite la señal errorOccurred().

Según la especificación del bus CAN, las tramas del tipo remote transfer request (RTR) no tienen carga útil, sino una longitud de 0 a 8 (inclusive). Esta longitud indica la longitud de la carga útil de respuesta esperada de la parte remota. Por lo tanto, al enviar una trama RTR utilizando esta función, puede ser necesario establecer una carga útil arbitraria en frame. La longitud de la carga útil arbitraria es lo que se establece como tamaño esperado para la trama RTR.

Véase también QCanBusFrame::setPayload().

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.