Sur cette page

QCanSignalDescription Class

La classe QCanSignalDescription décrit les règles permettant d'extraire une valeur de la trame CAN et de la représenter dans un format défini par l'application. Plus d'informations...

En-tête : #include <QCanSignalDescription>
CMake : find_package(Qt6 REQUIRED COMPONENTS SerialBus)
target_link_libraries(mytarget PRIVATE Qt6::SerialBus)
qmake : QT += serialbus
Depuis : Qt 6.5
Statut : Préliminaire

Cette classe est en cours de développement et peut être modifiée.

Types publics

Fonctions publiques

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)

Description détaillée

La classe QCanSignalDescription peut être utilisée pour fournir une description du signal et l'utiliser ultérieurement pour décoder un QCanBusFrame reçu ou encoder les données d'entrée dans un QCanBusFrame qui peut être envoyé au récepteur.

Description générale

Chaque trame CAN peut contenir plusieurs valeurs. Les règles permettant d'extraire les valeurs d'une trame CAN sont les suivantes :

  • Source des données (ID de la trame ou charge utile).
  • Endianness des données. Voir la section Data Endianness Processing pour plus de détails.
  • Format des données.
  • Position du bit de départ.
  • Longueur des données en bits.
  • Options de multiplexage.

La position du bit de départ est spécifiée par rapport à la source de données sélectionnée. Les bits sont comptés à partir du LSB.

Une fois les données extraites, il peut être nécessaire de les convertir dans un format défini par l'application. Les paramètres suivants peuvent être utilisés à cet effet :

  • Divers paramètres de conversion de la valeur extraite en une valeur physique (facteur, décalage, échelle).
  • Plage de données attendue.
  • Unités de données.

La classe QCanSignalDescription fournit des méthodes pour contrôler tous ces paramètres.

Traitement de l'endianité des données

Les données Little endian et Big endian sont encodées différemment. Pour les valeurs big endian, les positions des bits de départ sont données pour le bit le plus significatif. Pour les valeurs little endian, la position de départ est celle du bit le moins significatif.

Prenons deux exemples. Dans les deux cas, nous coderons deux valeurs de 12 bits dans la charge utile de 3 octets.

Petit endian

Dans le cas du little endian, la disposition des données peut être représentée par l'image suivante :

Ici, les colonnes représentent les nombres de bits et les lignes les nombres d'octets. LSB marque le premier bit (le moins significatif) de la valeur et MSB marque le dernier bit (le plus significatif) de la valeur. La couleur bleue indique la première valeur et la couleur orange indique la deuxième valeur.

Les informations concernant ces valeurs seront encodées dans QCanSignalDescription de la manière suivante :

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

L'image suivante représente la disposition des valeurs pour le cas big endian :

Les valeurs peuvent être représentées dans QCanSignalDescription de la manière suivante :

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

Notez que les bits de départ sont différents de ceux du cas little endian. Les valeurs sont également alignées différemment.

Explication des signaux multiplexés

Il existe deux façons courantes d'encoder les données dans la charge utile CAN :

  • Chaque plage de bits représente toujours le même signal. Par exemple, Bytes 0-1 dans une charge utile peut représenter un régime moteur (en tr/min), et Bytes 2-3 peut représenter la vitesse du véhicule (en km/h).
  • La même plage de bits peut représenter des données différentes, en fonction des valeurs de certains autres bits de la charge utile. Par exemple, si Byte 0 a la valeur 0, Bytes 1-2 représente un régime moteur (en tr/min), et si Byte 0 a la valeur 1, le même Bytes 1-2 représente une vitesse de véhicule (en km/h).

Le deuxième cas utilise le multiplexage des signaux. Dans l'exemple fourni, nous aurons trois signaux. Le premier signal représente la valeur de Byte 0 et agit comme un signal multiplexeur. Les deux autres signaux représentent respectivement le régime du moteur et la vitesse du véhicule, mais un seul d'entre eux peut être extrait de la charge utile CAN à la fois. Le signal à extraire est défini par la valeur du signal multiplexeur.

Dans des cas plus complexes, la charge utile peut comporter plusieurs signaux multiplexeurs. Dans ce cas, le signal ne peut être extrait de la charge utile que lorsque tous les multiplexeurs contiennent les valeurs attendues.

Conversions de valeurs

Dans de nombreux cas, les signaux transférés sur le bus CAN ne peuvent pas contenir toute la gamme des valeurs physiques qu'ils représentent. Pour surmonter ces limitations, les valeurs physiques sont converties en une gamme plus restreinte avant la transmission, et peuvent être restaurées à la réception.

Les formules suivantes sont utilisées pour convertir la valeur physique et la valeur du signal :

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

Les paramètres de facteur et d'échelle ne peuvent pas être égaux à 0.

Si l'un des paramètres est égal à qQNaN(), il n'est pas utilisé lors de la conversion. Si tous les paramètres sont égaux à qQNaN() (ce qui est la valeur par défaut), la conversion n'est pas effectuée.

Documentation sur les types de membres

[alias] QCanSignalDescription::MultiplexSignalValues

[alias] QCanSignalDescription::MultiplexValues

Documentation des fonctions membres

QCanSignalDescription::QCanSignalDescription()

Crée une description de signal vide.

QCanSignalDescription::QCanSignalDescription(const QCanSignalDescription &other)

Crée une description de signal avec les valeurs copiées de other.

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

Crée une description de signal en la déplaçant de other.

Note : L'objet QCSignalDescription déplacé ne peut être que détruit ou assigné. L'effet de l'appel à d'autres fonctions que le destructeur ou l'un des opérateurs d'affectation n'est pas défini.

[constexpr noexcept] QCanSignalDescription::~QCanSignalDescription()

Détruit la description de ce signal.

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

Ajoute un nouveau multiplexor signal pour ce signal. Le paramètre name contient le nom du signal multiplexeur et le paramètre ranges contient les plages de valeurs souhaitées.

Si ce signal possède déjà des plages de valeurs souhaitées pour le signal multiplexeur name, ces plages sont écrasées.

Voir également multiplexState(), multiplexSignals(), clearMultiplexSignals() et setMultiplexSignals().

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

Il s'agit d'une surcharge de commodité pour le cas où le signal du multiplexeur ne devrait avoir qu'une seule valeur spécifique, et non une plage de valeurs.

Le paramètre name contient le nom du signal multiplexeur et le paramètre value contient la valeur souhaitée.

Si ce signal possède déjà des plages de valeurs souhaitées pour le signal multiplexeur name, ces plages sont écrasées.

Il s'agit d'une fonction surchargée.

Voir aussi multiplexState(), multiplexSignals(), clearMultiplexSignals() et setMultiplexSignals().

quint16 QCanSignalDescription::bitLength() const

Renvoie la longueur des bits de la valeur du signal.

Voir aussi setBitLength(), startBit() et setStartBit().

void QCanSignalDescription::clearMultiplexSignals()

Supprime tous les multiplexor signals pour ce signal.

Voir aussi multiplexSignals(), setMultiplexSignals() et addMultiplexSignal().

QString QCanSignalDescription::comment() const

Renvoie le commentaire du signal.

Ce paramètre n'est introduit que pour une description supplémentaire. Il n'est pas utilisé lors du traitement du signal.

Voir aussi setComment().

QSysInfo::Endian QCanSignalDescription::dataEndian() const

Renvoie les données endian de la valeur du signal.

Par défaut, BigEndian est utilisé.

Remarque : l'endian des données est ignoré si dataFormat() est défini sur AsciiString.

Voir également setDataEndian() et QSysInfo::Endian.

QtCanBus::DataFormat QCanSignalDescription::dataFormat() const

Renvoie le format de données de la valeur du signal.

Par défaut, SignedInteger est utilisé.

Voir aussi setDataFormat() et QtCanBus::DataFormat.

QtCanBus::DataSource QCanSignalDescription::dataSource() const

Renvoie la source de données de la valeur du signal.

Par défaut, Payload est utilisé.

Voir aussi setDataSource() et QtCanBus::DataSource.

double QCanSignalDescription::factor() const

Renvoie le facteur utilisé pour convertir la valeur du signal en valeur physique et inversement.

Par défaut, la fonction renvoie qQNaN(), ce qui signifie qu'aucun facteur n'est utilisé.

La section Value Conversions explique comment ce paramètre est utilisé.

Voir également setFactor(), offset() et scaling().

bool QCanSignalDescription::isValid() const

Renvoie true si la description du signal est valide et false dans le cas contraire.

Une description de signal valide doit remplir les conditions suivantes :

Voir également bitLength(), dataFormat() et name().

double QCanSignalDescription::maximum() const

Renvoie la valeur maximale supportée pour le signal.

Par défaut, la fonction renvoie qQNaN(), ce qui signifie qu'il n'y a pas de valeur maximale.

Voir aussi setRange() et minimum().

double QCanSignalDescription::minimum() const

Renvoie la valeur minimale prise en charge pour le signal.

Par défaut, la fonction renvoie qQNaN(), ce qui signifie qu'il n'y a pas de valeur minimale.

Voir aussi setRange() et maximum().

QCanSignalDescription::MultiplexSignalValues QCanSignalDescription::multiplexSignals() const

Renvoie l'adresse multiplexor signals et les valeurs souhaitées qui sont utilisées pour identifier correctement ce signal.

Le hachage renvoyé contient les noms des signaux en tant que clés et les plages de valeurs souhaitées respectives en tant que valeurs.

La valeur de ce signal ne peut être extraite de la charge utile que si tous les signaux du hachage ont les valeurs attendues.

Voir aussi multiplexState(), clearMultiplexSignals(), setMultiplexSignals() et addMultiplexSignal().

QtCanBus::MultiplexState QCanSignalDescription::multiplexState() const

Renvoie l'état de multiplexage du signal.

Voir la section Multiplexed Signals Explained pour plus de détails sur les signaux multiplexés.

Par défaut, cette méthode renvoie None.

Voir également setMultiplexState() et QtCanBus::MultiplexState.

QString QCanSignalDescription::name() const

Renvoie le nom du signal.

Voir aussi setName() et isValid().

double QCanSignalDescription::offset() const

Renvoie le décalage utilisé pour convertir la valeur du signal en valeur physique et inversement.

Par défaut, la fonction renvoie qQNaN(), ce qui signifie qu'aucun décalage n'est utilisé.

La section Value Conversions explique comment ce paramètre est utilisé.

Voir également setOffset(), factor() et scaling().

QString QCanSignalDescription::physicalUnit() const

Renvoie l'unité physique (par exemple km/h) de la valeur du signal ou une chaîne vide si l'unité n'est pas définie.

Ce paramètre n'est introduit que pour une description supplémentaire. Il n'est pas utilisé lors du traitement du signal.

Voir aussi setPhysicalUnit().

QString QCanSignalDescription::receiver() const

Renvoie le nœud récepteur de ce signal.

Ce paramètre n'est introduit que pour une description supplémentaire. Il n'est pas utilisé lors du traitement du signal.

Voir aussi setReceiver().

double QCanSignalDescription::scaling() const

Renvoie l'échelle utilisée pour convertir la valeur du signal en valeur physique et inversement.

Par défaut, la fonction renvoie qQNaN(), ce qui signifie que la mise à l'échelle n'est pas utilisée.

La section Value Conversions explique comment ce paramètre est utilisé.

Voir également setScaling(), offset() et factor().

void QCanSignalDescription::setBitLength(quint16 length)

Définit la longueur de bit de la valeur du signal à length.

Voir également bitLength(), startBit() et setStartBit().

void QCanSignalDescription::setComment(const QString &text)

Définit le commentaire du signal à text.

Ce paramètre n'est introduit que pour une description supplémentaire. Il n'est pas utilisé lors du traitement du signal.

Voir aussi comment().

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

Définit l'endian des données de la valeur du signal à endian.

Voir également dataEndian() et QSysInfo::Endian.

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

Définit le format de données de la valeur du signal à format.

Voir également dataFormat() et QtCanBus::DataFormat.

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

Définit la source de données de la valeur du signal à source.

Voir aussi dataSource() et QtCanBus::DataSource.

void QCanSignalDescription::setFactor(double factor)

Définit le facteur utilisé pour convertir la valeur du signal en valeur physique et inversement à factor.

Passez qQNaN() à cette méthode pour ignorer ce paramètre lors de la conversion.

Le facteur ne peut pas être égal à 0. Une tentative de définition d'un facteur nul équivaut à la définition de qQNaN().

La section Value Conversions explique comment ce paramètre est utilisé.

Voir également factor(), setOffset() et setScaling().

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

Fixe la valeur de multiplexor signals pour ce signal à multiplexorSignals.

Le hachage multiplexorSignals doit contenir les noms des signaux en tant que clés et les plages de valeurs souhaitées respectives en tant que valeurs.

Voir aussi multiplexState(), multiplexSignals(), clearMultiplexSignals() et addMultiplexSignal().

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

Définit l'état de multiplexage du signal à state.

Voir la section Multiplexed Signals Explained pour plus de détails sur les signaux multiplexés.

Voir également multiplexState() et QtCanBus::MultiplexState.

void QCanSignalDescription::setName(const QString &name)

Définit le nom du signal à name.

Le nom du signal doit être unique dans un message CAN.

Voir également name().

void QCanSignalDescription::setOffset(double offset)

Définit le décalage utilisé pour convertir la valeur du signal en valeur physique et inversement à offset.

Passez qQNaN() à cette méthode pour ignorer ce paramètre lors de la conversion.

La section Value Conversions explique comment ce paramètre est utilisé.

Voir également offset(), setFactor() et setScaling().

void QCanSignalDescription::setPhysicalUnit(const QString &unit)

Définit la valeur physique unit (par exemple km/h) de la valeur du signal.

Ce paramètre n'est introduit qu'à des fins de description supplémentaire. Il n'est pas utilisé lors du traitement du signal.

Voir également physicalUnit().

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

Définit les paramètres minimum et maximum pour la valeur du signal.

La définition d'un ou des deux paramètres à qQNaN() signifie que la limite correspondante ne sera pas utilisée.

Voir également minimum() et maximum().

void QCanSignalDescription::setReceiver(const QString &receiver)

Définit le nœud receiver pour ce signal.

Ce paramètre n'est introduit qu'à des fins de description supplémentaire. Il n'est pas utilisé lors du traitement du signal.

Voir aussi receiver().

void QCanSignalDescription::setScaling(double scaling)

Définit l'échelle utilisée pour convertir la valeur du signal en valeur physique et inversement à scaling.

Passez qQNaN() à cette méthode pour ignorer ce paramètre lors de la conversion.

L'échelle ne peut pas être égale à 0. Une tentative de mise à zéro de l'échelle équivaut à la mise à qQNaN().

La section Value Conversions explique comment ce paramètre est utilisé.

Voir également scaling(), setOffset() et setFactor().

void QCanSignalDescription::setStartBit(quint16 bit)

Définit le bit de départ de la valeur du signal dans dataSource() à bit.

Voir également startBit(), bitLength() et setBitLength().

quint16 QCanSignalDescription::startBit() const

Renvoie le bit de départ de la valeur du signal dans dataSource().

Voir aussi setStartBit(), bitLength() et setBitLength().

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

Déplacer - assigne les valeurs de other à cette description de signal.

Remarque : l'objet QCanSignalDescription déplacé ne peut être que détruit ou assigné. L'effet de l'appel à d'autres fonctions que le destructeur ou l'un des opérateurs d'affectation n'est pas défini.

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

Attribue les valeurs de other à cette description de signal.

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