class QCanBusFrame#

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

摘要#

方法#

注意

此文档可能包含从C++自动翻译至Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译有问题,也可以通过在https:/bugreports.qt.io/projects/PYSIDE上创建工单的方式告知我们。

详细描述#

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

也请参阅

QCanBusFrame::FrameId TimeStamp payload()

class FrameType#

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

常量

描述

QCanBusFrame.UnknownFrame

帧类型是未知的。

QCanBusFrame.DataFrame

此值表示数据帧。

QCanBusFrame.ErrorFrame

此值表示错误帧。

QCanBusFrame.RemoteRequestFrame

此值表示远程请求。

QCanBusFrame.InvalidFrame

此值表示无效帧。此类型用于错误报告。

class FrameError#

(继承自enum.Flag) 此枚举描述了可能的错误类型。

常量

描述

QCanBusFrame.NoError

未发生任何错误。

QCanBusFrame.TransmissionTimeoutError

传输超时。

QCanBusFrame.LostArbitrationError

由于总线上丢失仲裁,帧无法发送。

QCanBusFrame.ControllerError

控制器遇到错误。

QCanBusFrame.ProtocolViolationError

发生了违反协议的情况。

QCanBusFrame.TransceiverError

发生了接收器错误。

QCanBusFrame.MissingAcknowledgmentError

传输未收到确认。

QCanBusFrame.BusOffError

CAN总线已断开。

QCanBusFrame.BusError

发生了CAN总线错误。

QCanBusFrame.ControllerRestartError

控制器已重新启动。

QCanBusFrame.UnknownError

发生了未知错误。

QCanBusFrame.AnyError

匹配其他所有错误类型。

也请参阅

error() setError()

class Version#
__init__(identifier, data)#
参数:

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

也请参阅

QCanBusFrame::FrameId

__init__([type=QCanBusFrame.FrameType.DataFrame])
参数:

typeFrameType

构建具有指定type的CAN帧。

也请参阅

FrameType setFrameType()

error()#
返回类型:

FrameError 的组合

返回当前错误帧的错误。如果帧不是ErrorFrame类型,则此函数返回NoError

也请参阅

FrameError setError()

frameId()#
返回类型:

int

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

如果帧的类型为ErrorFrame类型,则此ID总是为0。

frameType()#
返回类型:

FrameType

返回帧的类型。

也请参阅

FrameType setFrameType()

hasBitrateSwitch()#
返回类型:

bool

如果CAN使用带比特率切换灵活数据速率以转移更高数据比特率的有效载荷数据,则返回true

hasErrorStateIndicator()#
返回类型:

bool

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

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

hasExtendedFrameFormat()#
返回类型:

bool

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

hasFlexibleDataRateFormat()#
返回类型:

bool

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

hasLocalEcho()#
返回类型:

bool

如果该帧是本地回声帧(即当具有相同内容的帧成功发送到CAN总线时接收到的回声),则返回true。此标志也适用于由应用程序自身发送以及在同一系统上运行的其他应用程序发送的帧。

必须将ReceiveOwnKey设置为true以接收回声帧。

也请参阅

setLocalEcho() ReceiveOwnKey LoopbackKey

isValid()#
返回类型:

bool

如果 frameType()InvalidFrame ,或者尽管 frameId() 比比特数11长,但 hasExtendedFrameFormat() 没有设置,或者当启用了 Flexible Data-Rate 模式时负载长度超过64个字节,当禁用模式时超过8个字节,则返回 false。如果 frameType()RemoteRequestFrame 并且同时启用了 Flexible Data-Rate 模式,则也返回 false

否则,此函数返回 true

payload()#
返回类型:

QByteArray

返回帧的数据负载。

也请参阅

setPayload()

setBitrateSwitch(bitrateSwitch)#
参数:

bitrateSwitch – bool

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

setError(e)#
参数:

eFrameError 组合

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

也请参阅

FrameError error()

setErrorStateIndicator(errorStateIndicator)#
参数:

errorStateIndicator – bool

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

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

setExtendedFrameFormat(isExtended)#
参数:

isExtended – bool

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

setFlexibleDataRateFormat(isFlexibleData)#
参数:

isFlexibleData – bool

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

setFrameId(newFrameId)#
参数:

newFrameId – int

将CAN帧的标识符设置为newFrameId

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

当格式被扩展且通过具有最多11位或更少的newFrameId时,不改变CAN扩展帧格式设置。

setFrameType(newFormat)#
参数:

newFormatFrameType

将帧的类型设置为newType

也请参阅

FrameType frameType()

setLocalEcho(localEcho)#
参数:

localEcho – bool

本地回声标志设置为echo

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

也请参阅

hasLocalEcho()

setPayload(data)#
参数:

dataQByteArray

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

类型的帧 RemoteRequestFrame (RTR) 没有有效载荷。但是,它们必须提供对预期响应有效载荷长度的指示。为了设置预期长度,需要设置一个与预期响应有效载荷长度相匹配的虚假有效载荷。以下是一种可能的实现方式

QCanBusFrame frame(QCanBusFrame::RemoteRequestFrame);
int expectedResponseLength = ...;
frame.setPayload(QByteArray(expectedResponseLength, 0));
setTimeStamp(ts)#
参数:

tsTimeStamp

ts 设置为 CAN 帧的时间戳。通常,此函数不需要,因为时间戳是在读取操作期间创建的,而在写入操作期间不需要。

也请参阅

timeStamp() TimeStamp

timeStamp()#
返回类型:

时间戳

返回帧的时间戳。

也请参阅

TimeStamp setTimeStamp()

toString()#
返回类型:

str

以格式化的字符串返回 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