En esta página

QCanBusFrame Class

QCanBusFrame es una clase contenedora que representa una única trama CAN. Más...

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

Tipos Públicos

class TimeStamp
enum FrameError { NoError, TransmissionTimeoutError, LostArbitrationError, ControllerError, ProtocolViolationError, …, AnyError }
flags FrameErrors
FrameId
enum FrameType { UnknownFrame, DataFrame, ErrorFrame, RemoteRequestFrame, InvalidFrame }

Funciones públicas

QCanBusFrame(QCanBusFrame::FrameType type = DataFrame)
QCanBusFrame(QCanBusFrame::FrameId identifier, const QByteArray &data)
QCanBusFrame::FrameErrors error() const
QCanBusFrame::FrameId frameId() const
QCanBusFrame::FrameType frameType() const
bool hasBitrateSwitch() const
bool hasErrorStateIndicator() const
bool hasExtendedFrameFormat() const
bool hasFlexibleDataRateFormat() const
bool hasLocalEcho() const
bool isValid() const
QByteArray payload() const
void setBitrateSwitch(bool bitrateSwitch)
void setError(QCanBusFrame::FrameErrors error)
void setErrorStateIndicator(bool errorStateIndicator)
void setExtendedFrameFormat(bool isExtended)
void setFlexibleDataRateFormat(bool isFlexibleData)
void setFrameId(QCanBusFrame::FrameId newFrameId)
void setFrameType(QCanBusFrame::FrameType newType)
void setLocalEcho(bool echo)
void setPayload(const QByteArray &data)
void setTimeStamp(QCanBusFrame::TimeStamp ts)
QCanBusFrame::TimeStamp timeStamp() const
QString toString() const
QDataStream &operator<<(QDataStream &out, const QCanBusFrame &frame)
QDataStream &operator>>(QDataStream &in, QCanBusFrame &frame)

Descripción detallada

QCanBusDevice puede utilizar QCanBusFrame para operaciones de lectura y escritura. Contiene el identificador de trama y la carga útil de datos. QCanBusFrame contiene la marca de tiempo del momento en que fue leído.

Véase también QCanBusFrame::FrameId, QCanBusFrame::TimeStamp, y payload().

Documentación de tipos de miembros

enum QCanBusFrame::FrameError
flags QCanBusFrame::FrameErrors

Este enum describe los posibles tipos de error.

ConstanteValorDescripción
QCanBusFrame::NoError0No se ha producido ningún error.
QCanBusFrame::TransmissionTimeoutError(1 << 0)La transmisión se ha interrumpido.
QCanBusFrame::LostArbitrationError(1 << 1)La trama no se ha podido enviar debido a una pérdida de arbitraje en el bus.
QCanBusFrame::ControllerError(1 << 2)El controlador ha encontrado un error.
QCanBusFrame::ProtocolViolationError(1 << 3)Se ha producido una violación del protocolo.
QCanBusFrame::TransceiverError(1 << 4)Se ha producido un error en el transceptor
QCanBusFrame::MissingAcknowledgmentError(1 << 5)La transmisión no ha recibido acuse de recibo.
QCanBusFrame::BusOffError(1 << 6)El bus CAN está fuera de línea.
QCanBusFrame::BusError(1 << 7)Se ha producido un error en el bus CAN.
QCanBusFrame::ControllerRestartError(1 << 8)El controlador se ha reiniciado.
QCanBusFrame::UnknownError(1 << 9)Se ha producido un error desconocido.
QCanBusFrame::AnyError0x1FFFFFFFUCoincide con cualquier otro tipo de error.

El tipo FrameErrors es un typedef para QFlags<FrameError>. Almacena una combinación OR de valores FrameError.

Ver también error() y setError().

[alias] QCanBusFrame::FrameId

Un tipo distinto para un identificador de trama de bus CAN con 11 o 29 bits.

Véase también frameId() y setFrameId().

enum QCanBusFrame::FrameType

Este enum describe el tipo de trama CAN.

ConstanteValorDescripción
QCanBusFrame::UnknownFrame0x0El tipo de trama es desconocido.
QCanBusFrame::DataFrame0x1Este valor representa una trama de datos.
QCanBusFrame::ErrorFrame0x2Este valor representa una trama de error.
QCanBusFrame::RemoteRequestFrame0x3Este valor representa una petición remota.
QCanBusFrame::InvalidFrame0x4Este valor representa una trama no válida. Este tipo se utiliza para la notificación de errores.

Véase también frameType() y setFrameType().

Documentación de las funciones miembro

[explicit noexcept] QCanBusFrame::QCanBusFrame(QCanBusFrame::FrameType type = DataFrame)

Construye una trama CAN de la dirección type especificada.

Véase también QCanBusFrame::FrameType y setFrameType().

[explicit] QCanBusFrame::QCanBusFrame(QCanBusFrame::FrameId identifier, const QByteArray &data)

Construye una trama CAN utilizando identifier como identificador de trama y data como carga útil.

Véase también QCanBusFrame::FrameId.

[constexpr noexcept] QCanBusFrame::FrameErrors QCanBusFrame::error() const

Devuelve el error de la trama de error actual. Si la trama no es ErrorFrame, esta función devuelve NoError.

Véase también QCanBusFrame::FrameError y setError().

[constexpr noexcept] QCanBusFrame::FrameId QCanBusFrame::frameId() const

Devuelve el identificador de la trama CAN. Si la trama CAN utiliza el formato de trama extendida, el identificador tiene un máximo de 29 bits; en caso contrario, 11 bits.

Si la trama es del tipo ErrorFrame, este identificador es siempre 0.

Véase también QCanBusFrame::FrameId, setFrameId(), y hasExtendedFrameFormat().

[constexpr noexcept] QCanBusFrame::FrameType QCanBusFrame::frameType() const

Devuelve el tipo del marco.

Véase también QCanBusFrame::FrameType y setFrameType().

[constexpr noexcept] bool QCanBusFrame::hasBitrateSwitch() const

Devuelve true si el CAN utiliza Flexible Data-Rate with Bitrate Switch, para transferir los datos de carga útil a una tasa de bits de datos superior.

Véase también setBitrateSwitch() y QCanBusDevice::DataBitRateKey.

[constexpr noexcept] bool QCanBusFrame::hasErrorStateIndicator() const

Devuelve true si el CAN utiliza Flexible Data-Rate con el indicador de estado de error activado.

Este indicador lo establece el hardware CAN FD del transmisor para indicar el estado de error del transmisor.

Véase también setErrorStateIndicator().

[constexpr noexcept] bool QCanBusFrame::hasExtendedFrameFormat() const

Devuelve true si la trama CAN utiliza un identificador de 29 bits; en caso contrario false, lo que implica un identificador de 11 bits.

Véase también setExtendedFrameFormat() y frameId().

[constexpr noexcept] bool QCanBusFrame::hasFlexibleDataRateFormat() const

Devuelve true si la trama CAN utiliza Flexible Data-Rate que permite hasta 64 bytes de datos, en caso contrario false, lo que implica un máximo de 8 bytes de carga útil.

Véase también setFlexibleDataRateFormat() y payload().

[constexpr noexcept] bool QCanBusFrame::hasLocalEcho() const

Devuelve true si la trama es una trama de eco local, es decir, una trama que se recibe como eco cuando la trama con el mismo contenido se ha enviado correctamente al bus CAN. Esta bandera se establece para las tramas enviadas por la propia aplicación, así como para las tramas enviadas por otras aplicaciones que se ejecutan en el mismo sistema.

QCanBusDevice::ReceiveOwnKey debe estar establecido en true para recibir tramas echo.

Véase también setLocalEcho(), QCanBusDevice::ReceiveOwnKey, y QCanBusDevice::LoopbackKey.

[noexcept] bool QCanBusFrame::isValid() const

Devuelve false si frameType() es InvalidFrame, hasExtendedFrameFormat() no está configurado aunque frameId() sea superior a 11 bits o la carga útil supere la longitud máxima permitida de 64 bytes si el modo de velocidad de datos flexible está activado u 8 bytes si está desactivado. Si frameType() es RemoteRequestFrame y el modo Flexible Data-Rate está activado al mismo tiempo, también se devuelve false.

En caso contrario, esta función devuelve true.

QByteArray QCanBusFrame::payload() const

Devuelve la carga de datos de la trama.

Véase también setPayload().

[constexpr noexcept] void QCanBusFrame::setBitrateSwitch(bool bitrateSwitch)

Establezca el indicador Flexible Data-Rate flag Bitrate Switch en bitrateSwitch. El campo de datos de las tramas con este indicador se transfiere a una velocidad de bits de datos superior.

Véase también hasBitrateSwitch() y QCanBusDevice::DataBitRateKey.

[constexpr] void QCanBusFrame::setError(QCanBusFrame::FrameErrors error)

Establece el tipo error del marco. Esta función no hace nada si frameType() no es un ErrorFrame.

Véase también QCanBusFrame::FrameError y error().

[constexpr noexcept] void QCanBusFrame::setErrorStateIndicator(bool errorStateIndicator)

Establezca el indicador Flexible Data-Rate flag Error State Indicator en errorStateIndicator.

Al enviar tramas CAN FD, el hardware CAN FD establece automáticamente este indicador. QCanBusFrame::setErrorStateIndicator() sólo debe utilizarse para pruebas de aplicaciones, por ejemplo, en buses CAN FD virtuales.

Véase también hasErrorStateIndicator().

[constexpr noexcept] void QCanBusFrame::setExtendedFrameFormat(bool isExtended)

Establece el indicador de formato de trama extendido en isExtended.

Véase también hasExtendedFrameFormat().

[constexpr noexcept] void QCanBusFrame::setFlexibleDataRateFormat(bool isFlexibleData)

Establece el indicador de velocidad de datos flexible en isFlexibleData. Estas tramas pueden enviarse utilizando una velocidad superior en los controladores compatibles. Además, el límite de longitud de la carga útil se eleva a 64 bytes.

Véase también hasFlexibleDataRateFormat().

[constexpr] void QCanBusFrame::setFrameId(QCanBusFrame::FrameId newFrameId)

Establece el identificador de la trama CAN en newFrameId.

El tamaño máximo de un identificador de trama CAN es de 11 bits, que puede ampliarse hasta 29 bits admitiendo el formato de trama CAN ampliado. La configuración del formato de trama ampliado CAN se establece automáticamente cuando se proporciona un newFrameId con más de 11 bits de tamaño.

Cuando el formato es extendido y se pasa un newFrameId con hasta 11 bits o menos, el ajuste de formato de trama extendido CAN no se cambia.

Véase también QCanBusFrame::FrameId, frameId(), y hasExtendedFrameFormat().

[constexpr noexcept] void QCanBusFrame::setFrameType(QCanBusFrame::FrameType newType)

Establece el tipo del marco en newType.

Véase también QCanBusFrame::FrameType y frameType().

[constexpr noexcept] void QCanBusFrame::setLocalEcho(bool echo)

Establezca el indicador de eco local en echo.

Cuando se envían tramas de bus CAN con QCanBusDevice::ReceiveOwnKey activado, todas las tramas enviadas con éxito se envían por eco a la cola de recepción y se marcan como tramas de eco local. Por lo tanto, QCanBusFrame::setLocalEcho sólo debe utilizarse para pruebas de aplicaciones, por ejemplo, en buses CAN virtuales.

Véase también hasLocalEcho().

void QCanBusFrame::setPayload(const QByteArray &data)

Establece data como carga útil de la trama CAN. El tamaño máximo de la carga útil es de 8 bytes, que pueden ampliarse hasta 64 bytes si se admite Flexible Data-Rate. Si data contiene más de 8 bytes, el indicador de Velocidad de Datos Flexible se activa automáticamente. Flexible Data-Rate debe activarse en QCanBusDevice configurando QCanBusDevice::CanFdKey.

Las tramas de tipo RemoteRequestFrame (RTR) no tienen carga útil. Sin embargo, deben proporcionar una indicación de la longitud de la carga útil esperada de la respuesta. Para establecer la longitud esperada es necesario establecer una carga útil falsa cuya longitud coincida con la longitud esperada de la carga útil de la respuesta. Una forma de hacerlo podría ser la siguiente:

QCanBusFrame frame(QCanBusFrame::RemoteRequestFrame);
int expectedResponseLength = ...;
frame.setPayload(QByteArray(expectedResponseLength, 0));

Véase también payload() y hasFlexibleDataRateFormat().

[constexpr noexcept] void QCanBusFrame::setTimeStamp(QCanBusFrame::TimeStamp ts)

Establece ts como marca de tiempo para la trama CAN. Normalmente, esta función no es necesaria, porque la marca de tiempo se crea durante la operación de lectura y no se necesita durante la operación de escritura.

Véase también timeStamp() y QCanBusFrame::TimeStamp.

[constexpr noexcept] QCanBusFrame::TimeStamp QCanBusFrame::timeStamp() const

Devuelve la marca de tiempo de la trama.

Véase también QCanBusFrame::TimeStamp y QCanBusFrame::setTimeStamp().

QString QCanBusFrame::toString() const

Devuelve la trama CAN como una cadena formateada.

La salida contiene el identificador CAN en formato hexadecimal, ajustado a la derecha a 32 bits, seguido de la longitud de los datos entre corchetes y la carga útil en formato hexadecimal.

Los identificadores estándar se rellenan con espacios mientras que los extendidos se rellenan con ceros.

Las salidas típicas son:

(Error)                                  - error frame
     7FF   [1]  01                       - data frame with standard identifier
1FFFFFFF   [8]  01 23 45 67 89 AB CD EF  - data frame with extended identifier
     400  [10]  01 23 45 67 ... EF 01 23 - CAN FD frame
     123   [5]  Remote Request           - remote frame with standard identifier
00000234   [0]  Remote Request           - remote frame with extended identifier

Relacionados No miembros

QDataStream &operator<<(QDataStream &out, const QCanBusFrame &frame)

Escribe un frame en el flujo (out) y devuelve una referencia al mismo.

QDataStream &operator>>(QDataStream &in, QCanBusFrame &frame)

Lee un frame del flujo (in) y devuelve una referencia al mismo.

© 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.