En esta página

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

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-1 en una carga útil puede representar una velocidad del motor (en rpm), y Bytes 2-3 puede 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 0 tiene el valor 0, el Bytes 1-2 representa una velocidad del motor (en rpm), y si Byte 0 tiene el valor 1, el mismo Bytes 1-2 representa 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:

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.