QCanSignalDescription Class

Die Klasse QCanSignalDescription beschreibt die Regeln zur Extraktion eines Wertes aus dem CAN-Frame und dessen Darstellung in einem anwendungsdefinierten Format. Mehr...

Kopfzeile: #include <QCanSignalDescription>
CMake: find_package(Qt6 REQUIRED COMPONENTS SerialBus)
target_link_libraries(mytarget PRIVATE Qt6::SerialBus)
qmake: QT += serialbus
Seit: Qt 6.5
Status: Vorläufig

Diese Klasse befindet sich in der Entwicklung und kann sich noch ändern.

Öffentliche Typen

Öffentliche Funktionen

QCanSignalDescription()
QCanSignalDescription(const QCanSignalDescription &other)
QCanSignalDescription(QCanSignalDescription &&other)
~QCanSignalDescription()
void addMultiplexSignal(const QString &name, const QCanSignalDescription::MultiplexValues &ranges)
void addMultiplexSignal(const QString &name, const QVariant &value)
quint16 bitLength() const
void clearMultiplexSignals()
QString comment() const
QSysInfo::Endian dataEndian() const
QtCanBus::DataFormat dataFormat() const
QtCanBus::DataSource dataSource() const
double factor() const
bool isValid() const
double maximum() const
double minimum() const
QCanSignalDescription::MultiplexSignalValues multiplexSignals() const
QtCanBus::MultiplexState multiplexState() const
QString name() const
double offset() const
QString physicalUnit() const
QString receiver() const
double scaling() const
void setBitLength(quint16 length)
void setComment(const QString &text)
void setDataEndian(QSysInfo::Endian endian)
void setDataFormat(QtCanBus::DataFormat format)
void setDataSource(QtCanBus::DataSource source)
void setFactor(double factor)
void setMultiplexSignals(const QCanSignalDescription::MultiplexSignalValues &multiplexorSignals)
void setMultiplexState(QtCanBus::MultiplexState state)
void setName(const QString &name)
void setOffset(double offset)
void setPhysicalUnit(const QString &unit)
void setRange(double minimum, double maximum)
void setReceiver(const QString &receiver)
void setScaling(double scaling)
void setStartBit(quint16 bit)
quint16 startBit() const
QCanSignalDescription &operator=(QCanSignalDescription &&other)
QCanSignalDescription &operator=(const QCanSignalDescription &other)

Detaillierte Beschreibung

Die Klasse QCanSignalDescription kann verwendet werden, um eine Signalbeschreibung bereitzustellen und diese später zur Dekodierung einer empfangenen QCanBusFrame oder zur Kodierung der Eingangsdaten in eine QCanBusFrame zu verwenden, die an den Empfänger gesendet werden kann.

Allgemeine Beschreibung

Jeder CAN-Frame kann mehrere Werte enthalten. Die Regeln zum Extrahieren der Werte aus einem CAN-Frame umfassen die folgenden:

  • Datenquelle (Frame-ID oder Nutzdaten).
  • Endianness der Daten. Siehe Abschnitt Data Endianness Processing für weitere Details.
  • Datenformat.
  • Position des Startbits.
  • Datenlänge in Bits.
  • Multiplexing-Optionen.

Die Position des Startbits wird relativ zur ausgewählten Datenquelle angegeben. Die Bits werden beginnend mit dem LSB gezählt.

Sobald die Daten extrahiert sind, müssen sie möglicherweise in ein anwendungsspezifisches Format umgewandelt werden. Hierfür können die folgenden Parameter verwendet werden:

  • Verschiedene Parameter zur Konvertierung des extrahierten Wertes in einen physikalischen Wert (Faktor, Offset, Skala).
  • Erwarteter Datenbereich.
  • Dateneinheiten.

Die Klasse QCanSignalDescription bietet Methoden zur Steuerung all dieser Parameter.

Daten-Endianness-Verarbeitung

Little Endian und Big Endian Daten werden unterschiedlich kodiert. Bei Big-Endian-Werten werden die Startbitpositionen für das höchstwertige Bit angegeben. Bei Little-Endian-Werten ist die Startposition die des niederwertigsten Bits.

Lassen Sie uns zwei Beispiele betrachten. In beiden Beispielen werden wir zwei 12-Bit-Werte in der 3-Byte-Nutzlast kodieren.

Little Endian

Für den Little-Endian-Fall kann das Datenlayout durch das folgende Bild dargestellt werden:

Hier stellen die Spalten Bitnummern und die Zeilen Byte-Nummern dar. LSB markiert das erste (niedrigstwertige) Bit des Wertes und MSB das letzte (höchstwertige) Bit des Wertes. Die blaue Farbe kennzeichnet den ersten Wert und die orange Farbe den zweiten Wert.

Die Informationen über diese Werte werden in QCanSignalDescription auf folgende Weise kodiert:

QCanSignalDescription signal1;
signal1.setDataEndian(QSysInfo::Endian::LittleEndian);
signal1.setStartBit(0);
signal1.setBitLength(12);
// other parameters for signal1

QCanSignalDescription signal2;
signal2.setDataEndian(QSysInfo::Endian::LittleEndian);
signal2.setStartBit(12);
signal2.setBitLength(12);
// other parameters for signal2
Big Endian

Die folgende Abbildung zeigt das Werte-Layout für den Big-Endian-Fall:

Die Werte können in QCanSignalDescription auf folgende Weise dargestellt werden:

QCanSignalDescription signal1;
signal1.setDataEndian(QSysInfo::Endian::BigEndian);
signal1.setStartBit(7);
signal1.setBitLength(12);
// other parameters for signal1

QCanSignalDescription signal2;
signal2.setDataEndian(QSysInfo::Endian::BigEndian);
signal2.setStartBit(11);
signal2.setBitLength(12);
// other parameters for signal2

Beachten Sie, dass die Startbits anders sind als im Little-Endian-Fall. Auch die Werte sind anders ausgerichtet.

Multiplexed Signals Erklärt

Es gibt zwei gängige Möglichkeiten, die Daten in der CAN-Nutzlast zu kodieren:

  • Jeder Bereich von Bits repräsentiert immer das gleiche Signal. Zum Beispiel kann Bytes 0-1 in einer Nutzlast eine Motordrehzahl (in U/min) darstellen, und Bytes 2-3 kann die Fahrzeuggeschwindigkeit (in km/h) darstellen.
  • Ein und derselbe Bitbereich kann unterschiedliche Daten darstellen, je nach den Werten einiger anderer Bits in der Nutzlast. Wenn zum Beispiel Byte 0 den Wert 0 hat, steht Bytes 1-2 für eine Motordrehzahl (in U/min), und wenn Byte 0 den Wert 1 hat, steht Bytes 1-2 für eine Fahrzeuggeschwindigkeit (in km/h).

Der zweite Fall verwendet Signalmultiplexing. In dem angegebenen Beispiel haben wir drei Signale. Das erste Signal stellt den Wert von Byte 0 dar und wirkt wie ein Multiplexer-Signal. Die beiden anderen Signale repräsentieren die Motordrehzahl bzw. die Fahrzeuggeschwindigkeit, aber es kann jeweils nur eines von ihnen aus der CAN-Nutzlast extrahiert werden. Welches Signal extrahiert werden soll, wird durch den Wert des Multiplexer-Signals bestimmt.

In komplizierteren Fällen kann die Nutzlast mehrere Multiplexer-Signale haben. In solchen Fällen kann das Signal nur aus der Nutzlast extrahiert werden, wenn alle Multiplexer die erwarteten Werte enthalten.

Wertkonvertierungen

In vielen Fällen können die über den CAN-Bus übertragenen Signale nicht den gesamten Bereich der physikalischen Werte enthalten, die sie darstellen. Um diese Einschränkungen zu überwinden, werden die physikalischen Werte vor der Übertragung in einen kleineren Bereich umgewandelt und können auf der Empfangsseite wiederhergestellt werden.

Die folgenden Formeln werden zur Umrechnung zwischen dem physikalischen Wert und dem Signalwert verwendet:

physicalValue = scaling * (signalValue * factor + offset);
signalValue = (physicalValue / scaling - offset) / factor;

Der Faktor und die Skalierungsparameter können nicht gleich 0 sein.

Wenn einer der Parameter gleich qQNaN() ist, wird er bei der Konvertierung nicht verwendet. Wenn alle Parameter gleich qQNaN() sind (dies ist der Standardwert), wird die Konvertierung nicht durchgeführt.

Dokumentation der Mitgliedstypen

[alias] QCanSignalDescription::MultiplexSignalValues

[alias] QCanSignalDescription::MultiplexValues

Dokumentation der Mitgliederfunktionen

QCanSignalDescription::QCanSignalDescription()

Erzeugt eine leere Signalbeschreibung.

QCanSignalDescription::QCanSignalDescription(const QCanSignalDescription &other)

Erzeugt eine Signalbeschreibung mit den aus other kopierten Werten.

[noexcept] QCanSignalDescription::QCanSignalDescription(QCanSignalDescription &&other)

Erzeugt eine Signalbeschreibung durch Verschieben von other.

Hinweis: Das "moved-from"-Objekt QCanSignalDescription kann nur zerstört oder zugewiesen werden. Die Wirkung des Aufrufs anderer Funktionen als des Destruktors oder eines der Zuweisungsoperatoren ist undefiniert.

[noexcept] QCanSignalDescription::~QCanSignalDescription()

Zerstört diese Signalbeschreibung.

void QCanSignalDescription::addMultiplexSignal(const QString &name, const QCanSignalDescription::MultiplexValues &ranges)

Fügt eine neue multiplexor signal für dieses Signal hinzu. Der Parameter name enthält den Namen des Multiplexer-Signals und der Parameter ranges enthält die gewünschten Wertebereiche.

Wenn dieses Signal bereits Sollwertbereiche für das Multiplexersignal name hat, werden die Bereiche überschrieben.

Siehe auch multiplexState(), multiplexSignals(), clearMultiplexSignals(), und setMultiplexSignals().

void QCanSignalDescription::addMultiplexSignal(const QString &name, const QVariant &value)

Dies ist eine überladene Funktion.

Es handelt sich um eine Komfortüberladung für den Fall, dass das Multiplexer-Signal nur einen bestimmten Wert und nicht einen Wertebereich haben soll.

Der Parameter name enthält den Namen des Multiplexer-Signals, und der Parameter value enthält den gewünschten Wert.

Wenn dieses Signal bereits Sollwertbereiche für das Multiplexorsignal name hat, werden die Bereiche überschrieben.

Siehe auch multiplexState(), multiplexSignals(), clearMultiplexSignals(), und setMultiplexSignals().

quint16 QCanSignalDescription::bitLength() const

Gibt die Bitlänge des Signalwerts zurück.

Siehe auch setBitLength(), startBit(), und setStartBit().

void QCanSignalDescription::clearMultiplexSignals()

Entfernt alle multiplexor signals für dieses Signal.

Siehe auch multiplexSignals(), setMultiplexSignals(), und addMultiplexSignal().

QString QCanSignalDescription::comment() const

Gibt den Kommentar für das Signal zurück.

Dieser Parameter wird nur zur zusätzlichen Beschreibung eingeführt. Er wird bei der Signalverarbeitung nicht verwendet.

Siehe auch setComment().

QSysInfo::Endian QCanSignalDescription::dataEndian() const

Gibt das Datenendian des Signalwerts zurück.

Standardmäßig wird BigEndian verwendet.

Hinweis: Das Datenendian wird ignoriert, wenn dataFormat() auf AsciiString gesetzt ist.

Siehe auch setDataEndian() und QSysInfo::Endian.

QtCanBus::DataFormat QCanSignalDescription::dataFormat() const

Gibt das Datenformat des Signalwerts zurück.

Standardmäßig wird SignedInteger verwendet.

Siehe auch setDataFormat() und QtCanBus::DataFormat.

QtCanBus::DataSource QCanSignalDescription::dataSource() const

Gibt die Datenquelle für den Wert des Signals zurück.

Standardmäßig wird Payload verwendet.

Siehe auch setDataSource() und QtCanBus::DataSource.

double QCanSignalDescription::factor() const

Gibt den Faktor zurück, der verwendet wird, um den Wert des Signals in einen physikalischen Wert und zurück zu konvertieren.

Standardmäßig gibt die Funktion qQNaN() zurück, was bedeutet, dass kein Faktor verwendet wird.

Der Abschnitt Value Conversions erklärt, wie dieser Parameter verwendet wird.

Siehe auch setFactor(), offset(), und scaling().

bool QCanSignalDescription::isValid() const

Gibt true zurück, wenn die Signalbeschreibung gültig ist, und andernfalls false.

Eine gültige Signalbeschreibung muss die folgenden Bedingungen erfüllen:

Siehe auch bitLength(), dataFormat(), und name().

double QCanSignalDescription::maximum() const

Gibt den maximal unterstützten Wert für das Signal zurück.

Standardmäßig gibt die Funktion qQNaN() zurück, was bedeutet, dass es keinen Maximalwert gibt.

Siehe auch setRange() und minimum().

double QCanSignalDescription::minimum() const

Gibt den minimalen unterstützten Wert für das Signal zurück.

Standardmäßig gibt die Funktion qQNaN() zurück, was bedeutet, dass es keinen Mindestwert gibt.

Siehe auch setRange() und maximum().

QCanSignalDescription::MultiplexSignalValues QCanSignalDescription::multiplexSignals() const

Gibt die multiplexor signals und ihre gewünschten Werte zurück, die zur korrekten Identifizierung dieses Signals verwendet werden.

Der zurückgegebene Hash enthält Signalnamen als Schlüssel und die jeweiligen gewünschten Wertebereiche als Werte.

Der Wert dieses Signals kann nur dann aus der Nutzlast extrahiert werden, wenn alle Signale aus dem Hash die erwarteten Werte haben.

Siehe auch multiplexState(), clearMultiplexSignals(), setMultiplexSignals(), und addMultiplexSignal().

QtCanBus::MultiplexState QCanSignalDescription::multiplexState() const

Gibt den Multiplex-Status des Signals zurück.

Weitere Einzelheiten zu gemultiplexten Signalen finden Sie im Abschnitt Multiplexed Signals Explained.

Standardmäßig gibt diese Methode None zurück.

Siehe auch setMultiplexState() und QtCanBus::MultiplexState.

QString QCanSignalDescription::name() const

Gibt den Namen des Signals zurück.

Siehe auch setName() und isValid().

double QCanSignalDescription::offset() const

Gibt den Offset zurück, der verwendet wird, um den Wert des Signals in einen physikalischen Wert und zurück zu konvertieren.

Standardmäßig gibt die Funktion qQNaN() zurück, was bedeutet, dass kein Offset verwendet wird.

Der Abschnitt Value Conversions erklärt, wie dieser Parameter verwendet wird.

Siehe auch setOffset(), factor(), und scaling().

QString QCanSignalDescription::physicalUnit() const

Gibt die physikalische Einheit (z. B. km/h) des Signalwerts zurück oder einen leeren String, wenn die Einheit nicht festgelegt ist.

Dieser Parameter wird nur zur zusätzlichen Beschreibung eingeführt. Er wird bei der Signalverarbeitung nicht verwendet.

Siehe auch setPhysicalUnit().

QString QCanSignalDescription::receiver() const

Gibt den Empfängerknoten für dieses Signal zurück.

Dieser Parameter wird nur zur zusätzlichen Beschreibung eingeführt. Er wird bei der Signalverarbeitung nicht verwendet.

Siehe auch setReceiver().

double QCanSignalDescription::scaling() const

Gibt die Skalierung zurück, die verwendet wird, um den Wert des Signals in einen physikalischen Wert und zurück zu konvertieren.

Standardmäßig gibt die Funktion qQNaN() zurück, was bedeutet, dass die Skalierung nicht verwendet wird.

Der Abschnitt Value Conversions erklärt, wie dieser Parameter verwendet wird.

Siehe auch setScaling(), offset(), und factor().

void QCanSignalDescription::setBitLength(quint16 length)

Setzt die Bitlänge des Signalwerts auf length.

Siehe auch bitLength(), startBit(), und setStartBit().

void QCanSignalDescription::setComment(const QString &text)

Setzt den Kommentar für das Signal auf text.

Dieser Parameter wird nur zur zusätzlichen Beschreibung eingeführt. Er wird bei der Signalverarbeitung nicht verwendet.

Siehe auch comment().

void QCanSignalDescription::setDataEndian(QSysInfo::Endian endian)

Setzt das Datenendian des Signalwerts auf endian.

Siehe auch dataEndian() und QSysInfo::Endian.

void QCanSignalDescription::setDataFormat(QtCanBus::DataFormat format)

Setzt das Datenformat des Signalwerts auf format.

Siehe auch dataFormat() und QtCanBus::DataFormat.

void QCanSignalDescription::setDataSource(QtCanBus::DataSource source)

Setzt die Datenquelle für den Wert des Signals auf source.

Siehe auch dataSource() und QtCanBus::DataSource.

void QCanSignalDescription::setFactor(double factor)

Legt den Faktor fest, der verwendet wird, um den Wert des Signals in einen physikalischen Wert und zurück in factor zu konvertieren.

Übergeben Sie qQNaN() an diese Methode, um diesen Parameter während der Konvertierung zu überspringen.

Der Faktor kann nicht 0 sein. Der Versuch, einen Null-Faktor zu setzen, ist gleichbedeutend mit dem Setzen auf qQNaN().

Der Abschnitt Value Conversions erklärt, wie dieser Parameter verwendet wird.

Siehe auch factor(), setOffset(), und setScaling().

void QCanSignalDescription::setMultiplexSignals(const QCanSignalDescription::MultiplexSignalValues &multiplexorSignals)

Setzt die multiplexor signals für dieses Signal auf multiplexorSignals.

Der Hash multiplexorSignals muss Signalnamen als Schlüssel und die jeweiligen gewünschten Wertebereiche als Werte enthalten.

Siehe auch multiplexState(), multiplexSignals(), clearMultiplexSignals(), und addMultiplexSignal().

void QCanSignalDescription::setMultiplexState(QtCanBus::MultiplexState state)

Setzt den Multiplex-Status des Signals auf state.

Weitere Einzelheiten zu gemultiplexten Signalen finden Sie im Abschnitt Multiplexed Signals Explained.

Siehe auch multiplexState() und QtCanBus::MultiplexState.

void QCanSignalDescription::setName(const QString &name)

Setzt den Namen des Signals auf name.

Der Name des Signals muss innerhalb einer CAN-Nachricht eindeutig sein.

Siehe auch name().

void QCanSignalDescription::setOffset(double offset)

Legt den Offset fest, der verwendet wird, um den Wert des Signals in einen physikalischen Wert und zurück in offset zu konvertieren.

Übergeben Sie qQNaN() an diese Methode, um diesen Parameter während der Konvertierung zu überspringen.

Der Abschnitt Value Conversions erklärt, wie dieser Parameter verwendet wird.

Siehe auch offset(), setFactor(), und setScaling().

void QCanSignalDescription::setPhysicalUnit(const QString &unit)

Legt den physikalischen unit (z.B. km/h) des Signalwertes fest.

Dieser Parameter wird nur zur zusätzlichen Beschreibung eingeführt. Er wird bei der Signalverarbeitung nicht verwendet.

Siehe auch physicalUnit().

void QCanSignalDescription::setRange(double minimum, double maximum)

Legt die Parameter minimum und maximum für den Wert des Signals fest.

Die Einstellung eines oder beider Parameter auf qQNaN() bedeutet, dass der entsprechende Grenzwert nicht verwendet wird.

Siehe auch minimum() und maximum().

void QCanSignalDescription::setReceiver(const QString &receiver)

Legt den receiver Knoten für dieses Signal fest.

Dieser Parameter wird nur zur zusätzlichen Beschreibung eingeführt. Er wird bei der Signalverarbeitung nicht verwendet.

Siehe auch receiver().

void QCanSignalDescription::setScaling(double scaling)

Legt die Skalierung fest, die verwendet wird, um den Wert des Signals in einen physikalischen Wert und zurück in scaling umzuwandeln.

Übergeben Sie qQNaN() an diese Methode, um diesen Parameter während der Konvertierung zu überspringen.

Die Skalierung kann nicht 0 sein. Der Versuch, eine Null-Skalierung einzustellen, ist gleichbedeutend mit der Einstellung auf qQNaN().

Der Abschnitt Value Conversions erklärt, wie dieser Parameter verwendet wird.

Siehe auch scaling(), setOffset(), und setFactor().

void QCanSignalDescription::setStartBit(quint16 bit)

Setzt das Startbit des Signalwerts in dataSource() auf bit.

Siehe auch startBit(), bitLength(), und setBitLength().

quint16 QCanSignalDescription::startBit() const

Gibt das Startbit des Signalwerts in der Datei dataSource() zurück.

Siehe auch setStartBit(), bitLength(), und setBitLength().

[noexcept] QCanSignalDescription &QCanSignalDescription::operator=(QCanSignalDescription &&other)

Verschieben - weist die Werte von other dieser Signalbeschreibung zu.

Hinweis: Das von QCanSignalDescription verschobene Objekt kann nur zerstört oder zugewiesen werden. Die Auswirkungen des Aufrufs anderer Funktionen als des Destruktors oder eines der Zuweisungsoperatoren sind undefiniert.

QCanSignalDescription &QCanSignalDescription::operator=(const QCanSignalDescription &other)

Weist dieser Signalbeschreibung die Werte von other zu.

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