QCanBusFrame 类

QCanBusFrame 是一个表示单个 CAN 帧的容器类。 更多信息...

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

公共类型

时间戳
枚举FrameError { 无错误, 传输超时错误, 失去仲裁错误, 控制器错误, 协议违规错误, …, 任何错误 }
标志FrameErrors
FrameId
枚举FrameType { 未知帧, 数据帧, 错误帧, 远程请求帧, 无效帧 }

公共函数

QCanBusFrame(QCanBusFrame::FrameType type = DataFrame)
QCanBusFrame(QCanBusFrame::FrameId identifier, const QByteArray &data)
QCanBusFrame::FrameErrorserror() const
QCanBusFrame::FrameIdframeId() const
QCanBusFrame::FrameTypeframeType() const
boolhasBitrateSwitch() const
boolhasErrorStateIndicator() const
boolhasExtendedFrameFormat() const
boolhasFlexibleDataRateFormat() const
boolhasLocalEcho() const
boolisValid() const
QByteArraypayload() const
voidsetBitrateSwitch(bool bitrateSwitch)
voidsetError(QCanBusFrame::FrameErrors error)
voidsetErrorStateIndicator(bool errorStateIndicator)
voidsetExtendedFrameFormat(bool isExtended)
voidsetFlexibleDataRateFormat(bool isFlexibleData)
voidsetFrameId(QCanBusFrame::FrameId newFrameId)
voidsetFrameType(QCanBusFrame::FrameType newType)
voidsetLocalEcho(bool echo)
voidsetPayload(const QByteArray &data)
voidsetTimeStamp(QCanBusFrame::TimeStamp ts)
QCanBusFrame::TimeStamptimeStamp() const
QStringtoString() const
QDataStream &operator<<(QDataStream &out, const QCanBusFrame &frame)
QDataStream &operator>>(QDataStream &in, QCanBusFrame &frame)

详细描述

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

另请参阅 QCanBusFrame::FrameIdQCanBusFrame::TimeStamppayload

成员类型文档

枚举QCanBusFrame::FrameError
标志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

[别名] QCanBusFrame::FrameId

这是一个特殊的类型,用于表示CAN总线的11位或29位帧标识。

另请参阅 frameId()和setFrameId

枚举QCanBusFrame::FrameType

此枚举描述了CAN帧的类型。

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

另请参阅 frameType()和setFrameType

成员函数文档

[显式 noexcept] QCanBusFrame::QCanBusFrame(QCanBusFrame::FrameType type = DataFrame)

构建指定类型的CAN帧。

另请参阅 QCanBusFrame::FrameTypesetFrameType

[显式] QCanBusFrame::QCanBusFrame(QCanBusFrame::FrameId identifier, const QByteArray &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类型,则该ID始终为0。

另请参阅QCanBusFrame::FrameIdsetFrameIdhasExtendedFrameFormat

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

返回帧的类型。

另请参阅 QCanBusFrame::FrameTypesetFrameType

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

如果CAN使用灵活数据速率比特率切换,则返回true,以在更高数据比特率下传输有效载荷数据。

另请参阅setBitrateSwitchQCanBusDevice::DataBitRateKey

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

如果CAN使用灵活数据速率并发错误状态指示器设置为true

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

另请参阅setErrorStateIndicator

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

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

另请参阅setExtendedFrameFormatframeId

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

如果CAN帧使用灵活数据速率,该速率允许最多64个数据字节,则返回true;否则返回false,表示最多8字节的有效载荷。

另请参阅setFlexibleDataRateFormatpayload

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

如果帧是本地回声帧,即当同一内容的帧成功发送到CAN总线时接收到的回声帧,则返回true。此标志位对于由应用自己发送的帧以及在同一系统上运行的其它应用发送的帧都设置为真。

QCanBusDevice::ReceiveOwnKey必须设置为真,以便接收回声帧。

另请参阅:setLocalEcho()、QCanBusDevice::ReceiveOwnKeyQCanBusDevice::LoopbackKey

[noexcept] bool QCanBusFrame::isValid() const

如果frameType()是InvalidFrame、没有设置hasExtendedFrameFormat()而frameId()的长度大于11位,或者在启用了Flexible Data-Rate模式且负载长度超过64字节或在未启用时超过8字节,则返回false。如果frameType()是RemoteRequestFrame并且在同一时间启用了Flexible Data-Rate模式,则也返回false

否则,此函数返回true

QByteArray QCanBusFrame::payload() const

返回帧的数据负载。

另请参阅:setPayload

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

Flexible Data-Rate标志的Bitrate Switch标志设置为bitrateSwitch。带有此标志的帧数据字段以更高的数据比特率传输。

另请参阅:hasBitrateSwitchQCanBusDevice::DataBitRateKey

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

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

另请参阅:QCanBusFrame::FrameErrorerror

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

Flexible Data-Rate标志的Error State Indicator标志设置为errorStateIndicator

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

另请参阅:hasErrorStateIndicator

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

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

另请参阅:hasExtendedFrameFormat

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

Flexible Data-Rate标志设置为isFlexibleData。这些帧可以使用支持控制器上的更高速度发送。此外,有效载荷长度限制提高到64字节。

另请参阅 hasFlexibleDataRateFormat

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

将CAN帧的标识符设置为newFrameId

CAN帧标识符的最大大小为11位,通过支持CAN扩展帧格式可以扩展到29位。当提供一个大小超过11位的newFrameId时,自动设置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)

Local Echo标志设置为echo

当发送启用QCanBusDevice::ReceiveOwnKey的CAN总线帧时,所有成功发送的帧都被回收到接收队列,并标记为本地回显帧。QCanBusFrame::setLocalEcho因此仅应用于应用程序测试,例如在虚拟CAN总线上。

另请参阅 hasLocalEcho

void QCanBusFrame::setPayload(const QByteArray &data)

data设置为CAN帧的有效载荷。有效载荷的最大大小为8字节,通过支持Flexible Data-Rate可以扩展到64字节。如果data包含超过8字节的数据,则自动设置Flexible Data-Rate标志。必须在QCanBusDevice上设置QCanBusDevice::CanFdKey以启用Flexible Data-Rate。

类型为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)

写入流(out),并返回对其的引用。

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

从流(in)中读取,并返回对其的引用。

© 2024 Qt 公司有限公司。本文档中包含的文档贡献是相应所有者的版权。本提供的文档是根据自由软件基金会发布的 GNU 自由文档许可版本 1.3 的条款许可的。Qt 和相关标志是芬兰和/或全球其他国家的 Qt 公司的商标。所有其他商标均为其各自所有者的财产。