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::NoError | 0 | 未发生错误。 |
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::AnyError | 0x1FFFFFFFU | 与所有其他错误类型匹配。 |
FrameErrors 类型是QFlags<FrameError> 的类型定义。它存储 FrameError 值的 OR 组合。
[alias]
QCanBusFrame::FrameId
CAN 总线帧标识符的独特类型,有 11 位或 29 位。
另请参见 frameId() 和setFrameId()。
enum QCanBusFrame::FrameType
该枚举描述 CAN 帧的类型。
常量 | 值 | 描述 |
---|---|---|
QCanBusFrame::UnknownFrame | 0x0 | 帧类型未知。 |
QCanBusFrame::DataFrame | 0x1 | 该值表示数据帧。 |
QCanBusFrame::ErrorFrame | 0x2 | 该值表示错误帧。 |
QCanBusFrame::RemoteRequestFrame | 0x3 | 该值代表远程请求。 |
QCanBusFrame::InvalidFrame | 0x4 | 该值代表无效帧。该类型用于错误报告。 |
另请参阅 frameType() 和setFrameType()。
成员函数文档
[explicit noexcept]
QCanBusFrame::QCanBusFrame(QCanBusFrame::FrameType type = DataFrame)
构建一个指定type 的 CAN 帧。
另请参阅 QCanBusFrame::FrameType 和setFrameType() 。
[explicit]
QCanBusFrame::QCanBusFrame(QCanBusFrame::FrameId identifier, const QByteArray &data)
使用identifier 作为帧标识符,data 作为有效载荷,构建 CAN 帧。
另请参阅 QCanBusFrame::FrameId 。
[constexpr noexcept]
QCanBusFrame::FrameErrors QCanBusFrame::error() const
返回当前错误帧的错误信息。如果该帧不是ErrorFrame ,则该函数返回NoError 。
另请参阅 QCanBusFrame::FrameError 和setError()。
[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::FrameType 和setFrameType()。
[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::FrameError 和error()。
[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::FrameId 、frameId() 和hasExtendedFrameFormat()。
[constexpr noexcept]
void QCanBusFrame::setFrameType(QCanBusFrame::FrameType newType)
将框架类型设为newType 。
另请参阅 QCanBusFrame::FrameType 和frameType()。
[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::CanFdKey 在QCanBusDevice 上启用灵活数据速率。
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::TimeStamp 和QCanBusFrame::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.