本页内容

QCanFrameProcessor Class

QCanFrameProcessor 类可用于解码QCanBusFrame ,或将输入数据转换为QCanBusFrame ,以便直接发送给接收方。更多内容...

头文件: #include <QCanFrameProcessor>
CMake: find_package(Qt6 REQUIRED COMPONENTS SerialBus)
target_link_libraries(mytarget PRIVATE Qt6::SerialBus)
qmake: QT += serialbus
自: Qt 6.5
状态: 技术预览

该类处于技术预览阶段,内容可能会有变动。

公共类型

(since 6.5) struct ParseResult
enum class Error { None, InvalidFrame, UnsupportedFrameFormat, Decoding, Encoding }

公共函数

QCanFrameProcessor()
~QCanFrameProcessor()
void addMessageDescriptions(const QList<QCanMessageDescription> &descriptions)
void clearMessageDescriptions()
QCanFrameProcessor::Error error() const
QString errorString() const
QList<QCanMessageDescription> messageDescriptions() const
QCanFrameProcessor::ParseResult parseFrame(const QCanBusFrame &frame)
QCanBusFrame prepareFrame(QtCanBus::UniqueId uniqueId, const QVariantMap &signalValues)
void setMessageDescriptions(const QList<QCanMessageDescription> &descriptions)
void setUniqueIdDescription(const QCanUniqueIdDescription &description)
QCanUniqueIdDescription uniqueIdDescription() const
QStringList warnings() const

详细说明

QCanFrameProcessor 类对 CAN 消息描述(由QCanMessageDescription 和QCanSignalDescription 类表示)以及唯一标识符描述(由QCanUniqueIdDescription 表示)进行处理。它利用这些描述来解码传入的QCanBusFrame ,或将用户指定的数据编码为正确的有效载荷。

在进行任何解码或编码操作之前,必须正确初始化 QCanFrameProcessor 实例。需要提供以下数据:

  • 一个valid 唯一标识符描述。请使用setUniqueIdDescription() 方法提供正确的描述。
  • 至少一个消息描述。请使用addMessageDescriptions()或setMessageDescriptions()方法提供消息描述。所有消息描述必须具有不同的唯一标识符。每条消息可以包含多个信号描述,但同一消息内的信号名称也必须是唯一的。

可使用parseFrame() 方法处理传入的QCanBusFrame 。该方法返回一个ParseResult 结构,其中包含unique identifier 以及signal values 映射。该映射的键为signal names ,值则为信号值。

prepareFrame() 方法可用于根据提供的信号名称和期望值,针对特定的唯一标识符生成一个QCanBusFrame 对象。

在编码或解码过程中可能会发生错误。在这种情况下,可以使用error() 和errorString() 方法获取有关错误的信息。

此外,还可能出现一些非关键性问题。此类问题会被记录到日志中,但不会中断当前进程。进程完成后,可使用warnings() 方法获取所有警告的列表。

注意: 一旦开始解码或编码,最近的错误 及其描述,以及警告信息都会被重置。

另请参阅 QCanMessageDescription 和QCanSignalDescription 。

成员类型文档

enum class QCanFrameProcessor::Error

此枚举表示在对QCanBusFrame 进行编码或解码时可能发生的错误。

常量值描述
QCanFrameProcessor::Error::None0未发生错误。
QCanFrameProcessor::Error::InvalidFrame1接收到的帧无效,无法解析。
QCanFrameProcessor::Error::UnsupportedFrameFormat2接收到的帧格式不受支持,无法解析。
QCanFrameProcessor::Error::Decoding3解码过程中发生错误。请使用 `errorString()` 获取该错误的字符串表示形式。
QCanFrameProcessor::Error::Encoding4编码过程中发生错误。请使用errorString()获取该错误的字符串表示形式。

成员函数文档

QCanFrameProcessor::QCanFrameProcessor()

创建一个 CAN 帧处理器。

[noexcept] QCanFrameProcessor::~QCanFrameProcessor()

销毁此帧处理器。

void QCanFrameProcessor::addMessageDescriptions(const QList<QCanMessageDescription> &descriptions)

将新的消息描述descriptions 添加到可用消息描述中。

所有消息描述都应具有不同的唯一 ID。

如果某些消息描述的唯一 ID 重复,则仅使用最后一条描述。

如果解析器中已有唯一 ID 相同的消息描述,则会将其覆盖。

另请参阅 messageDescriptions()、setMessageDescriptions() 和clearMessageDescriptions()。

void QCanFrameProcessor::clearMessageDescriptions()

删除该帧处理器所有消息描述。

另请参阅 messageDescriptions()、addMessageDescriptions() 和setMessageDescriptions()。

QCanFrameProcessor::Error QCanFrameProcessor::error() const

返回最后一个错误。

另请参阅 errorString()、prepareFrame(),以及parseFrame()。

QString QCanFrameProcessor::errorString() const

返回最后一次错误的文本描述。

另请参阅 error()、prepareFrame()、以及parseFrame()。

QList<QCanMessageDescription> QCanFrameProcessor::messageDescriptions() const

返回该帧处理器当前使用的所有消息描述。

另请参阅 addMessageDescriptions()、setMessageDescriptions() 和clearMessageDescriptions()。

QCanFrameProcessor::ParseResult QCanFrameProcessor::parseFrame(const QCanBusFrame &frame)

使用指定的消息描述解析帧frame 。

解析过程如下:

  1. 使用uniqueIdDescription() 提取消息的唯一标识符。
  2. 利用提取到的唯一标识符,从所有可用的messageDescriptions()列表中搜索合适的QCanMessageDescription 。
  3. 使用匹配的QCanMessageDescription 从帧中提取信号值。

该方法返回一个QCanFrameProcessor::ParseResult ,其中既包含提取的唯一标识符,也包含一个QVariantMap ,其中包含信号及其值。该映射的键是signal names ,值是信号值。

如果解码过程中发生错误,则返回一个signalValues 为空的结果。在这种情况下,可以使用error()和errorString()方法获取有关错误的信息。

注意:调用 此方法将清除所有先前的错误和警告。

另请参阅 addMessageDescriptions()、error()、errorString() 和warnings()。

QCanBusFrame QCanFrameProcessor::prepareFrame(QtCanBus::UniqueId uniqueId, const QVariantMap &signalValues)

使用uniqueId 和signalValues 构建一个CAN数据框,并返回构建好的QCanBusFrame 。

signalValues 参数必须包含信号名称作为键,以及预期的信号值作为值。

创建数据框的过程如下:

  1. 使用uniqueId 查找合适的消息描述。
  2. 如果找到了消息描述,则会创建一个有效载荷大小为指定值的QCanBusFrame 。有效载荷中的所有字节以及帧 ID 均被初始化为零。
  3. 使用 `uniqueIdDescription()` 将 `uniqueId ` 编码到帧的相应部分(帧标识符或有效载荷)。
  4. 选定的消息描述用于将所有signalValues 编码到帧中。
  5. 帧中未被唯一标识符或现有信号描述所涵盖的部分保持不变(因此仍包含零)。

如果在编码过程中发生错误,则返回一个无效的QCanBusFrame 。在这种情况下,可以使用error() 和errorString() 方法来获取有关错误的信息。

注意:调用 此方法将清除所有先前的错误和警告。

另请参阅 addMessageDescriptions()、error()、errorString() 和warnings()。

void QCanFrameProcessor::setMessageDescriptions(const QList<QCanMessageDescription> &descriptions)

将该帧处理器当前使用的消息描述替换为新的消息描述descriptions 。

另请参阅 messageDescriptions()、addMessageDescriptions() 和clearMessageDescriptions()。

void QCanFrameProcessor::setUniqueIdDescription(const QCanUniqueIdDescription &description)

将唯一标识符的描述设置为description 。

唯一标识符描述必须有效,才能对 CAN 总线帧进行编码或解码。更多详细信息,请参阅QCanUniqueIdDescription 类的文档。

另请参阅 uniqueIdDescription() 和QCanUniqueIdDescription 。

QCanUniqueIdDescription QCanFrameProcessor::uniqueIdDescription() const

返回唯一标识符的描述。

该唯一标识符描述必须有效,才能对 CAN 总线帧进行编码或解码。更多详细信息,请参阅QCanUniqueIdDescription 类的文档。

另请参阅 setUniqueIdDescription() 和QCanUniqueIdDescription 。

QStringList QCanFrameProcessor::warnings() const

返回上次编码或解码调用期间生成的警告列表。

另请参阅 error()、errorString()、prepareFrame() 和parseFrame()。

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