QCanSignalDescription 类
QCanSignalDescription 类用于描述从 CAN 帧中提取一个值并在应用程序定义的格式中表示它的规则。更多信息...
头文件 | #include <QCanSignalDescription> |
CMake | find_package(Qt6 REQUIRED COMPONENTS SerialBus) target_link_libraries(mytarget PRIVATE Qt6::SerialBus) |
qmake | QT += serialbus |
自 | Qt 6.5 |
状态 | 初步的 |
此类正在开发中,可能会更改。
公共类型
(自 6.5) struct | MultiplexValueRange |
MultiplexSignalValues | |
MultiplexValues |
公共函数
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=(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(不是一个数字),表示不使用系数。
有关此参数的使用请参阅 值转换 部分。
另请参阅setFactor,offset 和 scaling。
bool QCanSignalDescription::isValid() const
当信号描述有效时返回 true
,否则返回 false
。
一个有效的信号描述 必须 满足以下条件
- 有一个非空的 name()
- 如果 dataFormat() 是 Float,则 bitLength() 应等于
32
- 如果 dataFormat() 是 Double,则 bitLength() 应等于
64
- 如果 dataFormat() 是 AsciiString,则 bitLength() 必须是
8
的倍数 - bitLength() 必须大于
0
并小于或等于64
另请参阅bitLength,dataFormat 和 name。
double QCanSignalDescription::maximum() const
返回信号支持的值中的最大值。
默认情况下,函数返回 qQNaN,表示没有最大值。
double QCanSignalDescription::minimum() const
返回信号支持的值中的最小值。
默认情况下,函数返回 qQNaN,表示没有最小值。
QCanSignalDescription::MultiplexSignalValues QCanSignalDescription::multiplexSignals() const
返回用于正确识别此信号的多路复用器信号及其期望值。
返回的哈希表包含信号名称作为键,相应的期望值范围作为值。
只有当哈希表中的所有信号都具有期望的值时,才能从负载中提取此信号值。
另请参阅multiplexState,clearMultiplexSignals,setMultiplexSignals 和 addMultiplexSignal。
QtCanBus::MultiplexState QCanSignalDescription::multiplexState() const
返回信号的复用状态。
有关复用信号更详细的信息,请参阅复用信号解释部分。
默认情况下,此方法返回None。
另请参阅:setMultiplexState() 和 QtCanBus::MultiplexState。
QString QCanSignalDescription::name() const
返回信号的名字。
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。
另请参阅:bitLength,startBit 和 setStartBit。
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() 表示不会使用相应的限制。
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公司及其在全世界其他国家的商标。所有其他商标均为它们各自所有者的财产。