QCanSignalDescription Class
Die Klasse „QCanSignalDescription“ beschreibt die Regeln, nach denen ein Wert aus dem CAN-Frame extrahiert und in einem anwendungsspezifischen Format dargestellt wird. Mehr...
| Header: | #include <QCanSignalDescription> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS SerialBus) target_link_libraries(mytarget PRIVATE Qt6::SerialBus) |
| qmake: | QT += serialbus |
| Seit: | Qt 6.5 |
| Status: | Technologievorschau |
Diese Klasse befindet sich in der Technologievorschau und kann sich noch ändern.
Öffentliche Typen
(since 6.5) struct | MultiplexValueRange |
| MultiplexSignalValues | |
| MultiplexValues |
Ö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) |
Ausführliche Beschreibung
Die Klasse „QCanSignalDescription“ kann verwendet werden, um eine Signalbeschreibung bereitzustellen und diese später zum Dekodieren eines empfangenen „ QCanBusFrame “ oder zum Kodieren der Eingabedaten in ein „ QCanBusFrame “ zu nutzen, das 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 lauten wie folgt:
- Datenquelle (Frame-ID oder Nutzdaten).
- Daten-Endianness. Weitere Details finden Sie im Abschnitt „ Data Endianness Processing “.
- Datenformat.
- Startbit-Position.
- Datenlänge in Bit.
- Multiplexing-Optionen.
Die Startbitposition wird relativ zur ausgewählten Datenquelle angegeben. Die Bits werden beginnend mit dem LSB gezählt.
Nach der Extraktion der Daten ist unter Umständen eine Konvertierung in ein anwendungsspezifisches Format erforderlich. Dazu können die folgenden Parameter verwendet werden:
- Verschiedene Parameter zur Umwandlung des extrahierten Werts in einen physikalischen Wert (Faktor, Offset, Skalierung).
- Erwarteter Datenbereich.
- Dateneinheiten.
Die Klasse `QCanSignalDescription` stellt Methoden zur Steuerung all dieser Parameter bereit.
Verarbeitung der Daten-Endianness
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 entspricht die Startposition der des niedrigstwertigen Bits.
Betrachten wir zwei Beispiele. In beiden Beispielen werden wir zwei 12-Bit-Werte in der 3-Byte-Nutzlast kodieren.
Little-Endian
Für den Little-Endian-Fall lässt sich das Datenlayout anhand der folgenden Abbildung darstellen:

Hier stehen die Spalten für Bitnummern und die Zeilen für Bytenummern. „ LSB “ kennzeichnet das erste (niedrigstwertige) Bit des Werts, und „ MSB “ kennzeichnet das letzte (höchstwertige) Bit des Werts. Die blaue Farbe kennzeichnet den ersten Wert, und die orange Farbe kennzeichnet den zweiten Wert.
Die Informationen zu diesen Werten werden in „QCanSignalDescription“ wie folgt 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 signal2Big-Endian
Die folgende Abbildung zeigt die Anordnung der Werte im Big-Endian-Fall:

Die Werte können in `QCanSignalDescription` wie folgt 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 signal2Beachten Sie, dass sich die Startbits vom Little-Endian-Fall unterscheiden. Auch die Werte sind anders ausgerichtet.
Erläuterung zu multiplexierten Signalen
Es gibt zwei gängige Methoden zur Kodierung der Daten in der CAN-Nutzlast:
- Jeder Bitbereich repräsentiert immer dasselbe Signal. Beispielsweise kann „
Bytes 0-1“ in einer Nutzlast die Motordrehzahl (in U/min) darstellen, während „Bytes 2-3“ die Fahrzeuggeschwindigkeit (in km/h) repräsentieren kann. - Derselbe Bitbereich kann unterschiedliche Daten darstellen, abhängig von den Werten einiger anderer Bits in der Nutzlast. Wenn beispielsweise
Byte 0den Wert0hat, stellen dieBytes 1-2eine Motordrehzahl (in U/min) dar, und wennByte 0den Wert1hat, stellen dieselbenBytes 1-2eine Fahrzeuggeschwindigkeit (in km/h) dar.
Im zweiten Fall kommt Signal-Multiplexing zum Einsatz. Im vorliegenden Beispiel haben wir drei Signale. Das erste Signal stellt den Wert von „ Byte 0 “ dar und fungiert als Multiplexer-Signal. Die beiden anderen Signale stellen jeweils die Motordrehzahl und die Fahrzeuggeschwindigkeit dar, jedoch kann jeweils nur eines davon aus der CAN-Nutzlast extrahiert werden. Welches Signal extrahiert werden soll, wird durch den Wert des Multiplexersignals bestimmt.
In komplexeren Fällen kann die Nutzlast mehrere Multiplexersignale enthalten. In solchen Fällen kann das Signal erst dann aus der Nutzlast extrahiert werden, wenn alle Multiplexer die erwarteten Werte enthalten.
Wertumrechnungen
In vielen Fällen können die über den CAN-Bus übertragenen Signale nicht den gesamten Bereich der physikalischen Werte abdecken, 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 Empfängerseite wiederhergestellt werden.
Zur Umrechnung zwischen dem physikalischen Wert und dem Signalwert werden die folgenden Formeln verwendet:
physicalValue = scaling * (signalValue * factor + offset);
signalValue = (physicalValue / scaling - offset) / factor;Der Faktor und die Skalierungsparameter dürfen nicht gleich „ 0 “ sein.
Wenn einer der Parameter dem Wert „ qQNaN “ () entspricht, wird er bei der Umrechnung nicht berücksichtigt. Sind alle Parameter gleich „ qQNaN “ () (was der Standard ist), wird die Umrechnung nicht durchgeführt.
Dokumentation zum Mitgliedstyp
[alias] QCanSignalDescription::MultiplexSignalValues
[alias] QCanSignalDescription::MultiplexValues
Dokumentation zu Member-Funktionen
QCanSignalDescription::QCanSignalDescription()
Erstellt eine leere Signalbeschreibung.
QCanSignalDescription::QCanSignalDescription(const QCanSignalDescription &other)
Erstellt eine Signalbeschreibung mit den Werten, die von other kopiert wurden.
[constexpr noexcept default] QCanSignalDescription::QCanSignalDescription(QCanSignalDescription &&other)
Erstellt eine Signalbeschreibung, indem ein Objekt aus ` other` verschoben wird.
Hinweis: Das Objekt `QCanSignalDescription`, von dem die Beschreibung verschoben wurde, kann nur zerstört oder einer Variablen zugewiesen werden. Die Auswirkungen des Aufrufs anderer Funktionen als des Destruktors oder eines der Zuweisungsoperatoren sind undefiniert.
[constexpr noexcept default] QCanSignalDescription::~QCanSignalDescription()
Löscht diese Signalbeschreibung.
void QCanSignalDescription::addMultiplexSignal(const QString &name, const QCanSignalDescription::MultiplexValues &ranges)
Fügt ein neues „ multiplexor signal “ für dieses Signal hinzu. Der Parameter „ name “ enthält den Namen des Multiplexorsignals, und der Parameter „ ranges “ enthält die gewünschten Wertebereiche.
Falls für dieses Signal bereits Sollwertbereiche für das Multiplexorsignal „ name “ vorhanden sind, werden diese überschrieben.
Siehe auch multiplexState(), multiplexSignals(), clearMultiplexSignals() und setMultiplexSignals().
void QCanSignalDescription::addMultiplexSignal(const QString &name, const QVariant &value)
Dies ist eine Komfortüberladung für den Fall, dass das Multiplexorsignal voraussichtlich nur einen bestimmten Wert und keinen Wertebereich annimmt.
Der Parameter „ name “ enthält den Namen des Multiplexorsignals, und der Parameter „ value “ enthält den gewünschten Wert.
Wenn für das Multiplexorsignal „ name “ bereits gewünschte Wertebereiche vorhanden sind, werden diese überschrieben.
Dies ist eine überladene Funktion.
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 zum Signal zurück.
Dieser Parameter dient lediglich der zusätzlichen Beschreibung. Er wird bei der Signalverarbeitung nicht verwendet.
Siehe auch setComment().
QSysInfo::Endian QCanSignalDescription::dataEndian() const
Gibt die Daten-Endian-Reihenfolge des Signalwerts zurück.
Standardmäßig wird „ BigEndian “ verwendet.
Hinweis: Die Daten-Endian-Reihenfolge wird ignoriert, wenn die Funktion „ 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 des Signalwerts zurück.
Standardmäßig wird „ Payload “ verwendet.
Siehe auch „ setDataSource()“ und „ QtCanBus::DataSource “.
double QCanSignalDescription::factor() const
Gibt den Faktor zurück, der zur Umwandlung des Signalwerts in einen physikalischen Wert und zurück verwendet wird.
Standardmäßig gibt die Funktion „ qQNaN()“ zurück, was bedeutet, dass kein Faktor verwendet wird.
Im Abschnitt „ Value Conversions “ wird erläutert, 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, andernfalls „ false “.
Eine gültige Signalbeschreibung muss die folgenden Bedingungen erfüllen:
- Sie muss eine nicht leere ` name()` enthalten
- bitLength()
== 32enthalten, wenn dataFormat() Float - bitLength()
== 64haben, wenn dataFormat() Double - bitLength() muss ein Vielfaches von
8sein, wenn dataFormat() AsciiString - bitLength() größer als
0und kleiner oder gleich64sein.
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 kleinsten unterstützten Wert für das Signal zurück.
Standardmäßig gibt die Funktion „ qQNaN()“ zurück, was bedeutet, dass kein Mindestwert vorhanden ist.
Siehe auch „ setRange()“ und „ maximum()“.
QCanSignalDescription::MultiplexSignalValues QCanSignalDescription::multiplexSignals() const
Gibt die „ multiplexor signals “ und deren gewünschte Werte zurück, die zur eindeutigen 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 aufweisen.
Siehe auch multiplexState(), clearMultiplexSignals(), setMultiplexSignals() und addMultiplexSignal().
QtCanBus::MultiplexState QCanSignalDescription::multiplexState() const
Gibt den Multiplex-Status des Signals zurück.
Weitere Informationen zu multiplexierten 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 zur Umwandlung des Signalwerts in einen physikalischen Wert und zurück verwendet wird.
Standardmäßig gibt die Funktion „ qQNaN()“ zurück, was bedeutet, dass kein Offset verwendet wird.
Im Abschnitt „ Value Conversions “ wird erläutert, 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 eine leere Zeichenkette, wenn keine Einheit festgelegt ist.
Dieser Parameter dient lediglich der zusätzlichen Beschreibung. 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 dient lediglich der zusätzlichen Beschreibung. Er wird bei der Signalverarbeitung nicht verwendet.
Siehe auch „ setReceiver()“.
double QCanSignalDescription::scaling() const
Gibt den Skalierungsfaktor zurück, der verwendet wird, um den Wert des Signals in einen physikalischen Wert umzuwandeln und umgekehrt.
Standardmäßig gibt die Funktion ` qQNaN()` zurück, was bedeutet, dass keine Skalierung verwendet wird.
Im Abschnitt „ Value Conversions “ wird erläutert, wie dieser Parameter verwendet wird.
Siehe auch „ setScaling()“, „ offset()“ und „ factor()“.
void QCanSignalDescription::setBitLength(quint16 length)
Legt die Bitlänge des Signalwerts auf „ length “ fest.
Siehe auch bitLength(), startBit() und setStartBit().
void QCanSignalDescription::setComment(const QString &text)
Setzt den Kommentar für das Signal auf „ text “.
Dieser Parameter dient lediglich der zusätzlichen Beschreibung. Er wird bei der Signalverarbeitung nicht verwendet.
Siehe auch „ comment()“.
void QCanSignalDescription::setDataEndian(QSysInfo::Endian endian)
Legt die Daten-Endian-Reihenfolge des Signalwerts auf „ endian “ fest.
Siehe auch „ dataEndian()“ und „ QSysInfo::Endian “.
void QCanSignalDescription::setDataFormat(QtCanBus::DataFormat format)
Legt das Datenformat des Signalwerts auf „ format “ fest.
Siehe auch „ dataFormat()“ und „ QtCanBus::DataFormat “.
void QCanSignalDescription::setDataSource(QtCanBus::DataSource source)
Legt die Datenquelle für den Wert des Signals auf source fest.
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 “ umzuwandeln.
Übergeben Sie ` qQNaN()` an diese Methode, um diesen Parameter bei der Umwandlung zu überspringen.
Der Faktor darf nicht 0 sein. Der Versuch, einen Faktor von Null festzulegen, entspricht der Festlegung auf ` qQNaN()`.
Im Abschnitt „ Value Conversions “ wird erläutert, wie dieser Parameter verwendet wird.
Siehe auch factor(), setOffset() und setScaling().
void QCanSignalDescription::setMultiplexSignals(const QCanSignalDescription::MultiplexSignalValues &multiplexorSignals)
Legt den Hash „ multiplexor signals “ für dieses Signal auf „ multiplexorSignals “ fest.
Das Hash „ multiplexorSignals “ muss Signalnamen als Schlüssel und die entsprechenden 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 Informationen zu multiplexierten Signalen finden Sie im Abschnitt „ Multiplexed Signals Explained “.
Siehe auch „ multiplexState()“ und „ QtCanBus::MultiplexState “.
void QCanSignalDescription::setName(const QString &name)
Legt den Namen des Signals auf „ name “ fest.
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 zu „ offset “ zu konvertieren.
Übergeben Sie ` qQNaN()` an diese Methode, um diesen Parameter bei der Umwandlung zu überspringen.
Im Abschnitt „ Value Conversions “ wird erläutert, wie dieser Parameter verwendet wird.
Siehe auch ` offset()`, ` setFactor()` und ` setScaling()`.
void QCanSignalDescription::setPhysicalUnit(const QString &unit)
Legt die physikalische Ein unit einheit (z. B. km/h) des Signalwerts fest.
Dieser Parameter dient lediglich der zusätzlichen Beschreibung. Er wird bei der Signalverarbeitung nicht verwendet.
Siehe auch „ physicalUnit()“.
void QCanSignalDescription::setRange(double minimum, double maximum)
Legt die Werte für „ minimum “ und „ maximum “ für den Signalwert fest.
Wird einer oder beide Parameter auf qQNaN() gesetzt, bedeutet dies, dass die entsprechende Begrenzung nicht angewendet wird.
Siehe auch minimum() und maximum().
void QCanSignalDescription::setReceiver(const QString &receiver)
Legt den Knoten „ receiver “ für dieses Signal fest.
Dieser Parameter dient lediglich der zusätzlichen Beschreibung. Er wird bei der Signalverarbeitung nicht verwendet.
Siehe auch „ receiver()“.
void QCanSignalDescription::setScaling(double scaling)
Legt den Skalierungsfaktor fest, der verwendet wird, um den Wert des Signals in einen physikalischen Wert und zurück zu „ scaling “ zu konvertieren.
Übergeben Sie ` qQNaN()` an diese Methode, um diesen Parameter bei der Umwandlung zu überspringen.
Der Skalierungsfaktor darf nicht 0 sein. Der Versuch, den Skalierungsfaktor auf Null zu setzen, entspricht der Einstellung auf ` qQNaN()`.
Im Abschnitt „ Value Conversions “ wird erläutert, wie dieser Parameter verwendet wird.
Siehe auch scaling(), setOffset() und setFactor().
void QCanSignalDescription::setStartBit(quint16 bit)
Setzt das Startbit des Signalwerts in der Funktion „ dataSource()“ auf „ bit “.
Siehe auch startBit(), bitLength() und setBitLength().
quint16 QCanSignalDescription::startBit() const
Gibt das Startbit des Signalwerts in der Funktion „ dataSource()“ zurück.
Siehe auch „ setStartBit()“, „ bitLength()“ und „ setBitLength()“.
[noexcept] QCanSignalDescription &QCanSignalDescription::operator=(QCanSignalDescription &&other)
Überträgt die Werte aus „ other “ in diese Signalbeschreibung.
Hinweis: Das Objekt „ QCanSignalDescription “, aus dem die Werte verschoben wurden, 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 aus „ other “ zu.
© 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.