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 |
Verwandte Nicht-Mitglieder
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.
Konstante | Wert | Beschreibung |
---|---|---|
QCanBusFrame::NoError | 0 | Es 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::AnyError | 0x1FFFFFFFU | Entspricht 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.
Konstante | Wert | Beschreibung |
---|---|---|
QCanBusFrame::UnknownFrame | 0x0 | Der Frametyp ist unbekannt. |
QCanBusFrame::DataFrame | 0x1 | Dieser Wert steht für einen Daten-Frame. |
QCanBusFrame::ErrorFrame | 0x2 | Dieser Wert stellt einen Fehler-Frame dar. |
QCanBusFrame::RemoteRequestFrame | 0x3 | Dieser Wert steht für eine Fernabfrage. |
QCanBusFrame::InvalidFrame | 0x4 | Dieser 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.