QCanSignalDescription Class
La clase QCanSignalDescription describe las reglas para extraer un valor de la trama CAN y representarlo en un formato definido por la aplicación. Más...
| Cabecera: | #include <QCanSignalDescription> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS SerialBus)target_link_libraries(mytarget PRIVATE Qt6::SerialBus) |
| qmake: | QT += serialbus |
| Desde: | Qt 6.5 |
| Estado: | Preliminar |
Esta clase está en desarrollo y está sujeta a cambios.
Tipos Públicos
(since 6.5) struct | MultiplexValueRange |
| MultiplexSignalValues | |
| MultiplexValues |
Funciones públicas
| 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) |
Descripción Detallada
La clase QCanSignalDescription puede utilizarse para proporcionar una descripción de la señal y utilizarla posteriormente para descodificar un QCanBusFrame recibido o codificar los datos de entrada en un QCanBusFrame que pueda enviarse al receptor.
Descripción general
Cada trama CAN puede contener múltiples valores. Las reglas para extraer los valores de una trama CAN son las siguientes:
- Origen de los datos (ID de trama o carga útil).
- Formato de los datos. Consulte la sección Data Endianness Processing para obtener más detalles.
- Formato de los datos.
- Posición del bit de inicio.
- Longitud de los datos en bits.
- Opciones de multiplexación.
La posición del bit de inicio se especifica en relación con la fuente de datos seleccionada. Los bits se cuentan a partir del LSB.
Una vez extraídos los datos, puede ser necesario convertirlos a un formato definido por la aplicación. Para ello se pueden utilizar los siguientes parámetros:
- Diversos parámetros para convertir el valor extraído a un valor físico (factor, offset, escala).
- Rango de datos esperado.
- Unidades de datos.
La clase QCanSignalDescription proporciona métodos para controlar todos esos parámetros.
Procesamiento de la endogeneidad de los datos
Los datos little endian y big endian se codifican de forma diferente. Para valores big endian, las posiciones de los bits de inicio se dan para el bit más significativo. Para los valores little endian, la posición de inicio es la del bit menos significativo.
Veamos dos ejemplos. En ambos ejemplos codificaremos dos valores de 12 bits en la carga útil de 3 bytes.
Little Endian
Para el caso little endian, la disposición de los datos puede representarse mediante la siguiente imagen:

Aquí las columnas representan números de bits, y las filas números de bytes. LSB marca el primer bit (menos significativo) del valor, y MSB marca el último bit (más significativo) del valor. El color azul marca el primer valor y el naranja el segundo.
La información sobre estos valores se codificará en QCanSignalDescription de la siguiente manera:
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
La siguiente imagen representa la disposición de valores para el caso big endian:

Los valores se pueden representar en QCanSignalDescription de la siguiente manera:
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
Nótese como los bits de inicio son diferentes al caso little endian. También los valores están alineados de forma diferente.
Explicación de las señales multiplexadas
Hay dos formas comunes de codificar los datos en la carga útil CAN:
- Cada rango de bits representa siempre la misma señal. Por ejemplo,
Bytes 0-1en una carga útil puede representar una velocidad del motor (en rpm), yBytes 2-3puede representar la velocidad del vehículo (en km/h). - El mismo rango de bits puede representar datos diferentes, dependiendo de los valores de algunos otros bits de la carga útil. Por ejemplo, si
Byte 0tiene el valor0, elBytes 1-2representa una velocidad del motor (en rpm), y siByte 0tiene el valor1, el mismoBytes 1-2representa una velocidad del vehículo (en km/h).
El segundo caso utiliza la multiplexación de señales. En el ejemplo proporcionado tendremos tres señales. La primera señal representa el valor de Byte 0 y actúa como una señal multiplexora. Las otras dos señales representan una velocidad del motor y una velocidad del vehículo respectivamente, pero sólo una de ellas puede ser extraída de la carga útil CAN a la vez. La señal que debe extraerse viene definida por el valor de la señal multiplexora.
En casos más complicados, la carga útil puede tener múltiples señales multiplexoras. En estos casos, la señal sólo puede extraerse de la carga útil cuando todos los multiplexores contienen los valores esperados.
Conversión de valores
En muchos casos, las señales transferidas a través del bus CAN no pueden contener toda la gama de valores físicos que representan. Para superar estas limitaciones, los valores físicos se convierten a un rango más pequeño antes de la transmisión, y pueden restaurarse en el extremo receptor.
Las siguientes fórmulas se utilizan para convertir entre el valor físico y el valor de la señal:
physicalValue = scaling * (signalValue * factor + offset); signalValue = (physicalValue / scaling - offset) / factor;
El factor y los parámetros de escala no pueden ser iguales a 0.
Si alguno de los parámetros es igual a qQNaN(), no se utiliza durante la conversión. Si todos los parámetros son iguales a qQNaN() (que es el valor por defecto), no se realiza la conversión.
Documentación de tipos de miembros
[alias] QCanSignalDescription::MultiplexSignalValues
[alias] QCanSignalDescription::MultiplexValues
Documentación de las funciones miembro
QCanSignalDescription::QCanSignalDescription()
Crea una descripción de señal vacía.
QCanSignalDescription::QCanSignalDescription(const QCanSignalDescription &other)
Crea una descripción de señal con los valores copiados de other.
[constexpr noexcept] QCanSignalDescription::QCanSignalDescription(QCanSignalDescription &&other)
Crea una descripción de señal movida desde other.
Nota: El objeto QCanSignalDescription movido desde sólo puede ser destruido o asignado. El efecto de llamar a otras funciones que no sean el destructor o uno de los operadores de asignación es indefinido.
[constexpr noexcept] QCanSignalDescription::~QCanSignalDescription()
Destruye la descripción de esta señal.
void QCanSignalDescription::addMultiplexSignal(const QString &name, const QCanSignalDescription::MultiplexValues &ranges)
Añade un nuevo multiplexor signal para esta señal. El parámetro name contiene el nombre de la señal multiplexora, y el parámetro ranges contiene los rangos de valores deseados.
Si esta señal ya tiene rangos de valores deseados para la señal multiplexora name, los rangos se sobrescriben.
Véase también multiplexState(), multiplexSignals(), clearMultiplexSignals() y setMultiplexSignals().
void QCanSignalDescription::addMultiplexSignal(const QString &name, const QVariant &value)
Se trata de una sobrecarga de conveniencia para el caso en que se espera que la señal del multiplexor tenga sólo un valor específico, no un rango de valores.
El parámetro name contiene el nombre de la señal multiplexora, y el parámetro value contiene el valor deseado.
Si esta señal ya tiene rangos de valores deseados para la señal multiplexora name, los rangos se sobrescriben.
Se trata de una función sobrecargada.
Véase también multiplexState(), multiplexSignals(), clearMultiplexSignals() y setMultiplexSignals().
quint16 QCanSignalDescription::bitLength() const
Devuelve la longitud en bits del valor de la señal.
Véase también setBitLength(), startBit() y setStartBit().
void QCanSignalDescription::clearMultiplexSignals()
Elimina todos los multiplexor signals para esta señal.
Véase también multiplexSignals(), setMultiplexSignals() y addMultiplexSignal().
QString QCanSignalDescription::comment() const
Devuelve el comentario de la señal.
Este parámetro se introduce sólo para una descripción extra. No se utiliza durante el procesamiento de la señal.
Véase también setComment().
QSysInfo::Endian QCanSignalDescription::dataEndian() const
Devuelve el endian de los datos del valor de la señal.
Por defecto, se utiliza BigEndian.
Nota: El endian de los datos se ignora si dataFormat() se establece en AsciiString.
Véase también setDataEndian() y QSysInfo::Endian.
QtCanBus::DataFormat QCanSignalDescription::dataFormat() const
Devuelve el formato de datos del valor de la señal.
Por defecto, se utiliza SignedInteger.
Véase también setDataFormat() y QtCanBus::DataFormat.
QtCanBus::DataSource QCanSignalDescription::dataSource() const
Devuelve la fuente de datos del valor de la señal.
Por defecto, se utiliza Payload.
Véase también setDataSource() y QtCanBus::DataSource.
double QCanSignalDescription::factor() const
Devuelve el factor que se utiliza para convertir el valor de la señal en un valor físico y viceversa.
Por defecto, la función devuelve qQNaN(), lo que significa que no se utiliza ningún factor.
En la sección Value Conversions se explica cómo se utiliza este parámetro.
Véase también setFactor(), offset() y scaling().
bool QCanSignalDescription::isValid() const
Devuelve true cuando la descripción de la señal es válida y false en caso contrario.
Una descripción de señal válida debe cumplir las siguientes condiciones:
- tener un name() no vacío
- tener bitLength()
== 32si el dataFormat() es Float - tener bitLength()
== 64si el dataFormat() es Double - el bitLength() debe ser múltiplo de
8si el dataFormat() es AsciiString - el bitLength() debe ser mayor que
0y menor o igual que64.
Véase también bitLength(), dataFormat() y name().
double QCanSignalDescription::maximum() const
Devuelve el valor máximo admitido para la señal.
Por defecto, la función devuelve qQNaN(), lo que significa que no hay valor máximo.
Véase también setRange() y minimum().
double QCanSignalDescription::minimum() const
Devuelve el valor mínimo admitido para la señal.
Por defecto, la función devuelve qQNaN(), lo que significa que no hay valor mínimo.
Véase también setRange() y maximum().
QCanSignalDescription::MultiplexSignalValues QCanSignalDescription::multiplexSignals() const
Devuelve los multiplexor signals y sus valores deseados que se utilizan para identificar correctamente esta señal.
El hash devuelto contiene los nombres de las señales como claves y los respectivos rangos de valores deseados como valores.
El valor de esta señal sólo puede extraerse de la carga útil cuando todas las señales del hash tienen los valores esperados.
Véase también multiplexState(), clearMultiplexSignals(), setMultiplexSignals() y addMultiplexSignal().
QtCanBus::MultiplexState QCanSignalDescription::multiplexState() const
Devuelve el estado multiplexado de la señal.
Consulte la sección Multiplexed Signals Explained para obtener más detalles sobre las señales multiplexadas.
Por defecto, este método devuelve None.
Véase también setMultiplexState() y QtCanBus::MultiplexState.
QString QCanSignalDescription::name() const
Devuelve el nombre de la señal.
Véase también setName() y isValid().
double QCanSignalDescription::offset() const
Devuelve el desplazamiento que se utiliza para convertir el valor de la señal en un valor físico y viceversa.
Por defecto, la función devuelve qQNaN(), lo que significa que no se utiliza un offset.
En la sección Value Conversions se explica cómo se utiliza este parámetro.
Véase también setOffset(), factor() y scaling().
QString QCanSignalDescription::physicalUnit() const
Devuelve la unidad física (por ejemplo, km/h) del valor de la señal o una cadena vacía si no se ha establecido la unidad.
Este parámetro se introduce sólo como descripción adicional. No se utiliza durante el procesamiento de la señal.
Véase también setPhysicalUnit().
QString QCanSignalDescription::receiver() const
Devuelve el nodo receptor de esta señal.
Este parámetro se introduce sólo como descripción adicional. No se utiliza durante el procesamiento de la señal.
Véase también setReceiver().
double QCanSignalDescription::scaling() const
Devuelve la escala que se utiliza para convertir el valor de la señal en un valor físico y viceversa.
Por defecto, la función devuelve qQNaN(), lo que significa que no se utiliza el escalado.
En la sección Value Conversions se explica cómo se utiliza este parámetro.
Véase también setScaling(), offset() y factor().
void QCanSignalDescription::setBitLength(quint16 length)
Establece la longitud en bits del valor de la señal en length.
Véase también bitLength(), startBit() y setStartBit().
void QCanSignalDescription::setComment(const QString &text)
Establece el comentario de la señal en text.
Este parámetro se introduce sólo para una descripción adicional. No se utiliza durante el procesamiento de la señal.
Véase también comment().
void QCanSignalDescription::setDataEndian(QSysInfo::Endian endian)
Establece el endian de los datos del valor de la señal a endian.
Véase también dataEndian() y QSysInfo::Endian.
void QCanSignalDescription::setDataFormat(QtCanBus::DataFormat format)
Establece el formato de datos del valor de la señal en format.
Véase también dataFormat() y QtCanBus::DataFormat.
void QCanSignalDescription::setDataSource(QtCanBus::DataSource source)
Establece la fuente de datos del valor de la señal en source.
Véase también dataSource() y QtCanBus::DataSource.
void QCanSignalDescription::setFactor(double factor)
Establece el factor que se utiliza para convertir el valor de la señal a un valor físico y de nuevo a factor.
Pase qQNaN() a este método para omitir este parámetro durante la conversión.
El factor no puede ser 0. Un intento de establecer un factor cero equivale a establecerlo en qQNaN().
En la sección Value Conversions se explica cómo se utiliza este parámetro.
Véase también factor(), setOffset() y setScaling().
void QCanSignalDescription::setMultiplexSignals(const QCanSignalDescription::MultiplexSignalValues &multiplexorSignals)
Establece multiplexor signals para esta señal en multiplexorSignals.
El hash multiplexorSignals debe contener los nombres de las señales como claves y los respectivos rangos de valores deseados como valores.
Véase también multiplexState(), multiplexSignals(), clearMultiplexSignals() y addMultiplexSignal().
void QCanSignalDescription::setMultiplexState(QtCanBus::MultiplexState state)
Establece el estado multiplexado de la señal en state.
Consulte la sección Multiplexed Signals Explained para obtener más detalles sobre las señales multiplexadas.
Véase también multiplexState() y QtCanBus::MultiplexState.
void QCanSignalDescription::setName(const QString &name)
Establece el nombre de la señal en name.
El nombre de la señal debe ser único dentro de un mensaje CAN.
Véase también name().
void QCanSignalDescription::setOffset(double offset)
Establece el desplazamiento que se utiliza para convertir el valor de la señal a un valor físico y de nuevo a offset.
Pase qQNaN() a este método para omitir este parámetro durante la conversión.
La sección Value Conversions explica cómo se utiliza este parámetro.
Véase también offset(), setFactor(), y setScaling().
void QCanSignalDescription::setPhysicalUnit(const QString &unit)
Establece la dirección física unit (por ejemplo, km/h) del valor de la señal.
Este parámetro se introduce sólo como descripción adicional. No se utiliza durante el procesamiento de la señal.
Véase también physicalUnit().
void QCanSignalDescription::setRange(double minimum, double maximum)
Establece minimum y maximum para el valor de la señal.
Establecer uno o ambos parámetros en qQNaN() significa que no se utilizará el límite correspondiente.
Véase también minimum() y maximum().
void QCanSignalDescription::setReceiver(const QString &receiver)
Establece el nodo receiver para esta señal.
Este parámetro se introduce sólo como descripción adicional. No se utiliza durante el procesamiento de la señal.
Véase también receiver().
void QCanSignalDescription::setScaling(double scaling)
Establece la escala que se utiliza para convertir el valor de la señal a un valor físico y de nuevo a scaling.
Pase qQNaN() a este método para omitir este parámetro durante la conversión.
El escalado no puede ser 0. Un intento de establecer un escalado cero equivale a establecerlo en qQNaN().
En la sección Value Conversions se explica cómo se utiliza este parámetro.
Véase también scaling(), setOffset() y setFactor().
void QCanSignalDescription::setStartBit(quint16 bit)
Establece el bit de inicio del valor de la señal en dataSource() a bit.
Véase también startBit(), bitLength(), y setBitLength().
quint16 QCanSignalDescription::startBit() const
Devuelve el bit de inicio del valor de la señal en dataSource().
Véase también setStartBit(), bitLength() y setBitLength().
[noexcept] QCanSignalDescription &QCanSignalDescription::operator=(QCanSignalDescription &&other)
Mover-asigna los valores de other a esta descripción de señal.
Nota: El objeto movido desde QCanSignalDescription sólo puede ser destruido o asignado. El efecto de llamar a otras funciones que no sean el destructor o uno de los operadores de asignación es indefinido.
QCanSignalDescription &QCanSignalDescription::operator=(const QCanSignalDescription &other)
Asigna los valores de other a esta descripción de señal.
© 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.