QCanBusFrame Class

QCanBusFrame 是一个表示单个 CAN 框架的容器类。更多

头文件: #include <QCanBusFrame>
CMake.QCanBusFrame find_package(Qt6 REQUIRED COMPONENTS SerialBus)
target_link_libraries(mytarget PRIVATE Qt6::SerialBus)
qmake: QT += serialbus

公共类型

class TimeStamp
enum FrameError { NoError, TransmissionTimeoutError, LostArbitrationError, ControllerError, ProtocolViolationError, …, AnyError }
flags FrameErrors
FrameId
enum FrameType { UnknownFrame, DataFrame, ErrorFrame, RemoteRequestFrame, InvalidFrame }

公共函数

QCanBusFrame(QCanBusFrame::FrameType type = DataFrame)
QCanBusFrame(QCanBusFrame::FrameId identifier, const QByteArray &data)
QCanBusFrame::FrameErrors error() const
QCanBusFrame::FrameId frameId() const
QCanBusFrame::FrameType frameType() const
bool hasBitrateSwitch() const
bool hasErrorStateIndicator() const
bool hasExtendedFrameFormat() const
bool hasFlexibleDataRateFormat() const
bool hasLocalEcho() const
bool isValid() const
QByteArray payload() const
void setBitrateSwitch(bool bitrateSwitch)
void setError(QCanBusFrame::FrameErrors error)
void setErrorStateIndicator(bool errorStateIndicator)
void setExtendedFrameFormat(bool isExtended)
void setFlexibleDataRateFormat(bool isFlexibleData)
void setFrameId(QCanBusFrame::FrameId newFrameId)
void setFrameType(QCanBusFrame::FrameType newType)
void setLocalEcho(bool echo)
void setPayload(const QByteArray &data)
void setTimeStamp(QCanBusFrame::TimeStamp ts)
QCanBusFrame::TimeStamp timeStamp() const
QString toString() const
QDataStream &operator<<(QDataStream &out, const QCanBusFrame &frame)
QDataStream &operator>>(QDataStream &in, QCanBusFrame &frame)

详细说明

QCanBusDevice 可使用 QCanBusFrame 进行读写操作。它包含帧标识符和数据有效载荷。QCanBusFrame 包含读取时的时间戳。

另请参阅 QCanBusFrame::FrameId,QCanBusFrame::TimeStamp, 和payload() 。

成员类型文档

枚举 QCanBusFrame::FrameError
flags QCanBusFrame::FrameErrors

该枚举描述了可能的错误类型。

常量说明
QCanBusFrame::NoError0未发生错误。
QCanBusFrame::TransmissionTimeoutError(1 << 0)传输超时。
QCanBusFrame::LostArbitrationError(1 << 1)由于总线上的仲裁丢失,帧无法发送。
QCanBusFrame::ControllerError(1 << 2)控制器遇到错误。
QCanBusFrame::ProtocolViolationError(1 << 3)违反协议。
QCanBusFrame::TransceiverError(1 << 4)收发器出错
QCanBusFrame::MissingAcknowledgmentError(1 << 5)传输未收到确认。
QCanBusFrame::BusOffError(1 << 6)CAN 总线脱机。
QCanBusFrame::BusError(1 << 7)CAN 总线出错。
QCanBusFrame::ControllerRestartError(1 << 8)控制器重新启动。
QCanBusFrame::UnknownError(1 << 9)发生未知错误。
QCanBusFrame::AnyError0x1FFFFFFFU与所有其他错误类型匹配。

FrameErrors 类型是QFlags<FrameError> 的类型定义。它存储 FrameError 值的 OR 组合。

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

[alias] QCanBusFrame::FrameId

CAN 总线帧标识符的独特类型,有 11 位或 29 位。

另请参见 frameId() 和setFrameId()。

enum QCanBusFrame::FrameType

该枚举描述 CAN 帧的类型。

常量描述
QCanBusFrame::UnknownFrame0x0帧类型未知。
QCanBusFrame::DataFrame0x1该值表示数据帧。
QCanBusFrame::ErrorFrame0x2该值表示错误帧。
QCanBusFrame::RemoteRequestFrame0x3该值代表远程请求。
QCanBusFrame::InvalidFrame0x4该值代表无效帧。该类型用于错误报告。

另请参阅 frameType() 和setFrameType()。

成员函数文档

[explicit noexcept] QCanBusFrame::QCanBusFrame(QCanBusFrame::FrameType type = DataFrame)

构建一个指定type 的 CAN 帧。

另请参阅 QCanBusFrame::FrameTypesetFrameType() 。

[explicit] QCanBusFrame::QCanBusFrame(QCanBusFrame::FrameId identifier, const QByteArray &data)

使用identifier 作为帧标识符,data 作为有效载荷,构建 CAN 帧。

另请参阅 QCanBusFrame::FrameId

[constexpr noexcept] QCanBusFrame::FrameErrors QCanBusFrame::error() const

返回当前错误帧的错误信息。如果该帧不是ErrorFrame ,则该函数返回NoError

另请参阅 QCanBusFrame::FrameErrorsetError()。

[constexpr noexcept] QCanBusFrame::FrameId QCanBusFrame::frameId() const

返回 CAN 帧标识符。如果 CAN 帧使用扩展帧格式,标识符最多为 29 位;否则为 11 位。

如果帧是ErrorFrame 类型,则该标识符始终为 0。

另请参阅 QCanBusFrame::FrameId,setFrameId() 和hasExtendedFrameFormat()。

[constexpr noexcept] QCanBusFrame::FrameType QCanBusFrame::frameType() const

返回框架的类型。

另请参阅 QCanBusFrame::FrameTypesetFrameType()。

[constexpr noexcept] bool QCanBusFrame::hasBitrateSwitch() const

如果 CAN 使用带比特率切换灵活数据速率(Flexible Data-RatewithBitrate Switch),以较高的数据比特率传输有效载荷数据,则返回true

另请参阅 setBitrateSwitch() 和QCanBusDevice::DataBitRateKey

[constexpr noexcept] bool QCanBusFrame::hasErrorStateIndicator() const

如果 CAN 使用灵活数据速率,并设置了错误状态指示器,则返回true

该标志由发送器的 CAN FD 硬件设置,用于指示发送器的错误状态。

另请参见 setErrorStateIndicator()。

[constexpr noexcept] bool QCanBusFrame::hasExtendedFrameFormat() const

如果 CAN 帧使用 29 位标识符,则返回true ;否则返回false ,表示使用 11 位标识符。

另请参见 setExtendedFrameFormat() 和frameId()。

[constexpr noexcept] bool QCanBusFrame::hasFlexibleDataRateFormat() const

如果 CAN 帧使用允许多达 64数据字节的"灵活数据速率"(Flexible Data-Rate),则返回true ,否则返回false ,这意味着有效载荷最多为 8 字节。

另请参见 setFlexibleDataRateFormat() 和payload()。

[constexpr noexcept] bool QCanBusFrame::hasLocalEcho() const

如果该帧是本地回音帧,即当相同内容的帧成功发送到 CAN 总线时,作为回音接收的帧,则返回true 。对于应用程序自身发送的帧以及同一系统中运行的其他应用程序发送的帧,都会设置该标志。

QCanBusDevice::ReceiveOwnKey 必须设置为 true 才能接收回声帧。

另请参阅 setLocalEcho(),QCanBusDevice::ReceiveOwnKey, 和QCanBusDevice::LoopbackKey

[noexcept] bool QCanBusFrame::isValid() const

如果frameType() 为InvalidFrame ,则返回false ;如果frameId() 长度超过 11 位,则不设置hasExtendedFrameFormat() ;如果启用了 "灵活数据速率"模式,则有效载荷长度超过最大允许有效载荷长度 64 字节;如果禁用了 "灵活数据速率"模式,则有效载荷长度为 8 字节。如果frameType() 是RemoteRequestFrame ,且同时启用了灵活数据速率模式,则false 也会返回。

否则,该函数将返回true

QByteArray QCanBusFrame::payload() const

返回帧的数据有效载荷。

另请参见 setPayload()。

[constexpr noexcept] void QCanBusFrame::setBitrateSwitch(bool bitrateSwitch)

将 "灵活数据速率标志比特率切换"标志设为bitrateSwitch 。带有该标志的帧的数据字段以较高的数据比特率传输。

另请参阅 hasBitrateSwitch() 和QCanBusDevice::DataBitRateKey

[constexpr] void QCanBusFrame::setError(QCanBusFrame::FrameErrors error)

设置帧的error 类型。如果frameType() 不是ErrorFrame ,则此函数不起任何作用。

另请参阅 QCanBusFrame::FrameErrorerror()。

[constexpr noexcept] void QCanBusFrame::setErrorStateIndicator(bool errorStateIndicator)

将 "灵活数据速率"标志 "错误状态指示器"标志设置为errorStateIndicator

发送 CAN FD 帧时,CAN FD 硬件会自动设置该标志。QCanBusFrame::setErrorStateIndicator() 只应用于应用测试,例如在虚拟 CAN FD 总线上。

另请参阅 hasErrorStateIndicator() 。

[constexpr noexcept] void QCanBusFrame::setExtendedFrameFormat(bool isExtended)

将扩展帧格式标志设置为isExtended

另请参阅 hasExtendedFrameFormat() 。

[constexpr noexcept] void QCanBusFrame::setFlexibleDataRateFormat(bool isFlexibleData)

将 "灵活数据速率"标志设置为isFlexibleData 。这些帧可在支持的控制器上以更高的速度发送。此外,有效载荷长度限制提高到 64 字节。

另请参阅 hasFlexibleDataRateFormat() 。

[constexpr] void QCanBusFrame::setFrameId(QCanBusFrame::FrameId newFrameId)

将 CAN 帧的标识符设置为newFrameId

CAN 帧标识符的最大大小为 11 位,通过支持CAN 扩展帧格式,最大可扩展至 29 位。当newFrameId 的大小超过 11 位时,CAN 扩展帧格式设置将自动设置。

当格式被扩展,并通过一个 11 位或更小的newFrameId 时,CAN 扩展帧格式设置不会改变。

另请参阅 QCanBusFrame::FrameIdframeId() 和hasExtendedFrameFormat()。

[constexpr noexcept] void QCanBusFrame::setFrameType(QCanBusFrame::FrameType newType)

将框架类型设为newType

另请参阅 QCanBusFrame::FrameTypeframeType()。

[constexpr noexcept] void QCanBusFrame::setLocalEcho(bool echo)

本地回声标志设置为echo

在启用QCanBusDevice::ReceiveOwnKey 的情况下发送 CAN 总线帧时,所有成功发送的帧都会回传至接收队列,并标记为本地回传帧。因此,QCanBusFrame::setLocalEcho 只能用于应用测试,例如在虚拟 CAN 总线上。

另请参见 hasLocalEcho().

void QCanBusFrame::setPayload(const QByteArray &data)

data 设置为 CAN 帧的有效载荷。有效载荷的最大大小为 8 字节,通过支持灵活数据速率可扩展至 64 字节。如果data 包含超过 8 字节的内容,则会自动设置 "灵活数据速率"标志。必须通过设置QCanBusDevice::CanFdKeyQCanBusDevice 上启用灵活数据速率。

RemoteRequestFrame (RTR) 类型的帧没有有效载荷。不过,它们必须提供响应预期有效载荷长度的指示。要设置预期长度,就必须设置一个假的有效载荷,其长度与响应的预期有效载荷长度相匹配。一种方法如下:

QCanBusFrame frame(QCanBusFrame::RemoteRequestFrame);
int expectedResponseLength = ...;
frame.setPayload(QByteArray(expectedResponseLength, 0));

另请参见 payload() 和hasFlexibleDataRateFormat()。

[constexpr noexcept] void QCanBusFrame::setTimeStamp(QCanBusFrame::TimeStamp ts)

ts 设置为 CAN 帧的时间戳。通常不需要此功能,因为时间戳是在读取操作中创建的,在写入操作中并不需要。

另请参阅 timeStamp() 和QCanBusFrame::TimeStamp

[constexpr noexcept] QCanBusFrame::TimeStamp QCanBusFrame::timeStamp() const

返回帧的时间戳。

另请参阅 QCanBusFrame::TimeStampQCanBusFrame::setTimeStamp()。

QString QCanBusFrame::toString() const

以格式化字符串的形式返回 CAN 帧。

输出包含十六进制格式的 CAN 标识符(右调整为 32 位)、方括号中的数据长度和十六进制格式的有效载荷。

标准标识符用空格填充,扩展标识符用零填充。

典型输出为

(Error)                                  - error frame
     7FF   [1]  01                       - data frame with standard identifier
1FFFFFFF   [8]  01 23 45 67 89 AB CD EF  - data frame with extended identifier
     400  [10]  01 23 45 67 ... EF 01 23 - CAN FD frame
     123   [5]  Remote Request           - remote frame with standard identifier
00000234   [0]  Remote Request           - remote frame with extended identifier

相关非成员

QDataStream &operator<<(QDataStream &out, const QCanBusFrame &frame)

frame 写入数据流 (out) 并返回一个引用。

QDataStream &operator>>(QDataStream &in, QCanBusFrame &frame)

从数据流中读取frame (in) 并返回一个引用。

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