QCanDbcFileParser 类

The QCanDbcFileParser class can be used to parse DBC files. More...

头文件 #include <QCanDbcFileParser>
CMakefind_package(Qt6 REQUIRED COMPONENTS SerialBus)
target_link_libraries(mytarget PRIVATE Qt6::SerialBus)
qmakeQT += serialbus
SinceQt 6.5
StatusPreliminary

This class is under development and is subject to change.

Public Types

enum classError { None, FileReading, Parsing }
MessageValueDescriptions
SignalValueDescriptions
ValueDescriptions

Public Functions

QCanDbcFileParser()
~QCanDbcFileParser()
QCanDbcFileParser::Errorerror() const
QStringerrorString() const
QList<QCanMessageDescription>messageDescriptions() const
QCanDbcFileParser::MessageValueDescriptionsmessageValueDescriptions() const
boolparse(const QString &fileName)
boolparse(const QStringList &fileNames)
(since 6.7) boolparseData(QStringView data)
QStringListwarnings() const

Static Public Members

QCanUniqueIdDescriptionuniqueIdDescription()

详细说明

A CAN database or CAN DBC file is an ASCII text file that contains information on how to decode and interpret raw CAN bus data. Some more details about the format can be found here or here.

The QCanDbcFileParser class takes the input DBC file, parses it, and provides a list of QCanMessageDescriptionQCanFrameProcessor, and later used as rules to encode or decode QCanBusFrames.

Use one of parse() overloads to specify a file or a list of files that will be processed. Both overloads return true if the parsing completes successfully and false otherwise.

调用 error() 方法,获取在解析过程中产生的错误。如果解析成功完成,此方法将返回 None。否则,你可以使用 errorString() 方法获取错误字符串表示形式。

在解析过程中可能会出现一些非关键问题。这些问题将被记录,但解析过程不会中断。你可以使用 warnings() 方法在解析完成后获取这些问题列表。

如果解析成功完成,调用 messageDescriptions() 获取上一次 parse() 调用中提取的消息描述的列表。调用 messageValueDescriptions() 获取信号原始值的文本描述,如果它们存在。

使用静态的 uniqueIdDescription() 函数获取DBC格式的 QCanUniqueIdDescription

QCanDbcFileParser fileParser;
const bool result = fileParser.parse(u"path/to/file.dbc"_s);
// Check result, call error() and warnings() if needed

// Prepare a QCanFrameProcessor to decode or encode DBC frames
QCanFrameProcessor frameProcessor;
frameProcessor.setUniqueIdDescription(QCanDbcFileParser::uniqueIdDescription());
frameProcessor.setMessageDescriptions(fileParser.messageDescriptions());

注意:解析器是状态的,这意味着所有结果(如提取的消息描述、错误代码或警告)在下次解析开始时都会重置。

支持的关键字

当前实现仅支持在DBC文件中找到的关键字子集

  • BO_ - 消息描述。
  • SG_ - 信号描述。
  • SIG_VALTYPE_ - 信号类型描述。
  • SG_MUL_VAL_ - 扩展多路复用描述。
  • CM_ - 注释(仅限消息和信号描述)。
  • VAL_ - 原始信号值的文本描述。

以其他关键字开始的行将被简单地忽略。

另请参阅QCanMessageDescriptionQCanFrameProcessor

成员类型文档

枚举类 QCanDbcFileParser::Error

此枚举表示在解析DBC文件过程中可能发生的错误。

常量描述
QCanDbcFileParser::Error::None0未发生错误。
QCanDbcFileParser::Error::FileReading1在打开或读取文件时发生错误。
QCanDbcFileParser::Error::Parsing2在解析文件内容时发生错误。

[别名] QCanDbcFileParser::MessageValueDescriptions

这是 QHash<QtCanBus::UniqueId, SignalValueDescriptions> 的别名。

哈希表的键代表消息唯一ID,而哈希表的值包含相应的 QCanDbcFileParser::SignalValueDescriptions 条目。

另请参阅QCanDbcFileParser::SignalValueDescriptions

[别名] QCanDbcFileParser::SignalValueDescriptions

这是 QHash<QString, ValueDescriptions> 的别名。

哈希表的键代表信号名称,而哈希表的值包含相应的 QCanDbcFileParser::ValueDescriptions 条目。

另请参阅QCanDbcFileParser::ValueDescriptions

[别名] QCanDbcFileParser::ValueDescriptions

这是 QHash<quint32, QString> 的别名。

哈希表的键代表原始信号值,而哈希表的值代表对应的字符串描述。

成员函数文档

QCanDbcFileParser::QCanDbcFileParser()

构建DBC文件解析器。

[noexcept] QCanDbcFileParser::~QCanDbcFileParser()

销毁此DBC文件解析器。

QCanDbcFileParser::Error QCanDbcFileParser::error() const

返回在解析过程中发生的最后一个错误。

另请参阅errorString() 和 parse()。

QString QCanDbcFileParser::errorString() const

返回在解析过程中发生的最后一个错误的文本表示形式,如果没有错误,则返回空字符串。

另请参阅error()。

QList<QCanMessageDescription> QCanDbcFileParser::messageDescriptions() const

返回在最近一次 parse() 调用期间提取的消息描述列表。

另请参阅parse() 和 error()。

QCanDbcFileParser::MessageValueDescriptions QCanDbcFileParser::messageValueDescriptions() const

返回信号原始值的文本描述。

DBC支持对信号原始值提供文本描述的功能。如果解析的DBC文件中存在此类数据,可以使用此函数访问它。

文本描述对一个特定信号在其特定消息内的唯一性,因此返回的结构包含关于消息唯一ID和信号名称的信息,以及实际值描述。

另请参阅QCanDbcFileParser::MessageValueDescriptionsQCanDbcFileParser::SignalValueDescriptionsQCanDbcFileParser::ValueDescriptions

bool QCanDbcFileParser::parse(const QString &fileName)

解析文件 fileName。如果解析成功,则返回 true,否则返回 false

如果解析成功,请调用 messageDescriptions() 方法以获取所有提取的消息描述列表。

如果解析失败,请调用 error() 和 errorString() 方法以获取有关错误的信息。

调用 warnings() 方法以获取解析期间记录的警告列表。

注意:此方法期望文件内容使用UTF-8编码。如果文件具有不同的编码,则首先对其进行解码,并使用 parseData() 提取DBC信息。

另请参阅messageDescriptionserrorwarningsparseData

bool QCanDbcFileParser::parse(const QStringList &fileNames)

这是一个重载函数。

解析文件列表 fileNames。如果解析成功,则返回 true,否则返回 false

如果解析成功,请调用 messageDescriptions() 方法以获取所有提取的消息描述列表。

解析在遇到第一个错误时停止。通过调用 error() 和 errorString() 方法来获取有关错误的详细信息。

调用 warnings() 方法以获取解析期间记录的警告列表。

注意:此方法期望文件内容使用UTF-8编码。如果文件具有不同的编码,则首先对其进行解码,并使用 parseData() 提取DBC信息。

另请参阅messageDescriptionserrorwarningsparseData

[since 6.7] bool QCanDbcFileParser::parseData(QStringView data)

解析输入数据 data,如果解析成功则返回 true,否则返回 false

如果解析成功,请调用 messageDescriptions() 方法以获取所有提取的消息描述列表。

如果解析失败,请调用 error() 和 errorString() 方法以获取有关错误的信息。

调用 warnings() 方法以获取解析期间记录的警告列表。

此方法期望 data 是一个有效的DBC文件内容,已正确转换为 QStringView

当输入文件的编码不同于UTF-8时使用此方法。

// Read the data from a DBC file with custom encoding
const QByteArray initialData = ...;
// Convert to UTF-16 using QStringDecoder or some other way
const QString decodedData = ...;
QCanDbcFileParser parser;
const bool result = parser.parseData(decodedData);

此函数是在Qt 6.7中引入的。

另请参阅messageDescriptionserrorwarnings,和 parse

[静态] QCanUniqueIdDescription QCanDbcFileParser::uniqueIdDescription()

返回唯一标识符描述。DBC协议始终使用帧ID作为标识符,因此唯一标识符描述始终相同。

使用此方法获取 QCanUniqueIdDescription 的实例并将其传递给 QCanFrameProcessor

另请参阅 QCanFrameProcessor::setUniqueIdDescription

QStringList QCanDbcFileParser::warnings() const

返回在解析过程中发生的非关键问题的列表。

典型的问题可能是不正确的消息或信号描述。在这种情况下,不正确的消息或信号会被跳过,但文件的其余部分可以像通常一样进行处理。

另请参阅 errorparse

© 2024 Qt公司有限公司。包括在此处的文档贡献是各自所有者的版权。本文件提供的文档受GNU自由文档许可证版本1.3的条款许可,该许可证由自由软件基金会发布。Qt及其相关标志是芬兰的和/或其他国家的Qt公司 Limited的商标。所有其他商标均为各自所有者的财产。