QCanSignalDescription 类

QCanSignalDescription 类用于描述从 CAN 帧中提取一个值并在应用程序定义的格式中表示它的规则。更多信息...

头文件 #include <QCanSignalDescription>
CMakefind_package(Qt6 REQUIRED COMPONENTS SerialBus)
target_link_libraries(mytarget PRIVATE Qt6::SerialBus)
qmakeQT += serialbus
Qt 6.5
状态初步的

此类正在开发中,可能会更改。

公共类型

公共函数

QCanSignalDescription()
QCanSignalDescription(const QCanSignalDescription &other)
QCanSignalDescription(QCanSignalDescription &&other)
~QCanSignalDescription()
voidaddMultiplexSignal(const QString &name, const QCanSignalDescription::MultiplexValues &ranges)
voidaddMultiplexSignal(const QString &name, const QVariant &value)
quint16bitLength() const
voidclearMultiplexSignals()
QStringcomment() const
QSysInfo::EndiandataEndian() const
QtCanBus::DataFormatdataFormat() const
QtCanBus::DataSourcedataSource() const
doublefactor() const
boolisValid() const
doublemaximum() const
doubleminimum() const
QCanSignalDescription::MultiplexSignalValuesmultiplexSignals() const
QtCanBus::MultiplexStatemultiplexState() const
QStringname() const
doubleoffset() const
QStringphysicalUnit() const
QStringreceiver() const
doublescaling() const
voidsetBitLength(quint16 length)
voidsetComment(const QString &text)
voidsetDataEndian(QSysInfo::Endian endian)
voidsetDataFormat(QtCanBus::DataFormat format)
voidsetDataSource(QtCanBus::DataSource source)
voidsetFactor(double factor)
voidsetMultiplexSignals(const QCanSignalDescription::MultiplexSignalValues &multiplexorSignals)
voidsetMultiplexState(QtCanBus::MultiplexState state)
voidsetName(const QString &name)
voidsetOffset(double offset)
voidsetPhysicalUnit(const QString &unit)
voidsetRange(double minimum, double maximum)
voidsetReceiver(const QString &receiver)
voidsetScaling(double scaling)
voidsetStartBit(quint16 bit)
quint16startBit() const
QCanSignalDescription &operator=(const QCanSignalDescription &other)
QCanSignalDescription &operator=(QCanSignalDescription &&other)

详细描述

QCanSignalDescription 类可以用于提供信号描述,以后可以用来解析接收到的 QCanBusFrame 或将输入数据编码成可以发送给接收器的 QCanBusFrame

一般描述

每个 CAN 帧可以包含多个值。从 CAN 帧中提取值的规则包括以下内容

  • 数据源(帧 ID 或有效负载)。
  • 数据字节序。有关详细信息,请参阅 数据字节序处理 部分。
  • 数据格式。
  • 起始位位置。
  • 数据长度(以位为单位)。
  • 复用选项。

起始位位置是相对于所选数据源指定的。位从 LSB 开始计数。

提取数据后,可能需要将其转换为应用程序定义的格式。以下参数可用于该过程

  • 将提取的值转换为物理值的各种参数(因子、偏移、缩放)。
  • 预期数据范围。
  • 数据单位。

QCanSignalDescription 类提供了控制所有这些参数的方法。

数据字节序处理

小端字节序和大端字节序的数据编码方式不同。对于大端字节序值,起始位位置是最高有效位。对于小端字节序值,起始位置是最小有效位。

让我们考虑两个示例。在两个示例中,我们将在 3 字节有效负载中编码两个 12 位的值。

小端字节序

对于小端字节序情况,数据布局可以用以下图像表示

在这里,列代表位号,行代表字节号。《LSB》标记值的第一个(最不重要的)位,《MSB》标记值的最后一个(最重要的)位。蓝色标记第一个值,橙色标记第二个值。

这些值的有关信息将按照以下方式编码在 QCanSignalDescription 中

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
大端字节序

以下图像表示了大端字节序情况下的值布局

这些值可以用以下方式在 QCanSignalDescription 中表示

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

注意起始位与小端模式的不同。此外,值的对齐方式也不同。

Multiplexed Signals Explained

CAN有效负载中的数据编码有两种常见方式

  • 每个比特范围的值始终表示相同信号。例如,有效负载中的字节0-1可以表示发动机转速(rpm),字节2-3可以表示车辆速度(km/h)。
  • 相同的比特范围可以表示不同的数据,具体取决于有效负载中其他一些比特的值。例如,如果字节0的值为0,则字节1-2表示发动机转速(rpm),如果字节0的值为1,则相同的字节1-2表示车辆速度(km/h)。

第二种情况使用信号复用。在提供的示例中,我们将有三个信号。第一个信号表示字节0的值,作为复用信号。其他两个信号分别表示发动机转速和车辆速度,但一次只能从CAN有效负载中提取其中一个。应该提取哪个信号由复用信号的值定义。

在更复杂的情况下,有效负载可以有多个复用信号。在这种情况下,只有当所有复用器都包含预期的值时,才能从有效负载中提取信号。

Value Conversions

在许多情况下,通过CAN总线传输的信号无法容纳它们所表示的物理值的全部范围。为了克服这些限制,物理值在传输前转换为较小的范围内,并在接收端恢复。

以下公式用于转换物理值和信号值之间

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

因子和缩放参数不能等于0。

如果任何参数等于qQNaN(),则在转换过程中不会使用它。如果所有参数都等于qQNaN()(这是默认情况),则不执行转换。

成员类型文档

[别名] QCanSignalDescription::MultiplexSignalValues

[别名] QCanSignalDescription::MultiplexValues

成员函数文档

QCanSignalDescription::QCanSignalDescription()

创建一个空的信号描述。

QCanSignalDescription::QCanSignalDescription(const QCanSignalDescription &other)

创建一个信号描述,值从other复制。

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

通过从other移动创建一个信号描述。

注意:从QCanSignalDescription对象移动的QCanSignalDescription对象只能被销毁或赋值。调用除析构函数或赋值运算符之外的其他函数的效果是未定义的。

[noexcept] QCanSignalDescription::~QCanSignalDescription()

销毁此信号描述。

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

为此信号添加一个新的复用信号。参数name包含复用信号名称,参数ranges包含期望的值范围。

如果此信号已经具有复用信号name的期望值范围,则范围将被覆盖。

另请参阅multiplexState(),multiplexSignals(),clearMultiplexSignals() 和 setMultiplexSignals()。

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

这是一个重载函数。

这是当复用信号预期只有一个特定值而不是值范围时的便利重载。

参数name包含复用信号名称,参数value包含期望的值。

如果此信号已经具有复用信号name的期望值范围,则范围将被覆盖。

另请参阅multiplexState(),multiplexSignals(),clearMultiplexSignals() 和 setMultiplexSignals()。

quint16 QCanSignalDescription::bitLength() const

返回信号值的位长度。

另请参阅setBitLength(),startBit() 和 setStartBit()。

void QCanSignalDescription::clearMultiplexSignals()

删除此信号的复用信号

另请参阅multiplexSignals(),setMultiplexSignals() 和 addMultiplexSignal()。

QString QCanSignalDescription::comment() const

返回信号的注释。

此参数仅用于额外描述。在信号处理过程中不使用。

另请参阅setComment()。

QSysInfo::Endian QCanSignalDescription::dataEndian() const

返回信号值的端序。

默认情况下,使用 BigEndian

注意:如果dataFormat() 设置为 AsciiString,将忽略数据端序。

另请参阅setDataEndian() 和 QSysInfo::Endian

QtCanBus::DataFormat QCanSignalDescription::dataFormat() const

返回信号值的格式。

默认情况下,使用SignedInteger

另请参阅 setDataFormat() 和 QtCanBus::DataFormat

QtCanBus::DataSource QCanSignalDescription::dataSource() const

返回信号的值的数据源。

默认情况下,使用 Payload

另请参阅setDataSource() 和 QtCanBus::DataSource

double QCanSignalDescription::factor() const

返回用于将信号值转换为物理值并将其反转换的系数。

默认情况下,函数返回 qQNaN(不是一个数字),表示不使用系数。

有关此参数的使用请参阅 值转换 部分。

另请参阅setFactoroffsetscaling

bool QCanSignalDescription::isValid() const

当信号描述有效时返回 true,否则返回 false

一个有效的信号描述 必须 满足以下条件

另请参阅bitLengthdataFormatname

double QCanSignalDescription::maximum() const

返回信号支持的值中的最大值。

默认情况下,函数返回 qQNaN,表示没有最大值。

另请参阅setRangeminimum

double QCanSignalDescription::minimum() const

返回信号支持的值中的最小值。

默认情况下,函数返回 qQNaN,表示没有最小值。

另请参阅setRangemaximum

QCanSignalDescription::MultiplexSignalValues QCanSignalDescription::multiplexSignals() const

返回用于正确识别此信号的多路复用器信号及其期望值。

返回的哈希表包含信号名称作为键,相应的期望值范围作为值。

只有当哈希表中的所有信号都具有期望的值时,才能从负载中提取此信号值。

另请参阅multiplexStateclearMultiplexSignalssetMultiplexSignalsaddMultiplexSignal

QtCanBus::MultiplexState QCanSignalDescription::multiplexState() const

返回信号的复用状态。

有关复用信号更详细的信息,请参阅复用信号解释部分。

默认情况下,此方法返回None

另请参阅:setMultiplexState() 和 QtCanBus::MultiplexState

QString QCanSignalDescription::name() const

返回信号的名字。

另请参阅:setName() 和 isValid

double QCanSignalDescription::offset() const

返回用于将信号值转换成实际物理值和反向转换的偏移。

默认情况下,该函数返回qQNaN(),表示不使用偏移。

有关此参数的使用请参阅 值转换 部分。

另请参阅:setOffset(),factor() 和 scaling

QString QCanSignalDescription::physicalUnit() const

返回信号值的物理单位(例如 km/h)或一个空字符串(如果未设置单位)。

此参数仅用于额外描述。在信号处理过程中不使用。

另请参阅:setPhysicalUnit

QString QCanSignalDescription::receiver() const

返回此信号的接收节点。

此参数仅用于额外描述。在信号处理过程中不使用。

另请参阅:setReceiver

double QCanSignalDescription::scaling() const

返回用于将信号值转换成实际物理值和反向转换的缩放比例。

默认情况下,该函数返回qQNaN(),表示不使用缩放。

有关此参数的使用请参阅 值转换 部分。

另请参阅:setScaling(),offset() 和 factor

void QCanSignalDescription::setBitLength(quint16 length)

将信号值的比特长度设置为length

另请参阅:bitLengthstartBitsetStartBit

void QCanSignalDescription::setComment(const QString &text)

将信号注释设置为 text

此参数仅用于额外描述。在信号处理过程中不使用。

另请参阅:comment

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

将信号值的字节序设置为 endian

另请参阅:dataEndian() 和 QSysInfo::Endian

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

设置信号值的格式为format

另请参阅dataFormat() 和 QtCanBus::DataFormat

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

设置信号值的来源为source

另请参阅dataSource() 和 QtCanBus::DataSource

void QCanSignalDescription::setFactor(double factor)

设置将信号值转换为物理值并返回的因数为factor

qQNaN()传递给此方法以在转换过程中跳过此参数。

因子不能为0。尝试设置零因子相当于将其设置为qQNaN

有关此参数的使用请参阅 值转换 部分。

另请参阅factor()、setOffset() 和 setScaling

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

将此信号的多路复用器信号设置为multiplexorSignals

multiplexorSignals 哈希必须包含信号名称作为键和相关所需值范围作为值。

另请参阅multiplexState()、multiplexSignals()、clearMultiplexSignals() 和 addMultiplexSignal

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

将信号的复用状态设置为state

有关复用信号更详细的信息,请参阅复用信号解释部分。

另请参阅multiplexState() 和 QtCanBus::MultiplexState

void QCanSignalDescription::setName(const QString &name)

将信号名称设置为name

信号名称必须在CAN消息内部唯一。

另请参阅name

void QCanSignalDescription::setOffset(double offset)

设置将信号值转换为物理值并返回的偏移量为offset

qQNaN()传递给此方法以在转换过程中跳过此参数。

有关此参数的使用请参阅 值转换 部分。

另请参阅offset()、setFactor() 和 setScaling

void QCanSignalDescription::setPhysicalUnit(const QString &unit)

设置信号值的物理unit(例如,km/h)。

此参数仅用于额外描述。在信号处理过程中不使用。

另请参阅physicalUnit

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

设置信号值的最小值最大值

将一个或两个参数设置为qQNaN() 表示不会使用相应的限制。

另请参阅minimum() 和 maximum).

void QCanSignalDescription::setReceiver(const QString &receiver)

设置此信号的接收器节点。

此参数仅用于额外描述。在信号处理过程中不使用。

另请参阅receiver()).

void QCanSignalDescription::setScaling(double scaling)

设置用于将信号值转换为物理值并将值转换回 缩放 的缩放。

qQNaN()传递给此方法以在转换过程中跳过此参数。

缩放不能为0。尝试设置零缩放相当于设置qQNaN()).

有关此参数的使用请参阅 值转换 部分。

另请参阅scaling()、setOffset() 和 setFactor()).

void QCanSignalDescription::setStartBit(quint16 bit)

将信号值的起始位设置在 dataSource() 中的

另请参阅startBit()、bitLength() 和 setBitLength()).

quint16 QCanSignalDescription::startBit() const

返回信号值的起始位在 dataSource() 中。

另请参阅setStartBit()、bitLength() 和 setBitLength()).

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

other 的值赋给此信号描述。

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

other 的值移动赋值给此信号描述。

注意:移除后的 QCanSignalDescription 对象只能被销毁或赋值。调用除了析构函数或赋值运算符之外的其他函数的效果是未定义的。

© 2024 Qt公司。本文件包含的文档贡献是各自所有者的版权。此处提供的文档是根据免费软件基金会发布的版本 1.3 的 GNU自由文档许可证 许可的。Qt及其相关标志是芬兰的 Qt公司及其在全世界其他国家的商标。所有其他商标均为它们各自所有者的财产。