QCanBusFrame Class

QCanBusFrame ist eine Container-Klasse, die einen einzelnen CAN-Frame darstellt. Mehr...

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

Öffentliche Typen

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

Öffentliche Funktionen

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)

Detaillierte Beschreibung

QCanBusDevice kann QCanBusFrame für Lese- und Schreiboperationen verwenden. Er enthält den Frame-Identifier und die Daten-Nutzlast. QCanBusFrame enthält den Zeitstempel des Zeitpunkts, an dem er gelesen wurde.

Siehe auch QCanBusFrame::FrameId, QCanBusFrame::TimeStamp, und payload().

Dokumentation der Mitgliedstypen

enum QCanBusFrame::FrameError
flags QCanBusFrame::FrameErrors

Diese Aufzählung beschreibt die möglichen Fehlertypen.

KonstanteWertBeschreibung
QCanBusFrame::NoError0Es ist kein Fehler aufgetreten.
QCanBusFrame::TransmissionTimeoutError(1 << 0)Die Übertragung hat ein Zeitlimit überschritten.
QCanBusFrame::LostArbitrationError(1 << 1)Der Rahmen konnte nicht gesendet werden, weil die Arbitrierung auf dem Bus verloren ging.
QCanBusFrame::ControllerError(1 << 2)Der Controller hat einen Fehler festgestellt.
QCanBusFrame::ProtocolViolationError(1 << 3)Eine Protokollverletzung ist aufgetreten.
QCanBusFrame::TransceiverError(1 << 4)Ein Transceiver-Fehler ist aufgetreten
QCanBusFrame::MissingAcknowledgmentError(1 << 5)Die Übertragung wurde nicht quittiert.
QCanBusFrame::BusOffError(1 << 6)Der CAN-Bus ist offline.
QCanBusFrame::BusError(1 << 7)Ein CAN-Bus-Fehler ist aufgetreten.
QCanBusFrame::ControllerRestartError(1 << 8)Der Controller wurde neu gestartet.
QCanBusFrame::UnknownError(1 << 9)Ein unbekannter Fehler ist aufgetreten.
QCanBusFrame::AnyError0x1FFFFFFFUEntspricht jedem anderen Fehlertyp.

Der Typ FrameErrors ist ein Typedef für QFlags<FrameError>. Er speichert eine ODER-Kombination von FrameError-Werten.

Siehe auch error() und setError().

[alias] QCanBusFrame::FrameId

Ein eindeutiger Typ für einen CAN-Bus Frame Identifier mit entweder 11 oder 29 Bit.

Siehe auch frameId() und setFrameId().

enum QCanBusFrame::FrameType

Dieses Enum beschreibt den Typ des CAN-Frames.

KonstanteWertBeschreibung
QCanBusFrame::UnknownFrame0x0Der Frametyp ist unbekannt.
QCanBusFrame::DataFrame0x1Dieser Wert steht für einen Daten-Frame.
QCanBusFrame::ErrorFrame0x2Dieser Wert stellt einen Fehler-Frame dar.
QCanBusFrame::RemoteRequestFrame0x3Dieser Wert steht für eine Fernabfrage.
QCanBusFrame::InvalidFrame0x4Dieser Wert steht für einen ungültigen Frame. Dieser Typ wird für Fehlerberichte verwendet.

Siehe auch frameType() und setFrameType().

Dokumentation der Mitgliedsfunktionen

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

Konstruiert einen CAN-Frame mit dem angegebenen type.

Siehe auch QCanBusFrame::FrameType und setFrameType().

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

Konstruiert einen CAN-Frame mit identifier als Frame-Identifier und data als Nutzlast.

Siehe auch QCanBusFrame::FrameId.

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

Gibt den Fehler des aktuellen Fehlerrahmens zurück. Wenn der Rahmen kein ErrorFrame ist, gibt diese Funktion NoError zurück.

Siehe auch QCanBusFrame::FrameError und setError().

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

Gibt den CAN-Frame-Identifier zurück. Wenn der CAN-Frame das erweiterte Frame-Format verwendet, hat der Identifier maximal 29 Bit, sonst 11 Bit.

Wenn der Frame vom Typ ErrorFrame ist, ist diese ID immer 0.

Siehe auch QCanBusFrame::FrameId, setFrameId(), und hasExtendedFrameFormat().

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

Gibt den Typ des Rahmens zurück.

Siehe auch QCanBusFrame::FrameType und setFrameType().

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

Gibt true zurück, wenn der CAN Flexible Data-Rate with Bitrate Switch verwendet, um die Nutzdaten mit einer höheren Datenbitrate zu übertragen.

Siehe auch setBitrateSwitch() und QCanBusDevice::DataBitRateKey.

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

Gibt true zurück, wenn der CAN Flexible Data-Rate mit gesetztem Fehlerstatus-Indikator verwendet.

Dieses Flag wird von der CAN FD-Hardware des Senders gesetzt, um den Fehlerzustand des Senders anzuzeigen.

Siehe auch setErrorStateIndicator().

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

Gibt true zurück, wenn der CAN-Frame einen 29-Bit-Identifier verwendet; andernfalls false, was einen 11-Bit-Identifier impliziert.

Siehe auch setExtendedFrameFormat() und frameId().

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

Gibt true zurück, wenn der CAN-Frame Flexible Data-Rate verwendet, die bis zu 64 Datenbytes erlaubt, andernfalls false, was maximal 8 Byte Nutzlast bedeutet.

Siehe auch setFlexibleDataRateFormat() und payload().

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

Gibt true zurück, wenn der Frame ein lokaler Echo-Frame ist, d. h. ein Frame, der als Echo empfangen wird, wenn der Frame mit demselben Inhalt erfolgreich an den CAN-Bus gesendet wurde. Dieses Flag wird sowohl für Frames gesetzt, die von der Anwendung selbst gesendet werden, als auch für Frames, die von anderen Anwendungen gesendet werden, die auf demselben System laufen.

QCanBusDevice::ReceiveOwnKey muss auf true gesetzt werden, um Echo-Frames zu empfangen.

Siehe auch setLocalEcho(), QCanBusDevice::ReceiveOwnKey, und QCanBusDevice::LoopbackKey.

[noexcept] bool QCanBusFrame::isValid() const

Gibt false zurück, wenn frameType() InvalidFrame ist, hasExtendedFrameFormat() nicht gesetzt ist, obwohl frameId() länger als 11 Bit ist oder die Nutzlast länger als die maximal zulässige Nutzlastlänge von 64 Byte ist, wenn der Flexible Data-Rate-Modus aktiviert ist oder 8 Byte, wenn er deaktiviert ist. Wenn frameType() RemoteRequestFrame ist und der flexible Datenratenmodus gleichzeitig aktiviert ist, wird auch false zurückgegeben.

Andernfalls gibt diese Funktion true zurück.

QByteArray QCanBusFrame::payload() const

Gibt die Nutzdaten des Frames zurück.

Siehe auch setPayload().

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

Setzen Sie das Flag Flexible Datenrate Bitrate Switch auf bitrateSwitch. Das Datenfeld von Rahmen mit diesem Flag wird mit einer höheren Datenbitrate übertragen.

Siehe auch hasBitrateSwitch() und QCanBusDevice::DataBitRateKey.

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

Setzt den Typ des Rahmens error. Diese Funktion ist wirkungslos, wenn frameType() kein ErrorFrame ist.

Siehe auch QCanBusFrame::FrameError und error().

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

Setzen Sie das Flexible Data-Rate Flag Error State Indicator Flag auf errorStateIndicator.

Beim Senden von CAN FD-Frames wird dieses Flag automatisch von der CAN FD-Hardware gesetzt. QCanBusFrame::setErrorStateIndicator() sollte nur für Anwendungstests, z. B. auf virtuellen CAN FD-Bussen, verwendet werden.

Siehe auch hasErrorStateIndicator().

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

Setzt das Flag für das erweiterte Rahmenformat auf isExtended.

Siehe auch hasExtendedFrameFormat().

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

Setzt das Flexible Data-Rate-Flag auf isFlexibleData. Diese Frames können auf unterstützenden Controllern mit einer höheren Geschwindigkeit gesendet werden. Außerdem wird die Grenze für die Nutzdatenlänge auf 64 Byte angehoben.

Siehe auch hasFlexibleDataRateFormat().

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

Setzt den Identifier des CAN-Frames auf newFrameId.

Die maximale Größe eines CAN-Frame-Identifiers beträgt 11 Bit, die durch Unterstützung des erweiterten CAN-Frame-Formats auf bis zu 29 Bit erweitert werden kann. Die Einstellung für das erweiterte CAN-Frame-Format wird automatisch gesetzt, wenn ein newFrameId mit einer Größe von mehr als 11 Bits angegeben wird.

Wenn das Format erweitert ist und ein newFrameId mit bis zu 11 Bits oder weniger übergeben wird, wird die Einstellung für das erweiterte CAN-Rahmenformat nicht geändert.

Siehe auch QCanBusFrame::FrameId, frameId(), und hasExtendedFrameFormat().

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

Setzt den Typ des Rahmens auf newType.

Siehe auch QCanBusFrame::FrameType und frameType().

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

Setzen Sie das Local Echo Flag auf echo.

Beim Senden von CAN-Bus-Frames mit QCanBusDevice::ReceiveOwnKey werden alle erfolgreich gesendeten Frames in die Empfangswarteschlange zurückgesendet und als lokale Echo-Frames markiert. QCanBusFrame::setLocalEcho sollte daher nur für Anwendungstests, z. B. auf virtuellen CAN-Bussen, verwendet werden.

Siehe auch hasLocalEcho().

void QCanBusFrame::setPayload(const QByteArray &data)

Legt data als Nutzdaten für den CAN-Frame fest. Die maximale Größe der Nutzlast beträgt 8 Byte, die durch Unterstützung von Flexible Data-Rate auf bis zu 64 Byte erweitert werden kann. Wenn data mehr als 8 Byte enthält, wird das Flexible Data-Rate Flag automatisch gesetzt. Flexible Data-Rate muss auf QCanBusDevice durch Setzen des QCanBusDevice::CanFdKey aktiviert werden.

Frames vom Typ RemoteRequestFrame (RTR) haben keine Nutzlast. Sie müssen jedoch eine Angabe über die erwartete Länge der Nutzdaten der Antwort enthalten. Um die erwartete Länge festzulegen, muss eine gefälschte Nutzlast festgelegt werden, deren Länge der erwarteten Nutzlastlänge der Antwort entspricht. Eine Möglichkeit, dies zu tun, könnte wie folgt aussehen:

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

Siehe auch payload() und hasFlexibleDataRateFormat().

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

Setzt ts als Zeitstempel für den CAN-Frame. Normalerweise wird diese Funktion nicht benötigt, da der Zeitstempel während des Lesevorgangs erstellt wird und während des Schreibvorgangs nicht benötigt wird.

Siehe auch timeStamp() und QCanBusFrame::TimeStamp.

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

Gibt den Zeitstempel des Frames zurück.

Siehe auch QCanBusFrame::TimeStamp und QCanBusFrame::setTimeStamp().

QString QCanBusFrame::toString() const

Gibt den CAN-Frame als formatierte Zeichenkette zurück.

Die Ausgabe enthält den CAN-Identifier im hexadezimalen Format, rechtsbündig auf 32 Bit, gefolgt von der Datenlänge in eckigen Klammern und der Nutzlast im hexadezimalen Format.

Standard-Identifier werden mit Leerzeichen aufgefüllt, während erweiterte Identifier mit Nullen aufgefüllt werden.

Typische Ausgaben sind:

(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

Verwandte Nicht-Mitglieder

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

Schreibt eine frame in den Stream (out) und gibt einen Verweis auf diese zurück.

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

Liest eine frame aus dem Stream (in) und gibt einen Verweis auf sie zurück.

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